Merge branch 'vasavk/footnote' into 'develop'

VDS Brand 3.0 Footnote for IOS

See merge request BPHV_MIPS/vds_ios_sample!72
This commit is contained in:
Bruce, Matt R 2024-09-18 20:16:53 +00:00
commit 203f6e6113
4 changed files with 245 additions and 0 deletions

View File

@ -35,8 +35,10 @@
180636CB2C29B12B00C92D86 /* InputStepperViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 180636CA2C29B12B00C92D86 /* InputStepperViewController.swift */; }; 180636CB2C29B12B00C92D86 /* InputStepperViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 180636CA2C29B12B00C92D86 /* InputStepperViewController.swift */; };
1808BEBE2BA4479500129230 /* CarouselScrollbarViewConttroller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1808BEBD2BA4479500129230 /* CarouselScrollbarViewConttroller.swift */; }; 1808BEBE2BA4479500129230 /* CarouselScrollbarViewConttroller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1808BEBD2BA4479500129230 /* CarouselScrollbarViewConttroller.swift */; };
1832AC5B2BA1347B008AE476 /* BreadcrumbsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1832AC5A2BA1347B008AE476 /* BreadcrumbsViewController.swift */; }; 1832AC5B2BA1347B008AE476 /* BreadcrumbsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1832AC5A2BA1347B008AE476 /* BreadcrumbsViewController.swift */; };
183B16F52C80B27C00BA6A10 /* FootnoteGroupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 183B16F42C80B27C00BA6A10 /* FootnoteGroupViewController.swift */; };
184023492C61E9E700A412C8 /* PriceLockupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 184023482C61E9E700A412C8 /* PriceLockupViewController.swift */; }; 184023492C61E9E700A412C8 /* PriceLockupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 184023482C61E9E700A412C8 /* PriceLockupViewController.swift */; };
186D13CD2BBA990800986B53 /* DropdownSelectViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 186D13CC2BBA990800986B53 /* DropdownSelectViewController.swift */; }; 186D13CD2BBA990800986B53 /* DropdownSelectViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 186D13CC2BBA990800986B53 /* DropdownSelectViewController.swift */; };
18926F5F2C76185A00C55BF6 /* FootnoteItemViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18926F5E2C76185A00C55BF6 /* FootnoteItemViewController.swift */; };
18A3F1302BD9332500498E4A /* CalendarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18A3F12F2BD9332500498E4A /* CalendarViewController.swift */; }; 18A3F1302BD9332500498E4A /* CalendarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18A3F12F2BD9332500498E4A /* CalendarViewController.swift */; };
18AE87522C06FDD60075F181 /* CarouselViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18AE87512C06FDD60075F181 /* CarouselViewController.swift */; }; 18AE87522C06FDD60075F181 /* CarouselViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18AE87512C06FDD60075F181 /* CarouselViewController.swift */; };
440B84CC2BD8E98B004A732A /* TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 440B84CB2BD8E98B004A732A /* TableViewController.swift */; }; 440B84CC2BD8E98B004A732A /* TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 440B84CB2BD8E98B004A732A /* TableViewController.swift */; };
@ -135,8 +137,10 @@
180636CA2C29B12B00C92D86 /* InputStepperViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InputStepperViewController.swift; sourceTree = "<group>"; }; 180636CA2C29B12B00C92D86 /* InputStepperViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InputStepperViewController.swift; sourceTree = "<group>"; };
1808BEBD2BA4479500129230 /* CarouselScrollbarViewConttroller.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CarouselScrollbarViewConttroller.swift; sourceTree = "<group>"; }; 1808BEBD2BA4479500129230 /* CarouselScrollbarViewConttroller.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CarouselScrollbarViewConttroller.swift; sourceTree = "<group>"; };
1832AC5A2BA1347B008AE476 /* BreadcrumbsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BreadcrumbsViewController.swift; sourceTree = "<group>"; }; 1832AC5A2BA1347B008AE476 /* BreadcrumbsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BreadcrumbsViewController.swift; sourceTree = "<group>"; };
183B16F42C80B27C00BA6A10 /* FootnoteGroupViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FootnoteGroupViewController.swift; sourceTree = "<group>"; };
184023482C61E9E700A412C8 /* PriceLockupViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PriceLockupViewController.swift; sourceTree = "<group>"; }; 184023482C61E9E700A412C8 /* PriceLockupViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PriceLockupViewController.swift; sourceTree = "<group>"; };
186D13CC2BBA990800986B53 /* DropdownSelectViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DropdownSelectViewController.swift; sourceTree = "<group>"; }; 186D13CC2BBA990800986B53 /* DropdownSelectViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DropdownSelectViewController.swift; sourceTree = "<group>"; };
18926F5E2C76185A00C55BF6 /* FootnoteItemViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FootnoteItemViewController.swift; sourceTree = "<group>"; };
18A3F12F2BD9332500498E4A /* CalendarViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarViewController.swift; sourceTree = "<group>"; }; 18A3F12F2BD9332500498E4A /* CalendarViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarViewController.swift; sourceTree = "<group>"; };
18AE87512C06FDD60075F181 /* CarouselViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CarouselViewController.swift; sourceTree = "<group>"; }; 18AE87512C06FDD60075F181 /* CarouselViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CarouselViewController.swift; sourceTree = "<group>"; };
440B84CB2BD8E98B004A732A /* TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableViewController.swift; sourceTree = "<group>"; }; 440B84CB2BD8E98B004A732A /* TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableViewController.swift; sourceTree = "<group>"; };
@ -341,6 +345,8 @@
EA0D1C2E2A66CFE900E5C127 /* CheckboxViewController.swift */, EA0D1C2E2A66CFE900E5C127 /* CheckboxViewController.swift */,
EA1758452BC8893700A5C0D9 /* DatePickerViewController.swift */, EA1758452BC8893700A5C0D9 /* DatePickerViewController.swift */,
186D13CC2BBA990800986B53 /* DropdownSelectViewController.swift */, 186D13CC2BBA990800986B53 /* DropdownSelectViewController.swift */,
18926F5E2C76185A00C55BF6 /* FootnoteItemViewController.swift */,
183B16F42C80B27C00BA6A10 /* FootnoteGroupViewController.swift */,
EA985C00296CC21C00F2FF2E /* IconViewController.swift */, EA985C00296CC21C00F2FF2E /* IconViewController.swift */,
180636CA2C29B12B00C92D86 /* InputStepperViewController.swift */, 180636CA2C29B12B00C92D86 /* InputStepperViewController.swift */,
EAA5EEAC28EB6924003B3210 /* InputFieldViewController.swift */, EAA5EEAC28EB6924003B3210 /* InputFieldViewController.swift */,
@ -559,6 +565,7 @@
18AE87522C06FDD60075F181 /* CarouselViewController.swift in Sources */, 18AE87522C06FDD60075F181 /* CarouselViewController.swift in Sources */,
EA596ABA2A16B2ED00300C4B /* TabsViewController.swift in Sources */, EA596ABA2A16B2ED00300C4B /* TabsViewController.swift in Sources */,
EA89204E28B67332006B9984 /* CheckBoxGroupViewController.swift in Sources */, EA89204E28B67332006B9984 /* CheckBoxGroupViewController.swift in Sources */,
183B16F52C80B27C00BA6A10 /* FootnoteGroupViewController.swift in Sources */,
EAA5EEAD28EB6924003B3210 /* InputFieldViewController.swift in Sources */, EAA5EEAD28EB6924003B3210 /* InputFieldViewController.swift in Sources */,
440B84CC2BD8E98B004A732A /* TableViewController.swift in Sources */, 440B84CC2BD8E98B004A732A /* TableViewController.swift in Sources */,
EA985C25296E06EA00F2FF2E /* TextAreaViewController.swift in Sources */, EA985C25296E06EA00F2FF2E /* TextAreaViewController.swift in Sources */,
@ -567,6 +574,7 @@
EA985C20296DECF600F2FF2E /* IconName.swift in Sources */, EA985C20296DECF600F2FF2E /* IconName.swift in Sources */,
EA89204928B66CE2006B9984 /* KeyboardFrameChangeListening.swift in Sources */, EA89204928B66CE2006B9984 /* KeyboardFrameChangeListening.swift in Sources */,
EA5F86CE2A1E863F00BC83E4 /* TabsContainerViewController.swift in Sources */, EA5F86CE2A1E863F00BC83E4 /* TabsContainerViewController.swift in Sources */,
18926F5F2C76185A00C55BF6 /* FootnoteItemViewController.swift in Sources */,
EA985C01296CC21C00F2FF2E /* IconViewController.swift in Sources */, EA985C01296CC21C00F2FF2E /* IconViewController.swift in Sources */,
184023492C61E9E700A412C8 /* PriceLockupViewController.swift in Sources */, 184023492C61E9E700A412C8 /* PriceLockupViewController.swift in Sources */,
EAC9258029119FC400091998 /* TextLinkViewController.swift in Sources */, EAC9258029119FC400091998 /* TextLinkViewController.swift in Sources */,

