Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[NT-558][NT-508][NT-532] Indicate Backing state on Manage Pledge View #934

Merged
merged 25 commits into from
Nov 12, 2019
Merged
Show file tree
Hide file tree
Changes from 11 commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
211a3ab
Add strings for backing status on manage pledge view
justinswart Nov 7, 2019
2a8aed8
Merge branch 'master' into manage-pledge-backing-state-string
justinswart Nov 7, 2019
1b95b41
Add copy for error state
justinswart Nov 7, 2019
d2fe813
Formatting
justinswart Nov 7, 2019
b1dd8da
Update new snapshots
justinswart Nov 7, 2019
705e402
Merge branch 'master' into manage-pledge-backing-state-string
justinswart Nov 7, 2019
aa6584c
Improved sharing of functions, added creator strings
justinswart Nov 7, 2019
329baca
Correct font
justinswart Nov 7, 2019
780791f
Use smart apostrophe
justinswart Nov 7, 2019
6bc8502
Add attributed string tests
justinswart Nov 7, 2019
28a7e86
Remove creator strings
justinswart Nov 8, 2019
83c5f3a
Merge branch 'master' into manage-pledge-backing-state-string
justinswart Nov 8, 2019
292a150
Use Strings functions ahead of translations
justinswart Nov 11, 2019
a1a8dce
German, Spanish and French translations
justinswart Nov 12, 2019
a37fedc
Use project.stats.needsConversion, fix test
justinswart Nov 12, 2019
4b1123b
Merge branch 'master' into manage-pledge-backing-state-string
justinswart Nov 12, 2019
e42b807
Fix tests, record new snapshots
justinswart Nov 12, 2019
1641f6c
Merge branch 'master' into manage-pledge-backing-state-string
justinswart Nov 12, 2019
18c99f7
Merge branch 'master' into manage-pledge-backing-state-string
justinswart Nov 12, 2019
7a725e0
Remove traitCollectionDidChange input
justinswart Nov 12, 2019
0a8d8c7
Merge branch 'master' into manage-pledge-backing-state-string
justinswart Nov 12, 2019
c4cdf0a
Formatting
justinswart Nov 12, 2019
c709f2c
New snapshots
justinswart Nov 12, 2019
3cfabdb
Use a UIView instead
justinswart Nov 12, 2019
1d2d54b
Rename property
justinswart Nov 12, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ private enum Layout {
}
}

