Digital PCT265 story ONEAPP-4818 - Updating atomic headers to utilize vds title lockup

This commit is contained in:
Scott Pfeil 2024-03-11 11:52:37 -04:00
parent aa6e55e55d
commit 483454d094
15 changed files with 211 additions and 155 deletions

View File

@ -8,14 +8,14 @@
import Foundation
@objcMembers open class HeadersH1Button: HeaderView {
open class HeadersH1Button: HeaderView {
//--------------------------------------------------
// MARK: - Outlets
//--------------------------------------------------
public let headlineBody = HeadlineBody()
public let titleLockup = TitleLockup()
public let buttons = TwoButtonView()
public lazy var stack: Stack<StackModel> = {
Stack<StackModel>.createStack(with: [headlineBody, buttons], spacing: Padding.Eighteen)
Stack<StackModel>.createStack(with: [titleLockup, buttons], spacing: Padding.Eighteen)
}()
//-------------------------------------------------------
@ -23,7 +23,6 @@ import Foundation
//-------------------------------------------------------
open override func setupView() {
super.setupView()
headlineBody.styleLandingPageHeader()
addMolecule(stack)
stack.restack()
}
@ -35,14 +34,9 @@ import Foundation
super.set(with: model, delegateObject, additionalData)
guard let model = model as? HeadersH1ButtonModel else { return }
headlineBody.set(with: model.headlineBody, delegateObject, additionalData)
titleLockup.set(with: model.titleLockup, delegateObject, additionalData)
buttons.set(with: model.buttons, delegateObject, additionalData)
}
open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { 121 }
open override func reset() {
super.reset()
headlineBody.styleLandingPageHeader()
}
}

View File

@ -13,15 +13,16 @@ public class HeadersH1ButtonModel: HeaderModel, MoleculeModelProtocol, ParentMol
// MARK: - Properties
//--------------------------------------------------
public static var identifier: String = "headerH1Btn"
public var headlineBody: HeadlineBodyModel
public var titleLockup: TitleLockupModel
public var buttons: TwoButtonViewModel
private var helper = DeprecatedHeadlineBodyHelper()
public var children: [MoleculeModelProtocol] {
[headlineBody, buttons]
[titleLockup, buttons]
}
public func replaceChildMolecule(with molecule: MoleculeModelProtocol) throws -> Bool {
return try replaceChildMolecule(at: &headlineBody, with: molecule)
return try replaceChildMolecule(at: &titleLockup, with: molecule)
|| replaceChildMolecule(at: &buttons, with: molecule)
}
@ -29,8 +30,8 @@ public class HeadersH1ButtonModel: HeaderModel, MoleculeModelProtocol, ParentMol
// MARK: - Initializer
//--------------------------------------------------
public init(headlineBody: HeadlineBodyModel, buttons: TwoButtonViewModel) {
self.headlineBody = headlineBody
public init(titleLockup: TitleLockupModel, buttons: TwoButtonViewModel) {
self.titleLockup = titleLockup
self.buttons = buttons
super.init()
}
@ -40,10 +41,13 @@ public class HeadersH1ButtonModel: HeaderModel, MoleculeModelProtocol, ParentMol
//--------------------------------------------------
public override func setDefaults() {
if headlineBody.headline?.accessibilityTraits == nil {
headlineBody.headline?.accessibilityTraits = .header
}
super.setDefaults()
if titleLockup.title.fontStyle == nil {
titleLockup.title.fontStyle = Styler.Font.RegularTitle2XLarge
}
if titleLockup.subTitle?.fontStyle == nil {
titleLockup.subTitle?.fontStyle = Styler.Font.RegularTitleMedium
}
}
//--------------------------------------------------
@ -52,7 +56,7 @@ public class HeadersH1ButtonModel: HeaderModel, MoleculeModelProtocol, ParentMol
private enum CodingKeys: String, CodingKey {
case moleculeName
case headlineBody
case titleLockup
case buttons
}
@ -61,7 +65,7 @@ public class HeadersH1ButtonModel: HeaderModel, MoleculeModelProtocol, ParentMol
//--------------------------------------------------
required public init(from decoder: Decoder) throws {
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
headlineBody = try typeContainer.decode(HeadlineBodyModel.self, forKey: .headlineBody)
titleLockup = try helper.deprecatedCreate(from: decoder) ?? typeContainer.decodeMolecule(codingKey: .titleLockup)
buttons = try typeContainer.decode(TwoButtonViewModel.self, forKey: .buttons)
try super.init(from: decoder)
}
@ -70,7 +74,8 @@ public class HeadersH1ButtonModel: HeaderModel, MoleculeModelProtocol, ParentMol
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(moleculeName, forKey: .moleculeName)
try container.encode(headlineBody, forKey: .headlineBody)
try container.encode(buttons, forKey: .buttons)
guard try !helper.deprecatedEncode(to: encoder) else { return }
try container.encode(titleLockup, forKey: .titleLockup)
}
}

