Added Radioswatches and radioswatchitem class files.
This commit is contained in:
parent
c180abf302
commit
63f225398b
@ -173,6 +173,8 @@
|
|||||||
AA11A42123F15D7000D7962F /* ListRightVariablePaymentsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA11A42023F15D7000D7962F /* ListRightVariablePaymentsModel.swift */; };
|
AA11A42123F15D7000D7962F /* ListRightVariablePaymentsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA11A42023F15D7000D7962F /* ListRightVariablePaymentsModel.swift */; };
|
||||||
AAA74A172410C04600080241 /* HeadersH2NoButtonsBodyText.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAA74A162410C04600080241 /* HeadersH2NoButtonsBodyText.swift */; };
|
AAA74A172410C04600080241 /* HeadersH2NoButtonsBodyText.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAA74A162410C04600080241 /* HeadersH2NoButtonsBodyText.swift */; };
|
||||||
AAA74A192410C05800080241 /* HeadersH2NoButtonsBodyTextModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAA74A182410C05800080241 /* HeadersH2NoButtonsBodyTextModel.swift */; };
|
AAA74A192410C05800080241 /* HeadersH2NoButtonsBodyTextModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAA74A182410C05800080241 /* HeadersH2NoButtonsBodyTextModel.swift */; };
|
||||||
|
AAB9C10824346F4B00151545 /* RadioSwatches.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAB9C10724346F4B00151545 /* RadioSwatches.swift */; };
|
||||||
|
AAB9C10A243496DD00151545 /* RadioSwatchItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAB9C109243496DD00151545 /* RadioSwatchItem.swift */; };
|
||||||
AAC6F167243332E400F295C1 /* RadioSwatchesModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAC6F166243332E400F295C1 /* RadioSwatchesModel.swift */; };
|
AAC6F167243332E400F295C1 /* RadioSwatchesModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAC6F166243332E400F295C1 /* RadioSwatchesModel.swift */; };
|
||||||
BB47A586241615EF002BB23C /* ListOneColumnFullWidthTextDividerSubsectionModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB47A585241615EF002BB23C /* ListOneColumnFullWidthTextDividerSubsectionModel.swift */; };
|
BB47A586241615EF002BB23C /* ListOneColumnFullWidthTextDividerSubsectionModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB47A585241615EF002BB23C /* ListOneColumnFullWidthTextDividerSubsectionModel.swift */; };
|
||||||
BB47A588241615FA002BB23C /* ListOneColumnFullWidthTextDividerSubsection.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB47A587241615FA002BB23C /* ListOneColumnFullWidthTextDividerSubsection.swift */; };
|
BB47A588241615FA002BB23C /* ListOneColumnFullWidthTextDividerSubsection.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB47A587241615FA002BB23C /* ListOneColumnFullWidthTextDividerSubsection.swift */; };
|
||||||
@ -557,6 +559,8 @@
|
|||||||
AA11A42023F15D7000D7962F /* ListRightVariablePaymentsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListRightVariablePaymentsModel.swift; sourceTree = "<group>"; };
|
AA11A42023F15D7000D7962F /* ListRightVariablePaymentsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListRightVariablePaymentsModel.swift; sourceTree = "<group>"; };
|
||||||
AAA74A162410C04600080241 /* HeadersH2NoButtonsBodyText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeadersH2NoButtonsBodyText.swift; sourceTree = "<group>"; };
|
AAA74A162410C04600080241 /* HeadersH2NoButtonsBodyText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeadersH2NoButtonsBodyText.swift; sourceTree = "<group>"; };
|
||||||
AAA74A182410C05800080241 /* HeadersH2NoButtonsBodyTextModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeadersH2NoButtonsBodyTextModel.swift; sourceTree = "<group>"; };
|
AAA74A182410C05800080241 /* HeadersH2NoButtonsBodyTextModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeadersH2NoButtonsBodyTextModel.swift; sourceTree = "<group>"; };
|
||||||
|
AAB9C10724346F4B00151545 /* RadioSwatches.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioSwatches.swift; sourceTree = "<group>"; };
|
||||||
|
AAB9C109243496DD00151545 /* RadioSwatchItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioSwatchItem.swift; sourceTree = "<group>"; };
|
||||||
AAC6F166243332E400F295C1 /* RadioSwatchesModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioSwatchesModel.swift; sourceTree = "<group>"; };
|
AAC6F166243332E400F295C1 /* RadioSwatchesModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioSwatchesModel.swift; sourceTree = "<group>"; };
|
||||||
BB47A585241615EF002BB23C /* ListOneColumnFullWidthTextDividerSubsectionModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListOneColumnFullWidthTextDividerSubsectionModel.swift; sourceTree = "<group>"; };
|
BB47A585241615EF002BB23C /* ListOneColumnFullWidthTextDividerSubsectionModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListOneColumnFullWidthTextDividerSubsectionModel.swift; sourceTree = "<group>"; };
|
||||||
BB47A587241615FA002BB23C /* ListOneColumnFullWidthTextDividerSubsection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListOneColumnFullWidthTextDividerSubsection.swift; sourceTree = "<group>"; };
|
BB47A587241615FA002BB23C /* ListOneColumnFullWidthTextDividerSubsection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListOneColumnFullWidthTextDividerSubsection.swift; sourceTree = "<group>"; };
|
||||||
@ -1495,6 +1499,8 @@
|
|||||||
011D95AE2407266E000E3791 /* RadioButtonModel.swift */,
|
011D95AE2407266E000E3791 /* RadioButtonModel.swift */,
|
||||||
01004F2F22721C3800991ECC /* RadioButton.swift */,
|
01004F2F22721C3800991ECC /* RadioButton.swift */,
|
||||||
AAC6F166243332E400F295C1 /* RadioSwatchesModel.swift */,
|
AAC6F166243332E400F295C1 /* RadioSwatchesModel.swift */,
|
||||||
|
AAB9C10724346F4B00151545 /* RadioSwatches.swift */,
|
||||||
|
AAB9C109243496DD00151545 /* RadioSwatchItem.swift */,
|
||||||
);
|
);
|
||||||
path = Buttons;
|
path = Buttons;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -1897,6 +1903,7 @@
|
|||||||
D29770F221F7C6D600B2F0D0 /* TopLabelsAndBottomButtonsTableViewController.m in Sources */,
|
D29770F221F7C6D600B2F0D0 /* TopLabelsAndBottomButtonsTableViewController.m in Sources */,
|
||||||
D29B771022C281F400D6ACE0 /* ModuleMolecule.swift in Sources */,
|
D29B771022C281F400D6ACE0 /* ModuleMolecule.swift in Sources */,
|
||||||
D28A838923CCCFCB00DFE4FC /* LinkModel.swift in Sources */,
|
D28A838923CCCFCB00DFE4FC /* LinkModel.swift in Sources */,
|
||||||
|
AAB9C10824346F4B00151545 /* RadioSwatches.swift in Sources */,
|
||||||
94C2D9A923872E5E0006CF46 /* LabelAttributeImageModel.swift in Sources */,
|
94C2D9A923872E5E0006CF46 /* LabelAttributeImageModel.swift in Sources */,
|
||||||
DBC4391922442197001AB423 /* DashLine.swift in Sources */,
|
DBC4391922442197001AB423 /* DashLine.swift in Sources */,
|
||||||
0A7BAD74232A8DC700FB8E22 /* HeadlineBodyButton.swift in Sources */,
|
0A7BAD74232A8DC700FB8E22 /* HeadlineBodyButton.swift in Sources */,
|
||||||
@ -1938,6 +1945,7 @@
|
|||||||
D2E2A98323D8B32D000B42E6 /* EyebrowHeadlineBodyLinkModel.swift in Sources */,
|
D2E2A98323D8B32D000B42E6 /* EyebrowHeadlineBodyLinkModel.swift in Sources */,
|
||||||
012A88AD238C418100FE3DA1 /* TemplateProtocol.swift in Sources */,
|
012A88AD238C418100FE3DA1 /* TemplateProtocol.swift in Sources */,
|
||||||
BB6C6AC1242232DF005F7224 /* ListOneColumnTextWithWhitespaceDividerTall.swift in Sources */,
|
BB6C6AC1242232DF005F7224 /* ListOneColumnTextWithWhitespaceDividerTall.swift in Sources */,
|
||||||
|
AAB9C10A243496DD00151545 /* RadioSwatchItem.swift in Sources */,
|
||||||
D29DF2B421E7B76D003B2FB9 /* MFLoadingSpinner.m in Sources */,
|
D29DF2B421E7B76D003B2FB9 /* MFLoadingSpinner.m in Sources */,
|
||||||
011D9602240DA20A000E3791 /* ValidProtocol.swift in Sources */,
|
011D9602240DA20A000E3791 /* ValidProtocol.swift in Sources */,
|
||||||
D260106323D0C05000764D80 /* StackItemModel.swift in Sources */,
|
D260106323D0C05000764D80 /* StackItemModel.swift in Sources */,
|
||||||
|
|||||||
106
MVMCoreUI/Atomic/Atoms/Buttons/RadioSwatchItem.swift
Normal file
106
MVMCoreUI/Atomic/Atoms/Buttons/RadioSwatchItem.swift
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
//
|
||||||
|
// RadioSwatchItem.swift
|
||||||
|
// MVMCoreUI
|
||||||
|
//
|
||||||
|
// Created by Lekshmi S on 01/04/20.
|
||||||
|
// Copyright © 2020 Verizon Wireless. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
open class RadioSwatchItem: UICollectionViewCell, MoleculeViewProtocol {
|
||||||
|
public var bottomText = Label.commonLabelB2(true)
|
||||||
|
let circleLayer = CAShapeLayer()
|
||||||
|
let outerCircleLayer = CAShapeLayer()
|
||||||
|
var cellView = MVMCoreUICommonViewsUtility.commonView()
|
||||||
|
var fillColor: Color = Color(uiColor: .mvmBlue)
|
||||||
|
|
||||||
|
open override var isSelected: Bool {
|
||||||
|
didSet {
|
||||||
|
drawCircle()
|
||||||
|
isSelected ? drawOuterCircle() : removeOuterCircle()
|
||||||
|
isSelected ? (bottomText.isHidden = false) : (bottomText.isHidden = true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var isStrikeThrough: Bool = false {
|
||||||
|
didSet {
|
||||||
|
if isStrikeThrough {
|
||||||
|
drawStrikeThrough()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override init(frame: CGRect) {
|
||||||
|
super.init(frame: .zero)
|
||||||
|
setupView()
|
||||||
|
}
|
||||||
|
|
||||||
|
public required init?(coder aDecoder: NSCoder) {
|
||||||
|
super.init(coder: aDecoder)
|
||||||
|
setupView()
|
||||||
|
}
|
||||||
|
|
||||||
|
public func drawCircle() {
|
||||||
|
circleLayer.path = UIBezierPath(ovalIn: CGRect(x: 12, y: 1, width: 30, height: 30)).cgPath
|
||||||
|
circleLayer.fillColor = fillColor.cgColor
|
||||||
|
circleLayer.strokeColor = UIColor.mvmCoolGray6.cgColor
|
||||||
|
cellView.layer.addSublayer(circleLayer)
|
||||||
|
}
|
||||||
|
|
||||||
|
public func drawStrikeThrough() {
|
||||||
|
let startPoint = CGPoint(x: 12, y: 30)
|
||||||
|
let endPoint = CGPoint(x: 42, y: 0)
|
||||||
|
let bezierPath = UIBezierPath()
|
||||||
|
bezierPath.move(to: startPoint)
|
||||||
|
bezierPath.addLine(to: endPoint)
|
||||||
|
let strikeThroughLayer = CAShapeLayer()
|
||||||
|
strikeThroughLayer.path = bezierPath.cgPath
|
||||||
|
strikeThroughLayer.strokeColor = UIColor.mvmBlack.cgColor
|
||||||
|
strikeThroughLayer.lineWidth = 1
|
||||||
|
cellView.layer.addSublayer(strikeThroughLayer)
|
||||||
|
isUserInteractionEnabled = false
|
||||||
|
}
|
||||||
|
|
||||||
|
public func drawOuterCircle() {
|
||||||
|
circleLayer.path = UIBezierPath(ovalIn: CGRect(x: 15, y: 4, width: 24, height: 24)).cgPath
|
||||||
|
outerCircleLayer.path = UIBezierPath(ovalIn: CGRect(x: 12, y: 1, width: 30, height: 30)).cgPath
|
||||||
|
outerCircleLayer.name = "OuterCircle"
|
||||||
|
outerCircleLayer.strokeColor = UIColor.mvmCoolGray6.cgColor
|
||||||
|
outerCircleLayer.fillColor = UIColor.clear.cgColor
|
||||||
|
cellView.layer.addSublayer(outerCircleLayer)
|
||||||
|
}
|
||||||
|
|
||||||
|
public func removeOuterCircle() {
|
||||||
|
circleLayer.path = UIBezierPath(ovalIn: CGRect(x: 12, y: 1, width: 30, height: 30)).cgPath
|
||||||
|
self.cellView.layer.sublayers?.filter({$0.name == "OuterCircle"}).forEach({$0.removeFromSuperlayer()})
|
||||||
|
}
|
||||||
|
|
||||||
|
public func setupView() {
|
||||||
|
guard cellView.superview == nil else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
isAccessibilityElement = false
|
||||||
|
contentView.isAccessibilityElement = false
|
||||||
|
insetsLayoutMarginsFromSafeArea = false
|
||||||
|
contentView.insetsLayoutMarginsFromSafeArea = false
|
||||||
|
contentView.preservesSuperviewLayoutMargins = false
|
||||||
|
contentView.addSubview(cellView)
|
||||||
|
NSLayoutConstraint.constraintPinSubview(toSuperview: cellView)
|
||||||
|
cellView.addSubview(bottomText)
|
||||||
|
bottomText.textAlignment = .center
|
||||||
|
bottomText.topAnchor.constraint(equalTo: cellView.topAnchor, constant: 38).isActive = true
|
||||||
|
bottomText.leadingAnchor.constraint(equalTo: cellView.leadingAnchor).isActive = true
|
||||||
|
bottomText.trailingAnchor.constraint(equalTo: cellView.trailingAnchor).isActive = true
|
||||||
|
cellView.bottomAnchor.constraint(equalTo: bottomText.bottomAnchor).isActive = true
|
||||||
|
}
|
||||||
|
|
||||||
|
public func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
|
||||||
|
guard let collectionModel = model as? RadioSwatchItemModel else { return }
|
||||||
|
fillColor = collectionModel.color
|
||||||
|
isSelected = collectionModel.selected ?? false
|
||||||
|
isUserInteractionEnabled = collectionModel.enabled ?? true
|
||||||
|
isStrikeThrough = collectionModel.strikethrough ?? false
|
||||||
|
bottomText.text = collectionModel.text
|
||||||
|
}
|
||||||
|
}
|
||||||
91
MVMCoreUI/Atomic/Atoms/Buttons/RadioSwatches.swift
Normal file
91
MVMCoreUI/Atomic/Atoms/Buttons/RadioSwatches.swift
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
//
|
||||||
|
// RadioSwatches.swift
|
||||||
|
// MVMCoreUI
|
||||||
|
//
|
||||||
|
// Created by Lekshmi S on 01/04/20.
|
||||||
|
// Copyright © 2020 Verizon Wireless. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
open class RadioSwatches: View {
|
||||||
|
public let collectionView = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewFlowLayout())
|
||||||
|
var swatches: [MoleculeModelProtocol]?
|
||||||
|
public var collectionViewHeight: NSLayoutConstraint?
|
||||||
|
|
||||||
|
public let cellSize: Double = 54.0
|
||||||
|
public let spacing: Double = 10
|
||||||
|
|
||||||
|
open override func setupView() {
|
||||||
|
super.setupView()
|
||||||
|
guard collectionView.superview == nil else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
collectionView.translatesAutoresizingMaskIntoConstraints = false
|
||||||
|
collectionView.dataSource = self
|
||||||
|
collectionView.delegate = self
|
||||||
|
collectionView.showsHorizontalScrollIndicator = false
|
||||||
|
collectionView.backgroundColor = .clear
|
||||||
|
collectionView.isAccessibilityElement = false
|
||||||
|
addSubview(collectionView)
|
||||||
|
NSLayoutConstraint.constraintPinSubview(toSuperview: collectionView)
|
||||||
|
collectionViewHeight = collectionView.heightAnchor.constraint(equalToConstant: 100)
|
||||||
|
collectionViewHeight?.isActive = true
|
||||||
|
}
|
||||||
|
|
||||||
|
public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
|
||||||
|
super.set(with: model, delegateObject, additionalData)
|
||||||
|
guard let radioSwatchesModel = model as? RadioSwatchesModel else { return }
|
||||||
|
collectionView.layer.borderColor = backgroundColor?.cgColor
|
||||||
|
registerCells()
|
||||||
|
setupLayout(with: radioSwatchesModel)
|
||||||
|
prepareMolecules(with: radioSwatchesModel)
|
||||||
|
collectionView.reloadData()
|
||||||
|
}
|
||||||
|
|
||||||
|
func registerCells() {
|
||||||
|
collectionView.register(RadioSwatchItem.self, forCellWithReuseIdentifier: "RadioSwatchItemCollectionViewCell")
|
||||||
|
}
|
||||||
|
|
||||||
|
func setupLayout(with radioSwatchesModel: RadioSwatchesModel?) {
|
||||||
|
let layout = UICollectionViewFlowLayout()
|
||||||
|
layout.scrollDirection = .vertical
|
||||||
|
layout.minimumLineSpacing = CGFloat(spacing)
|
||||||
|
layout.minimumInteritemSpacing = CGFloat(spacing)
|
||||||
|
collectionView.collectionViewLayout = layout
|
||||||
|
}
|
||||||
|
|
||||||
|
func prepareMolecules(with radioSwatchesModel: RadioSwatchesModel?) {
|
||||||
|
guard let newSwatches = radioSwatchesModel?.swatches else {
|
||||||
|
swatches = nil
|
||||||
|
return
|
||||||
|
}
|
||||||
|
swatches = newSwatches
|
||||||
|
let collectionViewWidth = UIScreen.main.bounds.width - (2 * MFStyler.defaultHorizontalPaddingForApplicationWidth())
|
||||||
|
let swatchesInRow = Double(floor(Double(collectionViewWidth/60.0)))
|
||||||
|
let numberOfRows = floor(Double(swatches?.count ?? 1)/swatchesInRow) + 1.0
|
||||||
|
let height = (numberOfRows * cellSize) + (spacing * (numberOfRows-1))
|
||||||
|
collectionViewHeight?.constant = CGFloat(height)
|
||||||
|
collectionViewHeight?.isActive = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension RadioSwatches: UICollectionViewDelegateFlowLayout {
|
||||||
|
open func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
|
||||||
|
return CGSize(width: cellSize, height: cellSize)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension RadioSwatches: UICollectionViewDataSource {
|
||||||
|
open func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
|
||||||
|
return swatches?.count ?? 0
|
||||||
|
}
|
||||||
|
|
||||||
|
open func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
||||||
|
guard let molecule = swatches?[indexPath.row], let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "RadioSwatchItemCollectionViewCell", for: indexPath) as? RadioSwatchItem else {
|
||||||
|
return UICollectionViewCell()
|
||||||
|
}
|
||||||
|
cell.set(with: molecule, nil, nil)
|
||||||
|
return cell
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -11,25 +11,87 @@ import Foundation
|
|||||||
@objcMembers public class RadioSwatchesModel: MoleculeModelProtocol {
|
@objcMembers public class RadioSwatchesModel: MoleculeModelProtocol {
|
||||||
public var backgroundColor: Color?
|
public var backgroundColor: Color?
|
||||||
public static var identifier: String = "radioSwatches"
|
public static var identifier: String = "radioSwatches"
|
||||||
public var moleculeName: String = RadioSwatchesModel.identifier
|
|
||||||
public var swatches: [RadioSwatchItemModel]
|
public var swatches: [RadioSwatchItemModel]
|
||||||
|
|
||||||
public init(swatches: [RadioSwatchItemModel]) {
|
public init(swatches: [RadioSwatchItemModel]) {
|
||||||
self.swatches = swatches
|
self.swatches = swatches
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private enum CodingKeys: String, CodingKey {
|
||||||
|
case moleculeName
|
||||||
|
case backgroundColor
|
||||||
|
case swatches
|
||||||
|
}
|
||||||
|
|
||||||
|
required public init(from decoder: Decoder) throws {
|
||||||
|
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
|
||||||
|
self.swatches = try typeContainer.decode([RadioSwatchItemModel].self, forKey: .swatches)
|
||||||
|
self.backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor)
|
||||||
|
}
|
||||||
|
|
||||||
|
public func encode(to encoder: Encoder) throws {
|
||||||
|
var container = encoder.container(keyedBy: CodingKeys.self)
|
||||||
|
try container.encode(moleculeName, forKey: .moleculeName)
|
||||||
|
try container.encodeIfPresent(backgroundColor, forKey: .backgroundColor)
|
||||||
|
try container.encode(swatches, forKey: .swatches)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@objcMembers public class RadioSwatchItemModel: MoleculeModelProtocol {
|
@objcMembers public class RadioSwatchItemModel: MoleculeModelProtocol {
|
||||||
public var backgroundColor: Color?
|
public var backgroundColor: Color?
|
||||||
public static var identifier: String = "radioSwatchItem"
|
public static var identifier: String = "radioSwatchItem"
|
||||||
public var moleculeName: String = RadioSwatchItemModel.identifier
|
public var color: Color = Color(uiColor: .mvmBlue)
|
||||||
public var text: String
|
public var text: String?
|
||||||
public var enabled: Bool
|
public var selected: Bool? = false
|
||||||
public var color: Color
|
public var enabled: Bool? = true
|
||||||
|
public var strikethrough: Bool? = false
|
||||||
|
|
||||||
public init(enabled: Bool, color: Color, text: String) {
|
public init(color: Color, text:String, selected: Bool, enabled: Bool, strikethrough: Bool) {
|
||||||
self.enabled = enabled
|
|
||||||
self.color = color
|
self.color = color
|
||||||
self.text = text
|
self.text = text
|
||||||
|
self.selected = selected
|
||||||
|
self.enabled = enabled
|
||||||
|
self.strikethrough = strikethrough
|
||||||
|
}
|
||||||
|
|
||||||
|
private enum CodingKeys: String, CodingKey {
|
||||||
|
case moleculeName
|
||||||
|
case backgroundColor
|
||||||
|
case color
|
||||||
|
case text
|
||||||
|
case selected
|
||||||
|
case enabled
|
||||||
|
case strikethrough
|
||||||
|
}
|
||||||
|
|
||||||
|
required public init(from decoder: Decoder) throws {
|
||||||
|
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
|
||||||
|
backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor)
|
||||||
|
color = try typeContainer.decode(Color.self, forKey: .color)
|
||||||
|
if let text = try typeContainer.decodeIfPresent(String.self, forKey: .text) {
|
||||||
|
self.text = text
|
||||||
|
}
|
||||||
|
if let selected = try typeContainer.decodeIfPresent(Bool.self, forKey: .selected) {
|
||||||
|
self.selected = selected
|
||||||
|
}
|
||||||
|
if let enabled = try typeContainer.decodeIfPresent(Bool.self, forKey: .enabled) {
|
||||||
|
self.enabled = enabled
|
||||||
|
}
|
||||||
|
if let strikethrough = try typeContainer.decodeIfPresent(Bool.self, forKey: .strikethrough) {
|
||||||
|
self.strikethrough = strikethrough
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public func encode(to encoder: Encoder) throws {
|
||||||
|
var container = encoder.container(keyedBy: CodingKeys.self)
|
||||||
|
try container.encode(moleculeName, forKey: .moleculeName)
|
||||||
|
try container.encodeIfPresent(backgroundColor, forKey: .backgroundColor)
|
||||||
|
try container.encode(color, forKey: .color)
|
||||||
|
try container.encode(text, forKey: .text)
|
||||||
|
try container.encode(selected, forKey: .selected)
|
||||||
|
try container.encode(enabled, forKey: .enabled)
|
||||||
|
try container.encode(strikethrough, forKey: .strikethrough)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -111,6 +111,9 @@ import Foundation
|
|||||||
MoleculeObjectMapping.shared()?.register(viewClass: MoleculeStackItem.self, viewModelClass: MoleculeStackItemModel.self)
|
MoleculeObjectMapping.shared()?.register(viewClass: MoleculeStackItem.self, viewModelClass: MoleculeStackItemModel.self)
|
||||||
MoleculeObjectMapping.shared()?.register(viewClass: StackItem.self, viewModelClass: StackItemModel.self)
|
MoleculeObjectMapping.shared()?.register(viewClass: StackItem.self, viewModelClass: StackItemModel.self)
|
||||||
MoleculeObjectMapping.shared()?.register(viewClass: MoleculeCollectionViewCell.self, viewModelClass: CarouselItemModel.self)
|
MoleculeObjectMapping.shared()?.register(viewClass: MoleculeCollectionViewCell.self, viewModelClass: CarouselItemModel.self)
|
||||||
|
|
||||||
|
MoleculeObjectMapping.shared()?.register(viewClass: RadioSwatchItem.self, viewModelClass: RadioSwatchItemModel.self)
|
||||||
|
MoleculeObjectMapping.shared()?.register(viewClass: RadioSwatches.self, viewModelClass: RadioSwatchesModel.self)
|
||||||
|
|
||||||
// Other Container Molecules
|
// Other Container Molecules
|
||||||
MoleculeObjectMapping.shared()?.register(viewClass: MoleculeHeaderView.self, viewModelClass: MoleculeHeaderModel.self)
|
MoleculeObjectMapping.shared()?.register(viewClass: MoleculeHeaderView.self, viewModelClass: MoleculeHeaderModel.self)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user