latest order tracker
@ -108,6 +108,9 @@
|
|||||||
0AB764D324460FA400E7FE72 /* UIPickerView+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AB764D224460FA400E7FE72 /* UIPickerView+Extension.swift */; };
|
0AB764D324460FA400E7FE72 /* UIPickerView+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AB764D224460FA400E7FE72 /* UIPickerView+Extension.swift */; };
|
||||||
0ABD136D237CAD1E0081388D /* DateDropdownEntryField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ABD136C237CAD1E0081388D /* DateDropdownEntryField.swift */; };
|
0ABD136D237CAD1E0081388D /* DateDropdownEntryField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ABD136C237CAD1E0081388D /* DateDropdownEntryField.swift */; };
|
||||||
0ABD1371237DB0450081388D /* ItemDropdownEntryField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ABD1370237DB0450081388D /* ItemDropdownEntryField.swift */; };
|
0ABD1371237DB0450081388D /* ItemDropdownEntryField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ABD1370237DB0450081388D /* ItemDropdownEntryField.swift */; };
|
||||||
|
0AC16CEB24B3A1080085EF34 /* Step.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AC16CEA24B3A1080085EF34 /* Step.swift */; };
|
||||||
|
0AC16CED24B3A11C0085EF34 /* StepModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AC16CEC24B3A11C0085EF34 /* StepModel.swift */; };
|
||||||
|
0AC16CEE24B3A39C0085EF34 /* ImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A7918F423F5E7EA00772FF4 /* ImageView.swift */; };
|
||||||
0AE14F64238315D2005417F8 /* TextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AE14F63238315D2005417F8 /* TextField.swift */; };
|
0AE14F64238315D2005417F8 /* TextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AE14F63238315D2005417F8 /* TextField.swift */; };
|
||||||
0AE98BAF23FEF956004C5109 /* ExternalLink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AE98BAE23FEF956004C5109 /* ExternalLink.swift */; };
|
0AE98BAF23FEF956004C5109 /* ExternalLink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AE98BAE23FEF956004C5109 /* ExternalLink.swift */; };
|
||||||
0AE98BB323FF0934004C5109 /* ExternalLinkModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AE98BB223FF0934004C5109 /* ExternalLinkModel.swift */; };
|
0AE98BB323FF0934004C5109 /* ExternalLinkModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AE98BB223FF0934004C5109 /* ExternalLinkModel.swift */; };
|
||||||
@ -568,6 +571,8 @@
|
|||||||
0AB764D224460FA400E7FE72 /* UIPickerView+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIPickerView+Extension.swift"; sourceTree = "<group>"; };
|
0AB764D224460FA400E7FE72 /* UIPickerView+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIPickerView+Extension.swift"; sourceTree = "<group>"; };
|
||||||
0ABD136C237CAD1E0081388D /* DateDropdownEntryField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateDropdownEntryField.swift; sourceTree = "<group>"; };
|
0ABD136C237CAD1E0081388D /* DateDropdownEntryField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateDropdownEntryField.swift; sourceTree = "<group>"; };
|
||||||
0ABD1370237DB0450081388D /* ItemDropdownEntryField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemDropdownEntryField.swift; sourceTree = "<group>"; };
|
0ABD1370237DB0450081388D /* ItemDropdownEntryField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemDropdownEntryField.swift; sourceTree = "<group>"; };
|
||||||
|
0AC16CEA24B3A1080085EF34 /* Step.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Step.swift; sourceTree = "<group>"; };
|
||||||
|
0AC16CEC24B3A11C0085EF34 /* StepModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StepModel.swift; sourceTree = "<group>"; };
|
||||||
0AE14F63238315D2005417F8 /* TextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextField.swift; sourceTree = "<group>"; };
|
0AE14F63238315D2005417F8 /* TextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextField.swift; sourceTree = "<group>"; };
|
||||||
0AE98BAE23FEF956004C5109 /* ExternalLink.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExternalLink.swift; sourceTree = "<group>"; };
|
0AE98BAE23FEF956004C5109 /* ExternalLink.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExternalLink.swift; sourceTree = "<group>"; };
|
||||||
0AE98BB223FF0934004C5109 /* ExternalLinkModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExternalLinkModel.swift; sourceTree = "<group>"; };
|
0AE98BB223FF0934004C5109 /* ExternalLinkModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExternalLinkModel.swift; sourceTree = "<group>"; };
|
||||||
@ -1031,6 +1036,17 @@
|
|||||||
path = Views;
|
path = Views;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
0AC16CE924B3A0ED0085EF34 /* Order Tracker */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
0A0B147A24ACFDAD00BADD56 /* OrderTrackerModel.swift */,
|
||||||
|
0A0B147824ACFD8200BADD56 /* OrderTracker.swift */,
|
||||||
|
0AC16CEC24B3A11C0085EF34 /* StepModel.swift */,
|
||||||
|
0AC16CEA24B3A1080085EF34 /* Step.swift */,
|
||||||
|
);
|
||||||
|
path = "Order Tracker";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
0AE98BAD23FEF92B004C5109 /* Link */ = {
|
0AE98BAD23FEF92B004C5109 /* Link */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@ -1261,8 +1277,7 @@
|
|||||||
EA5124FE2436018E0051A3A4 /* BGImageHeadlineBodyButtonModel.swift */,
|
EA5124FE2436018E0051A3A4 /* BGImageHeadlineBodyButtonModel.swift */,
|
||||||
0A775F2724893937009EFB58 /* ThreeHeadlineBodyLinkModel.swift */,
|
0A775F2724893937009EFB58 /* ThreeHeadlineBodyLinkModel.swift */,
|
||||||
0A775F2524893916009EFB58 /* ThreeHeadlineBodyLink.swift */,
|
0A775F2524893916009EFB58 /* ThreeHeadlineBodyLink.swift */,
|
||||||
0A0B147A24ACFDAD00BADD56 /* OrderTrackerModel.swift */,
|
0AC16CE924B3A0ED0085EF34 /* Order Tracker */,
|
||||||
0A0B147824ACFD8200BADD56 /* OrderTracker.swift */,
|
|
||||||
);
|
);
|
||||||
path = VerticalCombinationViews;
|
path = VerticalCombinationViews;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -2353,6 +2368,7 @@
|
|||||||
32F8804624765C6E00C2ACB3 /* ListLeftVariableNumberedListAllTextAndLinksModel.swift in Sources */,
|
32F8804624765C6E00C2ACB3 /* ListLeftVariableNumberedListAllTextAndLinksModel.swift in Sources */,
|
||||||
011D958524042432000E3791 /* RulesProtocol.swift in Sources */,
|
011D958524042432000E3791 /* RulesProtocol.swift in Sources */,
|
||||||
AA9972502475309F00FC7472 /* ListLeftVariableIconAllTextLinksModel.swift in Sources */,
|
AA9972502475309F00FC7472 /* ListLeftVariableIconAllTextLinksModel.swift in Sources */,
|
||||||
|
0AC16CED24B3A11C0085EF34 /* StepModel.swift in Sources */,
|
||||||
AA69AAF62445BF5700AF3D3B /* ListLeftVariableCheckboxBodyText.swift in Sources */,
|
AA69AAF62445BF5700AF3D3B /* ListLeftVariableCheckboxBodyText.swift in Sources */,
|
||||||
D264FAA3243E632F00D98315 /* ProgrammaticCollectionViewController.swift in Sources */,
|
D264FAA3243E632F00D98315 /* ProgrammaticCollectionViewController.swift in Sources */,
|
||||||
D29DF27A21E7A533003B2FB9 /* MVMCoreUISession.m in Sources */,
|
D29DF27A21E7A533003B2FB9 /* MVMCoreUISession.m in Sources */,
|
||||||
@ -2371,9 +2387,11 @@
|
|||||||
011D95A5240455DC000E3791 /* FormGroupRule.swift in Sources */,
|
011D95A5240455DC000E3791 /* FormGroupRule.swift in Sources */,
|
||||||
D2A6390522CBCE160052ED1F /* MoleculeCollectionViewCell.swift in Sources */,
|
D2A6390522CBCE160052ED1F /* MoleculeCollectionViewCell.swift in Sources */,
|
||||||
D2A6390122CBB1820052ED1F /* Carousel.swift in Sources */,
|
D2A6390122CBB1820052ED1F /* Carousel.swift in Sources */,
|
||||||
|
0AC16CEB24B3A1080085EF34 /* Step.swift in Sources */,
|
||||||
C7F8012123E8303200396FBD /* ListRVWheel.swift in Sources */,
|
C7F8012123E8303200396FBD /* ListRVWheel.swift in Sources */,
|
||||||
BB2C968F24330EA7006FF80C /* ListRightVariableTextLinkAllTextAndLinksModel.swift in Sources */,
|
BB2C968F24330EA7006FF80C /* ListRightVariableTextLinkAllTextAndLinksModel.swift in Sources */,
|
||||||
D2FB151B23A2B65B00C20E10 /* MoleculeContainer.swift in Sources */,
|
D2FB151B23A2B65B00C20E10 /* MoleculeContainer.swift in Sources */,
|
||||||
|
0AC16CEE24B3A39C0085EF34 /* ImageView.swift in Sources */,
|
||||||
279B1569242BBC2F00921D6C /* ActionModelAdapter.swift in Sources */,
|
279B1569242BBC2F00921D6C /* ActionModelAdapter.swift in Sources */,
|
||||||
BB6C6AC0242232DF005F7224 /* ListOneColumnTextWithWhitespaceDividerTallModel.swift in Sources */,
|
BB6C6AC0242232DF005F7224 /* ListOneColumnTextWithWhitespaceDividerTallModel.swift in Sources */,
|
||||||
8DEFA95E243DAC2F000D27E5 /* ListThreeColumnDataUsageDivider.swift in Sources */,
|
8DEFA95E243DAC2F000D27E5 /* ListThreeColumnDataUsageDivider.swift in Sources */,
|
||||||
|
|||||||
@ -0,0 +1,107 @@
|
|||||||
|
//
|
||||||
|
// OrderTracker.swift
|
||||||
|
// MVMCoreUI
|
||||||
|
//
|
||||||
|
// Created by Kevin Christiano on 7/1/20.
|
||||||
|
// Copyright © 2020 Verizon Wireless. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
|
||||||
|
open class OrderTracker: View {
|
||||||
|
//--------------------------------------------------
|
||||||
|
// MARK: - Properties
|
||||||
|
//--------------------------------------------------
|
||||||
|
|
||||||
|
var steps = [Step]()
|
||||||
|
|
||||||
|
//--------------------------------------------------
|
||||||
|
// MARK: - Life Cycle
|
||||||
|
//--------------------------------------------------
|
||||||
|
|
||||||
|
open override func setupView() {
|
||||||
|
super.setupView()
|
||||||
|
}
|
||||||
|
|
||||||
|
open override func reset() {
|
||||||
|
super.reset()
|
||||||
|
removeSteps()
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------
|
||||||
|
// MARK: - Methods
|
||||||
|
//--------------------------------------------------
|
||||||
|
|
||||||
|
func constrain(stepModels: [StepModel]?) {
|
||||||
|
|
||||||
|
guard let stepModels = stepModels else { return }
|
||||||
|
|
||||||
|
var previousStep: Step?
|
||||||
|
|
||||||
|
for (i, stepModel) in stepModels.enumerated() {
|
||||||
|
|
||||||
|
let step = Step()
|
||||||
|
step.set(with: stepModel, nil, nil)
|
||||||
|
addSubview(step)
|
||||||
|
|
||||||
|
step.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true
|
||||||
|
trailingAnchor.constraint(equalTo: step.trailingAnchor).isActive = true
|
||||||
|
|
||||||
|
if i == 0 {
|
||||||
|
step.topAnchor.constraint(equalTo: topAnchor).isActive = true
|
||||||
|
|
||||||
|
} else if let previousStep = previousStep{
|
||||||
|
step.topAnchor.constraint(equalTo: previousStep.bottomAnchor).isActive = true
|
||||||
|
}
|
||||||
|
|
||||||
|
if i == steps.count - 1 {
|
||||||
|
bottomAnchor.constraint(equalTo: step.bottomAnchor).isActive = true
|
||||||
|
}
|
||||||
|
|
||||||
|
previousStep = step
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func removeSteps() {
|
||||||
|
|
||||||
|
steps.forEach { $0.removeFromSuperview() }
|
||||||
|
steps = []
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------
|
||||||
|
// MARK: - Draw
|
||||||
|
//--------------------------------------------------
|
||||||
|
|
||||||
|
open override func draw(_ rect: CGRect) {
|
||||||
|
|
||||||
|
guard let context = UIGraphicsGetCurrentContext() else { return }
|
||||||
|
|
||||||
|
context.setLineWidth(1)
|
||||||
|
context.move(to: steps.first!.imageCenterPoint)
|
||||||
|
|
||||||
|
for step in steps.dropLast() {
|
||||||
|
|
||||||
|
context.setStrokeColor((step.state?.color() ?? .mvmCoolGray3).cgColor)
|
||||||
|
context.addLine(to: convert(step.imageCenterPoint, from: step))
|
||||||
|
}
|
||||||
|
|
||||||
|
context.strokePath()
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------
|
||||||
|
// MARK: - MoleculeViewProtocol
|
||||||
|
//------------------------------------------------------
|
||||||
|
|
||||||
|
public override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
|
||||||
|
return 320
|
||||||
|
}
|
||||||
|
|
||||||
|
public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
|
||||||
|
super.set(with: model, delegateObject, additionalData)
|
||||||
|
|
||||||
|
guard let model = model as? OrderTrackerModel else { return }
|
||||||
|
|
||||||
|
constrain(stepModels: model.steps)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -17,13 +17,7 @@ open class OrderTrackerModel: MoleculeModelProtocol {
|
|||||||
public var backgroundColor: Color?
|
public var backgroundColor: Color?
|
||||||
|
|
||||||
public static var identifier: String = "orderTracker"
|
public static var identifier: String = "orderTracker"
|
||||||
public var state: State?
|
public var steps: [StepModel]?
|
||||||
|
|
||||||
public enum State: String, Codable {
|
|
||||||
case complete
|
|
||||||
case incomplete
|
|
||||||
case invalid
|
|
||||||
}
|
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Keys
|
// MARK: - Keys
|
||||||
@ -32,7 +26,7 @@ open class OrderTrackerModel: MoleculeModelProtocol {
|
|||||||
private enum CodingKeys: String, CodingKey {
|
private enum CodingKeys: String, CodingKey {
|
||||||
case moleculeName
|
case moleculeName
|
||||||
case backgroundColor
|
case backgroundColor
|
||||||
case state
|
case steps
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
@ -42,13 +36,13 @@ open class OrderTrackerModel: MoleculeModelProtocol {
|
|||||||
required public init(from decoder: Decoder) throws {
|
required public init(from decoder: Decoder) throws {
|
||||||
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
|
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
|
||||||
backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor)
|
backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor)
|
||||||
state = try typeContainer.decodeIfPresent(State.self, forKey: .state)
|
steps = try typeContainer.decodeIfPresent([StepModel].self, forKey: .steps)
|
||||||
}
|
}
|
||||||
|
|
||||||
public func encode(to encoder: Encoder) throws {
|
public func encode(to encoder: Encoder) throws {
|
||||||
var container = encoder.container(keyedBy: CodingKeys.self)
|
var container = encoder.container(keyedBy: CodingKeys.self)
|
||||||
try container.encode(moleculeName, forKey: .moleculeName)
|
try container.encode(moleculeName, forKey: .moleculeName)
|
||||||
try container.encodeIfPresent(backgroundColor, forKey: .backgroundColor)
|
try container.encodeIfPresent(backgroundColor, forKey: .backgroundColor)
|
||||||
try container.encodeIfPresent(state, forKey: .state)
|
try container.encodeIfPresent(steps, forKey: .steps)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -0,0 +1,77 @@
|
|||||||
|
//
|
||||||
|
// Step.swift
|
||||||
|
// MVMCoreUI
|
||||||
|
//
|
||||||
|
// Created by Kevin Christiano on 7/6/20.
|
||||||
|
// Copyright © 2020 Verizon Wireless. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
|
||||||
|
open class Step: View {
|
||||||
|
//--------------------------------------------------
|
||||||
|
// MARK: - Properties
|
||||||
|
//--------------------------------------------------
|
||||||
|
|
||||||
|
public var headline = Label(fontStyle: .BoldMicro)
|
||||||
|
public var bodyTop = Label(fontStyle: .RegularMicro)
|
||||||
|
public var bodyBottom = Label(fontStyle: .RegularMicro)
|
||||||
|
public var stateImage = ImageView()
|
||||||
|
|
||||||
|
//--------------------------------------------------
|
||||||
|
// MARK: - Computed Properties
|
||||||
|
//--------------------------------------------------
|
||||||
|
|
||||||
|
public var stepModel: StepModel? {
|
||||||
|
return model as? StepModel
|
||||||
|
}
|
||||||
|
|
||||||
|
public var state: StepModel.State? {
|
||||||
|
return stepModel?.state
|
||||||
|
}
|
||||||
|
|
||||||
|
public var imageCenterPoint: CGPoint {
|
||||||
|
return stateImage.center
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------
|
||||||
|
// MARK: - Life Cycle
|
||||||
|
//--------------------------------------------------
|
||||||
|
|
||||||
|
open override func setupView() {
|
||||||
|
super.setupView()
|
||||||
|
|
||||||
|
stateImage.topAnchor.constraint(equalTo: topAnchor).isActive = true
|
||||||
|
stateImage.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public override func reset() {
|
||||||
|
super.reset()
|
||||||
|
|
||||||
|
headline.text = ""
|
||||||
|
bodyTop.text = ""
|
||||||
|
bodyBottom.text = ""
|
||||||
|
stateImage.image = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------
|
||||||
|
// MARK: - MoleculeViewProtocol
|
||||||
|
//------------------------------------------------------
|
||||||
|
|
||||||
|
public override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
|
||||||
|
return 320
|
||||||
|
}
|
||||||
|
|
||||||
|
public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
|
||||||
|
super.set(with: model, delegateObject, additionalData)
|
||||||
|
|
||||||
|
guard let model = model as? StepModel else { return }
|
||||||
|
|
||||||
|
headline.text = model.headline
|
||||||
|
bodyTop.text = model.bodyTop
|
||||||
|
bodyBottom.text = model.bodyBottom
|
||||||
|
stateImage.image = model.state?.image()
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,85 @@
|
|||||||
|
//
|
||||||
|
// StepModel.swift
|
||||||
|
// MVMCoreUI
|
||||||
|
//
|
||||||
|
// Created by Kevin Christiano on 7/6/20.
|
||||||
|
// Copyright © 2020 Verizon Wireless. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
|
||||||
|
open class StepModel: MoleculeModelProtocol {
|
||||||
|
//--------------------------------------------------
|
||||||
|
// MARK: - Properties
|
||||||
|
//--------------------------------------------------
|
||||||
|
|
||||||
|
public var backgroundColor: Color?
|
||||||
|
|
||||||
|
public static var identifier: String = "step"
|
||||||
|
public var state: State?
|
||||||
|
public var headline: String = ""
|
||||||
|
public var bodyTop: String?
|
||||||
|
public var bodyBottom: String?
|
||||||
|
|
||||||
|
public enum State: String, Codable {
|
||||||
|
case complete
|
||||||
|
case incomplete
|
||||||
|
case invalid
|
||||||
|
|
||||||
|
func image() -> UIImage? {
|
||||||
|
|
||||||
|
switch self {
|
||||||
|
case .complete:
|
||||||
|
return UIImage(named: "icon_tracker_complete")
|
||||||
|
|
||||||
|
case .incomplete:
|
||||||
|
return UIImage(named: "icon_tracker_incomplete")
|
||||||
|
|
||||||
|
case .invalid:
|
||||||
|
return UIImage(named: "icon_tracker_invalid")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func color() -> UIColor {
|
||||||
|
|
||||||
|
switch self {
|
||||||
|
case .complete:
|
||||||
|
return .mvmGreen
|
||||||
|
|
||||||
|
case .incomplete:
|
||||||
|
return .mvmOrangeAA
|
||||||
|
|
||||||
|
case .invalid:
|
||||||
|
return .mvmCoolGray3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------
|
||||||
|
// MARK: - Keys
|
||||||
|
//--------------------------------------------------
|
||||||
|
|
||||||
|
private enum CodingKeys: String, CodingKey {
|
||||||
|
case moleculeName
|
||||||
|
case backgroundColor
|
||||||
|
case state
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------
|
||||||
|
// MARK: - Codec
|
||||||
|
//--------------------------------------------------
|
||||||
|
|
||||||
|
required public init(from decoder: Decoder) throws {
|
||||||
|
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
|
||||||
|
backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor)
|
||||||
|
state = try typeContainer.decodeIfPresent(State.self, forKey: .state)
|
||||||
|
}
|
||||||
|
|
||||||
|
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.encodeIfPresent(state, forKey: .state)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,47 +0,0 @@
|
|||||||
//
|
|
||||||
// OrderTracker.swift
|
|
||||||
// MVMCoreUI
|
|
||||||
//
|
|
||||||
// Created by Kevin Christiano on 7/1/20.
|
|
||||||
// Copyright © 2020 Verizon Wireless. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
import UIKit
|
|
||||||
|
|
||||||
|
|
||||||
open class OrderTracker: View {
|
|
||||||
//--------------------------------------------------
|
|
||||||
// MARK: - Properties
|
|
||||||
//--------------------------------------------------
|
|
||||||
|
|
||||||
//--------------------------------------------------
|
|
||||||
// MARK: - Life Cycle
|
|
||||||
//--------------------------------------------------
|
|
||||||
|
|
||||||
open override func setupView() {
|
|
||||||
super.setupView()
|
|
||||||
}
|
|
||||||
|
|
||||||
//--------------------------------------------------
|
|
||||||
// MARK: - Draw
|
|
||||||
//--------------------------------------------------
|
|
||||||
|
|
||||||
open override func draw(_ rect: CGRect) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------
|
|
||||||
// MARK: - MoleculeViewProtocol
|
|
||||||
//------------------------------------------------------
|
|
||||||
|
|
||||||
public override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
|
|
||||||
return 320
|
|
||||||
}
|
|
||||||
|
|
||||||
public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
|
|
||||||
super.set(with: model, delegateObject, additionalData)
|
|
||||||
|
|
||||||
guard let model = model as? OrderTrackerModel else { return }
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
open class ImageView: UIImageView, ModelMoleculeViewProtocol {
|
open class ImageView: UIImageView, MoleculeViewProtocol {
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Properties
|
// MARK: - Properties
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
@ -52,12 +52,12 @@ open class ImageView: UIImageView, ModelMoleculeViewProtocol {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - ModelMoleculeViewProtocol
|
// MARK: - MoleculeViewProtocol
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
|
|
||||||
public func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) {
|
public func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
|
||||||
self.model = model
|
self.model = model
|
||||||
if let backgroundColor = model?.backgroundColor {
|
if let backgroundColor = model.backgroundColor {
|
||||||
self.backgroundColor = backgroundColor.uiColor
|
self.backgroundColor = backgroundColor.uiColor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -73,10 +73,6 @@ open class ImageView: UIImageView, ModelMoleculeViewProtocol {
|
|||||||
open class func requiredModules(_ molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?, error: AutoreleasingUnsafeMutablePointer<MVMCoreErrorObject?>?) -> [String]? {
|
open class func requiredModules(_ molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?, error: AutoreleasingUnsafeMutablePointer<MVMCoreErrorObject?>?) -> [String]? {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// MARK:- MVMCoreViewProtocol
|
|
||||||
extension ImageView: MVMCoreViewProtocol {
|
|
||||||
|
|
||||||
open func updateView(_ size: CGFloat) { }
|
open func updateView(_ size: CGFloat) { }
|
||||||
|
|
||||||
@ -86,10 +82,6 @@ extension ImageView: MVMCoreViewProtocol {
|
|||||||
insetsLayoutMarginsFromSafeArea = false
|
insetsLayoutMarginsFromSafeArea = false
|
||||||
MVMCoreUIUtility.setMarginsFor(self, leading: 0, top: 0, trailing: 0, bottom: 0)
|
MVMCoreUIUtility.setMarginsFor(self, leading: 0, top: 0, trailing: 0, bottom: 0)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// MARK:- MVMCoreUIMoleculeViewProtocol
|
|
||||||
extension ImageView: MVMCoreUIMoleculeViewProtocol {
|
|
||||||
|
|
||||||
open func reset() {
|
open func reset() {
|
||||||
backgroundColor = .clear
|
backgroundColor = .clear
|
||||||
|
|||||||
23
MVMCoreUI/SupportingFiles/Media.xcassets/icon_tracker_complete.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"filename" : "Green.png",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"filename" : "Green@2x.png",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"filename" : "Green@3x.png",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"version" : 1,
|
||||||
|
"author" : "xcode"
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
MVMCoreUI/SupportingFiles/Media.xcassets/icon_tracker_complete.imageset/Green.png
vendored
Normal file
|
After Width: | Height: | Size: 741 B |
BIN
MVMCoreUI/SupportingFiles/Media.xcassets/icon_tracker_complete.imageset/Green@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
MVMCoreUI/SupportingFiles/Media.xcassets/icon_tracker_complete.imageset/Green@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
23
MVMCoreUI/SupportingFiles/Media.xcassets/icon_tracker_incomplete.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"filename" : "Group.png",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"filename" : "Group@2x.png",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"filename" : "Group@3x.png",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"version" : 1,
|
||||||
|
"author" : "xcode"
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
MVMCoreUI/SupportingFiles/Media.xcassets/icon_tracker_incomplete.imageset/Group.png
vendored
Normal file
|
After Width: | Height: | Size: 645 B |
BIN
MVMCoreUI/SupportingFiles/Media.xcassets/icon_tracker_incomplete.imageset/Group@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
MVMCoreUI/SupportingFiles/Media.xcassets/icon_tracker_incomplete.imageset/Group@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
23
MVMCoreUI/SupportingFiles/Media.xcassets/icon_tracker_invalid.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"filename" : "Group 2.png",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"filename" : "Group 2@2x.png",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"filename" : "Group 2@3x.png",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"version" : 1,
|
||||||
|
"author" : "xcode"
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
MVMCoreUI/SupportingFiles/Media.xcassets/icon_tracker_invalid.imageset/Group 2.png
vendored
Normal file
|
After Width: | Height: | Size: 749 B |
BIN
MVMCoreUI/SupportingFiles/Media.xcassets/icon_tracker_invalid.imageset/Group 2@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
MVMCoreUI/SupportingFiles/Media.xcassets/icon_tracker_invalid.imageset/Group 2@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 2.1 KiB |