View File

@ -8,20 +8,19 @@
import Foundation
@objcMembers open class HeadersH1NoButtonsBodyText: HeaderView {
open class HeadersH1NoButtonsBodyText: HeaderView {
//--------------------------------------------------
// MARK: - Outlets
//--------------------------------------------------
public let headlineBody = HeadlineBody()
public let titleLockup = TitleLockup()
//-------------------------------------------------------
// MARK: - View Lifecycle
//-------------------------------------------------------
open override func setupView() {
super.setupView()
headlineBody.styleLandingPageHeader()
addMolecule(headlineBody)
addMolecule(titleLockup)
}
//----------------------------------------------------
@ -31,13 +30,8 @@ import Foundation
open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.set(with: model, delegateObject, additionalData)
guard let model = model as? HeadersH1NoButtonsBodyTextModel else { return }
headlineBody.set(with: model.headlineBody, delegateObject, additionalData)
titleLockup.set(with: model.titleLockup, delegateObject, additionalData)
}
open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { 121 }
open override func reset() {
super.reset()
headlineBody.styleLandingPageHeader()
}
}

View File

@ -6,50 +6,48 @@
// Copyright © 2020 Verizon Wireless. All rights reserved.
//
public class HeadersH1NoButtonsBodyTextModel: HeaderModel, MoleculeModelProtocol, ParentMoleculeModelProtocol {
//--------------------------------------------------
// MARK: - Properties
//--------------------------------------------------
public static var identifier: String = "headerH1"
public var headlineBody: HeadlineBodyModel
public var titleLockup: TitleLockupModel
private var helper = DeprecatedHeadlineBodyHelper()
public var children: [MoleculeModelProtocol] {
[headlineBody]
[titleLockup]
}
public func replaceChildMolecule(with molecule: MoleculeModelProtocol) throws -> Bool {
return try replaceChildMolecule(at: &headlineBody, with: molecule)
return try replaceChildMolecule(at: &titleLockup, with: molecule)
}
public override func setDefaults() {
super.setDefaults()
if titleLockup.title.fontStyle == nil {
titleLockup.title.fontStyle = Styler.Font.RegularTitle2XLarge
}
if titleLockup.subTitle?.fontStyle == nil {
titleLockup.subTitle?.fontStyle = Styler.Font.RegularTitleMedium
}
}
//--------------------------------------------------
// MARK: - Initializer
//--------------------------------------------------
public init(headlineBody: HeadlineBodyModel) {
self.headlineBody = headlineBody
public init(titleLockup: TitleLockupModel) {
self.titleLockup = titleLockup
super.init()
}
//--------------------------------------------------
// MARK: - Subclass
//--------------------------------------------------
public override func setDefaults() {
if headlineBody.headline?.accessibilityTraits == nil {
headlineBody.headline?.accessibilityTraits = .header
}
super.setDefaults()
}
//--------------------------------------------------
// MARK: - Keys
//--------------------------------------------------
private enum CodingKeys: String, CodingKey {
case moleculeName
case headlineBody
case titleLockup
}
//--------------------------------------------------
@ -57,7 +55,7 @@ public class HeadersH1NoButtonsBodyTextModel: HeaderModel, MoleculeModelProtocol
//--------------------------------------------------
required public init(from decoder: Decoder) throws {
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
headlineBody = try typeContainer.decode(HeadlineBodyModel.self, forKey: .headlineBody)
titleLockup = try helper.deprecatedCreate(from: decoder) ?? typeContainer.decodeMolecule(codingKey: .titleLockup)
try super.init(from: decoder)
}
@ -65,6 +63,55 @@ public class HeadersH1NoButtonsBodyTextModel: HeaderModel, MoleculeModelProtocol
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(moleculeName, forKey: .moleculeName)
try container.encode(headlineBody, forKey: .headlineBody)
guard try !helper.deprecatedEncode(to: encoder) else { return }
try container.encode(titleLockup, forKey: .titleLockup)
}
}
public struct DeprecatedHeadlineBodyHelper {
var headlineBody: HeadlineBodyModel?
private enum DeprecatedCodingKeys: String, CodingKey {
case headlineBody
}
public mutating func deprecatedCreate(from decoder: Decoder) throws -> TitleLockupModel? {
let typeContainer = try decoder.container(keyedBy: DeprecatedCodingKeys.self)
headlineBody = try typeContainer.decodeIfPresent(HeadlineBodyModel.self, forKey: .headlineBody)
guard let headlineBody = headlineBody else { return nil }
return try createTitleLockupModel(headlineBody: headlineBody)
}
public func deprecatedEncode(to encoder: Encoder) throws -> Bool {
guard let headlineBody = headlineBody else { return false }
var container = encoder.container(keyedBy: DeprecatedCodingKeys.self)
try container.encode(headlineBody, forKey: DeprecatedCodingKeys.headlineBody)
return true
}
public func createTitleLockupModel(defaultStyle: HeadlineBodyModel.Style = .header, headlineBody: HeadlineBodyModel) throws -> TitleLockupModel {
guard let headline = headlineBody.headline else { throw ModelRegistry.Error.decoderOther(message: "headline is required for this use case.") }
var body = headlineBody.body
switch headlineBody.style ?? defaultStyle {
case .landingHeader:
headline.fontStyle = Styler.Font.RegularTitle2XLarge
body?.fontStyle = Styler.Font.RegularTitleMedium
case .itemHeader:
headline.fontStyle = Styler.Font.BoldTitleLarge
body?.fontStyle = Styler.Font.RegularBodyLarge
default:
headline.fontStyle = Styler.Font.RegularTitleXLarge
body?.fontStyle = Styler.Font.RegularTitleMedium
}
let model = try TitleLockupModel(title: headline, subTitle: body)
model.id = headlineBody.id
return model
}
public func createHeadlineBodyModel(titleLockup: TitleLockupModel) -> HeadlineBodyModel {
var headlineBody = HeadlineBodyModel(headline: titleLockup.title)
headlineBody.body = titleLockup.subTitle
headlineBody.id = titleLockup.id
return headlineBody
}
}

