list model protocol

This commit is contained in:
Suresh, Kamlesh 2019-12-13 11:07:32 -05:00
parent d0196e6e58
commit 58ec1abcfe
13 changed files with 153 additions and 16 deletions

View File

@ -12,6 +12,9 @@
0105618E224BBE7700E1557D /* FormValidator+TextFields.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0105618B224BBE7700E1557D /* FormValidator+TextFields.swift */; };
0105618F224BBE7700E1557D /* FormValidator+FormParams.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0105618C224BBE7700E1557D /* FormValidator+FormParams.swift */; };
0116A4E5228B19640094F3ED /* RadioButtonModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0116A4E4228B19640094F3ED /* RadioButtonModel.swift */; };
011B58F023A2AA980085F53C /* ListItemModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011B58EF23A2AA980085F53C /* ListItemModelProtocol.swift */; };
011B58F223A2AE2C0085F53C /* DropDownListItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011B58F123A2AE2C0085F53C /* DropDownListItemModel.swift */; };
011B58F423A2CCC80085F53C /* DropDownModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011B58F323A2CCC80085F53C /* DropDownModel.swift */; };
012A889C23889E8400FE3DA1 /* TemplateModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 012A889B23889E8400FE3DA1 /* TemplateModelProtocol.swift */; };
012A88AD238C418100FE3DA1 /* TemplateProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 012A88AC238C418100FE3DA1 /* TemplateProtocol.swift */; };
012A88B1238C880100FE3DA1 /* PagingMoleculeProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 012A88B0238C880100FE3DA1 /* PagingMoleculeProtocol.swift */; };
@ -261,6 +264,9 @@
0105618B224BBE7700E1557D /* FormValidator+TextFields.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "FormValidator+TextFields.swift"; sourceTree = "<group>"; };
0105618C224BBE7700E1557D /* FormValidator+FormParams.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "FormValidator+FormParams.swift"; sourceTree = "<group>"; };
0116A4E4228B19640094F3ED /* RadioButtonModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioButtonModel.swift; sourceTree = "<group>"; };
011B58EF23A2AA980085F53C /* ListItemModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListItemModelProtocol.swift; sourceTree = "<group>"; };
011B58F123A2AE2C0085F53C /* DropDownListItemModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DropDownListItemModel.swift; sourceTree = "<group>"; };
011B58F323A2CCC80085F53C /* DropDownModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DropDownModel.swift; sourceTree = "<group>"; };
012A889B23889E8400FE3DA1 /* TemplateModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TemplateModelProtocol.swift; sourceTree = "<group>"; };
012A88AC238C418100FE3DA1 /* TemplateProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TemplateProtocol.swift; sourceTree = "<group>"; };
012A88AE238C626E00FE3DA1 /* CarouselModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CarouselModel.swift; sourceTree = "<group>"; };
@ -521,10 +527,24 @@
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
011B58EE23A2AA850085F53C /* ModelProtocols */ = {
isa = PBXGroup;
children = (
017BEB4123620AD20024EF95 /* FormModelProtocol.swift */,
012A88C3238D86E600FE3DA1 /* CollectionCellMoleculeProtocol.swift */,
012A88B0238C880100FE3DA1 /* PagingMoleculeProtocol.swift */,
01EB3683236097C0006832FA /* MoleculeProtocol.swift */,
012A88AC238C418100FE3DA1 /* TemplateProtocol.swift */,
012A889B23889E8400FE3DA1 /* TemplateModelProtocol.swift */,
012A88ED239858E300FE3DA1 /* ContainerMoleculeProtocol.swift */,
011B58EF23A2AA980085F53C /* ListItemModelProtocol.swift */,
);
path = ModelProtocols;
sourceTree = "<group>";
};
012A889A238898C600FE3DA1 /* Template */ = {
isa = PBXGroup;
children = (
012A889B23889E8400FE3DA1 /* TemplateModelProtocol.swift */,
012CA9DD2388723E003F810F /* ListPageTemplateModel.swift */,
012CA9DF23888AC8003F810F /* StackPageTemplateModel.swift */,
012CA9E123888AED003F810F /* StackCenteredPageTemplateModel.swift */,
@ -544,12 +564,8 @@
01509D96232803B200EF99AA /* Models */ = {
isa = PBXGroup;
children = (
011B58EE23A2AA850085F53C /* ModelProtocols */,
012A88EF23985E0100FE3DA1 /* Primitive Models */,
012A88AC238C418100FE3DA1 /* TemplateProtocol.swift */,
01EB3683236097C0006832FA /* MoleculeProtocol.swift */,
012A88ED239858E300FE3DA1 /* ContainerMoleculeProtocol.swift */,
012A88B0238C880100FE3DA1 /* PagingMoleculeProtocol.swift */,
012A88C3238D86E600FE3DA1 /* CollectionCellMoleculeProtocol.swift */,
012A889A238898C600FE3DA1 /* Template */,
946EE1B5237B663A0036751F /* Extensions */,
01EB368723609801006832FA /* Molecules */,
@ -573,12 +589,13 @@
children = (
012CA98823849699003F810F /* SeperatorModel.swift */,
01EB368923609801006832FA /* ListItemModel.swift */,
011B58F323A2CCC80085F53C /* DropDownModel.swift */,
011B58F123A2AE2C0085F53C /* DropDownListItemModel.swift */,
01EB368A23609801006832FA /* MoleculeStackItemModel.swift */,
01EB368B23609801006832FA /* MoleculeStackModel.swift */,
01EB368C23609801006832FA /* HeaderModel.swift */,
012A88EB238F084D00FE3DA1 /* FooterModel.swift */,
017BEB3F23620A230024EF95 /* TextFieldModel.swift */,
017BEB4123620AD20024EF95 /* FormModelProtocol.swift */,
017BEB7A236763000024EF95 /* LineModel.swift */,
012A88AE238C626E00FE3DA1 /* CarouselModel.swift */,
012A88C1238D7BCA00FE3DA1 /* CarouselItemModel.swift */,
@ -1352,6 +1369,7 @@
012CA9E223888AED003F810F /* StackCenteredPageTemplateModel.swift in Sources */,
012A88DA238ED42E00FE3DA1 /* StackPageTemplateModel.swift in Sources */,
0A7BAFA1232BE61800FB8E22 /* Checkbox.swift in Sources */,
011B58F023A2AA980085F53C /* ListItemModelProtocol.swift in Sources */,
D22479962316AF6E003FCCF9 /* HeadlineBodyTextButton.swift in Sources */,
D29DF2AE21E7B3A4003B2FB9 /* MFTextView.m in Sources */,
017BEB382360C6AC0024EF95 /* RadioButtonLabel.swift in Sources */,
@ -1364,6 +1382,7 @@
D274CA332236A78900B01B62 /* StandardFooterView.swift in Sources */,
D29DF2BF21E7BEA4003B2FB9 /* MVMCoreUITabBarPageControlViewController.m in Sources */,
D29DF28321E7AB24003B2FB9 /* MVMCoreUICommonViewsUtility.m in Sources */,
011B58F223A2AE2C0085F53C /* DropDownListItemModel.swift in Sources */,
94C2D9842386F3F80006CF46 /* LabelAttributeModel.swift in Sources */,
944589212385D6E900DE9FD4 /* DashLineModel.swift in Sources */,
D29DF27A21E7A533003B2FB9 /* MVMCoreUISession.m in Sources */,
@ -1407,6 +1426,7 @@
D2A5146122121FBF00345BFB /* MoleculeStackTemplate.swift in Sources */,
D29DF11821E6805F003B2FB9 /* NSLayoutConstraint+MFConvenience.m in Sources */,
94C2D9A323872C110006CF46 /* LabelAttributeStrikeThroughModel.swift in Sources */,
011B58F423A2CCC80085F53C /* DropDownModel.swift in Sources */,
D29DF26C21E6AA0B003B2FB9 /* FLAnimatedImage.m in Sources */,
012A88F123985E0100FE3DA1 /* Color.swift in Sources */,
012A889C23889E8400FE3DA1 /* TemplateModelProtocol.swift in Sources */,

View File

@ -0,0 +1,14 @@
//
// ListItemModelProtocol.swift
// MVMCoreUI
//
// Created by Suresh, Kamlesh on 12/12/19.
// Copyright © 2019 Verizon Wireless. All rights reserved.
//
import Foundation
public protocol ListItemModelProtocol: ContainerMoleculeProtocol {
var molecule: MoleculeProtocol? { get }
var separator: SeperatorModel? { get set }
}

View File

@ -0,0 +1,46 @@
//
// DropDownListItemModel.swift
// MVMCoreUI
//
// Created by Suresh, Kamlesh on 12/12/19.
// Copyright © 2019 Verizon Wireless. All rights reserved.
//
import Foundation
@objcMembers public class DropDownListItemModel: ListItemModelProtocol {
public static var identifier: String = "dropDownListItem"
public var molecules: [[ListItemModel]]
public var backgroundColor: String?
public var separator: SeperatorModel?
public var dropDown: DropDownModel
public init(molecules: [[ListItemModel]], dropDown: DropDownModel) {
self.molecules = molecules
self.dropDown = dropDown
}
enum CodingKeys: String, CodingKey {
case moleculeName
case molecules
case separator
case backgroundColor
case dropDown
}
required public init(from decoder: Decoder) throws {
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
self.molecules = try typeContainer.decode([[ListItemModel]].self, forKey: .molecules)
self.separator = try typeContainer.decode(SeperatorModel.self, forKey: .separator)
self.backgroundColor = try typeContainer.decodeIfPresent(String.self, forKey: .backgroundColor)
self.dropDown = try typeContainer.decode(DropDownModel.self, forKey: .dropDown)
}
public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(moleculeName, forKey: .moleculeName)
try container.encode(molecules, forKey: .molecules)
try container.encodeIfPresent(backgroundColor, forKey: .backgroundColor)
try container.encode(dropDown, forKey: .dropDown)
}
}

View File

@ -0,0 +1,17 @@
//
// DropDownModel.swift
// MVMCoreUI
//
// Created by Suresh, Kamlesh on 12/12/19.
// Copyright © 2019 Verizon Wireless. All rights reserved.
//
import Foundation
@objcMembers public class DropDownModel: MoleculeProtocol {
public static var identifier: String = "dropDownModel"
public var backgroundColor: String?
public var label: String
public var options: [String]
}

View File

@ -8,7 +8,7 @@
import Foundation
@objcMembers public class ListItemModel: ContainerMoleculeProtocol {
@objcMembers public class ListItemModel: ListItemModelProtocol {
public static var identifier: String = "listItem"
public var molecule: MoleculeProtocol?
public var backgroundColor: String?
@ -40,9 +40,9 @@ import Foundation
self.molecule = try typeContainer.decodeIfPresent(codingKey: .molecule)
action = try typeContainer.decodeIfPresent(ActionModel.self, forKey: .action)
self.hideArrow = try typeContainer.decode(Bool.self, forKey: .hideArrow)
self.separator = try typeContainer.decode(SeperatorModel.self, forKey: .hideArrow)
self.style = try typeContainer.decode(String.self, forKey: .style)
self.hideArrow = try typeContainer.decodeIfPresent(Bool.self, forKey: .hideArrow)
self.separator = try typeContainer.decodeIfPresent(SeperatorModel.self, forKey: .separator)
self.style = try typeContainer.decodeIfPresent(String.self, forKey: .style)
}
public func encode(to encoder: Encoder) throws {
@ -50,5 +50,6 @@ import Foundation
try container.encode(moleculeName, forKey: .moleculeName)
try container.encodeIfPresent(self.molecule, forKey: .molecule)
try container.encodeIfPresent(action, forKey: .action)
try container.encodeIfPresent(hideArrow, forKey: .hideArrow)
}
}

View File

@ -11,14 +11,53 @@ import Foundation
@objcMembers public class ListPageTemplateModel: TemplateModelProtocol {
public static var identifier: String = "listTemplate"
public var pageType: String
public var screenHeading: String
public var isAtomicTabs: Bool?
public var header: MoleculeStackModel?
public var molecules: [ListItemModel]?
public var header: HeaderModel?
public var molecules: [ListItemModelProtocol]
public var footer: MoleculeStackModel?
public init(pageType: String, screenHeading: String, molecules: [ListItemModelProtocol]) {
self.pageType = pageType
self.screenHeading = screenHeading
self.molecules = molecules
}
enum CodingKeys: String, CodingKey {
case moleculeName
case pageType
case screenHeading
case molecules
case header
case footer
case isAtomicTabs
}
required public init(from decoder: Decoder) throws {
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
self.pageType = try typeContainer.decode(String.self, forKey: .pageType)
self.screenHeading = try typeContainer.decode(String.self, forKey: .screenHeading)
guard let list = try typeContainer.decodeArray(codingKey: .molecules) as? [ListItemModelProtocol] else {
throw JSONError.pathNotFound
}
self.molecules = list
self.isAtomicTabs = try typeContainer.decodeIfPresent(Bool.self, forKey: .isAtomicTabs)
self.header = try typeContainer.decodeIfPresent(HeaderModel.self, forKey: .header)
self.footer = try typeContainer.decodeIfPresent(MoleculeStackModel.self, forKey: .footer)
}
public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(pageType, forKey: .pageType)
try container.encode(screenHeading, forKey: .screenHeading)
try container.encodeArray(molecules, forKey: .molecules)
try container.encodeIfPresent(isAtomicTabs, forKey: .isAtomicTabs)
try container.encodeIfPresent(header, forKey: .header)
try container.encodeIfPresent(footer, forKey: .footer)
}
}