From 39833d47ba67a854efe90f0232f845c117e02a8a Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Tue, 5 Sep 2023 11:04:05 -0500 Subject: [PATCH] added container code Signed-off-by: Matt Bruce --- .../BadgeIndicatorViewController.swift | 2 +- .../ViewControllers/BadgeViewController.swift | 2 +- .../ButtonIconViewController.swift | 2 +- .../ButtonViewController.swift | 2 +- .../CheckBoxGroupViewController.swift | 2 +- .../CheckboxItemViewController.swift | 2 +- .../CheckboxViewController.swift | 2 +- .../ViewControllers/IconViewController.swift | 2 +- .../InputFieldViewController.swift | 2 +- .../RadioBoxGroupViewController.swift | 2 +- .../RadioButtonGroupViewController.swift | 2 +- .../RadioButtonItemViewController.swift | 2 +- .../RadioButtonViewController.swift | 2 +- .../TableViewTestController.swift | 102 +++++------------- .../TextAreaViewController.swift | 2 +- .../TextLinkCaretViewController.swift | 2 +- .../TextLinkViewController.swift | 2 +- .../TileContainerViewController.swift | 2 +- .../TileletViewController.swift | 2 +- .../ToggleViewController.swift | 2 +- .../TooltipViewController.swift | 2 +- .../TrailingTooltipLabelViewController.swift | 2 +- 22 files changed, 46 insertions(+), 98 deletions(-) diff --git a/VDSSample/ViewControllers/BadgeIndicatorViewController.swift b/VDSSample/ViewControllers/BadgeIndicatorViewController.swift index b9336a5..a6b2001 100644 --- a/VDSSample/ViewControllers/BadgeIndicatorViewController.swift +++ b/VDSSample/ViewControllers/BadgeIndicatorViewController.swift @@ -219,6 +219,6 @@ extension BadgeIndicatorViewController: ComponentSampleable { component.number = 23 component.kind = .simple component.size = .medium - return ComponentSample(component: component, trailingPinningType: .lessThanOrEqual) + return ComponentSample(component: component, model: .init(layoutType: .left, priorities: [.bottom: .defaultLow])) } } diff --git a/VDSSample/ViewControllers/BadgeViewController.swift b/VDSSample/ViewControllers/BadgeViewController.swift index 3e37bd9..0b78de2 100644 --- a/VDSSample/ViewControllers/BadgeViewController.swift +++ b/VDSSample/ViewControllers/BadgeViewController.swift @@ -115,6 +115,6 @@ extension BadgeViewController: ComponentSampleable { component.text = "Terms and conditions" component.maxWidth = 70 component.numberOfLines = 3 - return ComponentSample(component: component, trailingPinningType: .lessThanOrEqual) + return ComponentSample(component: component, model: .init(layoutType: .topLeft, priorities: [.bottom: .defaultLow])) } } diff --git a/VDSSample/ViewControllers/ButtonIconViewController.swift b/VDSSample/ViewControllers/ButtonIconViewController.swift index e055285..99475ad 100644 --- a/VDSSample/ViewControllers/ButtonIconViewController.swift +++ b/VDSSample/ViewControllers/ButtonIconViewController.swift @@ -175,6 +175,6 @@ extension ButtonIconViewController: ComponentSampleable { let component = Self.makeComponent() component.iconName = .addToFavorite component.size = .large - return ComponentSample(component: component, trailingPinningType: .lessThanOrEqual) + return ComponentSample(component: component, model: .init(layoutType: .left, priorities: [.bottom: .defaultLow])) } } diff --git a/VDSSample/ViewControllers/ButtonViewController.swift b/VDSSample/ViewControllers/ButtonViewController.swift index d43f9ec..e8f03c6 100644 --- a/VDSSample/ViewControllers/ButtonViewController.swift +++ b/VDSSample/ViewControllers/ButtonViewController.swift @@ -106,6 +106,6 @@ extension ButtonViewController: ComponentSampleable { component.onClick = { c in print("\(c.text!) Click")} component.use = .primary component.size = .large - return ComponentSample(component: component, trailingPinningType: .lessThanOrEqual) + return ComponentSample(component: component, model: .init(layoutType: .left, priorities: [.bottom: .defaultLow])) } } diff --git a/VDSSample/ViewControllers/CheckBoxGroupViewController.swift b/VDSSample/ViewControllers/CheckBoxGroupViewController.swift index 4a95d7c..7e2fea2 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, model: .init(layoutType: .topLeft, priorities: [.bottom: .defaultLow])) } } diff --git a/VDSSample/ViewControllers/CheckboxItemViewController.swift b/VDSSample/ViewControllers/CheckboxItemViewController.swift index a25c6f3..48e8993 100644 --- a/VDSSample/ViewControllers/CheckboxItemViewController.swift +++ b/VDSSample/ViewControllers/CheckboxItemViewController.swift @@ -101,6 +101,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, model: .init(layoutType: .topLeft, priorities: [.bottom: .defaultLow])) } } diff --git a/VDSSample/ViewControllers/CheckboxViewController.swift b/VDSSample/ViewControllers/CheckboxViewController.swift index f11f4c1..befd698 100644 --- a/VDSSample/ViewControllers/CheckboxViewController.swift +++ b/VDSSample/ViewControllers/CheckboxViewController.swift @@ -65,6 +65,6 @@ class CheckboxViewController: BaseViewController { extension CheckboxViewController: ComponentSampleable { static func makeSample() -> ComponentSample { let component = Self.makeComponent() - return ComponentSample(component: component, trailingPinningType: .lessThanOrEqual) + return ComponentSample(component: component, model: .init(layoutType: .topLeft, priorities: [.bottom: .defaultLow])) } } diff --git a/VDSSample/ViewControllers/IconViewController.swift b/VDSSample/ViewControllers/IconViewController.swift index 692663c..4591188 100644 --- a/VDSSample/ViewControllers/IconViewController.swift +++ b/VDSSample/ViewControllers/IconViewController.swift @@ -96,6 +96,6 @@ extension IconViewController: ComponentSampleable { component.color = color.uiColor component.name = name component.customSize = 50 - return ComponentSample(component: component, trailingPinningType: .lessThanOrEqual, bottomPinningType: .lessThanOrEqual) + return ComponentSample(component: component, model: .init(layoutType: .topLeft, priorities: [.bottom: .defaultLow])) } } diff --git a/VDSSample/ViewControllers/InputFieldViewController.swift b/VDSSample/ViewControllers/InputFieldViewController.swift index c935829..b49aa98 100644 --- a/VDSSample/ViewControllers/InputFieldViewController.swift +++ b/VDSSample/ViewControllers/InputFieldViewController.swift @@ -179,6 +179,6 @@ extension InputFieldViewController: ComponentSampleable { component.successText = "Good job entering a valid address!" component.tooltipTitle = "Check the formatting of your address" component.tooltipContent = "House/Building number then street name" - return ComponentSample(component: component, trailingPinningType: .lessThanOrEqual) + return ComponentSample(component: component, model: .init(layoutType: .topLeft, priorities: [.bottom: .defaultLow])) } } diff --git a/VDSSample/ViewControllers/RadioBoxGroupViewController.swift b/VDSSample/ViewControllers/RadioBoxGroupViewController.swift index 73297f5..af906b1 100644 --- a/VDSSample/ViewControllers/RadioBoxGroupViewController.swift +++ b/VDSSample/ViewControllers/RadioBoxGroupViewController.swift @@ -131,6 +131,6 @@ extension RadioBoxGroupViewController: ComponentSampleable { component.selectorModels = [radioBox1, radioBox2] - return ComponentSample(component: component, trailingPinningType: .lessThanOrEqual) + return ComponentSample(component: component, model: .init(layoutType: .topLeft, priorities: [.bottom: .defaultLow])) } } diff --git a/VDSSample/ViewControllers/RadioButtonGroupViewController.swift b/VDSSample/ViewControllers/RadioButtonGroupViewController.swift index ac2850e..3466e23 100644 --- a/VDSSample/ViewControllers/RadioButtonGroupViewController.swift +++ b/VDSSample/ViewControllers/RadioButtonGroupViewController.swift @@ -133,6 +133,6 @@ extension RadioButtonGroupViewController: ComponentSampleable { component.selectorModels = [radioButton1, radioButton2, radioButton3] - return ComponentSample(component: component, trailingPinningType: .lessThanOrEqual) + return ComponentSample(component: component, model: .init(layoutType: .topLeft, priorities: [.bottom: .defaultLow])) } } diff --git a/VDSSample/ViewControllers/RadioButtonItemViewController.swift b/VDSSample/ViewControllers/RadioButtonItemViewController.swift index e7620fd..4f3e887 100644 --- a/VDSSample/ViewControllers/RadioButtonItemViewController.swift +++ b/VDSSample/ViewControllers/RadioButtonItemViewController.swift @@ -105,6 +105,6 @@ extension RadioButtonItemViewController: 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, model: .init(layoutType: .topLeft, priorities: [.bottom: .defaultLow])) } } diff --git a/VDSSample/ViewControllers/RadioButtonViewController.swift b/VDSSample/ViewControllers/RadioButtonViewController.swift index 55aa4ae..0f995bd 100644 --- a/VDSSample/ViewControllers/RadioButtonViewController.swift +++ b/VDSSample/ViewControllers/RadioButtonViewController.swift @@ -69,6 +69,6 @@ class RadioButtonViewController: BaseViewController { extension RadioButtonViewController: ComponentSampleable { static func makeSample() -> ComponentSample { let component = Self.makeComponent() - return ComponentSample(component: component, trailingPinningType: .lessThanOrEqual) + return ComponentSample(component: component, model: .init(layoutType: .topLeft, priorities: [.bottom: .defaultLow])) } } diff --git a/VDSSample/ViewControllers/TableViewTestController.swift b/VDSSample/ViewControllers/TableViewTestController.swift index 8b5fb8d..0042e1e 100644 --- a/VDSSample/ViewControllers/TableViewTestController.swift +++ b/VDSSample/ViewControllers/TableViewTestController.swift @@ -11,78 +11,18 @@ import VDSColorTokens public typealias ComponentSampleView = UIView & Surfaceable -public struct ComponentSample { +public class ComponentSample { public var component: ComponentSampleView - public enum GreaterThanPinningType: String { - case none, equalTo, greaterThanOrEqual - } - - public enum LessThanPinningType: String { - case none, equalTo, lessThanOrEqual - } - - public var top: GreaterThanPinningType = .equalTo - public var leading: GreaterThanPinningType = .equalTo - public var trailing: LessThanPinningType = .equalTo - public var bottom: LessThanPinningType = .equalTo + public var model: LayoutAnchorModel public init(component: ComponentSampleView, - topPinningType: GreaterThanPinningType = .equalTo, - leadingPinningType: GreaterThanPinningType = .equalTo, - trailingPinningType: LessThanPinningType = .equalTo, - bottomPinningType: LessThanPinningType = .equalTo) { - + model: LayoutAnchorModel = .init()) { + self.model = model self.component = component - self.top = topPinningType - self.leading = leadingPinningType - self.trailing = trailingPinningType - self.bottom = bottomPinningType } - public func pin(edgeInset: UIEdgeInsets = .zero) { - - guard let superview = component.superview else { return } - switch top { - case .equalTo: - component.pinTop(anchor: superview.topAnchor, constant: edgeInset.top) - - case .greaterThanOrEqual: - component.pinTopGreaterThanOrEqualTo(anchor: superview.topAnchor, constant: edgeInset.top) - - case .none: break - } - - switch leading { - case .equalTo: - component.pinLeading(anchor: superview.leadingAnchor, constant: edgeInset.left) - - case .greaterThanOrEqual: - component.pinLeadingGreaterThanOrEqualTo(anchor: superview.leadingAnchor, constant: edgeInset.left) - - case .none: break - - } - - switch trailing { - case .equalTo: - component.pinTrailing(anchor: superview.trailingAnchor, constant: edgeInset.right) - - case .lessThanOrEqual: - component.pinTrailingLessThanOrEqualTo(anchor: superview.trailingAnchor, constant: edgeInset.right) - - case .none: break - } - - switch bottom { - case .equalTo: - component.pinBottom(anchor: superview.bottomAnchor, constant: edgeInset.bottom) - - case .lessThanOrEqual: - component.pinBottomLessThanOrEqualTo(anchor: superview.bottomAnchor, constant: edgeInset.bottom) - - case .none: break - } - + public func pin(){ + component.pinToSuperview(with: model) } } @@ -126,10 +66,17 @@ public class TableViewTestController: UIViewController, Initable, Surfaceable { } } - let toggleSample = ComponentSample(component: toggle, leadingPinningType: .none) + let model = ContainerManager.ContainerModel(horizontal: .init(alignment: .trailing, + leading: .init(), + trailing: .init(padding: 16)), + vertical: .init(alignment: .fill, + top: .init(padding: 5), + bottom: .init(padding: 5))) + + let toggleSample = ComponentSample(component: toggle, model: .init(layoutType: .right, insets: .init(top: 5, left: 0, bottom: 5, right: 16), priorities: [.bottom: .defaultLow])) let wrapper = UIView().with { $0.translatesAutoresizingMaskIntoConstraints = false } wrapper.addSubview(toggle) - toggleSample.pin(edgeInset: .init(top: 5, left: 0, bottom: 5, right: 16)) + toggleSample.pin() let stackView = UIStackView(arrangedSubviews: [wrapper, tableView]).with { $0.translatesAutoresizingMaskIntoConstraints = false @@ -140,13 +87,8 @@ public class TableViewTestController: UIViewController, Initable, Surfaceable { view.backgroundColor = Surface.light.color view.addSubview(stackView) - NSLayoutConstraint.activate([ - stackView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor), - stackView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor), - stackView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor), - stackView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor) - ]) - + stackView.pin(to: view.safeAreaLayoutGuide, with: .fill) + items.forEach { menuItem in if let componentable = menuItem.viewController as? ComponentSampleable.Type { components.append(componentable.makeSample()) @@ -212,10 +154,16 @@ extension TableViewTestController : UITableViewDelegate, UITableViewDataSource { let sample = components[indexPath.row] var component = sample.component component.surface = surface - + let insets = UIEdgeInsets(top: 16, left: 16, bottom: 16, right: 16) let cell = UITableViewCell() cell.contentView.addSubview(component) - sample.pin(edgeInset: .init(top: 16, left: 16, bottom: 16, right: 16)) + component.pinToSuperview(with: sample.model.layoutType, edgeInsets: insets, priorities: sample.model.priorities) +// if let model = sample.model, let horizontal = model.horizontalAlignment, let vertical = model.verticalAlignment { +// sample.model = ContainerManager.model(for: horizontal.alignment, vertical: vertical.alignment, inset: .init(top: 16, left: 16, bottom: 16, right: 16)) +// sample.pin() +// } else { +// component.pinToSuperView() +// } cell.backgroundColor = surface.color cell.layoutIfNeeded() return cell diff --git a/VDSSample/ViewControllers/TextAreaViewController.swift b/VDSSample/ViewControllers/TextAreaViewController.swift index a532633..fd1b42b 100644 --- a/VDSSample/ViewControllers/TextAreaViewController.swift +++ b/VDSSample/ViewControllers/TextAreaViewController.swift @@ -148,6 +148,6 @@ extension TextAreaViewController: ComponentSampleable { component.errorText = "Enter a valid address." component.tooltipTitle = "Check the formatting of your address" component.tooltipContent = "House/Building number then street name" - return ComponentSample(component: component, trailingPinningType: .lessThanOrEqual) + return ComponentSample(component: component, model: .init(layoutType: .topLeft, priorities: [.bottom: .defaultLow])) } } diff --git a/VDSSample/ViewControllers/TextLinkCaretViewController.swift b/VDSSample/ViewControllers/TextLinkCaretViewController.swift index 2e54406..5bf1268 100644 --- a/VDSSample/ViewControllers/TextLinkCaretViewController.swift +++ b/VDSSample/ViewControllers/TextLinkCaretViewController.swift @@ -78,6 +78,6 @@ extension TextLinkCaretViewController: ComponentSampleable { let component = Self.makeComponent() component.text = "Text Link Caret" component.onClick = { c in print("\(c.text!) Click")} - return ComponentSample(component: component, trailingPinningType: .lessThanOrEqual) + return ComponentSample(component: component, model: .init(layoutType: .topLeft, priorities: [.bottom: .defaultLow])) } } diff --git a/VDSSample/ViewControllers/TextLinkViewController.swift b/VDSSample/ViewControllers/TextLinkViewController.swift index c20f09f..5e6b7d9 100644 --- a/VDSSample/ViewControllers/TextLinkViewController.swift +++ b/VDSSample/ViewControllers/TextLinkViewController.swift @@ -80,6 +80,6 @@ extension TextLinkViewController: ComponentSampleable { let component = Self.makeComponent() component.text = "Text Link" component.onClick = { c in print("\(c.text!) Click")} - return ComponentSample(component: component, trailingPinningType: .lessThanOrEqual) + return ComponentSample(component: component, model: .init(layoutType: .topLeft, priorities: [.bottom: .defaultLow])) } } diff --git a/VDSSample/ViewControllers/TileContainerViewController.swift b/VDSSample/ViewControllers/TileContainerViewController.swift index ec374ad..dbd6090 100644 --- a/VDSSample/ViewControllers/TileContainerViewController.swift +++ b/VDSSample/ViewControllers/TileContainerViewController.swift @@ -153,6 +153,6 @@ extension TileContainerViewController: ComponentSampleable { let component = Self.makeComponent() component.width = 150 component.color = .black - return ComponentSample(component: component, trailingPinningType: .lessThanOrEqual) + return ComponentSample(component: component, model: .init(layoutType: .topLeft, priorities: [.bottom: .defaultLow])) } } diff --git a/VDSSample/ViewControllers/TileletViewController.swift b/VDSSample/ViewControllers/TileletViewController.swift index cf70cf0..6fbada0 100644 --- a/VDSSample/ViewControllers/TileletViewController.swift +++ b/VDSSample/ViewControllers/TileletViewController.swift @@ -240,6 +240,6 @@ extension TileletViewController: ComponentSampleable { component.titleModel = titleModel component.subTitleModel = subTitleModel component.width = 250 - return ComponentSample(component: component, trailingPinningType: .lessThanOrEqual) + return ComponentSample(component: component, model: .init(layoutType: .topLeft, priorities: [.bottom: .defaultLow])) } } diff --git a/VDSSample/ViewControllers/ToggleViewController.swift b/VDSSample/ViewControllers/ToggleViewController.swift index 4f0b8e3..ce54b90 100644 --- a/VDSSample/ViewControllers/ToggleViewController.swift +++ b/VDSSample/ViewControllers/ToggleViewController.swift @@ -121,6 +121,6 @@ extension ToggleViewController: ComponentSampleable { let component = Self.makeComponent() component.showText = true component.textPosition = .right - return ComponentSample(component: component) + return ComponentSample(component: component, model: .init(layoutType: .topLeft, priorities: [.bottom: .defaultLow])) } } diff --git a/VDSSample/ViewControllers/TooltipViewController.swift b/VDSSample/ViewControllers/TooltipViewController.swift index c03a9cf..63e7069 100644 --- a/VDSSample/ViewControllers/TooltipViewController.swift +++ b/VDSSample/ViewControllers/TooltipViewController.swift @@ -106,7 +106,7 @@ extension TooltipViewController: ComponentSampleable { let component = Self.makeComponent() component.title = "5G Ultra Wideband is available in your area." component.content = "$799.99 (128 GB only) " - return ComponentSample(component: component, trailingPinningType: .lessThanOrEqual, bottomPinningType: .lessThanOrEqual) + return ComponentSample(component: component, model: .init(layoutType: .topLeft, priorities: [.bottom: .defaultLow])) } } diff --git a/VDSSample/ViewControllers/TrailingTooltipLabelViewController.swift b/VDSSample/ViewControllers/TrailingTooltipLabelViewController.swift index 511c099..dc3eda0 100644 --- a/VDSSample/ViewControllers/TrailingTooltipLabelViewController.swift +++ b/VDSSample/ViewControllers/TrailingTooltipLabelViewController.swift @@ -174,7 +174,7 @@ extension TrailingTooltipLabelViewController: ComponentSampleable { component.labelText = "5G Ultra Wideband is available in your area" component.tooltipTitle = "5G Ultra Wideband is available in your area." component.tooltipContent = "$799.99 (128 GB only)" - return ComponentSample(component: component, trailingPinningType: .lessThanOrEqual) + return ComponentSample(component: component, model: .init(layoutType: .topLeft, priorities: [.bottom: .defaultLow])) } }