View File

@ -9,15 +9,15 @@
import Foundation
@objcMembers open class HeadersH2Buttons: HeaderView {
open class HeadersH2Buttons: HeaderView {
//--------------------------------------------------
// MARK: - Outlets
//--------------------------------------------------
public let headlineBody = HeadlineBody()
public let titleLockup = TitleLockup()
public let buttons = TwoButtonView()
public lazy var stack: Stack<StackModel> = {
return Stack<StackModel>.createStack(with: [headlineBody, buttons], spacing: PaddingDefaultVerticalSpacing3)
return Stack<StackModel>.createStack(with: [titleLockup, buttons], spacing: PaddingDefaultVerticalSpacing3)
}()
//-------------------------------------------------------
@ -26,7 +26,6 @@ import Foundation
open override func setupView() {
super.setupView()
headlineBody.stylePageHeader()
addMolecule(stack)
stack.restack()
}
@ -40,16 +39,11 @@ import Foundation
guard let model = model as? HeadersH2ButtonsModel else { return }
headlineBody.set(with: model.headlineBody, delegateObject, additionalData)
titleLockup.set(with: model.titleLockup, delegateObject, additionalData)
buttons.set(with: model.buttons, delegateObject, additionalData)
}
open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return 121
}
open override func reset() {
super.reset()
headlineBody.stylePageHeader()
}
}

View File