protocol ProjectPamphletCreatorHeaderCellDelegate: class {
protocol ProjectPamphletCreatorHeaderCellDelegate: AnyObject {
func projectPamphletCreatorHeaderCellDidTapViewProgress(
_ cell: ProjectPamphletCreatorHeaderCell,
with project: Project
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ final class ManagePledgeSummaryViewController: UIViewController {
private lazy var backerNumberLabel: UILabel = { UILabel(frame: .zero) }()
private lazy var backingDateLabel: UILabel = { UILabel(frame: .zero) }()

private lazy var pledgeStatusLabelViewController: PledgeStatusLabelViewController = {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just curious, why did you opt for using a VC here instead of a UIView? πŸ€”

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just had a good feeling about it πŸ˜„

PledgeStatusLabelViewController.instantiate()
}()

private lazy var pledgeAmountSummaryViewController: PledgeAmountSummaryViewController = {
PledgeAmountSummaryViewController.instantiate()
}()
Expand Down Expand Up @@ -71,6 +75,12 @@ final class ManagePledgeSummaryViewController: UIViewController {
override func bindViewModel() {
super.bindViewModel()

self.viewModel.outputs.configurePledgeStatusLabelViewWithProject
.observeForUI()
.observeValues { [weak self] project in
self?.pledgeStatusLabelViewController.configure(with: project)
}

self.viewModel.outputs.configurePledgeAmountSummaryViewWithProject
.observeForUI()
.observeValues { [weak self] project in
Expand All @@ -95,16 +105,28 @@ final class ManagePledgeSummaryViewController: UIViewController {
_ = ([self.totalLabel, self.totalAmountLabel], self.totalAmountStackView)
|> ksr_addArrangedSubviewsToStackView()

self.addChild(self.pledgeAmountSummaryViewController)
[
self.pledgeStatusLabelViewController,
self.pledgeAmountSummaryViewController
]
.forEach(self.addChild)

_ = ([
let arrangedSubviews = [
self.backerInfoStackView,
self.pledgeStatusLabelViewController.view,
self.pledgeAmountSummaryViewController.view,
self.totalAmountStackView
], self.rootStackView)
]
.compact()

_ = (arrangedSubviews, self.rootStackView)
|> ksr_addArrangedSubviewsToStackView()

self.pledgeAmountSummaryViewController.didMove(toParent: self)
[
self.pledgeStatusLabelViewController,
self.pledgeAmountSummaryViewController
]
.forEach { $0.didMove(toParent: self) }
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
import KsApi
import Library
import Prelude
import Prelude_UIKit
import UIKit

final class PledgeStatusLabelViewController: UIViewController {
// MARK: - Properties

private lazy var containerView: UIView = { UIView(frame: .zero) }()
private lazy var label: UILabel = { UILabel(frame: .zero) }()

private let viewModel: PledgeStatusLabelViewModelType = PledgeStatusLabelViewModel()

// MARK: - Lifecycle

override func viewDidLoad() {
super.viewDidLoad()

self.configureSubviews()

self.viewModel.inputs.viewDidLoad()
}

// MARK: - Styles

override func bindStyles() {
super.bindStyles()

_ = self.containerView
|> containerViewStyle

_ = self.label
|> labelStyle
}

private func configureSubviews() {
_ = (self.containerView, self.view)
|> ksr_addSubviewToParent()
|> ksr_constrainViewToEdgesInParent()

_ = (self.label, self.containerView)
|> ksr_addSubviewToParent()
|> ksr_constrainViewToMarginsInParent()
}

// MARK: - View model

override func bindViewModel() {
super.bindViewModel()

self.label.rac.attributedText = self.viewModel.outputs.labelText
}

// MARK: - Configuration

internal func configure(with project: Project) {
self.viewModel.inputs.configure(with: project)
}
}

// MARK: - Styles

private let containerViewStyle: ViewStyle = { (view: UIView) in
view
|> \.backgroundColor .~ .ksr_grey_400
|> \.layoutMargins .~ .init(all: Styles.grid(2))
|> roundedStyle()
}

private let labelStyle: LabelStyle = { (label: UILabel) in
label
|> \.adjustsFontForContentSizeCategory .~ true
|> \.isAccessibilityElement .~ true
|> \.numberOfLines .~ 0
|> \.backgroundColor .~ .ksr_grey_400
}
24 changes: 20 additions & 4 deletions Kickstarter.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,10 @@
8A297912234EBAF90039396D /* PledgeAmountSummaryViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A297911234EBAF90039396D /* PledgeAmountSummaryViewModelTests.swift */; };
8A4503F4234BEDBD008309EC /* PledgeViewContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A4503F3234BEDBD008309EC /* PledgeViewContext.swift */; };
8A4503F6234BEDD4008309EC /* PledgeViewContextTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A4503F5234BEDD4008309EC /* PledgeViewContextTests.swift */; };
8A4DDAB32373427000ADE31D /* PledgeStatusLabelViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A4DDAB22373427000ADE31D /* PledgeStatusLabelViewController.swift */; };
8A4DDAB52373429300ADE31D /* PledgeStatusLabelViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A4DDAB42373429300ADE31D /* PledgeStatusLabelViewModel.swift */; };
8A4DDAB72373A05000ADE31D /* PledgeStatusLabelViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A4DDAB62373A05000ADE31D /* PledgeStatusLabelViewModelTests.swift */; };
8A4DDAB92374DF9F00ADE31D /* String+AttributedTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A4DDAB82374DF9F00ADE31D /* String+AttributedTests.swift */; };
8A73EACF2339528000FF9051 /* PledgeCreditCardViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A73EACE2339528000FF9051 /* PledgeCreditCardViewModel.swift */; };
8A73EAD12339732900FF9051 /* PledgeCreditCardViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A73EAD02339732900FF9051 /* PledgeCreditCardViewModelTests.swift */; };
8A73EAD9233B00A500FF9051 /* NSMutableAttributedString+SetFontKeepingTraits.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A73EAD8233B00A500FF9051 /* NSMutableAttributedString+SetFontKeepingTraits.swift */; };
Expand Down Expand Up @@ -1719,6 +1723,10 @@
8A297911234EBAF90039396D /* PledgeAmountSummaryViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PledgeAmountSummaryViewModelTests.swift; sourceTree = "<group>"; };
8A4503F3234BEDBD008309EC /* PledgeViewContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PledgeViewContext.swift; sourceTree = "<group>"; };
8A4503F5234BEDD4008309EC /* PledgeViewContextTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PledgeViewContextTests.swift; sourceTree = "<group>"; };
8A4DDAB22373427000ADE31D /* PledgeStatusLabelViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PledgeStatusLabelViewController.swift; sourceTree = "<group>"; };
8A4DDAB42373429300ADE31D /* PledgeStatusLabelViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PledgeStatusLabelViewModel.swift; sourceTree = "<group>"; };
8A4DDAB62373A05000ADE31D /* PledgeStatusLabelViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PledgeStatusLabelViewModelTests.swift; sourceTree = "<group>"; };
8A4DDAB82374DF9F00ADE31D /* String+AttributedTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+AttributedTests.swift"; sourceTree = "<group>"; };
8A73EACE2339528000FF9051 /* PledgeCreditCardViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PledgeCreditCardViewModel.swift; sourceTree = "<group>"; };
8A73EAD02339732900FF9051 /* PledgeCreditCardViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PledgeCreditCardViewModelTests.swift; sourceTree = "<group>"; };
8A73EAD8233B00A500FF9051 /* NSMutableAttributedString+SetFontKeepingTraits.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSMutableAttributedString+SetFontKeepingTraits.swift"; sourceTree = "<group>"; };
Expand Down Expand Up @@ -3070,13 +3078,13 @@
A7ED203A1E8323E900BFFA01 /* LoginToutViewControllerTests.swift */,
018F1F821C8E182200643DAA /* LoginViewController.swift */,
A7ED202D1E8323E900BFFA01 /* LoginViewControllerTests.swift */,
D65BF34E232C1A1C00B15B25 /* ManagePledgeSummaryViewController.swift */,
D61F38ED233D0DAE00C8972B /* ManagePledgeRewardView.swift */,
37CA16AC23300376006044F9 /* ManageViewPledgeRewardReceivedViewController.swift */,
37CA16AE2330038E006044F9 /* ManageViewPledgeRewardReceivedViewControllerTests.swift */,
D65BF3542334050100B15B25 /* ManagePledgePaymentMethodView.swift */,
D61F38ED233D0DAE00C8972B /* ManagePledgeRewardView.swift */,
D65BF34E232C1A1C00B15B25 /* ManagePledgeSummaryViewController.swift */,
D6A45DB62319A7E1006DDB01 /* ManagePledgeViewController.swift */,
D61440FF23200FD3002A6507 /* ManagePledgeViewControllerTests.swift */,
37CA16AC23300376006044F9 /* ManageViewPledgeRewardReceivedViewController.swift */,
37CA16AE2330038E006044F9 /* ManageViewPledgeRewardReceivedViewControllerTests.swift */,
D6E7DAF922089F3900689BD6 /* MessageBannerViewController.swift */,
77E84E0B2166A8C600DA8891 /* MessageBannerViewControllerTests.swift */,
A74FFDEE1CE3E33300C7BCB9 /* MessageDialogViewController.swift */,
Expand All @@ -3093,6 +3101,7 @@
8A8099FE22E21F9700373E66 /* PledgeDescriptionViewControllerTests.swift */,
D6D4425C22C276DF0070C3AF /* PledgePaymentMethodsViewController.swift */,
37059842226F79A700BDA6E3 /* PledgeShippingLocationViewController.swift */,
8A4DDAB22373427000ADE31D /* PledgeStatusLabelViewController.swift */,
D0237C1422BC2B640092C792 /* PledgeSummaryViewController.swift */,
37DEC2212257CB470051EF9B /* PledgeViewController.swift */,
37DEC2232257CB650051EF9B /* PledgeViewControllerTests.swift */,
Expand Down Expand Up @@ -3334,6 +3343,7 @@
A73378F91D0AE33B00C91445 /* Styles */,
A7ED1F421E831BA200BFFA01 /* TestHelpers */,
A7F4418D1D005A9400FE6FC5 /* ViewModels */,
8A4DDAB82374DF9F00ADE31D /* String+AttributedTests.swift */,
);
path = Library;
sourceTree = "<group>";
Expand Down Expand Up @@ -3701,6 +3711,8 @@
D6534D3D22E789B900E9D279 /* PledgePaymentMethodsViewModelTests.swift */,
3706408522A8A6D700889CBD /* PledgeShippingLocationViewModel.swift */,
3706408722A8A6F200889CBD /* PledgeShippingLocationViewModelTests.swift */,
8A4DDAB42373429300ADE31D /* PledgeStatusLabelViewModel.swift */,
8A4DDAB62373A05000ADE31D /* PledgeStatusLabelViewModelTests.swift */,
D0237C2522BD7B540092C792 /* PledgeSummaryViewModel.swift */,
D0D19BC922BD886F0043A4E5 /* PledgeSummaryViewModelTests.swift */,
37DEC1E62257C9F30051EF9B /* PledgeViewModel.swift */,
Expand Down Expand Up @@ -4807,6 +4819,7 @@
77F6E73721222E97005A5C55 /* SettingsCellType.swift in Sources */,
59019FB61D21A47700EAEC9D /* DashboardReferrerRowStackViewViewModel.swift in Sources */,
D703FC6B20F7E3F8004A272D /* SettingsPrivacyViewModel.swift in Sources */,
8A4DDAB52373429300ADE31D /* PledgeStatusLabelViewModel.swift in Sources */,
0169F9881D6F51C400C8D5C5 /* DiscoveryFiltersViewModel.swift in Sources */,
01FD71EC1D3808E500070BAC /* BarButtonItemStyles.swift in Sources */,
D04AAC24218BB70D00CF713E /* DiscoveryProjectCategoryViewModel.swift in Sources */,
Expand Down Expand Up @@ -5071,6 +5084,7 @@
A7ED1FCD1E831C5C00BFFA01 /* ProjectActivityUpdateCellViewModelTests.swift in Sources */,
A7A6261B1E85B936004C931A /* BackerDashboardProjectsViewModelTests.swift in Sources */,
D033E2C222A05B4800464E43 /* MockApplication.swift in Sources */,
8A4DDAB72373A05000ADE31D /* PledgeStatusLabelViewModelTests.swift in Sources */,
A7ED1FB41E831C5C00BFFA01 /* MessagesSearchViewModelTests.swift in Sources */,
A7A6261A1E85B936004C931A /* BackerDashboardViewModelTests.swift in Sources */,
37EB3E4E228CF4FB00076E4C /* NumberFormatterTests.swift in Sources */,
Expand Down Expand Up @@ -5137,6 +5151,7 @@
A7ED1FD81E831C5C00BFFA01 /* DashboardRewardsCellViewModelTests.swift in Sources */,
D04AACA5218BB72100CF713E /* BetaToolsViewModelTests.swift in Sources */,
D64850551FD879AB00B6AB91 /* ProjectActivityItemProviderTests.swift in Sources */,
8A4DDAB92374DF9F00ADE31D /* String+AttributedTests.swift in Sources */,
D65BF353233023E500B15B25 /* ManagePledgeSummaryViewModelTests.swift in Sources */,
A7ED1FC71E831C5C00BFFA01 /* DashboardFundingCellViewModelTests.swift in Sources */,
A7ED1FD51E831C5C00BFFA01 /* FindFriendsStatsCellViewModelTests.swift in Sources */,
Expand Down Expand Up @@ -5197,6 +5212,7 @@
A747A7DF1D454E8500AF199A /* ProjectPamphletContentViewController.swift in Sources */,
0157067D1E65F0420087DD68 /* BackerDashboardProjectsViewController.swift in Sources */,
A762EFF31C8CC663005581A4 /* ActivityFriendFollowCell.swift in Sources */,
8A4DDAB32373427000ADE31D /* PledgeStatusLabelViewController.swift in Sources */,
D6AE3F9220EA977D00DB212F /* SettingsNotificationsViewController.swift in Sources */,
59019FBA1D21ABD200EAEC9D /* DashboardReferrerRowStackView.swift in Sources */,
8A8099F822E2156E00373E66 /* RewardPledgeNavigationController.swift in Sources */,
Expand Down
2 changes: 1 addition & 1 deletion KsApi/models/Backing.swift
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public struct Backing {
case googlePay = "ANDROID_PAY"
}

