diff --git a/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.dark_iPad_compacthorizontalsizeclasslayout.png b/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.dark_iPad_compacthorizontalsizeclasslayout.png index b9b02ebf5f..c9b7baf228 100644 Binary files a/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.dark_iPad_compacthorizontalsizeclasslayout.png and b/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.dark_iPad_compacthorizontalsizeclasslayout.png differ diff --git a/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.dark_iPad_regularhorizontalsizeclasslayout.png b/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.dark_iPad_regularhorizontalsizeclasslayout.png index b9b02ebf5f..c9b7baf228 100644 Binary files a/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.dark_iPad_regularhorizontalsizeclasslayout.png and b/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.dark_iPad_regularhorizontalsizeclasslayout.png differ diff --git a/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.dark_iPhone_compacthorizontalsizeclasslayout.png b/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.dark_iPhone_compacthorizontalsizeclasslayout.png index 03b28c992b..43040ae261 100644 Binary files a/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.dark_iPhone_compacthorizontalsizeclasslayout.png and b/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.dark_iPhone_compacthorizontalsizeclasslayout.png differ diff --git a/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.dark_iPhone_regularhorizontalsizeclasslayout.png b/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.dark_iPhone_regularhorizontalsizeclasslayout.png index 03b28c992b..43040ae261 100644 Binary files a/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.dark_iPhone_regularhorizontalsizeclasslayout.png and b/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.dark_iPhone_regularhorizontalsizeclasslayout.png differ diff --git a/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.light_iPad_compacthorizontalsizeclasslayout.png b/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.light_iPad_compacthorizontalsizeclasslayout.png index 9d5eb31302..5dabcf3dc3 100644 Binary files a/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.light_iPad_compacthorizontalsizeclasslayout.png and b/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.light_iPad_compacthorizontalsizeclasslayout.png differ diff --git a/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.light_iPad_regularhorizontalsizeclasslayout.png b/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.light_iPad_regularhorizontalsizeclasslayout.png index 9d5eb31302..5dabcf3dc3 100644 Binary files a/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.light_iPad_regularhorizontalsizeclasslayout.png and b/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.light_iPad_regularhorizontalsizeclasslayout.png differ diff --git a/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.light_iPhone_compacthorizontalsizeclasslayout.png b/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.light_iPhone_compacthorizontalsizeclasslayout.png index 48a399553b..dbd07eaec2 100644 Binary files a/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.light_iPhone_compacthorizontalsizeclasslayout.png and b/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.light_iPhone_compacthorizontalsizeclasslayout.png differ diff --git a/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.light_iPhone_regularhorizontalsizeclasslayout.png b/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.light_iPhone_regularhorizontalsizeclasslayout.png index 48a399553b..dbd07eaec2 100644 Binary files a/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.light_iPhone_regularhorizontalsizeclasslayout.png and b/Demo/SnapshotTests/__Snapshots__/ComponentViewTests/SafetyElementsDemoView.light_iPhone_regularhorizontalsizeclasslayout.png differ diff --git a/Demo/Sources/Components/SafetyElementsView/SafetyElementsDemoView.swift b/Demo/Sources/Components/SafetyElementsView/SafetyElementsDemoView.swift index 1a8cd4ad25..9461a090da 100644 --- a/Demo/Sources/Components/SafetyElementsView/SafetyElementsDemoView.swift +++ b/Demo/Sources/Components/SafetyElementsView/SafetyElementsDemoView.swift @@ -49,7 +49,14 @@ class SafetyElementsDemoView: UIView { SafetyElementViewModel( title: "Bytterett", icon: UIImage(named: .warranty), - body: "Denne bilen selges med bytterett fra forhandler. Det betyr at du som kjøper har mulighet til å bytte den mot en annen bil, i henhold til forhandlerens vilkår. Dette kan du gjøre dersom bilen du har kjøpt av en eller annen grunn ikke tilfredsstiller dine forventninger eller behov. Produktet tilbys for at du som kjøper skal føle deg helt trygg på at du ender opp med riktig bil for ditt behov.", + body: "Denne bilen selges med bytterett fra forhandler. Det betyr at du som kjøper har mulighet til å bytte den mot en annen bil, i henhold til forhandlerens vilkår.", + bottomLink: nil + ), + SafetyElementViewModel( + title: "Bytterett", + icon: UIImage(named: .warranty), + body: "Denne bilen selges med bytterett fra forhandler.", + emphasizedBody: "Denne bilen selges med bytterett fra forhandler.", bottomLink: nil ), SafetyElementViewModel( diff --git a/FinniversKit/Sources/Components/SafetyElementsView/Common/ElementContentView.swift b/FinniversKit/Sources/Components/SafetyElementsView/Common/ElementContentView.swift index f67eb68993..b3423f05d1 100644 --- a/FinniversKit/Sources/Components/SafetyElementsView/Common/ElementContentView.swift +++ b/FinniversKit/Sources/Components/SafetyElementsView/Common/ElementContentView.swift @@ -1,6 +1,3 @@ -// -// Copyright © 2020 FINN AS. All rights reserved. -// import Warp public protocol SafetyElementContentViewDelegate: AnyObject { @@ -9,10 +6,18 @@ public protocol SafetyElementContentViewDelegate: AnyObject { public extension SafetyElementsView { class ElementContentView: UIView { + + // MARK: - Public properties + public weak var delegate: SafetyElementContentViewDelegate? + // MARK: - Private properties + + private let linkButtonStyle = Button.Style.link.overrideStyle(normalFont: .body) private var topLink: LinkButtonViewModel? private var bottomLink: LinkButtonViewModel? + private lazy var topLinkButton: Button = makeExternalLinkButton(onTap: #selector(didTapOnTopLink)) + private lazy var bottomLinkButton: Button = makeExternalLinkButton(onTap: #selector(didTapOnBottomLink)) private lazy var contentStackView: UIStackView = { let stackView = UIStackView(withAutoLayout: true) @@ -22,8 +27,6 @@ public extension SafetyElementsView { return stackView }() - private let linkButtonStyle = Button.Style.link.overrideStyle(normalFont: .body) - private lazy var contentLabel: Label = { let label = Label(style: .body, withAutoLayout: true) label.numberOfLines = 0 @@ -31,8 +34,14 @@ public extension SafetyElementsView { return label }() - private lazy var topLinkButton: Button = makeExternalLinkButton(onTap: #selector(didTapOnTopLink)) - private lazy var bottomLinkButton: Button = makeExternalLinkButton(onTap: #selector(didTapOnBottomLink)) + private lazy var emphasizedContentLabel: Label = { + let label = Label(style: .bodyStrong, withAutoLayout: true) + label.numberOfLines = 0 + label.lineBreakMode = .byWordWrapping + return label + }() + + // MARK: - Init public override init(frame: CGRect) { super.init(frame: frame) @@ -41,12 +50,20 @@ public extension SafetyElementsView { public required init?(coder aDecoder: NSCoder) { fatalError() } + // MARK: - Public methods + public func configure(with viewModel: SafetyElementViewModel) { - configure(with: viewModel.body, topLink: viewModel.topLink, bottomLink: viewModel.bottomLink) + configure( + with: viewModel.body, + emphasizedContent: viewModel.emphasizedBody, + topLink: viewModel.topLink, + bottomLink: viewModel.bottomLink + ) } public func configure( with content: String, + emphasizedContent: String? = nil, topLink: LinkButtonViewModel? = nil, bottomLink: LinkButtonViewModel? = nil ) { @@ -54,14 +71,21 @@ public extension SafetyElementsView { self.bottomLink = bottomLink contentLabel.text = content - if let topLink = topLink { + if let emphasizedContent { + emphasizedContentLabel.text = emphasizedContent + emphasizedContentLabel.isHidden = false + } else { + emphasizedContentLabel.isHidden = true + } + + if let topLink { topLinkButton.setTitle(topLink.buttonTitle, for: .normal) topLinkButton.isHidden = false } else { topLinkButton.isHidden = true } - if let bottomLink = bottomLink { + if let bottomLink { bottomLinkButton.setTitle(bottomLink.buttonTitle, for: .normal) bottomLinkButton.isHidden = false } else { @@ -69,15 +93,22 @@ public extension SafetyElementsView { } } + // MARK: - Setup + private func setup() { addSubview(contentStackView) - contentStackView.addArrangedSubview(topLinkButton) - contentStackView.addArrangedSubview(contentLabel) - contentStackView.addArrangedSubview(bottomLinkButton) + contentStackView.addArrangedSubviews([ + topLinkButton, + contentLabel, + emphasizedContentLabel, + bottomLinkButton, + ]) contentStackView.fillInSuperviewLayoutMargins() } + // MARK: - Private methods + @objc private func didTapOnBottomLink() { guard let bottomLink = bottomLink else { return } didTap(on: bottomLink) diff --git a/FinniversKit/Sources/Components/SafetyElementsView/SafetyElementViewModel.swift b/FinniversKit/Sources/Components/SafetyElementsView/SafetyElementViewModel.swift index 88f3130558..91dcfdec06 100644 --- a/FinniversKit/Sources/Components/SafetyElementsView/SafetyElementViewModel.swift +++ b/FinniversKit/Sources/Components/SafetyElementsView/SafetyElementViewModel.swift @@ -1,20 +1,25 @@ -// -// Copyright © 2020 FINN AS. All rights reserved. -// - import Foundation public struct SafetyElementViewModel { public let title: String public let icon: UIImage public let body: String + public let emphasizedBody: String? public let topLink: LinkButtonViewModel? public let bottomLink: LinkButtonViewModel? - public init(title: String, icon: UIImage, body: String, topLink: LinkButtonViewModel? = nil, bottomLink: LinkButtonViewModel? = nil) { + public init( + title: String, + icon: UIImage, + body: String, + emphasizedBody: String? = nil, + topLink: LinkButtonViewModel? = nil, + bottomLink: LinkButtonViewModel? = nil + ) { self.title = title self.icon = icon self.body = body + self.emphasizedBody = emphasizedBody self.topLink = topLink self.bottomLink = bottomLink }