@ -15,15 +15,16 @@ public class HeadersH2ButtonsModel: HeaderModel, MoleculeModelProtocol, ParentMo
//--------------------------------------------------
public static var identifier: String = "headerH2Btns"
public var headlineBody: HeadlineBodyModel
public var titleLockup: TitleLockupModel
public var buttons: TwoButtonViewModel
private var helper = DeprecatedHeadlineBodyHelper()
public var children: [MoleculeModelProtocol] {
[headlineBody, buttons]
[titleLockup, buttons]
}
public func replaceChildMolecule(with molecule: MoleculeModelProtocol) throws -> Bool {
return try replaceChildMolecule(at: &headlineBody, with: molecule)
return try replaceChildMolecule(at: &titleLockup, with: molecule)
|| replaceChildMolecule(at: &buttons, with: molecule)
}
@ -31,8 +32,8 @@ public class HeadersH2ButtonsModel: HeaderModel, MoleculeModelProtocol, ParentMo
// MARK: - Initializer
//--------------------------------------------------
public init(headlineBody: HeadlineBodyModel, buttons: TwoButtonViewModel) {
self.headlineBody = headlineBody
public init(titleLockup: TitleLockupModel, buttons: TwoButtonViewModel) {
self.titleLockup = titleLockup
self.buttons = buttons
super.init()
}
@ -48,8 +49,11 @@ public class HeadersH2ButtonsModel: HeaderModel, MoleculeModelProtocol, ParentMo
if bottomPadding == nil {
bottomPadding = Padding.Component.VerticalMarginSpacing
}
if headlineBody.headline?.accessibilityTraits == nil {
headlineBody.headline?.accessibilityTraits = .header
if titleLockup.title.fontStyle == nil {
titleLockup.title.fontStyle = Styler.Font.RegularTitleXLarge
}
if titleLockup.subTitle?.fontStyle == nil {
titleLockup.subTitle?.fontStyle = Styler.Font.RegularTitleMedium
}
super.setDefaults()
}
@ -60,7 +64,7 @@ public class HeadersH2ButtonsModel: HeaderModel, MoleculeModelProtocol, ParentMo
private enum CodingKeys: String, CodingKey {
case moleculeName
case headlineBody
case titleLockup
case buttons
}
@ -70,7 +74,7 @@ public class HeadersH2ButtonsModel: HeaderModel, MoleculeModelProtocol, ParentMo
required public init(from decoder: Decoder) throws {
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
headlineBody = try typeContainer.decode(HeadlineBodyModel.self, forKey: .headlineBody)
titleLockup = try typeContainer.decodeMolecule(codingKey: .titleLockup)
buttons = try typeContainer.decode(TwoButtonViewModel.self, forKey: .buttons)
try super.init(from: decoder)
}
@ -79,7 +83,8 @@ public class HeadersH2ButtonsModel: HeaderModel, MoleculeModelProtocol, ParentMo
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(moleculeName, forKey: .moleculeName)
try container.encode(headlineBody, forKey: .headlineBody)
try container.encode(buttons, forKey: .buttons)
guard try !helper.deprecatedEncode(to: encoder) else { return }
try container.encode(titleLockup, forKey: .titleLockup)
}
}

View File

@ -7,14 +7,14 @@
//
import Foundation
@objcMembers open class HeadersH2CaretLink: HeaderView {
open class HeadersH2CaretLink: HeaderView {
//--------------------------------------------------
// MARK: - Outlets
//--------------------------------------------------
public let headlineBody = HeadlineBody()
public let titleLockup = TitleLockup()
public let caretLink = CaretLink()
public lazy var stack: Stack<StackModel> = {
return Stack<StackModel>.createStack(with: [headlineBody, caretLink])
return Stack<StackModel>.createStack(with: [titleLockup, caretLink])
}()
//-------------------------------------------------------
@ -22,7 +22,6 @@ import Foundation
//-------------------------------------------------------
open override func setupView() {
super.setupView()
headlineBody.stylePageHeader()
addMolecule(stack)
stack.restack()
}
@ -33,16 +32,11 @@ import Foundation
open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.set(with: model, delegateObject, additionalData)
guard let model = model as? HeadersH2CaretLinkModel else { return }
headlineBody.set(with: model.headlineBody, delegateObject, additionalData)
titleLockup.set(with: model.titleLockup, delegateObject, additionalData)
caretLink.set(with: model.caretLink, delegateObject, additionalData)
}
open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return 121
}
open override func reset() {
super.reset()
headlineBody.stylePageHeader()
}
}

View File

