From 0001648d7db9e01858a4c88d06911dd99fbac303 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Wed, 31 Jan 2024 14:43:19 -0600 Subject: [PATCH 01/21] updated version Signed-off-by: Matt Bruce --- VDSSample.xcodeproj/project.pbxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/VDSSample.xcodeproj/project.pbxproj b/VDSSample.xcodeproj/project.pbxproj index 61eee98..37643b0 100644 --- a/VDSSample.xcodeproj/project.pbxproj +++ b/VDSSample.xcodeproj/project.pbxproj @@ -684,7 +684,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 51; + CURRENT_PROJECT_VERSION = 52; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = FCMA4QKS77; GENERATE_INFOPLIST_FILE = YES; @@ -719,7 +719,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 51; + CURRENT_PROJECT_VERSION = 52; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = FCMA4QKS77; GENERATE_INFOPLIST_FILE = YES; From 4cbc1a691b00366390cf2a9e665b34fadc0e9fe9 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Tue, 6 Feb 2024 14:55:49 -0600 Subject: [PATCH 02/21] updated version Signed-off-by: Matt Bruce --- VDSSample.xcodeproj/project.pbxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/VDSSample.xcodeproj/project.pbxproj b/VDSSample.xcodeproj/project.pbxproj index 37643b0..8703a7f 100644 --- a/VDSSample.xcodeproj/project.pbxproj +++ b/VDSSample.xcodeproj/project.pbxproj @@ -684,7 +684,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 52; + CURRENT_PROJECT_VERSION = 53; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = FCMA4QKS77; GENERATE_INFOPLIST_FILE = YES; @@ -719,7 +719,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 52; + CURRENT_PROJECT_VERSION = 53; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = FCMA4QKS77; GENERATE_INFOPLIST_FILE = YES; From 75575653df2eb72baa6f97706b8cbc08e34e2842 Mon Sep 17 00:00:00 2001 From: vasavk Date: Wed, 7 Feb 2024 13:16:25 +0530 Subject: [PATCH 03/21] story:ONEAPP-6315: badge indicator specs added to button Icon --- .../ButtonIconViewController.swift | 201 ++++++++++++++++++ 1 file changed, 201 insertions(+) diff --git a/VDSSample/ViewControllers/ButtonIconViewController.swift b/VDSSample/ViewControllers/ButtonIconViewController.swift index e055285..cfa5617 100644 --- a/VDSSample/ViewControllers/ButtonIconViewController.swift +++ b/VDSSample/ViewControllers/ButtonIconViewController.swift @@ -50,6 +50,74 @@ class ButtonIconViewController: BaseViewController { var floating = Toggle() var hideBorder = Toggle() var disabledSwitch = Toggle() + var selectableSwitch = Toggle() + var badgeIndicatorSwitch = Toggle() + + lazy var badgeIndicatorKindPickerSelectorView = { + PickerSelectorView(title: "simple", + picker: self.picker, + items: BadgeIndicator.Kind.allCases) + }() + + lazy var badgeIndicatorFillColorPickerSelectorView = { + PickerSelectorView(title: "red", + picker: self.picker, + items: BadgeIndicator.FillColor.allCases) + }() + + lazy var badgeIndicatorBorderColorPickerSelectorView = { + PickerSelectorView(title: "", + picker: self.picker, + items: UIColor.VDSColor.allCases) + }() + + lazy var textSizePickerSelectorView = { + PickerSelectorView(title: "", + picker: self.picker, + items: BadgeIndicator.Size.allCases) + }() + + lazy var maxDigitsPickerSelectorView = { + PickerSelectorView(title: "", + picker: self.picker, + items: BadgeIndicator.MaximumDigits.allCases) + }() + + lazy var borderColorLightPickerSelectorView = { + PickerSelectorView(title: "", + picker: self.picker, + items: UIColor.VDSColor.allCases) + }() + + lazy var borderColorDarkPickerSelectorView = { + PickerSelectorView(title: "", + picker: self.picker, + items: UIColor.VDSColor.allCases) + }() + + lazy var badgeIndicatorDirectionPickerSelectorView = { + PickerSelectorView(title: "", + picker: self.picker, + items: ButtonIcon.ExpandDirection.allCases) + }() + + var numberedForm = FormSection().with { $0.title = "Numbered Kind"} + var dotForm = FormSection().with { $0.title = "Simple Kind"} + var badgeIndicatorForm = FormSection().with { $0.title = "Badge Indicator Configurations"} + + var badgeIndicatorHideBorderSwitch = Toggle() + var textField = NumericField() + var leadingCharacterTextField = TextField() + var trailingTextField = TextField() + var hideDotSwitch = Toggle() + var hideBorderSwitch = Toggle() + + var heightTextField = NumericField() + var widthTextField = NumericField() + var horizontalPaddingTextField = NumericField() + var verticalPaddingTextField = NumericField() + var dotSizeTextField = NumericField() + override func viewDidLoad() { super.viewDidLoad() @@ -71,9 +139,108 @@ class ButtonIconViewController: BaseViewController { addFormRow(label: "Fit To Icon", view: fitToIcon) addFormRow(label: "Custom Size", view: customSizeField) addFormRow(label: "Name", view: namePickerSelectorView) + addFormRow(label: "Selectable", view: selectableSwitch) +// addFormRow(label: "Selected Name", view: namePickerSelectorView) // TO DO addFormRow(label: "X Offset", view: centerX) addFormRow(label: "Y Offset", view: centerY) + addFormRow(label: "Show Badge Indicator", view: badgeIndicatorSwitch) + badgeIndicatorForm.addFormRow(label: "Kind", view: badgeIndicatorKindPickerSelectorView) + badgeIndicatorForm.addFormRow(label: "Height", view: heightTextField) + badgeIndicatorForm.addFormRow(label: "Width", view: widthTextField) + badgeIndicatorForm.addFormRow(label: "Horiztonal Padding", view: horizontalPaddingTextField) + badgeIndicatorForm.addFormRow(label: "Vertical Padding", view: verticalPaddingTextField) + badgeIndicatorForm.addFormRow(label: "Fill Color", view: badgeIndicatorFillColorPickerSelectorView) + badgeIndicatorForm.addFormRow(label: "Hide Border", view: badgeIndicatorHideBorderSwitch) + badgeIndicatorForm.addFormRow(label: "Border Light", view: borderColorLightPickerSelectorView) + badgeIndicatorForm.addFormRow(label: "Border Dark", view: borderColorDarkPickerSelectorView) + badgeIndicatorForm.addFormRow(label: "Size", view: textSizePickerSelectorView) + badgeIndicatorForm.addFormRow(label: "Expand Direction", view: badgeIndicatorDirectionPickerSelectorView) + + dotForm.addFormRow(label: "Hide Dot", view: hideDotSwitch) + dotForm.addFormRow(label: "Dot Size", view: dotSizeTextField) + numberedForm.addFormRow(label: "Leading Character", view: leadingCharacterTextField) + numberedForm.addFormRow(label: "Trailing Text", view: trailingTextField) + numberedForm.addFormRow(label: "Number", view: textField) + numberedForm.addFormRow(label: "Max Digits", view: maxDigitsPickerSelectorView) + + append(section: badgeIndicatorForm) + append(section: numberedForm) + append(section: dotForm) + + badgeIndicatorForm.isHidden = !self.badgeIndicatorSwitch.isOn + numberedForm.isHidden = !self.badgeIndicatorSwitch.isOn + dotForm.isHidden = !self.badgeIndicatorSwitch.isOn + + hideDotSwitch.publisher(for: .valueChanged).sink { [weak self] control in + self?.component.badgeIndicator.hideDot = control.isOn + }.store(in: &subscribers) + + hideBorderSwitch.publisher(for: .valueChanged).sink { [weak self] control in + self?.component.hideBorder = control.isOn + }.store(in: &subscribers) + + textField + .numberPublisher + .sink { [weak self] number in + guard let number else { return } + self?.component.badgeIndicator.number = number.intValue + }.store(in: &subscribers) + + leadingCharacterTextField + .textPublisher + .sink { [weak self] text in + self?.component.badgeIndicator.leadingCharacter = text + }.store(in: &subscribers) + + trailingTextField + .textPublisher + .sink { [weak self] text in + self?.component.badgeIndicator.trailingText = text + }.store(in: &subscribers) + + heightTextField + .numberPublisher + .sink { [weak self] number in + self?.component.badgeIndicator.height = number?.cgFloatValue + }.store(in: &subscribers) + + widthTextField + .numberPublisher + .sink { [weak self] number in + self?.component.badgeIndicator.width = number?.cgFloatValue + }.store(in: &subscribers) + + horizontalPaddingTextField + .numberPublisher + .sink { [weak self] number in + self?.component.badgeIndicator.horizontalPadding = number?.cgFloatValue + }.store(in: &subscribers) + + verticalPaddingTextField + .numberPublisher + .sink { [weak self] number in + self?.component.badgeIndicator.verticalPadding = number?.cgFloatValue + }.store(in: &subscribers) + + dotSizeTextField + .numberPublisher + .sink { [weak self] number in + self?.component.badgeIndicator.dotSize = number?.cgFloatValue + }.store(in: &subscribers) + + badgeIndicatorSwitch.onChange = { [weak self] sender in + self?.component.showBadge = sender.isOn + self?.component.badgeIndicator.isHidden = !sender.isOn + self?.badgeIndicatorForm.isHidden = !sender.isOn + if !sender.isOn { + self?.numberedForm.isHidden = !sender.isOn + self?.dotForm.isHidden = !sender.isOn + } else { + self?.visibleForms() + } + } + disabledSwitch.onChange = { [weak self] sender in self?.component.isEnabled = !sender.isOn } @@ -160,7 +327,41 @@ class ButtonIconViewController: BaseViewController { namePickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.iconName = item } + + badgeIndicatorKindPickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.badgeIndicator.kind = item + self?.visibleForms() + } + + badgeIndicatorFillColorPickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.badgeIndicator.fillColor = item + } + + textSizePickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.badgeIndicator.size = item + } + + maxDigitsPickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.badgeIndicator.maximumDigits = item + } + + borderColorDarkPickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.badgeIndicator.borderColorDark = item.uiColor + } + + borderColorLightPickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.badgeIndicator.borderColorLight = item.uiColor + } + +// badgeIndicatorDirectionPickerSelectorView.onPickerDidSelect = { [weak self] item in +// TO DO self?.component.badgeIndicator.directionalLayoutMargins = item +// } } + + func visibleForms() { + numberedForm.isHidden = badgeIndicatorKindPickerSelectorView.selectedItem != .numbered + dotForm.isHidden = badgeIndicatorKindPickerSelectorView.selectedItem == .numbered + } } extension UITextField { From a9de8b5d851434f8290a3aab591cb765a9e9cc7b Mon Sep 17 00:00:00 2001 From: vasavk Date: Thu, 8 Feb 2024 13:28:21 +0530 Subject: [PATCH 04/21] story:ONEAPP-6315: used model with a struct to set default properties on the setup form --- .../ButtonIconViewController.swift | 202 ++---------------- 1 file changed, 13 insertions(+), 189 deletions(-) diff --git a/VDSSample/ViewControllers/ButtonIconViewController.swift b/VDSSample/ViewControllers/ButtonIconViewController.swift index cfa5617..89bdc86 100644 --- a/VDSSample/ViewControllers/ButtonIconViewController.swift +++ b/VDSSample/ViewControllers/ButtonIconViewController.swift @@ -53,72 +53,6 @@ class ButtonIconViewController: BaseViewController { var selectableSwitch = Toggle() var badgeIndicatorSwitch = Toggle() - lazy var badgeIndicatorKindPickerSelectorView = { - PickerSelectorView(title: "simple", - picker: self.picker, - items: BadgeIndicator.Kind.allCases) - }() - - lazy var badgeIndicatorFillColorPickerSelectorView = { - PickerSelectorView(title: "red", - picker: self.picker, - items: BadgeIndicator.FillColor.allCases) - }() - - lazy var badgeIndicatorBorderColorPickerSelectorView = { - PickerSelectorView(title: "", - picker: self.picker, - items: UIColor.VDSColor.allCases) - }() - - lazy var textSizePickerSelectorView = { - PickerSelectorView(title: "", - picker: self.picker, - items: BadgeIndicator.Size.allCases) - }() - - lazy var maxDigitsPickerSelectorView = { - PickerSelectorView(title: "", - picker: self.picker, - items: BadgeIndicator.MaximumDigits.allCases) - }() - - lazy var borderColorLightPickerSelectorView = { - PickerSelectorView(title: "", - picker: self.picker, - items: UIColor.VDSColor.allCases) - }() - - lazy var borderColorDarkPickerSelectorView = { - PickerSelectorView(title: "", - picker: self.picker, - items: UIColor.VDSColor.allCases) - }() - - lazy var badgeIndicatorDirectionPickerSelectorView = { - PickerSelectorView(title: "", - picker: self.picker, - items: ButtonIcon.ExpandDirection.allCases) - }() - - var numberedForm = FormSection().with { $0.title = "Numbered Kind"} - var dotForm = FormSection().with { $0.title = "Simple Kind"} - var badgeIndicatorForm = FormSection().with { $0.title = "Badge Indicator Configurations"} - - var badgeIndicatorHideBorderSwitch = Toggle() - var textField = NumericField() - var leadingCharacterTextField = TextField() - var trailingTextField = TextField() - var hideDotSwitch = Toggle() - var hideBorderSwitch = Toggle() - - var heightTextField = NumericField() - var widthTextField = NumericField() - var horizontalPaddingTextField = NumericField() - var verticalPaddingTextField = NumericField() - var dotSizeTextField = NumericField() - - override func viewDidLoad() { super.viewDidLoad() addContentTopView(view: .makeWrapper(for: component, edgeSpacing: 16.0), edgeSpacing: 0.0) @@ -143,102 +77,13 @@ class ButtonIconViewController: BaseViewController { // addFormRow(label: "Selected Name", view: namePickerSelectorView) // TO DO addFormRow(label: "X Offset", view: centerX) addFormRow(label: "Y Offset", view: centerY) - addFormRow(label: "Show Badge Indicator", view: badgeIndicatorSwitch) - badgeIndicatorForm.addFormRow(label: "Kind", view: badgeIndicatorKindPickerSelectorView) - badgeIndicatorForm.addFormRow(label: "Height", view: heightTextField) - badgeIndicatorForm.addFormRow(label: "Width", view: widthTextField) - badgeIndicatorForm.addFormRow(label: "Horiztonal Padding", view: horizontalPaddingTextField) - badgeIndicatorForm.addFormRow(label: "Vertical Padding", view: verticalPaddingTextField) - badgeIndicatorForm.addFormRow(label: "Fill Color", view: badgeIndicatorFillColorPickerSelectorView) - badgeIndicatorForm.addFormRow(label: "Hide Border", view: badgeIndicatorHideBorderSwitch) - badgeIndicatorForm.addFormRow(label: "Border Light", view: borderColorLightPickerSelectorView) - badgeIndicatorForm.addFormRow(label: "Border Dark", view: borderColorDarkPickerSelectorView) - badgeIndicatorForm.addFormRow(label: "Size", view: textSizePickerSelectorView) - badgeIndicatorForm.addFormRow(label: "Expand Direction", view: badgeIndicatorDirectionPickerSelectorView) - - dotForm.addFormRow(label: "Hide Dot", view: hideDotSwitch) - dotForm.addFormRow(label: "Dot Size", view: dotSizeTextField) - numberedForm.addFormRow(label: "Leading Character", view: leadingCharacterTextField) - numberedForm.addFormRow(label: "Trailing Text", view: trailingTextField) - numberedForm.addFormRow(label: "Number", view: textField) - numberedForm.addFormRow(label: "Max Digits", view: maxDigitsPickerSelectorView) - - append(section: badgeIndicatorForm) - append(section: numberedForm) - append(section: dotForm) - - badgeIndicatorForm.isHidden = !self.badgeIndicatorSwitch.isOn - numberedForm.isHidden = !self.badgeIndicatorSwitch.isOn - dotForm.isHidden = !self.badgeIndicatorSwitch.isOn - - hideDotSwitch.publisher(for: .valueChanged).sink { [weak self] control in - self?.component.badgeIndicator.hideDot = control.isOn - }.store(in: &subscribers) - - hideBorderSwitch.publisher(for: .valueChanged).sink { [weak self] control in - self?.component.hideBorder = control.isOn - }.store(in: &subscribers) - - textField - .numberPublisher - .sink { [weak self] number in - guard let number else { return } - self?.component.badgeIndicator.number = number.intValue - }.store(in: &subscribers) - - leadingCharacterTextField - .textPublisher - .sink { [weak self] text in - self?.component.badgeIndicator.leadingCharacter = text - }.store(in: &subscribers) - - trailingTextField - .textPublisher - .sink { [weak self] text in - self?.component.badgeIndicator.trailingText = text - }.store(in: &subscribers) - - heightTextField - .numberPublisher - .sink { [weak self] number in - self?.component.badgeIndicator.height = number?.cgFloatValue - }.store(in: &subscribers) - - widthTextField - .numberPublisher - .sink { [weak self] number in - self?.component.badgeIndicator.width = number?.cgFloatValue - }.store(in: &subscribers) - - horizontalPaddingTextField - .numberPublisher - .sink { [weak self] number in - self?.component.badgeIndicator.horizontalPadding = number?.cgFloatValue - }.store(in: &subscribers) - - verticalPaddingTextField - .numberPublisher - .sink { [weak self] number in - self?.component.badgeIndicator.verticalPadding = number?.cgFloatValue - }.store(in: &subscribers) - - dotSizeTextField - .numberPublisher - .sink { [weak self] number in - self?.component.badgeIndicator.dotSize = number?.cgFloatValue - }.store(in: &subscribers) badgeIndicatorSwitch.onChange = { [weak self] sender in - self?.component.showBadge = sender.isOn - self?.component.badgeIndicator.isHidden = !sender.isOn - self?.badgeIndicatorForm.isHidden = !sender.isOn - if !sender.isOn { - self?.numberedForm.isHidden = !sender.isOn - self?.dotForm.isHidden = !sender.isOn - } else { - self?.visibleForms() - } + guard let self else { return } + self.component.showBadge = sender.isOn + self.setBadgeIndicatorModel() + self.component.badgeIndicator.isHidden = !sender.isOn } disabledSwitch.onChange = { [weak self] sender in @@ -278,6 +123,15 @@ class ButtonIconViewController: BaseViewController { }.store(in: &subscribers) } + //sub models + func setBadgeIndicatorModel() { + if badgeIndicatorSwitch.isOn { + component.badgeIndicatorModel = ButtonIcon.BadgeIndicatorModel(kind: BadgeIndicator.Kind.simple, size: BadgeIndicator.Size.small) + } else { + component.badgeIndicatorModel = nil + } + } + func setupModel() { let name = Icon.Name.addToFavorite @@ -327,41 +181,11 @@ class ButtonIconViewController: BaseViewController { namePickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.iconName = item } - - badgeIndicatorKindPickerSelectorView.onPickerDidSelect = { [weak self] item in - self?.component.badgeIndicator.kind = item - self?.visibleForms() - } - - badgeIndicatorFillColorPickerSelectorView.onPickerDidSelect = { [weak self] item in - self?.component.badgeIndicator.fillColor = item - } - - textSizePickerSelectorView.onPickerDidSelect = { [weak self] item in - self?.component.badgeIndicator.size = item - } - - maxDigitsPickerSelectorView.onPickerDidSelect = { [weak self] item in - self?.component.badgeIndicator.maximumDigits = item - } - - borderColorDarkPickerSelectorView.onPickerDidSelect = { [weak self] item in - self?.component.badgeIndicator.borderColorDark = item.uiColor - } - - borderColorLightPickerSelectorView.onPickerDidSelect = { [weak self] item in - self?.component.badgeIndicator.borderColorLight = item.uiColor - } // badgeIndicatorDirectionPickerSelectorView.onPickerDidSelect = { [weak self] item in // TO DO self?.component.badgeIndicator.directionalLayoutMargins = item // } } - - func visibleForms() { - numberedForm.isHidden = badgeIndicatorKindPickerSelectorView.selectedItem != .numbered - dotForm.isHidden = badgeIndicatorKindPickerSelectorView.selectedItem == .numbered - } } extension UITextField { From 1d3616edf0efcd5b16159a1e3e012cd58dda9bd7 Mon Sep 17 00:00:00 2001 From: vasavk Date: Thu, 8 Feb 2024 22:58:56 +0530 Subject: [PATCH 05/21] story:ONEAPP-6315: Changes for the ExpandDirection picker --- .../ButtonIconViewController.swift | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/VDSSample/ViewControllers/ButtonIconViewController.swift b/VDSSample/ViewControllers/ButtonIconViewController.swift index 89bdc86..64e0cde 100644 --- a/VDSSample/ViewControllers/ButtonIconViewController.swift +++ b/VDSSample/ViewControllers/ButtonIconViewController.swift @@ -53,6 +53,12 @@ class ButtonIconViewController: BaseViewController { var selectableSwitch = Toggle() var badgeIndicatorSwitch = Toggle() + lazy var badgeIndicatorExpandDirectionPickerSelectorView = { + PickerSelectorView(title: "right", + picker: self.picker, + items: ButtonIcon.ExpandDirection.allCases) + }() + override func viewDidLoad() { super.viewDidLoad() addContentTopView(view: .makeWrapper(for: component, edgeSpacing: 16.0), edgeSpacing: 0.0) @@ -78,10 +84,11 @@ class ButtonIconViewController: BaseViewController { addFormRow(label: "X Offset", view: centerX) addFormRow(label: "Y Offset", view: centerY) addFormRow(label: "Show Badge Indicator", view: badgeIndicatorSwitch) + addFormRow(label: "Expand Direction", view: badgeIndicatorExpandDirectionPickerSelectorView) badgeIndicatorSwitch.onChange = { [weak self] sender in guard let self else { return } - self.component.showBadge = sender.isOn + self.component.showBadgeIndicator = sender.isOn self.setBadgeIndicatorModel() self.component.badgeIndicator.isHidden = !sender.isOn } @@ -97,7 +104,7 @@ class ButtonIconViewController: BaseViewController { } hideBorder.onChange = { [weak self] sender in - self?.component.hideBorder = sender.isOn + self?.component.hideBorder = !sender.isOn } fitToIcon.onChange = { [weak self] sender in @@ -126,7 +133,7 @@ class ButtonIconViewController: BaseViewController { //sub models func setBadgeIndicatorModel() { if badgeIndicatorSwitch.isOn { - component.badgeIndicatorModel = ButtonIcon.BadgeIndicatorModel(kind: BadgeIndicator.Kind.simple, size: BadgeIndicator.Size.small) + component.badgeIndicatorModel = ButtonIcon.BadgeIndicatorModel(kind: BadgeIndicator.Kind.numbered, size: BadgeIndicator.Size.small, maximumDigits: BadgeIndicator.MaximumDigits.three, number: 9999, trailingText: "New") } else { component.badgeIndicatorModel = nil } @@ -143,6 +150,7 @@ class ButtonIconViewController: BaseViewController { sizePickerSelectorView.text = component.size.rawValue namePickerSelectorView.text = name.rawValue disabledSwitch.isOn = !component.isEnabled + badgeIndicatorExpandDirectionPickerSelectorView.text = component.expandDirection.rawValue } func updateOffset() { @@ -181,10 +189,10 @@ class ButtonIconViewController: BaseViewController { namePickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.iconName = item } - -// badgeIndicatorDirectionPickerSelectorView.onPickerDidSelect = { [weak self] item in -// TO DO self?.component.badgeIndicator.directionalLayoutMargins = item -// } + + badgeIndicatorExpandDirectionPickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.expandDirection = item + } } } From b2e7d217bd4704cc0a9d74cba083fc218b1999b3 Mon Sep 17 00:00:00 2001 From: vasavk Date: Fri, 9 Feb 2024 16:44:23 +0530 Subject: [PATCH 06/21] story:ONEAPP-6315: made changes for selectableSwitch, selectedIconName --- .../ButtonIconViewController.swift | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/VDSSample/ViewControllers/ButtonIconViewController.swift b/VDSSample/ViewControllers/ButtonIconViewController.swift index 64e0cde..54feaac 100644 --- a/VDSSample/ViewControllers/ButtonIconViewController.swift +++ b/VDSSample/ViewControllers/ButtonIconViewController.swift @@ -36,6 +36,12 @@ class ButtonIconViewController: BaseViewController { picker: self.picker, items: Icon.Name.all.sorted{ $0.rawValue < $1.rawValue }) }() + + lazy var selectedIconNamePickerSelectorView = { + PickerSelectorView(title: "", + picker: self.picker, + items: Icon.Name.all.sorted{ $0.rawValue < $1.rawValue }) + }() lazy var sizePickerSelectorView = { PickerSelectorView(title: "", @@ -68,7 +74,7 @@ class ButtonIconViewController: BaseViewController { override func setupForm(){ super.setupForm() - addActionRow() +// addActionRow() addFormRow(label: "Disabled", view: disabledSwitch) addFormRow(label: "Surface", view: surfacePickerSelectorView) addFormRow(label: "Surface Type", view: surfaceTypePickerSelectorView) @@ -79,8 +85,8 @@ class ButtonIconViewController: BaseViewController { addFormRow(label: "Fit To Icon", view: fitToIcon) addFormRow(label: "Custom Size", view: customSizeField) addFormRow(label: "Name", view: namePickerSelectorView) + addFormRow(label: "Selected Icon Name", view: selectedIconNamePickerSelectorView) // TO DO addFormRow(label: "Selectable", view: selectableSwitch) -// addFormRow(label: "Selected Name", view: namePickerSelectorView) // TO DO addFormRow(label: "X Offset", view: centerX) addFormRow(label: "Y Offset", view: centerY) addFormRow(label: "Show Badge Indicator", view: badgeIndicatorSwitch) @@ -96,8 +102,17 @@ class ButtonIconViewController: BaseViewController { disabledSwitch.onChange = { [weak self] sender in self?.component.isEnabled = !sender.isOn } - - component.onClickActionPublisher("ButtonIcon", label: actionLabel) + + selectableSwitch.onChange = { [weak self] sender in + guard let self else { return } + if sender.isOn { + self.component.onClick = { _ in + self.component.selectable = !self.component.selectable + } + } else { + self.component.onClick = nil + } + } floating.onChange = { [weak self] sender in self?.component.floating = sender.isOn @@ -189,7 +204,11 @@ class ButtonIconViewController: BaseViewController { namePickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.iconName = item } - + + selectedIconNamePickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.selectedIconName = item + } + badgeIndicatorExpandDirectionPickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.expandDirection = item } From dda7d2f598f23b61574609d327a8f680e25348c3 Mon Sep 17 00:00:00 2001 From: vasavk Date: Mon, 12 Feb 2024 13:27:11 +0530 Subject: [PATCH 07/21] story:ONEAPP-6315: show badge variants --- .../ButtonIconViewController.swift | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/VDSSample/ViewControllers/ButtonIconViewController.swift b/VDSSample/ViewControllers/ButtonIconViewController.swift index 54feaac..423d0f5 100644 --- a/VDSSample/ViewControllers/ButtonIconViewController.swift +++ b/VDSSample/ViewControllers/ButtonIconViewController.swift @@ -58,6 +58,7 @@ class ButtonIconViewController: BaseViewController { var disabledSwitch = Toggle() var selectableSwitch = Toggle() var badgeIndicatorSwitch = Toggle() + var variantOneSwitch = Toggle() lazy var badgeIndicatorExpandDirectionPickerSelectorView = { PickerSelectorView(title: "right", @@ -74,7 +75,6 @@ class ButtonIconViewController: BaseViewController { override func setupForm(){ super.setupForm() -// addActionRow() addFormRow(label: "Disabled", view: disabledSwitch) addFormRow(label: "Surface", view: surfacePickerSelectorView) addFormRow(label: "Surface Type", view: surfaceTypePickerSelectorView) @@ -91,12 +91,27 @@ class ButtonIconViewController: BaseViewController { addFormRow(label: "Y Offset", view: centerY) addFormRow(label: "Show Badge Indicator", view: badgeIndicatorSwitch) addFormRow(label: "Expand Direction", view: badgeIndicatorExpandDirectionPickerSelectorView) - + addFormRow(label: "Badge Variants", view: variantOneSwitch) + + variantOneSwitch.onChange = { [weak self] sender in + guard let self else { return } + if sender.isOn { + if badgeIndicatorSwitch.isOn { + component.badgeIndicatorModel = ButtonIcon.BadgeIndicatorModel(kind: BadgeIndicator.Kind.simple, size: BadgeIndicator.Size.small) + } else { + component.badgeIndicatorModel = nil + } + } else { + component.badgeIndicatorModel = ButtonIcon.BadgeIndicatorModel(kind: BadgeIndicator.Kind.numbered, size: BadgeIndicator.Size.small, maximumDigits: BadgeIndicator.MaximumDigits.two, number: 999, trailingText: "New") + } + } + badgeIndicatorSwitch.onChange = { [weak self] sender in guard let self else { return } self.component.showBadgeIndicator = sender.isOn self.setBadgeIndicatorModel() self.component.badgeIndicator.isHidden = !sender.isOn + variantOneSwitch.isOn = false } disabledSwitch.onChange = { [weak self] sender in @@ -148,7 +163,7 @@ class ButtonIconViewController: BaseViewController { //sub models func setBadgeIndicatorModel() { if badgeIndicatorSwitch.isOn { - component.badgeIndicatorModel = ButtonIcon.BadgeIndicatorModel(kind: BadgeIndicator.Kind.numbered, size: BadgeIndicator.Size.small, maximumDigits: BadgeIndicator.MaximumDigits.three, number: 9999, trailingText: "New") + component.badgeIndicatorModel = ButtonIcon.BadgeIndicatorModel(kind: BadgeIndicator.Kind.numbered, size: BadgeIndicator.Size.small, maximumDigits: BadgeIndicator.MaximumDigits.two, number: 999) } else { component.badgeIndicatorModel = nil } From 44008aba2d29fe6ad80094bd82e60e1ca4931c5e Mon Sep 17 00:00:00 2001 From: vasavk Date: Mon, 12 Feb 2024 16:03:16 +0530 Subject: [PATCH 08/21] story:ONEAPP-6315: removed unnecessary text --- VDSSample/ViewControllers/ButtonIconViewController.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/VDSSample/ViewControllers/ButtonIconViewController.swift b/VDSSample/ViewControllers/ButtonIconViewController.swift index 423d0f5..98cac05 100644 --- a/VDSSample/ViewControllers/ButtonIconViewController.swift +++ b/VDSSample/ViewControllers/ButtonIconViewController.swift @@ -83,9 +83,9 @@ class ButtonIconViewController: BaseViewController { addFormRow(label: "Floating", view: floating) addFormRow(label: "Hide Border", view: hideBorder) addFormRow(label: "Fit To Icon", view: fitToIcon) - addFormRow(label: "Custom Size", view: customSizeField) +// addFormRow(label: "Custom Size", view: customSizeField) addFormRow(label: "Name", view: namePickerSelectorView) - addFormRow(label: "Selected Icon Name", view: selectedIconNamePickerSelectorView) // TO DO + addFormRow(label: "Selected Icon Name", view: selectedIconNamePickerSelectorView) addFormRow(label: "Selectable", view: selectableSwitch) addFormRow(label: "X Offset", view: centerX) addFormRow(label: "Y Offset", view: centerY) From c8de65f16f4e9ecdb1064bf92597cc8f8e08da44 Mon Sep 17 00:00:00 2001 From: vasavk Date: Tue, 13 Feb 2024 22:17:37 +0530 Subject: [PATCH 09/21] story:ONEAPP-6315: selectable update on switch change --- VDSSample/ViewControllers/ButtonIconViewController.swift | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/VDSSample/ViewControllers/ButtonIconViewController.swift b/VDSSample/ViewControllers/ButtonIconViewController.swift index 98cac05..29e9460 100644 --- a/VDSSample/ViewControllers/ButtonIconViewController.swift +++ b/VDSSample/ViewControllers/ButtonIconViewController.swift @@ -120,13 +120,7 @@ class ButtonIconViewController: BaseViewController { selectableSwitch.onChange = { [weak self] sender in guard let self else { return } - if sender.isOn { - self.component.onClick = { _ in - self.component.selectable = !self.component.selectable - } - } else { - self.component.onClick = nil - } + self.component.selectable = !self.component.selectable } floating.onChange = { [weak self] sender in From 72046c299c6b0dcf0c7995f71d7fd4b03b54e605 Mon Sep 17 00:00:00 2001 From: Krishna Kishore Bandaru Date: Tue, 13 Feb 2024 22:52:32 +0530 Subject: [PATCH 10/21] Added type picker --- .../NotificationViewController.swift | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/VDSSample/ViewControllers/NotificationViewController.swift b/VDSSample/ViewControllers/NotificationViewController.swift index 6bf5a09..e23c79b 100644 --- a/VDSSample/ViewControllers/NotificationViewController.swift +++ b/VDSSample/ViewControllers/NotificationViewController.swift @@ -33,6 +33,10 @@ class NotificationViewController: BaseViewController { PickerSelectorView(title: "vertical", picker: self.picker, items: Notification.Layout.allCases) }() + lazy var typePickerSelectorView = { + PickerSelectorView(title: "inLine", picker: self.picker, items: Notification.Type.allCases) + }() + override func viewDidLoad() { super.viewDidLoad() addContentTopView(view: component) @@ -54,6 +58,7 @@ class NotificationViewController: BaseViewController { addFormRow(label: "Surface", view: surfacePickerSelectorView) addFormRow(label: "Style", view: notificationTypePickerSelectorView) addFormRow(label: "Layout", view: layoutTypePickerSelectorView) + addFormRow(label: "Type", view: typePickerSelectorView) addFormRow(label: "Title", view: titleTextField) addFormRow(label: "SubTitle", view: subTitleTextField) addFormRow(label: "Hide Button Group", view: buttonGroupToggle) @@ -124,6 +129,14 @@ class NotificationViewController: BaseViewController { self.layoutTypePickerSelectorView.set(item: self.component.layout) } } + + typePickerSelectorView.onPickerDidSelect = { [weak self] item in + guard let self else { return } + self.component.type = item + if self.component.type != item { + self.layoutTypePickerSelectorView.set(item: self.component.layout) + } + } } func setupButtons(with firstButtonText: String? = nil, secondButtonText: String? = nil) { From 79ce6dd5925b6cd841fcca8077bd6053c46fd248 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Wed, 14 Feb 2024 10:49:09 -0600 Subject: [PATCH 11/21] allow access to primary stackview Signed-off-by: Matt Bruce --- VDSSample/ViewControllers/BaseViewController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VDSSample/ViewControllers/BaseViewController.swift b/VDSSample/ViewControllers/BaseViewController.swift index 3fd5137..3c31212 100644 --- a/VDSSample/ViewControllers/BaseViewController.swift +++ b/VDSSample/ViewControllers/BaseViewController.swift @@ -150,7 +150,7 @@ public class BaseViewController: UIViewController, Initable , public var formStackView = FormSection() - lazy var stackView = UIStackView().with { + public lazy var stackView = UIStackView().with { $0.axis = .vertical $0.distribution = .fill $0.alignment = .fill From 44d3f9435d06f78df86a230b17d47736c0fd845c Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Wed, 14 Feb 2024 10:49:48 -0600 Subject: [PATCH 12/21] added fullWidth notification at the top of the viewcontroller view stack to mimic "fullBleed". Signed-off-by: Matt Bruce --- .../NotificationViewController.swift | 44 ++++++++++++++----- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/VDSSample/ViewControllers/NotificationViewController.swift b/VDSSample/ViewControllers/NotificationViewController.swift index e23c79b..5472a41 100644 --- a/VDSSample/ViewControllers/NotificationViewController.swift +++ b/VDSSample/ViewControllers/NotificationViewController.swift @@ -33,14 +33,21 @@ class NotificationViewController: BaseViewController { PickerSelectorView(title: "vertical", picker: self.picker, items: Notification.Layout.allCases) }() - lazy var typePickerSelectorView = { - PickerSelectorView(title: "inLine", picker: self.picker, items: Notification.Type.allCases) - }() +// lazy var typePickerSelectorView = { +// PickerSelectorView(title: "inLine", picker: self.picker, items: Notification.Type.allCases) +// }() + + var notification = Notification() override func viewDidLoad() { super.viewDidLoad() + + stackView.insertArrangedSubview(notification, at: 0) addContentTopView(view: component) + notification.title = titleDefaultText + notification.subTitle = subtitleDefaultText + component.title = titleDefaultText component.subTitle = subtitleDefaultText titleTextField.text = titleDefaultText @@ -58,7 +65,7 @@ class NotificationViewController: BaseViewController { addFormRow(label: "Surface", view: surfacePickerSelectorView) addFormRow(label: "Style", view: notificationTypePickerSelectorView) addFormRow(label: "Layout", view: layoutTypePickerSelectorView) - addFormRow(label: "Type", view: typePickerSelectorView) +// addFormRow(label: "Type", view: typePickerSelectorView) addFormRow(label: "Title", view: titleTextField) addFormRow(label: "SubTitle", view: subTitleTextField) addFormRow(label: "Hide Button Group", view: buttonGroupToggle) @@ -73,16 +80,21 @@ class NotificationViewController: BaseViewController { titleTextField.textPublisher.sink { newString in self.component.title = newString + self.notification.title = newString }.store(in: &subscribers) subTitleTextField.textPublisher.sink { newString in self.component.subTitle = newString + self.notification.subTitle = newString }.store(in: &subscribers) buttonGroupToggle.onChange = { [weak self] toggle in if toggle.isOn { self?.component.primaryButtonModel = nil self?.component.secondaryButtonModel = nil + self?.notification.primaryButtonModel = nil + self?.notification.secondaryButtonModel = nil + self?.label.text = "" } else { self?.setupButtons(with: self?.firstButtonDefaultText, secondButtonText: self?.secondButtonDefaultText) @@ -108,6 +120,7 @@ class NotificationViewController: BaseViewController { hideCloseButtonToggle.onChange = { [weak self] toggle in self?.component.hideCloseButton = toggle.isOn + self?.notification.hideCloseButton = toggle.isOn } } @@ -115,28 +128,31 @@ class NotificationViewController: BaseViewController { func setupPicker() { surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.surface = item + self?.notification.surface = item self?.contentTopView.backgroundColor = item.color } notificationTypePickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.style = item + self?.notification.style = item } layoutTypePickerSelectorView.onPickerDidSelect = { [weak self] item in guard let self else { return } self.component.layout = item + self.notification.layout = item if self.component.layout != item { self.layoutTypePickerSelectorView.set(item: self.component.layout) } } - typePickerSelectorView.onPickerDidSelect = { [weak self] item in - guard let self else { return } - self.component.type = item - if self.component.type != item { - self.layoutTypePickerSelectorView.set(item: self.component.layout) - } - } +// typePickerSelectorView.onPickerDidSelect = { [weak self] item in +// guard let self else { return } +// self.component.type = item +// if self.component.type != item { +// self.layoutTypePickerSelectorView.set(item: self.component.layout) +// } +// } } func setupButtons(with firstButtonText: String? = nil, secondButtonText: String? = nil) { @@ -144,12 +160,18 @@ class NotificationViewController: BaseViewController { component.primaryButtonModel = .init(text: firstButtonText, onClick: { [weak self] button in self?.label.text = "\(button.text!) button click" }) + notification.primaryButtonModel = .init(text: firstButtonText, onClick: { [weak self] button in + self?.label.text = "\(button.text!) button click" + }) } if let secondButtonText { component.secondaryButtonModel = .init(text: secondButtonText, onClick: { [weak self] button in self?.label.text = "\(button.text!) button click" }) + notification.secondaryButtonModel = .init(text: secondButtonText, onClick: { [weak self] button in + self?.label.text = "\(button.text!) button click" + }) } } } From a635981aee15f2f326607a986c9ba25dc58d4d34 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Wed, 14 Feb 2024 11:01:19 -0600 Subject: [PATCH 13/21] removed commented code Signed-off-by: Matt Bruce --- .../NotificationViewController.swift | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/VDSSample/ViewControllers/NotificationViewController.swift b/VDSSample/ViewControllers/NotificationViewController.swift index 5472a41..ffc468e 100644 --- a/VDSSample/ViewControllers/NotificationViewController.swift +++ b/VDSSample/ViewControllers/NotificationViewController.swift @@ -33,10 +33,6 @@ class NotificationViewController: BaseViewController { PickerSelectorView(title: "vertical", picker: self.picker, items: Notification.Layout.allCases) }() -// lazy var typePickerSelectorView = { -// PickerSelectorView(title: "inLine", picker: self.picker, items: Notification.Type.allCases) -// }() - var notification = Notification() override func viewDidLoad() { @@ -65,7 +61,6 @@ class NotificationViewController: BaseViewController { addFormRow(label: "Surface", view: surfacePickerSelectorView) addFormRow(label: "Style", view: notificationTypePickerSelectorView) addFormRow(label: "Layout", view: layoutTypePickerSelectorView) -// addFormRow(label: "Type", view: typePickerSelectorView) addFormRow(label: "Title", view: titleTextField) addFormRow(label: "SubTitle", view: subTitleTextField) addFormRow(label: "Hide Button Group", view: buttonGroupToggle) @@ -145,14 +140,6 @@ class NotificationViewController: BaseViewController { self.layoutTypePickerSelectorView.set(item: self.component.layout) } } - -// typePickerSelectorView.onPickerDidSelect = { [weak self] item in -// guard let self else { return } -// self.component.type = item -// if self.component.type != item { -// self.layoutTypePickerSelectorView.set(item: self.component.layout) -// } -// } } func setupButtons(with firstButtonText: String? = nil, secondButtonText: String? = nil) { From 9594832c168f112efe5b054c46558b88a60ae2ee Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Wed, 14 Feb 2024 11:56:38 -0600 Subject: [PATCH 14/21] refactored view controller to show/hide buttonicon badge indicator Signed-off-by: Matt Bruce --- .../ButtonIconViewController.swift | 56 +++++++++---------- 1 file changed, 27 insertions(+), 29 deletions(-) diff --git a/VDSSample/ViewControllers/ButtonIconViewController.swift b/VDSSample/ViewControllers/ButtonIconViewController.swift index 29e9460..d7246ac 100644 --- a/VDSSample/ViewControllers/ButtonIconViewController.swift +++ b/VDSSample/ViewControllers/ButtonIconViewController.swift @@ -63,7 +63,7 @@ class ButtonIconViewController: BaseViewController { lazy var badgeIndicatorExpandDirectionPickerSelectorView = { PickerSelectorView(title: "right", picker: self.picker, - items: ButtonIcon.ExpandDirection.allCases) + items: ButtonIcon.BadgeIndicatorModel.ExpandDirection.allCases) }() override func viewDidLoad() { @@ -73,6 +73,8 @@ class ButtonIconViewController: BaseViewController { setupModel() } + var badgeIndicatorFormStackView = FormSection().with { $0.isHidden = true } + override func setupForm(){ super.setupForm() addFormRow(label: "Disabled", view: disabledSwitch) @@ -83,34 +85,27 @@ class ButtonIconViewController: BaseViewController { addFormRow(label: "Floating", view: floating) addFormRow(label: "Hide Border", view: hideBorder) addFormRow(label: "Fit To Icon", view: fitToIcon) -// addFormRow(label: "Custom Size", view: customSizeField) addFormRow(label: "Name", view: namePickerSelectorView) addFormRow(label: "Selected Icon Name", view: selectedIconNamePickerSelectorView) addFormRow(label: "Selectable", view: selectableSwitch) addFormRow(label: "X Offset", view: centerX) addFormRow(label: "Y Offset", view: centerY) + + //badgeIndicator section addFormRow(label: "Show Badge Indicator", view: badgeIndicatorSwitch) - addFormRow(label: "Expand Direction", view: badgeIndicatorExpandDirectionPickerSelectorView) - addFormRow(label: "Badge Variants", view: variantOneSwitch) + badgeIndicatorFormStackView.addFormRow(label: "Expand Direction", view: badgeIndicatorExpandDirectionPickerSelectorView) + badgeIndicatorFormStackView.addFormRow(label: "Badge Variants", view: variantOneSwitch) + append(section: badgeIndicatorFormStackView) variantOneSwitch.onChange = { [weak self] sender in - guard let self else { return } - if sender.isOn { - if badgeIndicatorSwitch.isOn { - component.badgeIndicatorModel = ButtonIcon.BadgeIndicatorModel(kind: BadgeIndicator.Kind.simple, size: BadgeIndicator.Size.small) - } else { - component.badgeIndicatorModel = nil - } - } else { - component.badgeIndicatorModel = ButtonIcon.BadgeIndicatorModel(kind: BadgeIndicator.Kind.numbered, size: BadgeIndicator.Size.small, maximumDigits: BadgeIndicator.MaximumDigits.two, number: 999, trailingText: "New") - } + self?.setBadgeIndicatorModel() } badgeIndicatorSwitch.onChange = { [weak self] sender in guard let self else { return } self.component.showBadgeIndicator = sender.isOn + self.badgeIndicatorFormStackView.isHidden = !sender.isOn self.setBadgeIndicatorModel() - self.component.badgeIndicator.isHidden = !sender.isOn variantOneSwitch.isOn = false } @@ -154,15 +149,6 @@ class ButtonIconViewController: BaseViewController { }.store(in: &subscribers) } - //sub models - func setBadgeIndicatorModel() { - if badgeIndicatorSwitch.isOn { - component.badgeIndicatorModel = ButtonIcon.BadgeIndicatorModel(kind: BadgeIndicator.Kind.numbered, size: BadgeIndicator.Size.small, maximumDigits: BadgeIndicator.MaximumDigits.two, number: 999) - } else { - component.badgeIndicatorModel = nil - } - } - func setupModel() { let name = Icon.Name.addToFavorite @@ -174,7 +160,7 @@ class ButtonIconViewController: BaseViewController { sizePickerSelectorView.text = component.size.rawValue namePickerSelectorView.text = name.rawValue disabledSwitch.isOn = !component.isEnabled - badgeIndicatorExpandDirectionPickerSelectorView.text = component.expandDirection.rawValue + badgeIndicatorExpandDirectionPickerSelectorView.text = ButtonIcon.BadgeIndicatorModel.ExpandDirection.right.rawValue } func updateOffset() { @@ -191,12 +177,12 @@ class ButtonIconViewController: BaseViewController { func setupPicker(){ - + surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.surface = item self?.contentTopView.backgroundColor = item.color } - + surfaceTypePickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.surfaceType = item } @@ -213,13 +199,25 @@ class ButtonIconViewController: BaseViewController { namePickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.iconName = item } - + selectedIconNamePickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.selectedIconName = item } badgeIndicatorExpandDirectionPickerSelectorView.onPickerDidSelect = { [weak self] item in - self?.component.expandDirection = item + self?.setBadgeIndicatorModel() + } + } + + func setBadgeIndicatorModel() { + if variantOneSwitch.isOn { + if badgeIndicatorSwitch.isOn { + component.badgeIndicatorModel = ButtonIcon.BadgeIndicatorModel(kind: BadgeIndicator.Kind.simple, size: BadgeIndicator.Size.small) + } else { + component.badgeIndicatorModel = nil + } + } else { + component.badgeIndicatorModel = ButtonIcon.BadgeIndicatorModel(kind: BadgeIndicator.Kind.numbered, expandDirection: badgeIndicatorExpandDirectionPickerSelectorView.selectedItem, size: BadgeIndicator.Size.small, maximumDigits: BadgeIndicator.MaximumDigits.two, number: 999) } } } From 96bb1a893c2fd9e5160301bee7ffe852dbfa2f31 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Wed, 14 Feb 2024 12:02:26 -0600 Subject: [PATCH 15/21] marked as finished Signed-off-by: Matt Bruce --- VDSSample/ViewControllers/MenuViewController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VDSSample/ViewControllers/MenuViewController.swift b/VDSSample/ViewControllers/MenuViewController.swift index 753b294..d641463 100644 --- a/VDSSample/ViewControllers/MenuViewController.swift +++ b/VDSSample/ViewControllers/MenuViewController.swift @@ -72,7 +72,7 @@ class MenuViewController: UITableViewController, TooltipLaunchable { MenuComponent(title: "Badge Indicator", completed: true, viewController: BadgeIndicatorViewController.self), MenuComponent(title: "Button", completed: true, viewController: ButtonViewController.self), MenuComponent(title: "ButtonGroup", completed: true, viewController: ButtonGroupViewController.self), - MenuComponent(title: "ButtonIcon", completed: false, viewController: ButtonIconViewController.self), + MenuComponent(title: "ButtonIcon", completed: true, viewController: ButtonIconViewController.self), MenuComponent(title: "Checkbox", completed: true, viewController: CheckboxViewController.self), MenuComponent(title: "CheckboxItem", completed: true, viewController: CheckboxItemViewController.self), MenuComponent(title: "CheckboxGroup", completed: true, viewController: CheckboxGroupViewController.self), From 405a78fcf152710f0140122feaa3c9495cf0c781 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Thu, 15 Feb 2024 09:47:08 -0600 Subject: [PATCH 16/21] updated version to 1.0.54 Signed-off-by: Matt Bruce --- VDSSample.xcodeproj/project.pbxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/VDSSample.xcodeproj/project.pbxproj b/VDSSample.xcodeproj/project.pbxproj index 8703a7f..af15c31 100644 --- a/VDSSample.xcodeproj/project.pbxproj +++ b/VDSSample.xcodeproj/project.pbxproj @@ -684,7 +684,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 53; + CURRENT_PROJECT_VERSION = 54; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = FCMA4QKS77; GENERATE_INFOPLIST_FILE = YES; @@ -719,7 +719,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 53; + CURRENT_PROJECT_VERSION = 54; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = FCMA4QKS77; GENERATE_INFOPLIST_FILE = YES; From 9f19fd47176e85cec0a98884dc1f26854659d42b Mon Sep 17 00:00:00 2001 From: Krishna Kishore Bandaru Date: Tue, 20 Feb 2024 16:32:58 +0530 Subject: [PATCH 17/21] added color picker for gradient & backgroundcolor picker --- .../TileContainerViewController.swift | 243 +++++++++++++++++- 1 file changed, 231 insertions(+), 12 deletions(-) diff --git a/VDSSample/ViewControllers/TileContainerViewController.swift b/VDSSample/ViewControllers/TileContainerViewController.swift index ec374ad..98ea78a 100644 --- a/VDSSample/ViewControllers/TileContainerViewController.swift +++ b/VDSSample/ViewControllers/TileContainerViewController.swift @@ -13,10 +13,19 @@ import Combine class TileContainerViewController: BaseViewController { + lazy var colorPicker: UIColorPickerViewController = { + let picker = UIColorPickerViewController() + if case .custom(let hexCode) = component.color { + picker.selectedColor = UIColor(hexString: hexCode) + } + picker.delegate = self + return picker + }() + lazy var backgroundColorPickerSelectorView = { PickerSelectorView(title: "white", picker: self.picker, - items: TileContainer.BackgroundColor.allCases) + items: BackgroundColor.allCases) }() lazy var imageFallbackColorPickerSelectorView = { @@ -35,22 +44,122 @@ class TileContainerViewController: BaseViewController { items: TileContainer.AspectRatio.allCases) }() - var clickableSwitch = Toggle() + lazy var backgroundEffectSelectorView = { + PickerSelectorView(title: "none", + picker: self.picker, + items: BackgroundEffect.allCases) + }() + lazy var gradientColorView1: UIStackView = { + let stackView = UIStackView() + let indicatorWrapper = View() + indicatorWrapper.addSubview(gradientColor1View) + indicatorWrapper.height(32) + indicatorWrapper.pinTop() + indicatorWrapper.pinLeading() + indicatorWrapper.pinBottom() + indicatorWrapper.pinTrailingGreaterThanOrEqualTo(anchor: indicatorWrapper.trailingAnchor) + stackView.addArrangedSubview(indicatorWrapper) + stackView.distribution = .fillEqually + stackView.alignment = .fill + var button = Button().with { instance in + instance.size = .small + instance.use = .secondary + instance.text = "Select" + instance.onClick = { [weak self] in + self?.gradientColorTapped($0, view: self?.gradientColor1View) + } + } + button.tag = 1 + let buttonWrapper = View() + buttonWrapper.addSubview(button) + buttonWrapper.height(32) + button.pinTop() + button.pinTrailing() + button.pinBottom() + button.pinLeadingGreaterThanOrEqualTo(anchor: buttonWrapper.leadingAnchor) + stackView.addArrangedSubview(buttonWrapper) + stackView.tag = 1 + stackView.spacing = 10 + return stackView + }() + + lazy var gradientColorView2: UIStackView = { + let stackView = UIStackView() + stackView.distribution = .fillEqually + stackView.alignment = .fill + stackView.spacing = 10 + let indicatorWrapper = View() + indicatorWrapper.addSubview(gradientColor2View) + indicatorWrapper.height(32) + indicatorWrapper.pinTop() + indicatorWrapper.pinLeading() + indicatorWrapper.pinBottom() + indicatorWrapper.pinTrailingGreaterThanOrEqualTo(anchor: indicatorWrapper.trailingAnchor) + stackView.addArrangedSubview(indicatorWrapper) + var button = Button().with { instance in + instance.size = .small + instance.use = .secondary + instance.text = "Select" + instance.onClick = { [weak self] in + self?.gradientColorTapped($0, view: self?.gradientColor2View) + } + } + button.tag = 2 + let buttonWrapper = View() + buttonWrapper.addSubview(button) + buttonWrapper.height(32) + button.pinTop() + button.pinTrailing() + button.pinBottom() + button.pinLeadingGreaterThanOrEqualTo(anchor: buttonWrapper.leadingAnchor) + stackView.addArrangedSubview(buttonWrapper) + stackView.tag = 2 + return stackView + }() + + var gradientColor1View: UIView = { + let view = UIView() + view.translatesAutoresizingMaskIntoConstraints = false + view.widthAnchor.constraint(equalToConstant: 20).isActive = true + view.heightAnchor.constraint(equalToConstant: 20).isActive = true + view.tag = 1 + return view + }() + + var gradientColor2View: UIView = { + let view = UIView() + view.translatesAutoresizingMaskIntoConstraints = false + view.widthAnchor.constraint(equalToConstant: 20).isActive = true + view.heightAnchor.constraint(equalToConstant: 20).isActive = true + view.tag = 2 + return view + }() + + var gradientColorsFormStackView = FormSection().with { $0.isHidden = true } + var backgroundColor: BackgroundColor = .secondary + var clickableSwitch = Toggle() var showBackgroundImageSwitch = Toggle() var showBorderSwitch = Toggle() var showDropShadowSwitch = Toggle() - var heightTextField = NumericField() - var widthTextField = NumericField() - + var selectedGradient1Color: String? + var selectedGradient2Color: String? + var colorPickerType: ColorPickerType = .backgroundColor var backgroundImage = UIImage(named: "backgroundTest")! + var selectedGradientColorView: UIView? + + var heightTextField = NumericField().with { + $0.placeholder = "Minimum 100px else it will occupy full container" + } + var widthTextField = NumericField().with { + $0.placeholder = "Minimum 100px else it will occupy full container" + } override func viewDidLoad() { super.viewDidLoad() addContentTopView(view: .makeWrapper(for: component)) component.width = 150 - component.color = .black - + component.color = .secondary setupPicker() setupModel() } @@ -66,13 +175,18 @@ class TileContainerViewController: BaseViewController { addFormRow(label: "Width", view: widthTextField) addFormRow(label: "Height", view: heightTextField) addFormRow(label: "Show Border", view: showBorderSwitch) - //addFormRow(label: "Show Drop Shadow", view: showDropShadowSwitch) + addFormRow(label: "Show Drop Shadow", view: showDropShadowSwitch) addFormRow(label: "Background Color", view: backgroundColorPickerSelectorView) addFormRow(label: "Padding", view: paddingPickerSelectorView) addFormRow(label: "Aspect Ratio", view: scalingTypePickerSelectorView) addFormRow(label: "Background Image", view: showBackgroundImageSwitch) addFormRow(label: "Image Fallback Color", view: imageFallbackColorPickerSelectorView) - + addFormRow(label: "Background Effect", view: backgroundEffectSelectorView) + //Gradient Section + gradientColorsFormStackView.addFormRow(label: "Gradient Color1", view: gradientColorView1) + gradientColorsFormStackView.addFormRow(label: "Gradient Color2", view: gradientColorView2) + append(section: gradientColorsFormStackView) + clickableSwitch.onChange = { [weak self] sender in guard let self else { return } if sender.isOn { @@ -116,7 +230,7 @@ class TileContainerViewController: BaseViewController { func setupModel() { //setup UI surfacePickerSelectorView.text = component.surface.rawValue - backgroundColorPickerSelectorView.text = component.color.rawValue + backgroundColorPickerSelectorView.text = backgroundColor.rawValue paddingPickerSelectorView.text = component.padding.rawValue scalingTypePickerSelectorView.text = component.aspectRatio.rawValue widthTextField.text = component.width != nil ? "\(component.width!)" : "" @@ -131,7 +245,28 @@ class TileContainerViewController: BaseViewController { } backgroundColorPickerSelectorView.onPickerDidSelect = { [weak self] item in - self?.component.color = item + guard let self else { return } + if let color = item.color { + self.component.color = color + } else { + self.colorPickerType = .backgroundColor + self.present(self.colorPicker, animated: true) + } + } + + backgroundEffectSelectorView.onPickerDidSelect = { [weak self] in + guard let self else { return } + if let effect = $0.effect { + self.component.backgroundEffect = effect + self.gradientColorsFormStackView.isHidden = true + self.selectedGradient1Color = nil + self.selectedGradient1Color = nil + self.gradientColor1View.backgroundColor = .clear + self.gradientColor2View.backgroundColor = .clear + } else { + self.colorPickerType = .gradientColors(gradientColor1View) + self.gradientColorsFormStackView.isHidden = false + } } scalingTypePickerSelectorView.onPickerDidSelect = { [weak self] item in @@ -146,13 +281,97 @@ class TileContainerViewController: BaseViewController { self?.component.imageFallbackColor = item } } + + func gradientColorTapped(_ sender: Button, view: UIView?) { + selectedGradientColorView = view + let selectedColor = (sender.tag == 1) ? selectedGradient1Color : selectedGradient2Color + if let selectedColor { + colorPicker.selectedColor = UIColor(hexString: selectedColor) + } + present(colorPicker, animated: true) + } } extension TileContainerViewController: ComponentSampleable { static func makeSample() -> ComponentSample { let component = Self.makeComponent() component.width = 150 - component.color = .black + component.color = .primary return ComponentSample(component: component, trailingPinningType: .lessThanOrEqual) } } + +extension TileContainerViewController: UIColorPickerViewControllerDelegate { + + func colorPickerViewControllerDidFinish(_ viewController: UIColorPickerViewController) { + dismiss(animated: true) + } + + func colorPickerViewControllerDidSelectColor(_ viewController: UIColorPickerViewController) { + guard let hexString = viewController.selectedColor.hexString else { return } + switch colorPickerType { + case .backgroundColor: + component.color = .custom(hexString) + case .gradientColors: + guard let selectedGradientColorView else { return } + if selectedGradientColorView.tag == 1 { + selectedGradient1Color = hexString + } else { + selectedGradient2Color = hexString + } + selectedGradientColorView.backgroundColor = UIColor(hexString: hexString) + if let selectedGradient1Color, let selectedGradient2Color { + component.backgroundEffect = .gradient(selectedGradient1Color, selectedGradient2Color) + } + } + } +} + +extension TileContainerViewController { + + //Created new BackgroundEffect enum for sample app only. Since we defined enum with associated value color defined in TileContainer cannot be RawRepresentable & CaseIterable + enum BackgroundEffect: String, CaseIterable { + case transparency + case gradient + case none + + var effect: TileContainer.BackgroundEffect? { + return switch self { + case .transparency: + .transparency + case .gradient: + nil + case .none: + TileContainer.BackgroundEffect.none + } + } + } + + //Created new BackgroundColor enum for sample app only. Since we defined enum with associated value color defined in TileContainer cannot be RawRepresentable & CaseIterable + enum BackgroundColor: String, CaseIterable { + + case primary, secondary, white, black, gray, custom + + var color: TileContainer.BackgroundColor? { + switch self { + case .primary: + .primary + case .secondary: + .secondary + case .white: + .white + case .black: + .black + case .gray: + .gray + case .custom: + nil + } + } + } + + //Internal helper enum to identiy the configuration + enum ColorPickerType { + case backgroundColor, gradientColors(UIView) + } +} From 1780c9568411faeae40959febc5bf740933b49a3 Mon Sep 17 00:00:00 2001 From: Krishna Kishore Bandaru Date: Tue, 20 Feb 2024 19:56:27 +0530 Subject: [PATCH 18/21] removed gray --- VDSSample/ViewControllers/TileContainerViewController.swift | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/VDSSample/ViewControllers/TileContainerViewController.swift b/VDSSample/ViewControllers/TileContainerViewController.swift index 98ea78a..6a58b9c 100644 --- a/VDSSample/ViewControllers/TileContainerViewController.swift +++ b/VDSSample/ViewControllers/TileContainerViewController.swift @@ -350,7 +350,7 @@ extension TileContainerViewController { //Created new BackgroundColor enum for sample app only. Since we defined enum with associated value color defined in TileContainer cannot be RawRepresentable & CaseIterable enum BackgroundColor: String, CaseIterable { - case primary, secondary, white, black, gray, custom + case primary, secondary, white, black, custom var color: TileContainer.BackgroundColor? { switch self { @@ -362,8 +362,6 @@ extension TileContainerViewController { .white case .black: .black - case .gray: - .gray case .custom: nil } From d99bf783f4692be168346537902557c445493e9b Mon Sep 17 00:00:00 2001 From: Krishna Kishore Bandaru Date: Tue, 20 Feb 2024 20:58:43 +0530 Subject: [PATCH 19/21] added contentArea background color --- .../TileContainerViewController.swift | 37 +++++++++++++++++-- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/VDSSample/ViewControllers/TileContainerViewController.swift b/VDSSample/ViewControllers/TileContainerViewController.swift index 6a58b9c..76782e4 100644 --- a/VDSSample/ViewControllers/TileContainerViewController.swift +++ b/VDSSample/ViewControllers/TileContainerViewController.swift @@ -147,7 +147,12 @@ class TileContainerViewController: BaseViewController { var colorPickerType: ColorPickerType = .backgroundColor var backgroundImage = UIImage(named: "backgroundTest")! var selectedGradientColorView: UIView? - + var contentAreaBackgroundColorButton = Button().with { instance in + instance.size = .small + instance.use = .secondary + instance.text = "Select" + } + var heightTextField = NumericField().with { $0.placeholder = "Minimum 100px else it will occupy full container" } @@ -178,6 +183,10 @@ class TileContainerViewController: BaseViewController { addFormRow(label: "Show Drop Shadow", view: showDropShadowSwitch) addFormRow(label: "Background Color", view: backgroundColorPickerSelectorView) addFormRow(label: "Padding", view: paddingPickerSelectorView) + let rowView = addFormRow(label: "Content area BG color(only for testing padding)", view: contentAreaBackgroundColorButton) + if let rowView = rowView as? UIStackView { + rowView.alignment = .top + } addFormRow(label: "Aspect Ratio", view: scalingTypePickerSelectorView) addFormRow(label: "Background Image", view: showBackgroundImageSwitch) addFormRow(label: "Image Fallback Color", view: imageFallbackColorPickerSelectorView) @@ -264,22 +273,31 @@ class TileContainerViewController: BaseViewController { self.gradientColor1View.backgroundColor = .clear self.gradientColor2View.backgroundColor = .clear } else { - self.colorPickerType = .gradientColors(gradientColor1View) + self.colorPickerType = .gradientColors self.gradientColorsFormStackView.isHidden = false } } scalingTypePickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.aspectRatio = item + self?.component.layoutIfNeeded() + self?.showDebug(show: self?.debugViewSwitch.isOn ?? false) } paddingPickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.padding = item } - + imageFallbackColorPickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.imageFallbackColor = item } + + contentAreaBackgroundColorButton.onClick = { [weak self] _ in + guard let self else { return } + self.colorPickerType = .contentViewBackgroundColor + self.colorPicker.selectedColor = self.component.containerView.backgroundColor ?? .white + self.present(self.colorPicker, animated: true) + } } func gradientColorTapped(_ sender: Button, view: UIView?) { @@ -310,6 +328,8 @@ extension TileContainerViewController: UIColorPickerViewControllerDelegate { func colorPickerViewControllerDidSelectColor(_ viewController: UIColorPickerViewController) { guard let hexString = viewController.selectedColor.hexString else { return } switch colorPickerType { + case .contentViewBackgroundColor: + component.containerView.backgroundColor = UIColor(hexString: hexString) case .backgroundColor: component.color = .custom(hexString) case .gradientColors: @@ -335,6 +355,15 @@ extension TileContainerViewController { case gradient case none + var rawValue: String { + switch self { + case .gradient: + "gradient (select gradient colors to apply)" + default: + String(describing: self) + } + } + var effect: TileContainer.BackgroundEffect? { return switch self { case .transparency: @@ -370,6 +399,6 @@ extension TileContainerViewController { //Internal helper enum to identiy the configuration enum ColorPickerType { - case backgroundColor, gradientColors(UIView) + case backgroundColor, gradientColors, contentViewBackgroundColor } } From 7cf03551ae91fa9d12a5bd5f5569720e9655c206 Mon Sep 17 00:00:00 2001 From: Krishna Kishore Bandaru Date: Wed, 21 Feb 2024 17:47:58 +0530 Subject: [PATCH 20/21] Added custom padding --- .../TileContainerViewController.swift | 61 +++++++++++++++++-- 1 file changed, 56 insertions(+), 5 deletions(-) diff --git a/VDSSample/ViewControllers/TileContainerViewController.swift b/VDSSample/ViewControllers/TileContainerViewController.swift index 76782e4..d1a571b 100644 --- a/VDSSample/ViewControllers/TileContainerViewController.swift +++ b/VDSSample/ViewControllers/TileContainerViewController.swift @@ -35,7 +35,7 @@ class TileContainerViewController: BaseViewController { lazy var paddingPickerSelectorView = { PickerSelectorView(title: "16", picker: self.picker, - items: TileContainer.Padding.allCases) + items: Padding.allCases) }() lazy var scalingTypePickerSelectorView = { @@ -138,6 +138,7 @@ class TileContainerViewController: BaseViewController { var gradientColorsFormStackView = FormSection().with { $0.isHidden = true } var backgroundColor: BackgroundColor = .secondary + var padding: Padding = .padding4X var clickableSwitch = Toggle() var showBackgroundImageSwitch = Toggle() var showBorderSwitch = Toggle() @@ -147,12 +148,19 @@ class TileContainerViewController: BaseViewController { var colorPickerType: ColorPickerType = .backgroundColor var backgroundImage = UIImage(named: "backgroundTest")! var selectedGradientColorView: UIView? + var customPaddingRowView: UIView? + var anyCancellable: AnyCancellable? + var contentAreaBackgroundColorButton = Button().with { instance in instance.size = .small instance.use = .secondary instance.text = "Select" } - + + var paddingTextField = NumericField().with { + $0.placeholder = "Custom Padding" + } + var heightTextField = NumericField().with { $0.placeholder = "Minimum 100px else it will occupy full container" } @@ -183,7 +191,9 @@ class TileContainerViewController: BaseViewController { addFormRow(label: "Show Drop Shadow", view: showDropShadowSwitch) addFormRow(label: "Background Color", view: backgroundColorPickerSelectorView) addFormRow(label: "Padding", view: paddingPickerSelectorView) - let rowView = addFormRow(label: "Content area BG color(only for testing padding)", view: contentAreaBackgroundColorButton) + customPaddingRowView = addFormRow(label: "Custom Padding", view: paddingTextField) + customPaddingRowView?.isHidden = true + let rowView = addFormRow(label: "Content area BG color(only for padding validation)", view: contentAreaBackgroundColorButton) if let rowView = rowView as? UIStackView { rowView.alignment = .top } @@ -195,6 +205,12 @@ class TileContainerViewController: BaseViewController { gradientColorsFormStackView.addFormRow(label: "Gradient Color1", view: gradientColorView1) gradientColorsFormStackView.addFormRow(label: "Gradient Color2", view: gradientColorView2) append(section: gradientColorsFormStackView) + + anyCancellable = paddingTextField.textPublisher.receive(on: RunLoop.main).sink { [weak self] value in + if let value = Float(value) { + self?.component.padding = .custom(CGFloat(value)) + } + } clickableSwitch.onChange = { [weak self] sender in guard let self else { return } @@ -227,12 +243,14 @@ class TileContainerViewController: BaseViewController { .numberPublisher .sink { [weak self] number in self?.component.height = number?.cgFloatValue + self?.component.layoutIfNeeded() }.store(in: &subscribers) widthTextField .numberPublisher .sink { [weak self] number in self?.component.width = number?.cgFloatValue + self?.component.layoutIfNeeded() }.store(in: &subscribers) } @@ -240,7 +258,7 @@ class TileContainerViewController: BaseViewController { //setup UI surfacePickerSelectorView.text = component.surface.rawValue backgroundColorPickerSelectorView.text = backgroundColor.rawValue - paddingPickerSelectorView.text = component.padding.rawValue + paddingPickerSelectorView.text = padding.rawValue scalingTypePickerSelectorView.text = component.aspectRatio.rawValue widthTextField.text = component.width != nil ? "\(component.width!)" : "" heightTextField.text = component.height != nil ? "\(component.height!)" : "" @@ -285,7 +303,13 @@ class TileContainerViewController: BaseViewController { } paddingPickerSelectorView.onPickerDidSelect = { [weak self] item in - self?.component.padding = item + if let value = item.value { + self?.paddingTextField.text = "" + self?.component.padding = value + self?.customPaddingRowView?.isHidden = true + } else { + self?.customPaddingRowView?.isHidden = false + } } imageFallbackColorPickerSelectorView.onPickerDidSelect = { [weak self] item in @@ -401,4 +425,31 @@ extension TileContainerViewController { enum ColorPickerType { case backgroundColor, gradientColors, contentViewBackgroundColor } + + //Internal helper enum to map padding & pass custom padding values + public enum Padding: String, CaseIterable { + case padding2X + case padding4X + case padding6X + case padding8X + case padding12X + case custom + + public var value: TileContainer.Padding? { + return switch self { + case .padding2X: + .padding2X + case .padding4X: + .padding4X + case .padding6X: + .padding6X + case .padding8X: + .padding8X + case .padding12X: + .padding12X + case .custom: + nil + } + } + } } From cc52dcb0c6bd1d047c652e06a8b3622756072e9b Mon Sep 17 00:00:00 2001 From: Krishna Kishore Bandaru Date: Thu, 22 Feb 2024 22:46:44 +0530 Subject: [PATCH 21/21] Added minor fix for max width & height --- .../TileContainerViewController.swift | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/VDSSample/ViewControllers/TileContainerViewController.swift b/VDSSample/ViewControllers/TileContainerViewController.swift index d1a571b..7c1bb65 100644 --- a/VDSSample/ViewControllers/TileContainerViewController.swift +++ b/VDSSample/ViewControllers/TileContainerViewController.swift @@ -183,6 +183,9 @@ class TileContainerViewController: BaseViewController { $0.textStyle = .boldBodyLarge $0.text = "This object does NOT reflect normal \"surface\" changes, all properties are maually set" }) + formStackView.addArrangedSubview(Label().with { + $0.text = "For testing max width is limited to 85% of view's width & 65% view's height." + }) addFormRow(label: "Surface", view: surfacePickerSelectorView) addFormRow(label: "Clickable", view: clickableSwitch) addFormRow(label: "Width", view: widthTextField) @@ -242,15 +245,21 @@ class TileContainerViewController: BaseViewController { heightTextField .numberPublisher .sink { [weak self] number in - self?.component.height = number?.cgFloatValue - self?.component.layoutIfNeeded() + guard let self else { return } + if let value = number?.cgFloatValue, value >= 100 && value < self.view.frame.height * 0.65 { + self.component.height = value + self.component.layoutIfNeeded() + } }.store(in: &subscribers) widthTextField .numberPublisher .sink { [weak self] number in - self?.component.width = number?.cgFloatValue - self?.component.layoutIfNeeded() + guard let self else { return } + if let value = number?.cgFloatValue, value >= 100 && value < self.view.frame.width * 0.85 { + self.component.width = value + self.component.layoutIfNeeded() + } }.store(in: &subscribers) }