View File

@ -0,0 +1,69 @@
//
// FootnoteGroupViewController.swift
// VDSSample
//
// Created by Kanamarlapudi, Vasavi on 29/08/24.
//
import Foundation
import UIKit
import VDS
class FootnoteGroupViewController: BaseViewController<FootnoteGroup> {
var widthTextField = NumericField()
var percentageTextField = NumericField()
var footnotes: [FootnoteItem] = []
override func viewDidLoad() {
super.viewDidLoad()
addContentTopView(view: component)
setupPicker()
setupModel()
}
override func setupForm() {
super.setupForm()
addFormRow(label: "Surface", view: surfacePickerSelectorView)
addFormRow(label: "Width", view: widthTextField)
addFormRow(label: "Percentage (1-100)", view: percentageTextField)
widthTextField
.numberPublisher
.sink { [weak self] number in
if let number {
self?.component.width = .value(number.cgFloatValue)
self?.percentageTextField.text = ""
} else {
self?.component.width = nil
}
}.store(in: &subscribers)
percentageTextField
.numberPublisher
.sink { [weak self] number in
if let number, number.intValue > 9 {
self?.component.width = .percentage(number.cgFloatValue)
self?.widthTextField.text = ""
} else {
self?.component.width = nil
}
}.store(in: &subscribers)
}
func setupModel() {
let toolTipModel = Tooltip.TooltipModel.init(title: "Check your item.", content:"Here is the content for your item.")
footnotes.append(.init().with { $0.text = "Offer you best deals on phones, tablets, home, internet and more. Pre order the new version mobiles and get off *T&C apply."; $0.symbolType = "*"; $0.kind = .primary; $0.tooltipModel = toolTipModel})
footnotes.append(.init().with { $0.text = "The display has rounded corners. When measured as a standard rectangular shape, the screen is 6.68 inches diagonally. Actual viewable area is less."; $0.symbolType = "**"; $0.kind = .primary})
footnotes.append(.init().with { $0.text = "Some features may not be available for all countries or all areas."; $0.symbolType = "1."; $0.kind = .primary})
component.footnoteItems = footnotes
}
func setupPicker() {
surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.component.surface = item
self?.contentTopView.backgroundColor = item.color
}
}
}