@ -12,23 +12,24 @@ public class HeadersH2CaretLinkModel: HeaderModel, MoleculeModelProtocol, Parent
// MARK: - Properties
//--------------------------------------------------
public static var identifier: String = "headerH2CrtBtn"
public var headlineBody: HeadlineBodyModel
public var titleLockup: TitleLockupModel
public var caretLink: CaretLinkModel
private var helper = DeprecatedHeadlineBodyHelper()
public var children: [MoleculeModelProtocol] {
[headlineBody, caretLink]
[titleLockup, caretLink]
}
public func replaceChildMolecule(with molecule: MoleculeModelProtocol) throws -> Bool {
return try replaceChildMolecule(at: &headlineBody, with: molecule)
return try replaceChildMolecule(at: &titleLockup, with: molecule)
|| replaceChildMolecule(at: &caretLink, with: molecule)
}
//--------------------------------------------------
// MARK: - Initializer
//--------------------------------------------------
public init(headlineBody: HeadlineBodyModel, caretLink: CaretLinkModel) {
self.headlineBody = headlineBody
public init(titleLockup: TitleLockupModel, caretLink: CaretLinkModel) {
self.titleLockup = titleLockup
self.caretLink = caretLink
super.init()
}
@ -43,8 +44,11 @@ public class HeadersH2CaretLinkModel: HeaderModel, MoleculeModelProtocol, Parent
if bottomPadding == nil {
bottomPadding = Padding.Component.VerticalMarginSpacing
}
if headlineBody.headline?.accessibilityTraits == nil {
headlineBody.headline?.accessibilityTraits = .header
if titleLockup.title.fontStyle == nil {
titleLockup.title.fontStyle = Styler.Font.RegularTitleXLarge
}
if titleLockup.subTitle?.fontStyle == nil {
titleLockup.subTitle?.fontStyle = Styler.Font.RegularTitleMedium
}
super.setDefaults()
}
@ -54,7 +58,7 @@ public class HeadersH2CaretLinkModel: HeaderModel, MoleculeModelProtocol, Parent
//--------------------------------------------------
private enum CodingKeys: String, CodingKey {
case moleculeName
case headlineBody
case titleLockup
case caretLink
}
@ -63,7 +67,7 @@ public class HeadersH2CaretLinkModel: HeaderModel, MoleculeModelProtocol, Parent
//--------------------------------------------------
required public init(from decoder: Decoder) throws {
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
headlineBody = try typeContainer.decode(HeadlineBodyModel.self, forKey: .headlineBody)
titleLockup = try typeContainer.decodeMolecule(codingKey: .titleLockup)
caretLink = try typeContainer.decode(CaretLinkModel.self, forKey: .caretLink)
try super.init(from: decoder)
}
@ -72,7 +76,8 @@ public class HeadersH2CaretLinkModel: HeaderModel, MoleculeModelProtocol, Parent
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(moleculeName, forKey: .moleculeName)
try container.encode(headlineBody, forKey: .headlineBody)
try container.encode(caretLink, forKey: .caretLink)
guard try !helper.deprecatedEncode(to: encoder) else { return }
try container.encode(titleLockup, forKey: .titleLockup)
}
}

View File

@ -8,14 +8,14 @@
import Foundation
@objcMembers open class HeadersH2Link: HeaderView {
open class HeadersH2Link: HeaderView {
//--------------------------------------------------
// MARK: - Outlets
//--------------------------------------------------
public let headlineBody = HeadlineBody()
public let titleLockup = TitleLockup()
public let link = Link()
public lazy var stack: Stack<StackModel> = {
return Stack<StackModel>.createStack(with: [headlineBody, link])
return Stack<StackModel>.createStack(with: [titleLockup, link])
}()
//-------------------------------------------------------
@ -23,7 +23,6 @@ import Foundation
//-------------------------------------------------------
open override func setupView() {
super.setupView()
headlineBody.stylePageHeader()
addMolecule(stack)
stack.restack()
}
@ -34,16 +33,11 @@ import Foundation
open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.set(with: model, delegateObject, additionalData)
guard let model = model as? HeadersH2LinkModel else { return }
headlineBody.set(with: model.headlineBody, delegateObject, additionalData)
titleLockup.set(with: model.titleLockup, delegateObject, additionalData)
link.set(with: model.link, delegateObject, additionalData)
}
open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return 121
}
open override func reset() {
super.reset()
headlineBody.stylePageHeader()
}
}

