diff --git a/MVMCoreUI/Atomic/Atoms/Views/LineModel.swift b/MVMCoreUI/Atomic/Atoms/Views/LineModel.swift index ecb39df0..a170c4b4 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/LineModel.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/LineModel.swift @@ -10,7 +10,7 @@ import UIKit import VDSColorTokens import VDS -@objcMembers public class LineModel: MoleculeModelProtocol, Invertable { +public class LineModel: MoleculeModelProtocol, Invertable { //-------------------------------------------------- // MARK: - Enums //-------------------------------------------------- @@ -29,9 +29,23 @@ import VDS case between } + /** + The style of the line: + - secondary (VDS Secondary) + - primary (VDS Primary) + - standard (VDS Secondary) - deprecated + - thin (VDS Primar) - deprecated + - medium (VDS Primar) + - heavy (VDS Primar) + - none (hidden) + */ public enum Style: String, Codable { case secondary case primary + case standard + case thin + case medium + case heavy case none } @@ -43,7 +57,7 @@ import VDS public var id: String = UUID().uuidString public var backgroundColor: Color? - public var type: Style = .primary + public var type: Style = .secondary public var frequency: Frequency? = .allExceptTop public var inverted: Bool = false @@ -58,7 +72,7 @@ import VDS self.type = type } - public init(verticalLineOf type: Style, backgroundColor: Color? = nil) { + public init(verticalLineOf type: Style) { self.type = type } @@ -100,7 +114,7 @@ import VDS /// adding code to look for the old useVerticalLine or the new orientation if let useVerticalLine = try typeContainer.decodeIfPresent(Bool.self, forKey: .useVerticalLine) { orientation = useVerticalLine ? .vertical : .horizontal - }else if let orientation = try typeContainer.decodeIfPresent(VDS.Line.Orientation.self, forKey: .orientation) { + } else if let orientation = try typeContainer.decodeIfPresent(VDS.Line.Orientation.self, forKey: .orientation) { self.orientation = orientation } } @@ -112,6 +126,6 @@ import VDS try container.encode(type, forKey: .type) try container.encode(inverted, forKey: .inverted) try container.encodeIfPresent(frequency, forKey: .frequency) - try container.encodeIfPresent(orientation == .vertical, forKey: .useVerticalLine) + try container.encode(orientation == .vertical, forKey: .useVerticalLine) } } diff --git a/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/ListProgressBarThin.swift b/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/ListProgressBarThin.swift index d9875068..e29ef00c 100644 --- a/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/ListProgressBarThin.swift +++ b/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/ListProgressBarThin.swift @@ -7,7 +7,7 @@ // -@objcMembers open class ListProgressBarThin: TableViewCell { +open class ListProgressBarThin: TableViewCell { //-------------------------------------------------- // MARK: - Outlets //-------------------------------------------------- @@ -15,7 +15,11 @@ public let progressBar = ProgressBar() public let leftHeadline = Label(fontStyle: .BoldBodySmall) public let leftBody = Label(fontStyle: .BoldBodySmall) - public let rightBar = Line() + public let rightBar: DataLine = { + var line = DataLine() + line.heightConstraint.constant = 2 + return line + }() public let rightLabel = Label(fontStyle: .BoldBodySmall) private let barStackItem: StackItem private let rightLabelStackItem: StackItem @@ -102,7 +106,6 @@ leftHeadline.styleB1(true) leftBody.styleB2(true) rightLabel.styleB2(true) - rightBar.setStyle(.primary) } //------------------------------------------------------ diff --git a/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/ListProgressBarThinModel.swift b/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/ListProgressBarThinModel.swift index d6787f52..0cc5f172 100644 --- a/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/ListProgressBarThinModel.swift +++ b/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/ListProgressBarThinModel.swift @@ -16,14 +16,14 @@ public class ListProgressBarThinModel: ListItemModel, MoleculeModelProtocol { public var progressBar: ProgressBarModel public var leftHeadline: LabelModel public var leftBody: LabelModel? - public var rightBar: LineModel + public var rightBar: DataLineModel public var rightLabel: LabelModel //-------------------------------------------------- // MARK: - Initializer //-------------------------------------------------- - public init(progressBar: ProgressBarModel, leftHeadline: LabelModel, leftBody: LabelModel? = nil, rightBar: LineModel, rightLabel: LabelModel) { + public init(progressBar: ProgressBarModel, leftHeadline: LabelModel, leftBody: LabelModel? = nil, rightBar: DataLineModel, rightLabel: LabelModel) { self.progressBar = progressBar self.leftHeadline = leftHeadline self.leftBody = leftBody @@ -38,9 +38,7 @@ public class ListProgressBarThinModel: ListItemModel, MoleculeModelProtocol { override public func setDefaults() { super.setDefaults() - - rightBar.type = .primary - + if rightBar.backgroundColor == nil { rightBar.backgroundColor = Color(uiColor: .gray) } @@ -74,7 +72,7 @@ public class ListProgressBarThinModel: ListItemModel, MoleculeModelProtocol { progressBar = try typeContainer.decode(ProgressBarModel.self, forKey:.progressBar) leftHeadline = try typeContainer.decode(LabelModel.self, forKey: .leftHeadline) leftBody = try typeContainer.decodeIfPresent(LabelModel.self, forKey: .leftBody) - rightBar = try typeContainer.decode(LineModel.self, forKey: .rightBar) + rightBar = try typeContainer.decode(DataLineModel.self, forKey: .rightBar) rightLabel = try typeContainer.decode(LabelModel.self, forKey: .rightLabel) try super.init(from: decoder) } diff --git a/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/RightVariable/ListRightVariableTotalData.swift b/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/RightVariable/ListRightVariableTotalData.swift index 9845ea16..6dc1ffe2 100644 --- a/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/RightVariable/ListRightVariableTotalData.swift +++ b/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/RightVariable/ListRightVariableTotalData.swift @@ -6,15 +6,26 @@ // Copyright © 2020 Verizon Wireless. All rights reserved. // +open class DataLine: View { + + lazy var heightConstraint = heightAnchor.constraint(equalToConstant: 4) + lazy var widthConstraint = widthAnchor.constraint(equalToConstant: 20) + + open override func setupView() { + super.setupView() + heightConstraint.isActive = true + widthConstraint.isActive = true + } +} -@objcMembers open class ListRightVariableTotalData: TableViewCell { +open class ListRightVariableTotalData: TableViewCell { //----------------------------------------------------- // MARK: - Outlets //----------------------------------------------------- public let leftLabel = Label(fontStyle: .BoldBodySmall) public let rightLabel = Label(fontStyle: .RegularBodySmall) - public let bar = Line() + public let bar = DataLine() //----------------------------------------------------- // MARK: - Properties @@ -44,8 +55,6 @@ override open func setupView() { super.setupView() - bar.setStyle(.primary) - bar.widthAnchor.constraint(equalToConstant: 20).isActive = true rightLabel.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 900), for: .horizontal) addMolecule(stack) stack.restack() @@ -74,7 +83,6 @@ super.reset() leftLabel.setFontStyle(.BoldBodySmall) rightLabel.setFontStyle(.RegularBodySmall) - bar.setStyle(.primary) } //-------------------------------------------------- diff --git a/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/RightVariable/ListRightVariableTotalDataModel.swift b/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/RightVariable/ListRightVariableTotalDataModel.swift index 53ede6e5..28a3a25c 100644 --- a/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/RightVariable/ListRightVariableTotalDataModel.swift +++ b/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/RightVariable/ListRightVariableTotalDataModel.swift @@ -6,8 +6,18 @@ // Copyright © 2020 Verizon Wireless. All rights reserved. // +public struct DataLineModel: Codable, MoleculeModelProtocol { + public var id: String = UUID().uuidString + public static var identifier: String = "line" + public var backgroundColor: Color? + + private enum CodingKeys: String, CodingKey { + case backgroundColor + } +} public class ListRightVariableTotalDataModel: ListItemModel, MoleculeModelProtocol { + //-------------------------------------------------- // MARK: - Properties //-------------------------------------------------- @@ -15,7 +25,7 @@ public class ListRightVariableTotalDataModel: ListItemModel, MoleculeModelProtoc public static var identifier: String = "listRVLine" public var leftLabel: LabelModel public var rightLabel: LabelModel - public var bar: LineModel + public var bar: DataLineModel //-------------------------------------------------- // MARK: - Method @@ -24,8 +34,6 @@ public class ListRightVariableTotalDataModel: ListItemModel, MoleculeModelProtoc override public func setDefaults() { super.setDefaults() rightLabel.hero = 0 - bar.type = .primary - if bar.backgroundColor == nil { bar.backgroundColor = Color(uiColor: .mvmBlue) } @@ -35,7 +43,7 @@ public class ListRightVariableTotalDataModel: ListItemModel, MoleculeModelProtoc // MARK: - Initializer //-------------------------------------------------- - public init(leftLabel: LabelModel, rightlabel:LabelModel, bar: LineModel){ + public init(leftLabel: LabelModel, rightlabel:LabelModel, bar: DataLineModel) { self.leftLabel = leftLabel self.rightLabel = rightlabel self.bar = bar @@ -46,7 +54,7 @@ public class ListRightVariableTotalDataModel: ListItemModel, MoleculeModelProtoc // MARK: - Keys //-------------------------------------------------- - private enum CodingKeys: String, CodingKey{ + private enum CodingKeys: String, CodingKey { case moleculeName case leftLabel case rightLabel @@ -61,7 +69,7 @@ public class ListRightVariableTotalDataModel: ListItemModel, MoleculeModelProtoc let typeContainer = try decoder.container(keyedBy: CodingKeys.self) leftLabel = try typeContainer.decode(LabelModel.self, forKey: .leftLabel) rightLabel = try typeContainer.decode(LabelModel.self, forKey: .rightLabel) - bar = try typeContainer.decode(LineModel.self, forKey: .bar) + bar = try typeContainer.decode(DataLineModel.self, forKey: .bar) try super.init(from: decoder) } diff --git a/MVMCoreUI/Containers/NavigationController/UINavigationController+Extension.swift b/MVMCoreUI/Containers/NavigationController/UINavigationController+Extension.swift index ac9684ac..fb1bde79 100644 --- a/MVMCoreUI/Containers/NavigationController/UINavigationController+Extension.swift +++ b/MVMCoreUI/Containers/NavigationController/UINavigationController+Extension.swift @@ -82,13 +82,6 @@ public extension UINavigationController { } } - /// Returns a ShadowImage based on the line property of NavigationItemModelProtocol - func getNavigationBarShadowImage(for navigationItemModel: NavigationItemModelProtocol) -> UIImage? { - guard let model = navigationItemModel.line else { return nil } - let line = Line(model: model, nil, nil) - return line.lineColor.image(CGSize(width: line.lineWidth, height: line.lineWidth)) - } - /// Convenience function for setting the navigation bar ui @MainActor func setNavigationBarUI(with model: NavigationItemModelProtocol) { @@ -105,14 +98,7 @@ public extension UINavigationController { appearance.backgroundColor = backgroundColor appearance.titleTextAttributes.updateValue(tint, forKey: .foregroundColor) appearance.titlePositionAdjustment = model.titleOffset ?? .zero - if let type = model.line?.type, - type != .none, - let color = model.line?.backgroundColor { - appearance.shadowColor = color.uiColor - } else { - appearance.shadowColor = .clear - } - appearance.shadowImage = getNavigationBarShadowImage(for: model)?.withRenderingMode(.alwaysTemplate) + appearance.setShadow(for: model.line) navigationBar.standardAppearance = appearance navigationBar.scrollEdgeAppearance = appearance @@ -126,3 +112,16 @@ public extension UINavigationController { return viewController } } + +public extension UINavigationBarAppearance { + func setShadow(for model: LineModel?) { + let model = model ?? LineModel(type: .secondary) + let line = Line(model: model, nil, nil) + if model.type != .none { + shadowColor = line.lineColor + } else { + shadowColor = .clear + } + shadowImage = line.lineColor.image(CGSize(width: line.lineWidth, height: line.lineWidth)).withRenderingMode(.alwaysTemplate) + } +} diff --git a/MVMCoreUI/Managers/SubNav/SubNavManagerController.swift b/MVMCoreUI/Managers/SubNav/SubNavManagerController.swift index 458c0169..7461c93d 100644 --- a/MVMCoreUI/Managers/SubNav/SubNavManagerController.swift +++ b/MVMCoreUI/Managers/SubNav/SubNavManagerController.swift @@ -125,13 +125,14 @@ open class SubNavManagerController: ViewController, MVMCoreViewManagerProtocol, /// Hides/Shows the navigation bar for the page. open func hideNavigationBarLine(_ isHidden: Bool) { guard self == navigationController?.topViewController else { return } - var color = UIColor.clear - if !isHidden, - let backgroundColor = (getCurrentViewController() as? PageProtocol)?.pageModel?.navigationBar?.line?.backgroundColor?.uiColor { - color = backgroundColor + var model: LineModel? + if isHidden { + model = LineModel(type: .none) + } else if let lineModel = (getCurrentViewController() as? PageProtocol)?.pageModel?.navigationBar?.line { + model = lineModel } - navigationController?.navigationBar.standardAppearance.shadowColor = color - navigationController?.navigationBar.scrollEdgeAppearance?.shadowColor = color + navigationController?.navigationBar.standardAppearance.setShadow(for: model) + navigationController?.navigationBar.scrollEdgeAppearance?.setShadow(for: model) } open override func updateViews() {