public enum Status: String {
public enum Status: String, CaseIterable {
case canceled
case collected
case dropped
Expand Down
4 changes: 2 additions & 2 deletions KsApi/models/BackingPaymentSourceTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ final class BackingPaymentSourceTests: XCTestCase {
]

let paymentSource: Backing.PaymentSource? = Backing.PaymentSource
.decodeJSONDictionary(jsonDictionary).value ?? nil
.decodeJSONDictionary(jsonDictionary as [String: Any]).value ?? nil

XCTAssertNil(paymentSource?.expirationDate)
XCTAssertNil(paymentSource?.id)
Expand Down Expand Up @@ -99,7 +99,7 @@ final class BackingPaymentSourceTests: XCTestCase {
]

let paymentSource: Backing.PaymentSource? = Backing.PaymentSource
.decodeJSONDictionary(jsonDictionary).value ?? nil
.decodeJSONDictionary(jsonDictionary as [String: Any]).value ?? nil

XCTAssertNil(paymentSource)
}
Expand Down
2 changes: 1 addition & 1 deletion KsApi/models/Project.swift
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public struct Project {
public var hls: String?
}

public enum State: String, Argo.Decodable {
public enum State: String, Argo.Decodable, CaseIterable {
case canceled
case failed
case live
Expand Down
32 changes: 32 additions & 0 deletions Library/String+Attributed.swift
Original file line number Diff line number Diff line change
@@ -1,8 +1,40 @@
import Foundation
import UIKit

public func + (left: NSAttributedString, right: NSAttributedString) -> NSAttributedString {
let combined = NSMutableAttributedString()
combined.append(left)
combined.append(right)
return NSMutableAttributedString(attributedString: combined)
}

extension String {
func attributed(
with font: UIFont,
foregroundColor: UIColor,
attributes: [NSAttributedString.Key: Any],
bolding strings: [String]
) -> NSAttributedString {
let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: self)
let fullRange = (self as NSString).localizedStandardRange(of: self)

let regularFontAttributes = [
NSAttributedString.Key.font: font,
NSAttributedString.Key.foregroundColor: foregroundColor
]
.withAllValuesFrom(attributes)

attributedString.addAttributes(regularFontAttributes, range: fullRange)

let boldFontAttribute = [NSAttributedString.Key.font: font.bolded]

for string in strings {
attributedString.addAttributes(
boldFontAttribute,
range: (self as NSString).localizedStandardRange(of: string)
)
}

return attributedString
}
}
55 changes: 55 additions & 0 deletions Library/String+AttributedTests.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
@testable import Library
import XCTest

final class String_AttributedTests: TestCase {
func testCombining() {
let s1 = NSAttributedString(string: "prefix")
let s2 = NSAttributedString(string: "suffix")

let combined = s1 + s2

XCTAssertEqual("prefixsuffix", combined.string)
}

func testAttributedBolding() {
let string = "My special string of words"

let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = .center

let attributes = [
NSAttributedString.Key.paragraphStyle: paragraphStyle
]

let font = UIFont.ksr_body()
let boldedFont = UIFont.ksr_body().bolded
let foregroundColor = UIColor.ksr_text_black

let attributed = string.attributed(
with: font,
foregroundColor: foregroundColor,
attributes: attributes,
bolding: ["words"]
)

let allAttributes = attributed.attributes(
at: 0,
longestEffectiveRange: nil,
in: (string as NSString).range(of: string)
)

XCTAssertEqual(allAttributes[NSAttributedString.Key.paragraphStyle] as? NSParagraphStyle, paragraphStyle)
XCTAssertEqual(allAttributes[NSAttributedString.Key.font] as? UIFont, font)
XCTAssertEqual(allAttributes[NSAttributedString.Key.foregroundColor] as? UIColor, foregroundColor)

let boldedRange = (string as NSString).range(of: "words")

let boldedAttributes = attributed.attributes(
at: boldedRange.location,
longestEffectiveRange: nil,
in: boldedRange
)

XCTAssertEqual(boldedAttributes[NSAttributedString.Key.font] as? UIFont, boldedFont)
}
}
3 changes: 3 additions & 0 deletions Library/ViewModels/ManagePledgeSummaryViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ public protocol ManagePledgeSummaryViewModelOutputs {
var backerNumberText: Signal<String, Never> { get }
var backingDateText: Signal<String, Never> { get }
var configurePledgeAmountSummaryViewWithProject: Signal<Project, Never> { get }
var configurePledgeStatusLabelViewWithProject: Signal<Project, Never> { get }
var totalAmountText: Signal<NSAttributedString, Never> { get }
}

Expand All @@ -33,6 +34,7 @@ public class ManagePledgeSummaryViewModel: ManagePledgeSummaryViewModelType,
.map { $0.personalization.backing }
.skipNil()

self.configurePledgeStatusLabelViewWithProject = project
self.configurePledgeAmountSummaryViewWithProject = project

let projectAndBacking = project
Expand Down Expand Up @@ -63,6 +65,7 @@ public class ManagePledgeSummaryViewModel: ManagePledgeSummaryViewModelType,

public let backerNumberText: Signal<String, Never>
public let backingDateText: Signal<String, Never>
public let configurePledgeStatusLabelViewWithProject: Signal<Project, Never>
public let configurePledgeAmountSummaryViewWithProject: Signal<Project, Never>
public let totalAmountText: Signal<NSAttributedString, Never>

Expand Down
Loading