113 lines
4.0 KiB
Swift
113 lines
4.0 KiB
Swift
//
|
|
// TestToggleModel.swift
|
|
// JSONCreator
|
|
//
|
|
// Created by Matt Bruce on 7/27/22.
|
|
// Copyright © 2022 Verizon Wireless. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
import MVMCore
|
|
import MVMCoreUI
|
|
import VDS
|
|
|
|
|
|
/// Stripped all UI properties since this is coming from the VDS Toggle itself
|
|
public class TestToggleModel: MoleculeModelProtocol, FormFieldProtocol {
|
|
//--------------------------------------------------
|
|
// MARK: - Properties
|
|
//--------------------------------------------------
|
|
|
|
public static var identifier: String = "testToggle1"
|
|
public var backgroundColor: Color? //not used
|
|
|
|
public var selected: Bool = false
|
|
public var enabled: Bool = true
|
|
public var readOnly: Bool = false
|
|
public var action: ActionModelProtocol?
|
|
public var alternateAction: ActionModelProtocol?
|
|
public var accessibilityText: String?
|
|
public var fieldKey: String?
|
|
public var groupName: String = FormValidator.defaultGroupName
|
|
public var baseValue: AnyHashable?
|
|
|
|
//--------------------------------------------------
|
|
// MARK: - Keys
|
|
//--------------------------------------------------
|
|
|
|
private enum CodingKeys: String, CodingKey {
|
|
case moleculeName
|
|
case state
|
|
case enabled
|
|
case readOnly
|
|
case action
|
|
case accessibilityIdentifier
|
|
case alternateAction
|
|
case accessibilityText
|
|
case fieldKey
|
|
case groupName
|
|
}
|
|
|
|
//--------------------------------------------------
|
|
// MARK: - Form Valdiation
|
|
//--------------------------------------------------
|
|
|
|
public func formFieldValue() -> AnyHashable? {
|
|
guard enabled else { return nil }
|
|
return selected
|
|
}
|
|
|
|
//--------------------------------------------------
|
|
// MARK: - Server Value
|
|
//--------------------------------------------------
|
|
open func formFieldServerValue() -> AnyHashable? {
|
|
return formFieldValue()
|
|
}
|
|
|
|
//--------------------------------------------------
|
|
// MARK: - Initializer
|
|
//--------------------------------------------------
|
|
|
|
public init(_ state: Bool) {
|
|
selected = state
|
|
baseValue = state
|
|
}
|
|
|
|
//--------------------------------------------------
|
|
// MARK: - Codec
|
|
//--------------------------------------------------
|
|
|
|
required public init(from decoder: Decoder) throws {
|
|
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
|
|
|
|
if let state = try typeContainer.decodeIfPresent(Bool.self, forKey: .state) {
|
|
selected = state
|
|
}
|
|
action = try typeContainer.decodeModelIfPresent(codingKey: .action)
|
|
alternateAction = try typeContainer.decodeModelIfPresent(codingKey: .alternateAction)
|
|
accessibilityText = try typeContainer.decodeIfPresent(String.self, forKey: .accessibilityText)
|
|
baseValue = selected
|
|
fieldKey = try typeContainer.decodeIfPresent(String.self, forKey: .fieldKey)
|
|
if let gName = try typeContainer.decodeIfPresent(String.self, forKey: .groupName) {
|
|
groupName = gName
|
|
}
|
|
enabled = try typeContainer.decodeIfPresent(Bool.self, forKey: .enabled) ?? true
|
|
readOnly = try typeContainer.decodeIfPresent(Bool.self, forKey: .readOnly) ?? false
|
|
|
|
|
|
}
|
|
|
|
public func encode(to encoder: Encoder) throws {
|
|
var container = encoder.container(keyedBy: CodingKeys.self)
|
|
try container.encodeIfPresent(accessibilityIdentifier, forKey: .accessibilityIdentifier)
|
|
try container.encodeModelIfPresent(action, forKey: .action)
|
|
try container.encodeModelIfPresent(alternateAction, forKey: .alternateAction)
|
|
try container.encode(moleculeName, forKey: .moleculeName)
|
|
try container.encode(selected, forKey: .state)
|
|
try container.encode(enabled, forKey: .enabled)
|
|
try container.encodeIfPresent(fieldKey, forKey: .fieldKey)
|
|
try container.encodeIfPresent(groupName, forKey: .groupName)
|
|
try container.encode(readOnly, forKey: .readOnly)
|
|
}
|
|
}
|