diff --git a/VDSSample/ViewControllers/BadgeViewController.swift b/VDSSample/ViewControllers/BadgeViewController.swift index 3fec5dd..aa199b0 100644 --- a/VDSSample/ViewControllers/BadgeViewController.swift +++ b/VDSSample/ViewControllers/BadgeViewController.swift @@ -110,11 +110,8 @@ class BadgeViewController: BaseViewController { extension BadgeViewController: ComponentSampleable { static func makeSample() -> ComponentSample { - let component = Self.makeComponent() - component.fillColor = .red - component.text = "Terms and conditions" - component.maxWidth = 70 - component.numberOfLines = 3 - return ComponentSample(component: component, trailingPinningType: .lessThanOrEqual) + let c = Self() + c.setupModel() + return ComponentSample(component: c.component, trailingPinningType: .lessThanOrEqual) } } diff --git a/VDSSample/ViewControllers/BaseViewController.swift b/VDSSample/ViewControllers/BaseViewController.swift index 7d24751..b461600 100644 --- a/VDSSample/ViewControllers/BaseViewController.swift +++ b/VDSSample/ViewControllers/BaseViewController.swift @@ -334,15 +334,33 @@ public class BaseViewController: UIViewController, Initable , viewController.didMove(toParent: self) } + var componentTrailingEqualConstraint: NSLayoutConstraint? + var componentTrailingLessThanEqualConstraint: NSLayoutConstraint? open func addContentTopView(view: UIView, edgeSpacing: CGFloat = 16.0, pinTrailing: Bool = true) { view.translatesAutoresizingMaskIntoConstraints = false + contentTopView.addSubview(view) + componentTrailingEqualConstraint = view.pinTrailing(anchor: contentTopView.trailingAnchor, constant: edgeSpacing)?.deactivate() + componentTrailingLessThanEqualConstraint = view.pinTrailingLessThanOrEqualTo(anchor: contentTopView.trailingAnchor, constant: edgeSpacing)?.deactivate() + view + .pinTop(edgeSpacing) + .pinLeading(edgeSpacing) + .pinBottom(edgeSpacing) + if pinTrailing { - contentTopView.addSubview(view) - view.pinToSuperView(.uniform(edgeSpacing)) + componentTrailingEqualConstraint?.activate() } else { - let wrapper = UIView.makeWrapper(for: view) - contentTopView.addSubview(wrapper) - wrapper.pinToSuperView(.uniform(edgeSpacing)) + componentTrailingLessThanEqualConstraint?.activate() + } + } + + open func updateComponentConstraint(pinTrailing: Bool = true) { + componentTrailingEqualConstraint?.deactivate() + componentTrailingLessThanEqualConstraint?.deactivate() + + if pinTrailing { + componentTrailingEqualConstraint?.activate() + } else { + componentTrailingLessThanEqualConstraint?.activate() } } diff --git a/VDSSample/ViewControllers/ButtonIconViewController.swift b/VDSSample/ViewControllers/ButtonIconViewController.swift index 23092cd..1a022a9 100644 --- a/VDSSample/ViewControllers/ButtonIconViewController.swift +++ b/VDSSample/ViewControllers/ButtonIconViewController.swift @@ -71,7 +71,7 @@ class ButtonIconViewController: BaseViewController { override func viewDidLoad() { super.viewDidLoad() - addContentTopView(view: component, pinTrailing: false) + addContentTopView(view: component, pinTrailing: false) setupPicker() setupModel() } diff --git a/VDSSample/ViewControllers/CalendarViewController.swift b/VDSSample/ViewControllers/CalendarViewController.swift index 846318e..99c513b 100644 --- a/VDSSample/ViewControllers/CalendarViewController.swift +++ b/VDSSample/ViewControllers/CalendarViewController.swift @@ -47,13 +47,6 @@ class CalendarViewController: BaseViewController { override func viewDidLoad() { super.viewDidLoad() addContentTopView(view: component) - component.minDate = Date().startOfMonth - component.maxDate = Date().endOfMonth - component.onChange = { [weak self] control in - self?.label.text = DateFormatter.localizedString(from: control.selectedDate, dateStyle: .short, timeStyle: .none) - } - minDatePicker.date = component.minDate - maxDatePicker.date = component.maxDate setupPicker() setupModel() } @@ -206,6 +199,13 @@ class CalendarViewController: BaseViewController { func setupModel() { let calendar = Calendar.current let indicatorDate = calendar.startOfDay(for: calendar.date(byAdding: .day, value: 1, to: Date())!) + component.minDate = Date().startOfMonth + component.maxDate = Date().endOfMonth + component.onChange = { [weak self] control in + self?.label.text = DateFormatter.localizedString(from: control.selectedDate, dateStyle: .short, timeStyle: .none) + } + minDatePicker.date = component.minDate + maxDatePicker.date = component.maxDate component.indicators = indicators legendOneField.text = "Due Date" legendTwoField.text = "Auto Pay" @@ -303,3 +303,11 @@ class CalendarViewController: BaseViewController { return day } } + +extension CalendarViewController: ComponentSampleable { + static func makeSample() -> ComponentSample { + let c = Self() + c.viewDidLoad() + return ComponentSample(component: c.component, edgeInset: .init(top: 16, left: 0, bottom: 16, right: 0)) + } +} diff --git a/VDSSample/ViewControllers/CarouselViewController.swift b/VDSSample/ViewControllers/CarouselViewController.swift index 89251b3..97596f1 100644 --- a/VDSSample/ViewControllers/CarouselViewController.swift +++ b/VDSSample/ViewControllers/CarouselViewController.swift @@ -219,3 +219,11 @@ class CarouselViewController: BaseViewController { } } } + +extension CarouselViewController: ComponentSampleable { + static func makeSample() -> ComponentSample { + let c = Self() + c.setupModel() + return ComponentSample(component: c.component) + } +} diff --git a/VDSSample/ViewControllers/CheckBoxGroupViewController.swift b/VDSSample/ViewControllers/CheckBoxGroupViewController.swift index e75a693..019157f 100644 --- a/VDSSample/ViewControllers/CheckBoxGroupViewController.swift +++ b/VDSSample/ViewControllers/CheckBoxGroupViewController.swift @@ -138,6 +138,6 @@ extension CheckboxGroupViewController: ComponentSampleable { component.selectorModels = [checkbox1, checkbox2] - return ComponentSample(component: component, trailingPinningType: .lessThanOrEqual) + return ComponentSample(component: component) } } diff --git a/VDSSample/ViewControllers/CheckboxItemViewController.swift b/VDSSample/ViewControllers/CheckboxItemViewController.swift index 2f3a4e3..b55404f 100644 --- a/VDSSample/ViewControllers/CheckboxItemViewController.swift +++ b/VDSSample/ViewControllers/CheckboxItemViewController.swift @@ -110,6 +110,6 @@ extension CheckboxItemViewController: ComponentSampleable { component.childText = "I agree to Verizon's terms and conditions click here" component.errorText = "Error Text" - return ComponentSample(component: component, trailingPinningType: .lessThanOrEqual) + return ComponentSample(component: component) } } diff --git a/VDSSample/ViewControllers/DatePickerViewController.swift b/VDSSample/ViewControllers/DatePickerViewController.swift index 66f3591..ded68a1 100644 --- a/VDSSample/ViewControllers/DatePickerViewController.swift +++ b/VDSSample/ViewControllers/DatePickerViewController.swift @@ -171,6 +171,7 @@ class DatePickerViewController: BaseViewController { widthTextField .numberPublisher .sink { [weak self] number in + self?.updateComponentConstraint(pinTrailing: number == nil) self?.component.width = number?.cgFloatValue }.store(in: &subscribers) @@ -479,3 +480,12 @@ extension DatePickerViewController { } } + +extension DatePickerViewController: ComponentSampleable { + static func makeSample() -> ComponentSample { + let c = Self() + c.setupModel() + c.setupCalendar() + return ComponentSample(component: c.component) + } +} diff --git a/VDSSample/ViewControllers/DropdownSelectViewController.swift b/VDSSample/ViewControllers/DropdownSelectViewController.swift index 1178e6b..506df08 100644 --- a/VDSSample/ViewControllers/DropdownSelectViewController.swift +++ b/VDSSample/ViewControllers/DropdownSelectViewController.swift @@ -131,6 +131,7 @@ class DropdownSelectViewController: BaseViewController { widthTextField .numberPublisher .sink { [weak self] number in + self?.updateComponentConstraint(pinTrailing: number == nil) self?.component.width = number?.cgFloatValue }.store(in: &subscribers) diff --git a/VDSSample/ViewControllers/FootnoteGroupViewController.swift b/VDSSample/ViewControllers/FootnoteGroupViewController.swift index 65a4cb9..0aab2b8 100644 --- a/VDSSample/ViewControllers/FootnoteGroupViewController.swift +++ b/VDSSample/ViewControllers/FootnoteGroupViewController.swift @@ -17,7 +17,7 @@ class FootnoteGroupViewController: BaseViewController { override func viewDidLoad() { super.viewDidLoad() - addContentTopView(view: component, pinTrailing: false) + addContentTopView(view: component) setupPicker() setupModel() } @@ -31,6 +31,7 @@ class FootnoteGroupViewController: BaseViewController { widthTextField .numberPublisher .sink { [weak self] number in + self?.updateComponentConstraint(pinTrailing: number == nil) if let number { self?.component.width = .value(number.cgFloatValue) self?.percentageTextField.text = "" @@ -42,6 +43,7 @@ class FootnoteGroupViewController: BaseViewController { percentageTextField .numberPublisher .sink { [weak self] number in + self?.updateComponentConstraint(pinTrailing: number == nil) if let number, number.intValue > 9 { self?.component.width = .percentage(number.cgFloatValue) self?.widthTextField.text = "" @@ -67,3 +69,11 @@ class FootnoteGroupViewController: BaseViewController { } } } + +extension FootnoteGroupViewController: ComponentSampleable { + static func makeSample() -> ComponentSample { + let c = Self() + c.setupModel() + return ComponentSample(component: c.component) + } +} diff --git a/VDSSample/ViewControllers/FootnoteItemViewController.swift b/VDSSample/ViewControllers/FootnoteItemViewController.swift index 66eb76b..c5db75f 100644 --- a/VDSSample/ViewControllers/FootnoteItemViewController.swift +++ b/VDSSample/ViewControllers/FootnoteItemViewController.swift @@ -61,7 +61,7 @@ class FootnoteItemViewController: BaseViewController { override func viewDidLoad() { super.viewDidLoad() - addContentTopView(view: component, pinTrailing: false) + addContentTopView(view: component) setupPicker() setupModel() } @@ -92,6 +92,7 @@ class FootnoteItemViewController: BaseViewController { widthTextField .numberPublisher .sink { [weak self] number in + self?.updateComponentConstraint(pinTrailing: number == nil) if let number { self?.component.width = .value(number.cgFloatValue) self?.percentageTextField.text = "" @@ -103,6 +104,7 @@ class FootnoteItemViewController: BaseViewController { percentageTextField .numberPublisher .sink { [weak self] number in + self?.updateComponentConstraint(pinTrailing: number == nil) if let number, number.intValue > 9 { self?.component.width = .percentage(number.cgFloatValue) self?.widthTextField.text = "" @@ -164,3 +166,11 @@ class FootnoteItemViewController: BaseViewController { } } + +extension FootnoteItemViewController: ComponentSampleable { + static func makeSample() -> ComponentSample { + let c = Self() + c.setupModel() + return ComponentSample(component: c.component) + } +} diff --git a/VDSSample/ViewControllers/InputFieldViewController.swift b/VDSSample/ViewControllers/InputFieldViewController.swift index 89af3f5..3b8c638 100644 --- a/VDSSample/ViewControllers/InputFieldViewController.swift +++ b/VDSSample/ViewControllers/InputFieldViewController.swift @@ -181,6 +181,7 @@ class InputFieldViewController: BaseViewController { widthTextField .numberPublisher .sink { [weak self] number in + self?.updateComponentConstraint(pinTrailing: number == nil) self?.component.width = number?.cgFloatValue }.store(in: &subscribers) @@ -329,14 +330,8 @@ class InputFieldViewController: BaseViewController { extension InputFieldViewController: ComponentSampleable { static func makeSample() -> ComponentSample { - let component = Self.makeComponent() - component.fieldType = .text - component.width = 328 - component.labelText = "Street Address" - component.helperText = "For example: 123 Verizon St" - component.errorText = "Enter a valid address." - component.successText = "Good job entering a valid address!" - component.tooltipModel = .init(title: "Check the formatting of your address", content: "House/Building number then street name") - return ComponentSample(component: component, trailingPinningType: .lessThanOrEqual) + let c = Self() + c.setupModel() + return ComponentSample(component: c.component) } } diff --git a/VDSSample/ViewControllers/InputStepperViewController.swift b/VDSSample/ViewControllers/InputStepperViewController.swift index b751e66..a4499d0 100644 --- a/VDSSample/ViewControllers/InputStepperViewController.swift +++ b/VDSSample/ViewControllers/InputStepperViewController.swift @@ -163,6 +163,7 @@ class InputStepperViewController: BaseViewController { widthTextField .numberPublisher .sink { [weak self] number in + self?.updateComponentConstraint(pinTrailing: number == nil) if let number { self?.component.widthPercentage = nil self?.component.width = number.cgFloatValue @@ -175,6 +176,7 @@ class InputStepperViewController: BaseViewController { widthPercentageTextField .numberPublisher .sink { [weak self] number in + self?.updateComponentConstraint(pinTrailing: number == nil) if let number, number.intValue > 10 { self?.component.width = nil self?.component.widthPercentage = number.cgFloatValue @@ -253,3 +255,11 @@ class InputStepperViewController: BaseViewController { helperTextPlacementPickerSelectorView.text = component.helperTextPlacement.rawValue } } + +extension InputStepperViewController: ComponentSampleable { + static func makeSample() -> ComponentSample { + let c = Self() + c.setupModel() + return ComponentSample(component: c.component) + } +} diff --git a/VDSSample/ViewControllers/LabelViewController.swift b/VDSSample/ViewControllers/LabelViewController.swift index 75f62c2..159f176 100644 --- a/VDSSample/ViewControllers/LabelViewController.swift +++ b/VDSSample/ViewControllers/LabelViewController.swift @@ -145,6 +145,7 @@ class LabelViewController: BaseViewController