View File

@ -14,15 +14,16 @@ public class HeadersH2LinkModel: HeaderModel, MoleculeModelProtocol, ParentMolec
//--------------------------------------------------
public static var identifier: String = "headerH2Link"
public var headlineBody: HeadlineBodyModel
public var titleLockup: TitleLockupModel
public var link: LinkModel
private var helper = DeprecatedHeadlineBodyHelper()
public var children: [MoleculeModelProtocol] {
[headlineBody, link]
[titleLockup, link]
}
public func replaceChildMolecule(with molecule: MoleculeModelProtocol) throws -> Bool {
return try replaceChildMolecule(at: &headlineBody, with: molecule)
return try replaceChildMolecule(at: &titleLockup, with: molecule)
|| replaceChildMolecule(at: &link, with: molecule)
}
@ -30,8 +31,8 @@ public class HeadersH2LinkModel: HeaderModel, MoleculeModelProtocol, ParentMolec
// MARK: - Initializer
//--------------------------------------------------
public init(headlineBody: HeadlineBodyModel, link: LinkModel) {
self.headlineBody = headlineBody
public init(titleLockup: TitleLockupModel, link: LinkModel) {
self.titleLockup = titleLockup
self.link = link
super.init()
}
@ -47,8 +48,11 @@ public class HeadersH2LinkModel: HeaderModel, MoleculeModelProtocol, ParentMolec
if bottomPadding == nil {
bottomPadding = Padding.Component.VerticalMarginSpacing
}
if headlineBody.headline?.accessibilityTraits == nil {
headlineBody.headline?.accessibilityTraits = .header
if titleLockup.title.fontStyle == nil {
titleLockup.title.fontStyle = Styler.Font.RegularTitleXLarge
}
if titleLockup.subTitle?.fontStyle == nil {
titleLockup.subTitle?.fontStyle = Styler.Font.RegularTitleMedium
}
super.setDefaults()
}
@ -59,7 +63,7 @@ public class HeadersH2LinkModel: HeaderModel, MoleculeModelProtocol, ParentMolec
private enum CodingKeys: String, CodingKey {
case moleculeName
case headlineBody
case titleLockup
case link
}
@ -69,7 +73,7 @@ public class HeadersH2LinkModel: HeaderModel, MoleculeModelProtocol, ParentMolec
required public init(from decoder: Decoder) throws {
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
headlineBody = try typeContainer.decode(HeadlineBodyModel.self, forKey: .headlineBody)
titleLockup = try typeContainer.decodeMolecule(codingKey: .titleLockup)
link = try typeContainer.decode(LinkModel.self, forKey: .link)
try super.init(from: decoder)
}
@ -78,7 +82,8 @@ public class HeadersH2LinkModel: HeaderModel, MoleculeModelProtocol, ParentMolec
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(moleculeName, forKey: .moleculeName)
try container.encode(headlineBody, forKey: .headlineBody)
try container.encode(link, forKey: .link)
guard try !helper.deprecatedEncode(to: encoder) else { return }
try container.encode(titleLockup, forKey: .titleLockup)
}
}

View File

@ -9,12 +9,12 @@
import Foundation
@objcMembers open class HeadersH2NoButtonsBodyText: HeaderView {
open class HeadersH2NoButtonsBodyText: HeaderView {
//--------------------------------------------------
// MARK: - Outlets
//--------------------------------------------------
public let headlineBody = HeadlineBody()
public let titleLockup = TitleLockup()
//-------------------------------------------------------
// MARK: - View Lifecycle
@ -22,8 +22,7 @@ import Foundation
open override func setupView() {
super.setupView()
headlineBody.stylePageHeader()
addMolecule(headlineBody)
addMolecule(titleLockup)
}
//----------------------------------------------------
@ -34,15 +33,10 @@ import Foundation
guard let model = model as? HeadersH2NoButtonsBodyTextModel else { return }
headlineBody.set(with: model.headlineBody, delegateObject, additionalData)
titleLockup.set(with: model.titleLockup, delegateObject, additionalData)
}
open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return 121
}
open override func reset() {
super.reset()
headlineBody.stylePageHeader()
}
}

View File