View File

@ -0,0 +1,166 @@
//
// FootnoteViewController.swift
// VDSSample
//
// Created by Kanamarlapudi, Vasavi on 21/08/24.
//
import Foundation
import UIKit
import VDS
class FootnoteItemViewController: BaseViewController<FootnoteItem> {
internal enum SymbolType: String, DefaultValuing, CaseIterable {
case asterisk
case doubleAsterisk
case character
case none
public static var defaultValue: Self { .asterisk }
/// TextStyle relative to Size.
public var text: String {
switch self {
case .asterisk:
return "*"
case .doubleAsterisk:
return "**"
case .character:
return "1."
case .none:
return ""
}
}
}
lazy var kindPickerSelectorView = {
PickerSelectorView(title: "secondary",
picker: self.picker,
items: FootnoteItem.Kind.allCases)
}()
lazy var symbolTypePickerSelectorView = {
PickerSelectorView(title: "asterisk",
picker: self.picker,
items: SymbolType.allCases)
}()
lazy var sizePickerSelectorView = {
PickerSelectorView(title: "micro",
picker: self.picker,
items: FootnoteItem.Size.allCases)
}()
var hideSymbolSwitch = Toggle()
var footnoteTextField = TextField()
var widthTextField = NumericField()
var percentageTextField = NumericField()
var tooltipTitleTextField = TextField()
var tooltipContentTextField = TextField()
override func viewDidLoad() {
super.viewDidLoad()
addContentTopView(view: component)
setupPicker()
setupModel()
}
override func setupForm() {
super.setupForm()
addFormRow(label: "Surface", view: surfacePickerSelectorView)
addFormRow(label: "Kind", view: kindPickerSelectorView)
addFormRow(label: "Size", view: sizePickerSelectorView)
addFormRow(label: "Symbol Type", view: symbolTypePickerSelectorView)
addFormRow(label: "Hide Symbol", view: hideSymbolSwitch)
addFormRow(label: "Text", view: footnoteTextField)
addFormRow(label: "Width", view: widthTextField)
addFormRow(label: "Percentage (1-100)", view: percentageTextField)
addFormRow(label: "ToolTip Title", view: tooltipTitleTextField)
addFormRow(label: "ToolTip Content", view: tooltipContentTextField)
hideSymbolSwitch.publisher(for: .valueChanged).sink { [weak self] control in
self?.component.hideSymbol = control.isOn
}.store(in: &subscribers)
footnoteTextField
.textPublisher
.sink { [weak self] text in
self?.component.text = text
}.store(in: &subscribers)
widthTextField
.numberPublisher
.sink { [weak self] number in
if let number {
self?.component.width = .value(number.cgFloatValue)
self?.percentageTextField.text = ""
} else {
self?.component.width = nil
}
}.store(in: &subscribers)
percentageTextField
.numberPublisher
.sink { [weak self] number in
if let number, number.intValue > 9 {
self?.component.width = .percentage(number.cgFloatValue)
self?.widthTextField.text = ""
} else {
self?.component.width = nil
}
}.store(in: &subscribers)
tooltipTitleTextField
.textPublisher
.sink { [weak self] text in
self?.updateTooltip()
}.store(in: &subscribers)
tooltipContentTextField
.textPublisher
.sink { [weak self] text in
self?.updateTooltip()
}.store(in: &subscribers)
}
func setupModel() {
component.text = "Service is included for free for two years with activation of any iPhone15 model. Connection and response times vary based on location, site conditions, and other factors. See support.apple.com/en-us/HT213885 for more information."
component.tooltipModel = nil
footnoteTextField.text = component.text
sizePickerSelectorView.text = component.size.rawValue
kindPickerSelectorView.text = component.kind.rawValue
symbolTypePickerSelectorView.text = SymbolType.defaultValue.text
tooltipTitleTextField.text = component.tooltipModel?.title
tooltipContentTextField.text = component.tooltipModel?.content
}
func setupPicker() {
surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.component.surface = item
self?.contentTopView.backgroundColor = item.color
}
kindPickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.component.kind = item
}
sizePickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.component.size = item
}
symbolTypePickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.component.symbolType = item.text
}
}
func updateTooltip() {
let title = tooltipTitleTextField.text ?? ""
let content = tooltipContentTextField.text ?? ""
component.tooltipModel = !title.isEmpty || !content.isEmpty ? .init(title: title,
content: content) : nil
}
}

