From bc0610b82862eab6812d7f6d105b2e15024f3f38 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Thu, 8 Sep 2022 16:20:51 -0500 Subject: [PATCH] refactored checkboxgroupbase to use subclass and update default implementation Signed-off-by: Matt Bruce --- VDS/Components/Checkbox/CheckboxGroup.swift | 100 ++++++++++++++++---- 1 file changed, 81 insertions(+), 19 deletions(-) diff --git a/VDS/Components/Checkbox/CheckboxGroup.swift b/VDS/Components/Checkbox/CheckboxGroup.swift index b0279404..50e6a5f4 100644 --- a/VDS/Components/Checkbox/CheckboxGroup.swift +++ b/VDS/Components/Checkbox/CheckboxGroup.swift @@ -8,15 +8,26 @@ import Foundation import UIKit -public class CheckboxGroup: CheckboxGroupBase {} +public class CheckboxGroup: CheckboxGroupBase { + public override func didSelect(_ selectedControl: Checkbox) { + for (index, control) in selectorViews.enumerated() { + //only change the old and new + if control == selectedControl { + let updated = model.selectors[index].copyWith { + $0.selected.toggle() + } + model.selectors[index] = updated + } + } + sendActions(for: .valueChanged) + } +} -public class CheckboxGroupBase: Control, SelectorGroupModelHandlerable, Changable where GroupModelType.SelectorModelType == ModelHandlerType.ModelType { +public class CheckboxGroupBase: SelectorGroupHandlerBase where GroupModelType.SelectorModelType == ModelHandlerType.ModelType { //-------------------------------------------------- // MARK: - Public Properties //-------------------------------------------------- - public var selectorViews: [ModelHandlerType] = [] - public var hasError: Bool { get { model.hasError } set { @@ -30,8 +41,6 @@ public class CheckboxGroupBase: Control, SelectorGroupModelHandlerable, Changable where GroupModelType.SelectorModelType == ModelHandlerType.ModelType { + + //-------------------------------------------------- + // MARK: - Public Properties + //-------------------------------------------------- + public var selectorViews: [ModelHandlerType] = [] + + public var onChange: Blocks.ActionBlock? + + //-------------------------------------------------- + // MARK: - Overrides + //-------------------------------------------------- + override public var disabled: Bool { + didSet { + updateSelectors() + } + } + + override public var surface: Surface { + didSet { + updateSelectors() + } + } + + public func findSelectorView(inputId: String?) -> ModelHandlerType? { + return selectorViews.first(where: { existingSelectorView in + return existingSelectorView.model.inputId == inputId + }) + } + + public func updateSelectors(){ + let selectors = model.selectors.compactMap { existing in + return existing.copyWith { + $0.disabled = disabled + $0.surface = surface + } + } + model.selectors = selectors + } + + public func getCachedSelector(viewModel: ModelHandlerType.ModelType) -> ModelHandlerType.ModelType? { + if let index = model.selectors.firstIndex(where: { element in + return element.inputId == viewModel.inputId + }) { + return model.selectors[index] + } else { + return nil + } + } + + public func replace(viewModel: ModelHandlerType.ModelType){ + if let index = model.selectors.firstIndex(where: { element in + return element.inputId == viewModel.inputId + }) { + model.selectors[index] = viewModel + } + } + + public func didSelect(_ selectedControl: ModelHandlerType) { + fatalError("Must override didSelect") + } + +} +