-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
ProjectPamphletCreatorHeaderCellViewModel.swift
69 lines (55 loc) · 2.49 KB
/
ProjectPamphletCreatorHeaderCellViewModel.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import Foundation
import KsApi
import ReactiveSwift
import UIKit
public protocol ProjectPamphletCreatorHeaderCellViewModelInputs {
func configure(with project: Project)
}
public protocol ProjectPamphletCreatorHeaderCellViewModelOutputs {
var launchDateLabelAttributedText: Signal<NSAttributedString, Never> { get }
}
public protocol ProjectPamphletCreatorHeaderCellViewModelType {
var inputs: ProjectPamphletCreatorHeaderCellViewModelInputs { get }
var outputs: ProjectPamphletCreatorHeaderCellViewModelOutputs { get }
}
public final class ProjectPamphletCreatorHeaderCellViewModel: ProjectPamphletCreatorHeaderCellViewModelType,
ProjectPamphletCreatorHeaderCellViewModelInputs, ProjectPamphletCreatorHeaderCellViewModelOutputs {
public init() {
self.launchDateLabelAttributedText = self.projectSignal
.map(attributedLaunchDateString(with:))
.skipNil()
}
private let (projectSignal, projectObserver) = Signal<Project, Never>.pipe()
public func configure(with project: Project) {
self.projectObserver.send(value: project)
}
public let launchDateLabelAttributedText: Signal<NSAttributedString, Never>
public var inputs: ProjectPamphletCreatorHeaderCellViewModelInputs { return self }
public var outputs: ProjectPamphletCreatorHeaderCellViewModelOutputs { return self }
}
private func attributedLaunchDateString(with project: Project) -> NSAttributedString? {
var launchDate = ""
if let date = project.dates.launchedAt {
launchDate = Format.date(
secondsInUTC: date,
dateStyle: .long,
timeStyle: .none,
timeZone: UTCTimeZone
)
}
let fullString = Strings.You_launched_this_project_on_launch_date(launch_date: launchDate)
let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: fullString)
let fullRange = (fullString as NSString).localizedStandardRange(of: fullString)
let rangeDate: NSRange = (fullString as NSString).localizedStandardRange(of: launchDate)
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = .left
let regularFontAttribute = [
NSAttributedString.Key.paragraphStyle: paragraphStyle,
NSAttributedString.Key.font: UIFont.ksr_subhead(),
NSAttributedString.Key.foregroundColor: UIColor.ksr_support_700
]
let boldFontAttribute = [NSAttributedString.Key.font: UIFont.ksr_subhead().bolded]
attributedString.addAttributes(regularFontAttribute, range: fullRange)
attributedString.addAttributes(boldFontAttribute, range: rangeDate)
return attributedString
}