-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
Copy pathActivitySampleBackingCellViewModel.swift
68 lines (53 loc) · 2.3 KB
/
ActivitySampleBackingCellViewModel.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
import KsApi
import Prelude
import ReactiveExtensions
import ReactiveSwift
import UIKit
public protocol ActivitySampleBackingCellViewModelInputs {
/// Call to configure cell with activity value.
func configureWith(activity: Activity)
/// Call when the see all activity button is tapped.
func seeAllActivityTapped()
}
public protocol ActivitySampleBackingCellViewModelOutputs {
/// Emits the backer image url to be displayed.
var backerImageURL: Signal<URL?, Never> { get }
/// Emits the backing message to be displayed.
var backingTitleText: Signal<NSAttributedString, Never> { get }
/// Emits when should go to activities screen.
var goToActivity: Signal<Void, Never> { get }
}
public protocol ActivitySampleBackingCellViewModelType {
var inputs: ActivitySampleBackingCellViewModelInputs { get }
var outputs: ActivitySampleBackingCellViewModelOutputs { get }
}
public final class ActivitySampleBackingCellViewModel: ActivitySampleBackingCellViewModelInputs,
ActivitySampleBackingCellViewModelOutputs, ActivitySampleBackingCellViewModelType {
public init() {
let activity = self.activityProperty.signal.skipNil()
self.backingTitleText = activity.map {
let string = Strings.activity_friend_backed_project_name_by_creator_name(
friend_name: $0.user?.name ?? "",
project_name: $0.project?.name ?? "",
creator_name: $0.project?.creator.name ?? ""
)
return string.simpleHtmlAttributedString(font: UIFont.ksr_subhead()) ?? NSAttributedString(string: "")
}
self.backerImageURL = activity
.map { ($0.user?.avatar.medium).flatMap(URL.init) }
self.goToActivity = self.seeAllActivityTappedProperty.signal
}
fileprivate let activityProperty = MutableProperty<Activity?>(nil)
public func configureWith(activity: Activity) {
self.activityProperty.value = activity
}
fileprivate let seeAllActivityTappedProperty = MutableProperty(())
public func seeAllActivityTapped() {
self.seeAllActivityTappedProperty.value = ()
}
public let backingTitleText: Signal<NSAttributedString, Never>
public let backerImageURL: Signal<URL?, Never>
public let goToActivity: Signal<Void, Never>
public var inputs: ActivitySampleBackingCellViewModelInputs { return self }
public var outputs: ActivitySampleBackingCellViewModelOutputs { return self }
}