@ -15,22 +15,23 @@ public class HeadersH2NoButtonsBodyTextModel: HeaderModel, MoleculeModelProtocol
//--------------------------------------------------
public static var identifier: String = "headerH2"
public var headlineBody: HeadlineBodyModel
public var titleLockup: TitleLockupModel
private var helper = DeprecatedHeadlineBodyHelper()
public var children: [MoleculeModelProtocol] {
[headlineBody]
[titleLockup]
}
public func replaceChildMolecule(with molecule: MoleculeModelProtocol) throws -> Bool {
return try replaceChildMolecule(at: &headlineBody, with: molecule)
return try replaceChildMolecule(at: &titleLockup, with: molecule)
}
//--------------------------------------------------
// MARK: - Initializer
//--------------------------------------------------
public init(headlineBody: HeadlineBodyModel) {
self.headlineBody = headlineBody
public init(titleLockup: TitleLockupModel) {
self.titleLockup = titleLockup
super.init()
}
@ -41,8 +42,11 @@ public class HeadersH2NoButtonsBodyTextModel: HeaderModel, MoleculeModelProtocol
if bottomPadding == nil {
bottomPadding = Padding.Component.VerticalMarginSpacing
}
if headlineBody.headline?.accessibilityTraits == nil {
headlineBody.headline?.accessibilityTraits = .header
if titleLockup.title.fontStyle == nil {
titleLockup.title.fontStyle = Styler.Font.RegularTitleXLarge
}
if titleLockup.subTitle?.fontStyle == nil {
titleLockup.subTitle?.fontStyle = Styler.Font.RegularTitleMedium
}
super.setDefaults()
}
@ -53,7 +57,7 @@ public class HeadersH2NoButtonsBodyTextModel: HeaderModel, MoleculeModelProtocol
private enum CodingKeys: String, CodingKey {
case moleculeName
case headlineBody
case titleLockup
}
//--------------------------------------------------
@ -62,7 +66,7 @@ public class HeadersH2NoButtonsBodyTextModel: HeaderModel, MoleculeModelProtocol
required public init(from decoder: Decoder) throws {
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
headlineBody = try typeContainer.decode(HeadlineBodyModel.self, forKey: .headlineBody)
titleLockup = try helper.deprecatedCreate(from: decoder) ?? typeContainer.decodeMolecule(codingKey: .titleLockup)
try super.init(from: decoder)
}
@ -70,6 +74,7 @@ public class HeadersH2NoButtonsBodyTextModel: HeaderModel, MoleculeModelProtocol
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(moleculeName, forKey: .moleculeName)
try container.encode(headlineBody, forKey: .headlineBody)
guard try !helper.deprecatedEncode(to: encoder) else { return }
try container.encode(titleLockup, forKey: .titleLockup)
}
}

View File