View File

@ -82,6 +82,8 @@ class MenuViewController: UITableViewController, TooltipLaunchable {
MenuComponent(title: "CheckboxGroup", completed: true, viewController: CheckboxGroupViewController.self), MenuComponent(title: "CheckboxGroup", completed: true, viewController: CheckboxGroupViewController.self),
MenuComponent(title: "DatePicker", completed: true, viewController: DatePickerViewController.self), MenuComponent(title: "DatePicker", completed: true, viewController: DatePickerViewController.self),
MenuComponent(title: "DropdownSelect", completed: true, viewController: DropdownSelectViewController.self), MenuComponent(title: "DropdownSelect", completed: true, viewController: DropdownSelectViewController.self),
MenuComponent(title: "FootnoteItem", completed: false, viewController: FootnoteItemViewController.self),
MenuComponent(title: "FootnoteGroup", completed: false, viewController: FootnoteGroupViewController.self),
MenuComponent(title: "Icon", completed: true, viewController: IconViewController.self), MenuComponent(title: "Icon", completed: true, viewController: IconViewController.self),
MenuComponent(title: "InputField", completed: true, viewController: InputFieldViewController.self), MenuComponent(title: "InputField", completed: true, viewController: InputFieldViewController.self),
MenuComponent(title: "InputStepper", completed: true, viewController: InputStepperViewController.self), MenuComponent(title: "InputStepper", completed: true, viewController: InputStepperViewController.self),