-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
BackerDashboardEmptyStateCell.swift
121 lines (104 loc) · 3.9 KB
/
BackerDashboardEmptyStateCell.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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import KsApi
import Library
import Prelude
import UIKit
internal final class BackerDashboardEmptyStateCell: UITableViewCell, ValueCell {
@IBOutlet private var filledHeartIconImageView: UIImageView!
@IBOutlet private var messageLabel: UILabel!
@IBOutlet private var titleLabel: UILabel!
@IBOutlet private var iconImageView: UIImageView!
private var isAnimating: Bool = false
private let duration = 0.4
private let hiddenHeartAlpha = CGFloat(0.0)
private let visibleHeartAlpha = CGFloat(1.0)
private let shrunkHeartTransform = CGAffineTransform(scaleX: 0.7, y: 0.7)
private let expandedHearTransform = CGAffineTransform(scaleX: 1.0, y: 1.0)
internal func configureWith(value: ProfileProjectsType) {
switch value {
case .backed:
self.messageLabel.text = Strings.Pledge_to_your_favorites_then_view_all_the_projects()
self.titleLabel.text = Strings.Explore_creative_projects()
_ = self.iconImageView
|> UIImageView.lens.image
.~ UIImage(
named: "icon--eye",
in: .framework,
compatibleWith: nil
)
_ = self.filledHeartIconImageView
|> UIImageView.lens.isHidden .~ true
case .saved:
self.messageLabel.text = Strings.Tap_the_heart_on_a_project_to_get_notified()
self.titleLabel.text = Strings.No_saved_projects()
NotificationCenter.default.addObserver(
self,
selector: #selector(self.animateToFilledHeart),
name: .ksr_savedProjectEmptyStateTapped,
object: nil
)
self.animateToFilledHeart()
}
}
@objc internal func animateToFilledHeart() {
guard self.isAnimating == false else { return }
UIView.animate(
withDuration: self.duration,
delay: 1.0,
usingSpringWithDamping: 1.0,
initialSpringVelocity: 0.0,
options: .curveEaseInOut,
animations: { [weak self] in
guard let _self = self else { return }
_self.isAnimating = true
_self.filledHeartIconImageView.alpha = _self.hiddenHeartAlpha
_self.iconImageView.alpha = _self.hiddenHeartAlpha
_self.iconImageView.transform = _self.shrunkHeartTransform
_self.filledHeartIconImageView.transform = _self.expandedHearTransform
_self.filledHeartIconImageView.alpha = _self.visibleHeartAlpha
},
completion: { [weak self] _ in
guard let _self = self else { return }
_self.animateToOutlineHeart()
}
)
}
internal func animateToOutlineHeart() {
UIView.animate(
withDuration: self.duration,
delay: 0.6,
usingSpringWithDamping: 1.0,
initialSpringVelocity: 0.0,
options: .curveEaseInOut,
animations: { [weak self] in
guard let _self = self else { return }
_self.filledHeartIconImageView.alpha = _self.hiddenHeartAlpha
_self.iconImageView.alpha = _self.hiddenHeartAlpha
_self.filledHeartIconImageView.transform = _self.shrunkHeartTransform
_self.iconImageView.transform = _self.expandedHearTransform
_self.iconImageView.alpha = _self.visibleHeartAlpha
},
completion: { [weak self] _ in
guard let _self = self else { return }
_self.isAnimating = false
}
)
}
internal override func bindStyles() {
super.bindStyles()
_ = self
|> baseTableViewCellStyle()
|> UITableViewCell.lens.contentView.layoutMargins %~~ { _, cell in
cell.traitCollection.isRegularRegular
? .init(topBottom: Styles.grid(4), leftRight: Styles.grid(20))
: .init(topBottom: Styles.grid(10), leftRight: Styles.grid(3))
}
_ = self.messageLabel
|> UILabel.lens.textColor .~ .ksr_support_400
|> UILabel.lens.font .~ UIFont.ksr_body(size: 15.0)
_ = self.titleLabel
|> UILabel.lens.textColor .~ .ksr_support_700
|> UILabel.lens.font .~ UIFont.ksr_headline(size: 21.0)
_ = self.iconImageView
|> UIImageView.lens.tintColor .~ .ksr_support_700
}
}