@ -9,15 +9,15 @@
import Foundation
@objcMembers open class HeadersH2TinyButton: HeaderView {
open class HeadersH2TinyButton: HeaderView {
//--------------------------------------------------
// MARK: - Outlets
//--------------------------------------------------
public let headlineBody = HeadlineBody()
public let titleLockup = TitleLockup()
public let button = PillButton()
public lazy var stack: Stack<StackModel> = {
return Stack<StackModel>.createStack(with: [(view: headlineBody, model: StackItemModel(horizontalAlignment: .fill)),
return Stack<StackModel>.createStack(with: [(view: titleLockup, model: StackItemModel(horizontalAlignment: .fill)),
(view: button, model: StackItemModel(spacing: spacingBetwenHeadlineBodyAndButton, horizontalAlignment: .leading))],
axis: .vertical)
}()
@ -34,7 +34,6 @@ import Foundation
open override func setupView() {
super.setupView()
headlineBody.stylePageHeader()
addMolecule(stack)
stack.restack()
}
@ -48,16 +47,11 @@ import Foundation
guard let model = model as? HeadersH2TinyButtonModel else { return }
headlineBody.set(with: model.headlineBody, delegateObject, additionalData)
titleLockup.set(with: model.titleLockup, delegateObject, additionalData)
button.set(with: model.button, delegateObject, additionalData)
}
open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return 121
}
open override func reset() {
super.reset()
headlineBody.stylePageHeader()
}
}

View File

@ -15,15 +15,16 @@ public class HeadersH2TinyButtonModel: HeaderModel, MoleculeModelProtocol, Paren
//--------------------------------------------------
public static var identifier: String = "headerH2BtnTny"
public var headlineBody: HeadlineBodyModel
public var titleLockup: TitleLockupModel
public var button: ButtonModel
private var helper = DeprecatedHeadlineBodyHelper()
public var children: [MoleculeModelProtocol] {
[headlineBody, button]
[titleLockup, button]
}
public func replaceChildMolecule(with molecule: MoleculeModelProtocol) throws -> Bool {
return try replaceChildMolecule(at: &headlineBody, with: molecule)
return try replaceChildMolecule(at: &titleLockup, with: molecule)
|| replaceChildMolecule(at: &button, with: molecule)
}
@ -31,8 +32,8 @@ public class HeadersH2TinyButtonModel: HeaderModel, MoleculeModelProtocol, Paren
// MARK: - Initializer
//--------------------------------------------------
public init(headlineBody: HeadlineBodyModel, button: ButtonModel) {
self.headlineBody = headlineBody
public init(titleLockup: TitleLockupModel, button: ButtonModel) {
self.titleLockup = titleLockup
self.button = button
super.init()
}
@ -48,8 +49,11 @@ public class HeadersH2TinyButtonModel: HeaderModel, MoleculeModelProtocol, Paren
if bottomPadding == nil {
bottomPadding = Padding.Component.VerticalMarginSpacing
}
if headlineBody.headline?.accessibilityTraits == nil {
headlineBody.headline?.accessibilityTraits = .header
if titleLockup.title.fontStyle == nil {
titleLockup.title.fontStyle = Styler.Font.RegularTitleXLarge
}
if titleLockup.subTitle?.fontStyle == nil {
titleLockup.subTitle?.fontStyle = Styler.Font.RegularTitleMedium
}
super.setDefaults()
button.style = .secondary
@ -62,7 +66,7 @@ public class HeadersH2TinyButtonModel: HeaderModel, MoleculeModelProtocol, Paren
private enum CodingKeys: String, CodingKey {
case moleculeName
case headlineBody
case titleLockup
case button
}
@ -72,7 +76,7 @@ public class HeadersH2TinyButtonModel: HeaderModel, MoleculeModelProtocol, Paren
required public init(from decoder: Decoder) throws {
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
headlineBody = try typeContainer.decode(HeadlineBodyModel.self, forKey: .headlineBody)
titleLockup = try typeContainer.decodeMolecule(codingKey: .titleLockup)
button = try typeContainer.decode(ButtonModel.self, forKey: .button)
try super.init(from: decoder)
}
@ -81,7 +85,8 @@ public class HeadersH2TinyButtonModel: HeaderModel, MoleculeModelProtocol, Paren
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(moleculeName, forKey: .moleculeName)
try container.encode(headlineBody, forKey: .headlineBody)
try container.encode(button, forKey: .button)
guard try !helper.deprecatedEncode(to: encoder) else { return }
try container.encode(titleLockup, forKey: .titleLockup)
}
}

View File

@ -6,8 +6,8 @@
// Copyright © 2019 Suresh, Kamlesh. All rights reserved.
//
@objcMembers open class HeadlineBodyModel: ParentMoleculeModelProtocol {
import MVMCore
open class HeadlineBodyModel: ParentMoleculeModelProtocol {
//--------------------------------------------------
// MARK: - Properties
//--------------------------------------------------
@ -90,3 +90,24 @@
try container.encodeIfPresent(backgroundColor, forKey: .backgroundColor)
}
}
public extension HeadlineBodyModel {
func createHeaderTitleLockupModel(defaultStyle: Style = .header) throws -> TitleLockupModel {
guard let headline = headline else { throw ModelRegistry.Error.decoderOther(message: "headline is required for this use case.") }
var body = self.body
switch style ?? defaultStyle {
case .landingHeader:
headline.fontStyle = Styler.Font.RegularTitle2XLarge
body?.fontStyle = Styler.Font.RegularTitleMedium
case .itemHeader:
headline.fontStyle = Styler.Font.BoldTitleLarge
body?.fontStyle = Styler.Font.RegularBodyLarge
default:
headline.fontStyle = Styler.Font.RegularTitleXLarge
body?.fontStyle = Styler.Font.RegularTitleMedium
}
let model = try TitleLockupModel(title: headline, subTitle: body)
model.id = id
return model
}
}