diff --git a/Kickstarter-iOS/Features/PledgeView/Controllers/NoShippingPledgeViewController.swift b/Kickstarter-iOS/Features/PledgeView/Controllers/NoShippingPledgeViewController.swift index 0637966ca1..b74fc60c05 100644 --- a/Kickstarter-iOS/Features/PledgeView/Controllers/NoShippingPledgeViewController.swift +++ b/Kickstarter-iOS/Features/PledgeView/Controllers/NoShippingPledgeViewController.swift @@ -274,9 +274,10 @@ final class NoShippingPledgeViewController: UIViewController, self.viewModel.outputs.configureEstimatedShippingView .observeForUI() - .observeValues { [weak self] strings in - let (estimatedShippingText, estimatedConversionText) = strings - self?.configureEstimatedShippingView(estimatedShippingText, estimatedConversionText) + .observeValues { [weak self] estimatedShippingText, estimatedConversionText in + guard let shippingText = estimatedShippingText else { return } + + self?.configureEstimatedShippingView(shippingText, estimatedConversionText) } self.viewModel.outputs.estimatedShippingViewHidden @@ -434,10 +435,10 @@ final class NoShippingPledgeViewController: UIViewController, self.pledgeDisclaimerView.configure(with: ("icon-not-a-store", attributedText)) } - private func configureEstimatedShippingView(_ estimatedCost: String, _ aboutConversion: String) { + private func configureEstimatedShippingView(_ estimatedCost: String, _ aboutConversion: String?) { let estimatedShippingView = EstimatedShippingCheckoutView( estimatedCost: estimatedCost, - aboutConversion: aboutConversion + aboutConversion: aboutConversion ?? "" ) self.estimatedShippingViewContainer.rootView = estimatedShippingView diff --git a/Kickstarter-iOS/Features/PledgeView/Controllers/NoShippingPostCampaignCheckoutViewController.swift b/Kickstarter-iOS/Features/PledgeView/Controllers/NoShippingPostCampaignCheckoutViewController.swift index 691871649b..958c931bed 100644 --- a/Kickstarter-iOS/Features/PledgeView/Controllers/NoShippingPostCampaignCheckoutViewController.swift +++ b/Kickstarter-iOS/Features/PledgeView/Controllers/NoShippingPostCampaignCheckoutViewController.swift @@ -240,9 +240,10 @@ final class NoShippingPostCampaignCheckoutViewController: UIViewController, self.viewModel.outputs.configureEstimatedShippingView .observeForUI() - .observeValues { [weak self] strings in - let (estimatedShippingText, estimatedConversionText) = strings - self?.configureEstimatedShippingView(estimatedShippingText, estimatedConversionText) + .observeValues { [weak self] estimatedShippingText, estimatedConversionText in + guard let shippingText = estimatedShippingText else { return } + + self?.configureEstimatedShippingView(shippingText, estimatedConversionText) } self.viewModel.outputs.showWebHelp @@ -341,10 +342,10 @@ final class NoShippingPostCampaignCheckoutViewController: UIViewController, } } - private func configureEstimatedShippingView(_ estimatedCost: String, _ aboutConversion: String) { + private func configureEstimatedShippingView(_ estimatedCost: String, _ aboutConversion: String?) { let estimatedShippingView = EstimatedShippingCheckoutView( estimatedCost: estimatedCost, - aboutConversion: aboutConversion + aboutConversion: aboutConversion ?? "" ) self.estimatedShippingViewContainer.rootView = estimatedShippingView diff --git a/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView.lang_de_device_phone4inch.png b/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView.lang_de_device_phone4inch.png index 643a07e259..9b22a06029 100644 Binary files a/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView.lang_de_device_phone4inch.png and b/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView.lang_de_device_phone4inch.png differ diff --git a/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView.lang_en_device_phone4_7inch.png b/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView.lang_en_device_phone4_7inch.png index a59fbb9681..adf658ba24 100644 Binary files a/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView.lang_en_device_phone4_7inch.png and b/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView.lang_en_device_phone4_7inch.png differ diff --git a/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView.lang_es_device_phone5_5inch.png b/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView.lang_es_device_phone5_5inch.png index 9f273520ac..c55c7a9bb5 100644 Binary files a/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView.lang_es_device_phone5_5inch.png and b/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView.lang_es_device_phone5_5inch.png differ diff --git a/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView.lang_fr_device_phone5_8inch.png b/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView.lang_fr_device_phone5_8inch.png index 40bff7d71a..d3f4595e4b 100644 Binary files a/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView.lang_fr_device_phone5_8inch.png and b/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView.lang_fr_device_phone5_8inch.png differ diff --git a/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView.lang_ja_device_pad.png b/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView.lang_ja_device_pad.png index 0e1cf888f2..d7bc87fa4f 100644 Binary files a/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView.lang_ja_device_pad.png and b/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView.lang_ja_device_pad.png differ diff --git a/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView_NoShippingWithLocalPickup_Success.lang_de_device_phone5_8inch.png b/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView_NoShippingWithLocalPickup_Success.lang_de_device_phone5_8inch.png index 93e565b91b..16db683e98 100644 Binary files a/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView_NoShippingWithLocalPickup_Success.lang_de_device_phone5_8inch.png and b/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView_NoShippingWithLocalPickup_Success.lang_de_device_phone5_8inch.png differ diff --git a/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView_NoShippingWithLocalPickup_Success.lang_en_device_pad.png b/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView_NoShippingWithLocalPickup_Success.lang_en_device_pad.png index defb29adab..8ed7e2c9e5 100644 Binary files a/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView_NoShippingWithLocalPickup_Success.lang_en_device_pad.png and b/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView_NoShippingWithLocalPickup_Success.lang_en_device_pad.png differ diff --git a/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView_NoShippingWithLocalPickup_Success.lang_es_device_phone5_8inch.png b/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView_NoShippingWithLocalPickup_Success.lang_es_device_phone5_8inch.png index 3dc5e3529c..f2117c39f1 100644 Binary files a/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView_NoShippingWithLocalPickup_Success.lang_es_device_phone5_8inch.png and b/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView_NoShippingWithLocalPickup_Success.lang_es_device_phone5_8inch.png differ diff --git a/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView_NoShippingWithLocalPickup_Success.lang_fr_device_pad.png b/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView_NoShippingWithLocalPickup_Success.lang_fr_device_pad.png index c947657b26..d2e98992b3 100644 Binary files a/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView_NoShippingWithLocalPickup_Success.lang_fr_device_pad.png and b/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView_NoShippingWithLocalPickup_Success.lang_fr_device_pad.png differ diff --git a/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView_NoShippingWithLocalPickup_Success.lang_ja_device_phone5_8inch.png b/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView_NoShippingWithLocalPickup_Success.lang_ja_device_phone5_8inch.png index 17b46d7a75..aa16234856 100644 Binary files a/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView_NoShippingWithLocalPickup_Success.lang_ja_device_phone5_8inch.png and b/Kickstarter-iOS/Features/RewardAddOnSelection/Controller/__Snapshots__/RewardAddOnSelectionNoShippingViewControllerTests/testView_NoShippingWithLocalPickup_Success.lang_ja_device_phone5_8inch.png differ diff --git a/Kickstarter-iOS/Features/RewardAddOnSelection/Views/RewardAddOnCardView.swift b/Kickstarter-iOS/Features/RewardAddOnSelection/Views/RewardAddOnCardView.swift index 08e8901e68..17c6c75aa8 100644 --- a/Kickstarter-iOS/Features/RewardAddOnSelection/Views/RewardAddOnCardView.swift +++ b/Kickstarter-iOS/Features/RewardAddOnSelection/Views/RewardAddOnCardView.swift @@ -212,7 +212,6 @@ public final class RewardAddOnCardView: UIView { self.includedItemsStackView.rac.hidden = self.viewModel.outputs.includedItemsStackViewHidden self.includedItemsLabel.rac.attributedText = self.viewModel.outputs.includedItemsLabelAttributedText self.estimatedShippingStackView.rac.hidden = self.viewModel.outputs.estimatedShippingStackViewHidden - self.estimatedShippingLabel.rac.text = self.viewModel.outputs.estimatedShippingLabelText self.amountLabel.rac.attributedText = self.viewModel.outputs.amountLabelAttributedText self.pillsView.rac.hidden = self.viewModel.outputs.pillsViewHidden self.quantityLabel.rac.text = self.viewModel.outputs.quantityLabelText @@ -243,6 +242,14 @@ public final class RewardAddOnCardView: UIView { self.viewModel.outputs.generateNotificationWarningFeedback .observeForUI() .observeValues { generateNotificationWarningFeedback() } + + self.viewModel.outputs.estimatedShippingLabelText + .observeForUI() + .observeValues { [weak self] text in + guard let labelText = text else { return } + + self?.estimatedShippingLabel.text = labelText + } } // MARK: - Private Helpers diff --git a/Kickstarter-iOS/Features/RewardsCollection/Views/RewardCardView.swift b/Kickstarter-iOS/Features/RewardsCollection/Views/RewardCardView.swift index de7d273a1d..d3902e2dbd 100644 --- a/Kickstarter-iOS/Features/RewardsCollection/Views/RewardCardView.swift +++ b/Kickstarter-iOS/Features/RewardsCollection/Views/RewardCardView.swift @@ -140,9 +140,8 @@ public final class RewardCardView: UIView { |> baseRewardLabelStyle |> sectionTitleLabelStyle - // TODO: Translate string _ = self.estimatedShippingTitleLabel - |> \.text %~ { _ in "Estimated Shipping" } + |> \.text .~ Strings.Estimated_Shipping() |> \.textColor .~ UIColor.ksr_support_400 _ = self.estimatedShippingLabel @@ -199,7 +198,6 @@ public final class RewardCardView: UIView { self.minimumPriceConversionLabel.rac.text = self.viewModel.outputs.conversionLabelText self.descriptionLabel.rac.text = self.viewModel.outputs.descriptionLabelText self.estimatedShippingStackView.rac.hidden = self.viewModel.outputs.estimatedShippingStackViewHidden - self.estimatedShippingLabel.rac.text = self.viewModel.outputs.estimatedShippingLabelText self.estimatedDeliveryStackView.rac.hidden = self.viewModel.outputs.estimatedDeliveryStackViewHidden self.estimatedDeliveryDateLabel.rac.text = self.viewModel.outputs.estimatedDeliveryDateLabelText self.rewardLocationStackView.rac.hidden = self.viewModel.outputs.rewardLocationStackViewHidden @@ -234,6 +232,14 @@ public final class RewardCardView: UIView { .observeValues { [weak self] values in self?.configurePillsView(values) } + + self.viewModel.outputs.estimatedShippingLabelText + .observeForUI() + .observeValues { [weak self] text in + guard let labelText = text else { return } + + self?.estimatedShippingLabel.text = labelText + } } // MARK: - Private Helpers diff --git a/Library/SharedFunctions.swift b/Library/SharedFunctions.swift index add77b8be5..15819ebde1 100644 --- a/Library/SharedFunctions.swift +++ b/Library/SharedFunctions.swift @@ -665,13 +665,13 @@ public func estimatedShippingText( for rewards: [Reward], project: Project, selectedShippingRule: ShippingRule -) -> String { +) -> String? { let (estimatedMin, estimatedMax) = estimatedMinMax( from: rewards, selectedShippingRule: selectedShippingRule ) - guard estimatedMin > 0, estimatedMax > 0 else { return "" } + guard estimatedMin > 0, estimatedMax > 0 else { return nil } let currentCountry = project.stats.currentCountry ?? Project.Country.us @@ -700,15 +700,15 @@ public func estimatedShippingConversionText( for rewards: [Reward], project: Project, selectedShippingRule: ShippingRule -) -> String { - guard project.stats.needsConversion else { return "" } +) -> String? { + guard project.stats.needsConversion else { return nil } let (estimatedMin, estimatedMax) = estimatedMinMax( from: rewards, selectedShippingRule: selectedShippingRule ) - guard estimatedMin > 0, estimatedMax > 0 else { return "" } + guard estimatedMin > 0, estimatedMax > 0 else { return nil } let convertedMin = estimatedMin * Double(project.stats.currentCurrencyRate ?? project.stats.staticUsdRate) let convertedMax = estimatedMax * Double(project.stats.currentCurrencyRate ?? project.stats.staticUsdRate) diff --git a/Library/ViewModels/NoShippingPledgeViewModel.swift b/Library/ViewModels/NoShippingPledgeViewModel.swift index ec60505afc..72fdf630ed 100644 --- a/Library/ViewModels/NoShippingPledgeViewModel.swift +++ b/Library/ViewModels/NoShippingPledgeViewModel.swift @@ -42,7 +42,7 @@ public protocol NoShippingPledgeViewModelInputs { public protocol NoShippingPledgeViewModelOutputs { var beginSCAFlowWithClientSecret: Signal { get } - var configureEstimatedShippingView: Signal<(String, String), Never> { get } + var configureEstimatedShippingView: Signal<(String?, String?), Never> { get } var configureLocalPickupViewWithData: Signal { get } var configurePaymentMethodsViewControllerWithValue: Signal { get } var configurePledgeAmountViewWithData: Signal { get } @@ -315,7 +315,7 @@ public class NoShippingPledgeViewModel: NoShippingPledgeViewModelType, NoShippin self.configureEstimatedShippingView = Signal.combineLatest(project, rewards, selectedShippingRule) .map { project, rewards, shippingRule in - guard let rule = shippingRule else { return ("", "") } + guard let rule = shippingRule else { return (nil, nil) } return ( estimatedShippingText(for: rewards, project: project, selectedShippingRule: rule), @@ -326,7 +326,7 @@ public class NoShippingPledgeViewModel: NoShippingPledgeViewModelType, NoShippin self.estimatedShippingViewHidden = Signal.combineLatest(self.configureEstimatedShippingView, baseReward) .map { estimatedShippingStrings, reward in let (estimatedShipping, _) = estimatedShippingStrings - return reward.shipping.enabled == false || estimatedShipping.isEmpty + return reward.shipping.enabled == false || estimatedShipping == nil } // MARK: - Apple Pay @@ -1014,7 +1014,7 @@ public class NoShippingPledgeViewModel: NoShippingPledgeViewModelType, NoShippin // MARK: - Outputs public let beginSCAFlowWithClientSecret: Signal - public let configureEstimatedShippingView: Signal<(String, String), Never> + public let configureEstimatedShippingView: Signal<(String?, String?), Never> public let configureLocalPickupViewWithData: Signal public let configurePaymentMethodsViewControllerWithValue: Signal public let configurePledgeAmountViewWithData: Signal diff --git a/Library/ViewModels/NoShippingPostCampaignCheckoutViewModel.swift b/Library/ViewModels/NoShippingPostCampaignCheckoutViewModel.swift index 20de34fa35..24827237ad 100644 --- a/Library/ViewModels/NoShippingPostCampaignCheckoutViewModel.swift +++ b/Library/ViewModels/NoShippingPostCampaignCheckoutViewModel.swift @@ -20,7 +20,7 @@ public protocol NoShippingPostCampaignCheckoutViewModelInputs { } public protocol NoShippingPostCampaignCheckoutViewModelOutputs { - var configureEstimatedShippingView: Signal<(String, String), Never> { get } + var configureEstimatedShippingView: Signal<(String?, String?), Never> { get } var configurePaymentMethodsViewControllerWithValue: Signal { get } var configurePledgeRewardsSummaryViewWithData: Signal< (PostCampaignRewardsSummaryViewData, Double?, PledgeSummaryViewData), @@ -111,7 +111,7 @@ public class NoShippingPostCampaignCheckoutViewModel: NoShippingPostCampaignChec self.configureEstimatedShippingView = Signal.combineLatest(project, rewards, selectedShippingRule) .map { project, rewards, shippingRule in - guard let rule = shippingRule else { return ("", "") } + guard let rule = shippingRule else { return (nil, nil) } return ( estimatedShippingText(for: rewards, project: project, selectedShippingRule: rule), @@ -122,7 +122,7 @@ public class NoShippingPostCampaignCheckoutViewModel: NoShippingPostCampaignChec self.estimatedShippingViewHidden = Signal.combineLatest(self.configureEstimatedShippingView, baseReward) .map { estimatedShippingStrings, reward in let (estimatedShipping, _) = estimatedShippingStrings - return reward?.shipping.enabled == false || estimatedShipping.isEmpty + return reward?.shipping.enabled == false || estimatedShipping == nil } // MARK: Validate Checkout Details On Submit @@ -512,7 +512,7 @@ public class NoShippingPostCampaignCheckoutViewModel: NoShippingPostCampaignChec // MARK: - Outputs - public let configureEstimatedShippingView: Signal<(String, String), Never> + public let configureEstimatedShippingView: Signal<(String?, String?), Never> public let configurePaymentMethodsViewControllerWithValue: Signal public let configurePledgeRewardsSummaryViewWithData: Signal<( PostCampaignRewardsSummaryViewData, diff --git a/Library/ViewModels/RewardAddOnCardViewModel.swift b/Library/ViewModels/RewardAddOnCardViewModel.swift index 79647a6236..77aabee9bc 100644 --- a/Library/ViewModels/RewardAddOnCardViewModel.swift +++ b/Library/ViewModels/RewardAddOnCardViewModel.swift @@ -28,7 +28,7 @@ public protocol RewardAddOnCardViewModelOutputs { var generateNotificationWarningFeedback: Signal { get } var includedItemsLabelAttributedText: Signal { get } var includedItemsStackViewHidden: Signal { get } - var estimatedShippingLabelText: Signal { get } + var estimatedShippingLabelText: Signal { get } var estimatedShippingStackViewHidden: Signal { get } var notifiyDelegateDidSelectQuantity: Signal<(SelectedRewardQuantity, SelectedRewardId), Never> { get } var pillsViewHidden: Signal { get } @@ -57,7 +57,7 @@ public final class RewardAddOnCardViewModel: RewardAddOnCardViewModelType, Rewar let project: Signal = configData.map(\.project) let reward: Signal = configData.map(\.reward) let selectedQuantities: Signal = configData.map(\.selectedQuantities) - let shippingRule: Signal = configData.map(\.shippingRule).skipNil() + let shippingRule: Signal = configData.map(\.shippingRule) let projectAndReward = Signal.zip(project, reward) let projectRewardShippingRule = configData.map { @@ -105,12 +105,14 @@ public final class RewardAddOnCardViewModel: RewardAddOnCardViewModelType, Rewar self.estimatedShippingLabelText = Signal.combineLatest(reward, project, shippingRule) .map { reward, project, shippingRule in - estimatedShippingText(for: [reward], project: project, selectedShippingRule: shippingRule) + guard let shipping = shippingRule else { return nil } + + return estimatedShippingText(for: [reward], project: project, selectedShippingRule: shipping) } self.estimatedShippingStackViewHidden = Signal.combineLatest(reward, self.estimatedShippingLabelText) .map { reward, text in - reward.shipping.enabled == false || text.isEmpty + reward.shipping.enabled == false || text == nil } self.reloadPills = projectAndReward.map(pillValues(project:reward:)) @@ -200,7 +202,7 @@ public final class RewardAddOnCardViewModel: RewardAddOnCardViewModelType, Rewar public let generateNotificationWarningFeedback: Signal public let includedItemsLabelAttributedText: Signal public let includedItemsStackViewHidden: Signal - public let estimatedShippingLabelText: Signal + public let estimatedShippingLabelText: Signal public let estimatedShippingStackViewHidden: Signal public let notifiyDelegateDidSelectQuantity: Signal<(SelectedRewardQuantity, SelectedRewardId), Never> public let pillsViewHidden: Signal diff --git a/Library/ViewModels/RewardCardViewModel.swift b/Library/ViewModels/RewardCardViewModel.swift index ea0e98b966..33390542c0 100644 --- a/Library/ViewModels/RewardCardViewModel.swift +++ b/Library/ViewModels/RewardCardViewModel.swift @@ -34,7 +34,7 @@ public protocol RewardCardViewModelOutputs { var estimatedShippingStackViewHidden: Signal { get } var estimatedDeliveryStackViewHidden: Signal { get } var estimatedDeliveryDateLabelText: Signal { get } - var estimatedShippingLabelText: Signal { get } + var estimatedShippingLabelText: Signal { get } var includedItemsStackViewHidden: Signal { get } var items: Signal<[String], Never> { get } var pillCollectionViewHidden: Signal { get } @@ -62,7 +62,7 @@ public final class RewardCardViewModel: RewardCardViewModelType, RewardCardViewM let project: Signal = configData.map(\.project) let reward: Signal = configData.map(\.reward) - let currentShippingRule: Signal = configData.map(\.currentShippingRule).skipNil() + let currentShippingRule: Signal = configData.map(\.currentShippingRule) let projectAndReward = Signal.zip(project, reward) @@ -130,16 +130,21 @@ public final class RewardCardViewModel: RewardCardViewModelType, RewardCardViewM self.estimatedShippingLabelText = Signal.combineLatest(reward, project, currentShippingRule) .map { reward, project, shippingRule in - estimatedShippingText(for: [reward], project: project, selectedShippingRule: shippingRule) + guard let shipping = shippingRule else { return nil } + + return estimatedShippingText(for: [reward], project: project, selectedShippingRule: shipping) } self.estimatedDeliveryDateLabelText = reward.map(estimatedDeliveryDateText(with:)).skipNil() self.rewardLocationPickupLabelText = reward.map { $0.localPickup?.displayableName }.skipNil() - self.estimatedShippingStackViewHidden = Signal.combineLatest(reward, self.estimatedShippingLabelText) - .map { reward, text in - reward.shipping.enabled == false || text.isEmpty - } + self.estimatedShippingStackViewHidden = Signal.combineLatest( + reward, + self.estimatedShippingLabelText.signal + ) + .map { reward, text in + reward.shipping.enabled == false || text == nil + } } private let configDataProperty = MutableProperty(nil) @@ -159,7 +164,7 @@ public final class RewardCardViewModel: RewardCardViewModelType, RewardCardViewM public let estimatedShippingStackViewHidden: Signal public let estimatedDeliveryStackViewHidden: Signal public let estimatedDeliveryDateLabelText: Signal - public let estimatedShippingLabelText: Signal + public let estimatedShippingLabelText: Signal public let items: Signal<[String], Never> public let includedItemsStackViewHidden: Signal public let pillCollectionViewHidden: Signal