From ab5d88b4d80d07a430c5e17622b29a0db85f87d3 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Thu, 15 Jun 2023 18:59:04 -0500 Subject: [PATCH] added badge indicator Signed-off-by: Matt Bruce --- VDSSample.xcodeproj/project.pbxproj | 4 + .../BadgeIndicatorViewController.swift | 143 ++++++++++++++++++ .../ViewControllers/MenuViewController.swift | 1 + 3 files changed, 148 insertions(+) create mode 100644 VDSSample/ViewControllers/BadgeIndicatorViewController.swift diff --git a/VDSSample.xcodeproj/project.pbxproj b/VDSSample.xcodeproj/project.pbxproj index c036941..2f219dd 100644 --- a/VDSSample.xcodeproj/project.pbxproj +++ b/VDSSample.xcodeproj/project.pbxproj @@ -79,6 +79,7 @@ EAC9258029119FC400091998 /* TextLinkViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAC9257F29119FC400091998 /* TextLinkViewController.swift */; }; EAD062A32A3913920015965D /* DropShawdowViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD062A22A3913920015965D /* DropShawdowViewController.swift */; }; EAD062A52A3B5CDF0015965D /* Slider.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD062A42A3B5CDF0015965D /* Slider.swift */; }; + EAD062AD2A3B86950015965D /* BadgeIndicatorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD062AC2A3B86950015965D /* BadgeIndicatorViewController.swift */; }; EAF7F07D2899698800B287F5 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EAF7F07B2899698800B287F5 /* Assets.xcassets */; }; EAF7F09C2899B92400B287F5 /* CheckboxViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F09B2899B92400B287F5 /* CheckboxViewController.swift */; }; EAF7F0CA289DA24F00B287F5 /* ArtifactoryItems.txt in Resources */ = {isa = PBXBuildFile; fileRef = EAF7F0C5289DA24F00B287F5 /* ArtifactoryItems.txt */; }; @@ -170,6 +171,7 @@ EAC9257F29119FC400091998 /* TextLinkViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextLinkViewController.swift; sourceTree = ""; }; EAD062A22A3913920015965D /* DropShawdowViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DropShawdowViewController.swift; sourceTree = ""; }; EAD062A42A3B5CDF0015965D /* Slider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Slider.swift; sourceTree = ""; }; + EAD062AC2A3B86950015965D /* BadgeIndicatorViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BadgeIndicatorViewController.swift; sourceTree = ""; }; EAF7F07B2899698800B287F5 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; EAF7F09B2899B92400B287F5 /* CheckboxViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckboxViewController.swift; sourceTree = ""; }; EAF7F0C5289DA24F00B287F5 /* ArtifactoryItems.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ArtifactoryItems.txt; sourceTree = ""; }; @@ -300,6 +302,7 @@ EAD062A22A3913920015965D /* DropShawdowViewController.swift */, EAB1D2C828AAAA1D00DAE764 /* BaseViewController.swift */, EA4DB30328DCD25B00103EE3 /* BadgeViewController.swift */, + EAD062AC2A3B86950015965D /* BadgeIndicatorViewController.swift */, EA81410D2A0ED8DC004F60D2 /* ButtonIconViewController.swift */, EAB5FEEE2927E28400998C17 /* ButtonGroupViewController.swift */, 5FC35BE828D5235A004EBEAC /* ButtonViewController.swift */, @@ -489,6 +492,7 @@ EA3C3BB428996775000CA526 /* PickerBase.swift in Sources */, EAB2376C29E9E74900AABE9A /* TrailingTooltipLabel.swift in Sources */, EAB1D2C928AAAA1D00DAE764 /* BaseViewController.swift in Sources */, + EAD062AD2A3B86950015965D /* BadgeIndicatorViewController.swift in Sources */, EA5E305C295111050082B959 /* TileletViewController.swift in Sources */, EAD062A32A3913920015965D /* DropShawdowViewController.swift in Sources */, EAB5FEF32928153D00998C17 /* Helper.swift in Sources */, diff --git a/VDSSample/ViewControllers/BadgeIndicatorViewController.swift b/VDSSample/ViewControllers/BadgeIndicatorViewController.swift new file mode 100644 index 0000000..dc64c9c --- /dev/null +++ b/VDSSample/ViewControllers/BadgeIndicatorViewController.swift @@ -0,0 +1,143 @@ +// +// BadgeIndicatorViewController.swift +// VDSSample +// +// Created by Matt Bruce on 6/15/23. +// + +import Foundation +import UIKit +import VDS +import VDSColorTokens +import Combine + +class BadgeIndicatorViewController: BaseViewController { + + lazy var fillColorPickerSelectorView = { + PickerSelectorView(title: "red", + picker: self.picker, + items: BadgeIndicator.FillColor.allCases) + }() + + lazy var kindPickerSelectorView = { + PickerSelectorView(title: "red", + picker: self.picker, + items: BadgeIndicator.Kind.allCases) + }() + + lazy var textSizePickerSelectorView = { + PickerSelectorView(title: "", + picker: self.picker, + items: BadgeIndicator.TextSize.allCases) + }() + + lazy var maxDigitsPickerSelectorView = { + PickerSelectorView(title: "", + picker: self.picker, + items: BadgeIndicator.MaxDigits.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) + }() + + + var textField = TextField() + var hideDotSwitch = UISwitch() + override func allTextFields() -> [TextField]? { [textField] } + + override func viewDidLoad() { + super.viewDidLoad() + addContentTopView(view: .makeWrapper(for: component)) + setupPicker() + setupModel() + } + + var numberedForm = FormSection() + var hideDotRow: UIView? + override func setupForm(){ + super.setupForm() + addFormRow(label: "Kind", view: kindPickerSelectorView) + hideDotRow = addFormRow(label: "Hide Dot", view: hideDotSwitch) + + addFormRow(label: "Fill Color", view: fillColorPickerSelectorView) + addFormRow(label: "Surface", view: surfacePickerSelectorView) + addFormRow(label: "Border Light", view: borderColorLightPickerSelectorView) + addFormRow(label: "Border Dark", view: borderColorDarkPickerSelectorView) + addFormRow(label: "Size", view: textSizePickerSelectorView) + + numberedForm.addFormRow(label: "Text", view: textField) + numberedForm.addFormRow(label: "Max Digits", view: maxDigitsPickerSelectorView) + append(section: numberedForm) + numberedForm.isHidden = true + + hideDotSwitch.publisher(for: .valueChanged).sink { [weak self] control in + self?.component.hideDot = control.isOn + }.store(in: &subscribers) + + textField + .textPublisher + .sink { [weak self] text in + if let n = NumberFormatter().number(from: text) { + self?.component.number = n.intValue + } + }.store(in: &subscribers) + } + + func setupModel() { + component.fillColor = .red + component.number = 1 + + //setup UI + surfacePickerSelectorView.text = component.surface.rawValue + kindPickerSelectorView.text = component.kind.rawValue + fillColorPickerSelectorView.text = component.fillColor.rawValue + textSizePickerSelectorView.text = component.textSize.rawValue + maxDigitsPickerSelectorView.text = component.maxDigits.rawValue + borderColorDarkPickerSelectorView.text = component.borderColorDark?.toVDSColor()?.rawValue ?? "" + borderColorLightPickerSelectorView.text = component.borderColorLight?.toVDSColor()?.rawValue ?? "" + textField.text = "\(component.number!)" + } + + func setupPicker(){ + + surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.surface = item + self?.contentTopView.backgroundColor = item.color + } + + kindPickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.kind = item + self?.numberedForm.isHidden = item != .numbered + self?.hideDotRow?.isHidden = item == .numbered + } + + fillColorPickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.fillColor = item + } + + textSizePickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.textSize = item + } + + maxDigitsPickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.maxDigits = item + } + + borderColorDarkPickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.borderColorDark = item.uiColor + } + + borderColorLightPickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.borderColorLight = item.uiColor + } + } +} diff --git a/VDSSample/ViewControllers/MenuViewController.swift b/VDSSample/ViewControllers/MenuViewController.swift index 4b3554d..47f2e43 100644 --- a/VDSSample/ViewControllers/MenuViewController.swift +++ b/VDSSample/ViewControllers/MenuViewController.swift @@ -79,6 +79,7 @@ class MenuViewController: UITableViewController, TooltipLaunchable { let items: [MenuComponent] = [ MenuComponent(title: "DropShadow Tester", completed: true, viewController: DropShadowViewController.self), MenuComponent(title: "Badge", completed: true, viewController: BadgeViewController.self), + MenuComponent(title: "Badge Indicator", completed: false, 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),