diff --git a/JSONCreator_iOS/JSONCreator/VDSToggleVM.swift b/JSONCreator_iOS/JSONCreator/VDSToggleVM.swift index 12e4ee7..8396c0b 100644 --- a/JSONCreator_iOS/JSONCreator/VDSToggleVM.swift +++ b/JSONCreator_iOS/JSONCreator/VDSToggleVM.swift @@ -41,8 +41,8 @@ public protocol ViewModelHandler: AnyObject, Initable { var subscribers: Set { get set } init(with model: ModelType) func set(with model: ModelType) - func shouldUpdateView(viewModel: ModelType) -> Bool - func updateView(viewModel: ModelType) + func shouldUpdateView(model: ModelType) -> Bool + func updateView(model: ModelType) } extension ViewModelHandler { @@ -52,20 +52,20 @@ extension ViewModelHandler { } public func set(with model: ModelType) { - if shouldUpdateView(viewModel: model){ + if shouldUpdateView(model: model){ viewModel.set(with: model) } } - public func shouldUpdateView(viewModel: ModelType) -> Bool { - self.viewModel.model != viewModel + public func shouldUpdateView(model: ModelType) -> Bool { + self.viewModel.model != model } public func setupUpdateView() { handlerPublisher() .subscribe(on: RunLoop.main) - .sink { [weak self] viewModel in - self?.updateView(viewModel: viewModel) + .sink { [weak self] model in + self?.updateView(model: model) } .store(in: &subscribers) } @@ -201,7 +201,7 @@ open class ControlViewModelHandler: UIControl, ViewMod //-------------------------------------------------- // MARK: - Overrides //-------------------------------------------------- - open func updateView(viewModel: ModelType) { + open func updateView(model: ModelType) { fatalError("Implement updateView") } @@ -364,28 +364,28 @@ open class ToggleViewModelHandlerBase: ControlVi //-------------------------------------------------- // MARK: - Toggle //-------------------------------------------------- - private func updateToggle(_ viewModel: ModelType) { + private func updateToggle(_ model: ModelType) { //private func func constrainKnob(){ - self.knobLeadingConstraint?.isActive = false - self.knobTrailingConstraint?.isActive = false - if viewModel.on { - self.knobTrailingConstraint = self.toggleView.trailingAnchor.constraint(equalTo: self.knobView.trailingAnchor, constant: 2) - self.knobLeadingConstraint = self.knobView.leadingAnchor.constraint(greaterThanOrEqualTo: self.toggleView.leadingAnchor) + knobLeadingConstraint?.isActive = false + knobTrailingConstraint?.isActive = false + if model.on { + knobTrailingConstraint = toggleView.trailingAnchor.constraint(equalTo: knobView.trailingAnchor, constant: 2) + knobLeadingConstraint = knobView.leadingAnchor.constraint(greaterThanOrEqualTo: toggleView.leadingAnchor) } else { - self.knobTrailingConstraint = self.toggleView.trailingAnchor.constraint(greaterThanOrEqualTo: self.knobView.trailingAnchor) - self.knobLeadingConstraint = self.knobView.leadingAnchor.constraint(equalTo: self.toggleView.leadingAnchor, constant: 2) + knobTrailingConstraint = toggleView.trailingAnchor.constraint(greaterThanOrEqualTo: knobView.trailingAnchor) + knobLeadingConstraint = knobView.leadingAnchor.constraint(equalTo: toggleView.leadingAnchor, constant: 2) } - self.knobTrailingConstraint?.isActive = true - self.knobLeadingConstraint?.isActive = true - self.knobWidthConstraint?.constant = self.knobSize.width - self.layoutIfNeeded() + knobTrailingConstraint?.isActive = true + knobLeadingConstraint?.isActive = true + knobWidthConstraint?.constant = knobSize.width + layoutIfNeeded() } - let toggleColor = toggleColorConfiguration.getColor(viewModel) - let knobColor = knobColorConfiguration.getColor(viewModel) + let toggleColor = toggleColorConfiguration.getColor(model) + let knobColor = knobColorConfiguration.getColor(model) - if viewModel.disabled { + if model.disabled { toggleView.backgroundColor = toggleColor knobView.backgroundColor = knobColor constrainKnob() @@ -404,10 +404,10 @@ open class ToggleViewModelHandlerBase: ControlVi //-------------------------------------------------- // MARK: - Labels //-------------------------------------------------- - private func updateLabel(_ viewModel: ModelType) { - let showText = viewModel.showText + private func updateLabel(_ model: ModelType) { + let showText = model.showText stackView.spacing = showText ? 12 : 0 - label.set(with: viewModel.labelModel) + label.set(with: model.labelModel) if stackView.subviews.contains(label) { label.removeFromSuperview() @@ -475,7 +475,7 @@ open class ToggleViewModelHandlerBase: ControlVi stackView.addArrangedSubview(toggleContainerView) stackView.topAnchor.constraint(equalTo: topAnchor).isActive = true stackView.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true - stackView.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true + stackView.widthAnchor.constraint(greaterThanOrEqualToConstant: toggleContainerSize.width).isActive = true stackView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true toggleView.centerXAnchor.constraint(equalTo: toggleContainerView.centerXAnchor).isActive = true @@ -498,38 +498,11 @@ open class ToggleViewModelHandlerBase: ControlVi //-------------------------------------------------- // MARK: - State //-------------------------------------------------- - open override func updateView(viewModel: ModelType) { - updateLabel(viewModel) - updateToggle(viewModel) - backgroundColor = viewModel.surface.color + open override func updateView(model: ModelType) { + updateLabel(model) + updateToggle(model) + backgroundColor = model.surface.color setNeedsLayout() layoutIfNeeded() } - - public func set(with model: ModelType) { - if shouldUpdateView(viewModel: model){ - viewModel.set(with: model) - } - } - - public func shouldUpdateView(viewModel: ModelType) -> Bool { - self.viewModel.model != viewModel - } - - public func setupUpdateView() { - handlerPublisher() - .subscribe(on: RunLoop.main) - .sink { [weak self] viewModel in - self?.updateView(viewModel: viewModel) - } - .store(in: &subscribers) - } - - public func handlerPublisher() -> AnyPublisher { - viewModel - .publisher - .debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main) - .eraseToAnyPublisher() - } - }