From 54a7b0d878f9d71007c15708e943d00fdc99e2f1 Mon Sep 17 00:00:00 2001 From: Isabel Barrera Date: Mon, 5 Nov 2018 15:43:44 -0500 Subject: [PATCH 01/10] Adding emailIsVerified --- .../ChangeEmailViewController.swift | 8 +- .../Views/Storyboards/Settings.storyboard | 119 ++++++++++-------- Kickstarter.xcodeproj/project.pbxproj | 10 +- KsApi/Service.swift | 4 +- KsApi/models/GraphUser.swift | 6 - KsApi/models/UserEmailFields.swift | 6 + KsApi/queries/UserQueries.swift | 6 +- Library/ViewModels/ChangeEmailViewModel.swift | 6 +- 8 files changed, 90 insertions(+), 75 deletions(-) delete mode 100644 KsApi/models/GraphUser.swift create mode 100644 KsApi/models/UserEmailFields.swift diff --git a/Kickstarter-iOS/Views/Controllers/ChangeEmailViewController.swift b/Kickstarter-iOS/Views/Controllers/ChangeEmailViewController.swift index 535e2868b2..b0fe458d6b 100644 --- a/Kickstarter-iOS/Views/Controllers/ChangeEmailViewController.swift +++ b/Kickstarter-iOS/Views/Controllers/ChangeEmailViewController.swift @@ -7,8 +7,8 @@ import UIKit internal final class ChangeEmailViewController: UIViewController { @IBOutlet fileprivate weak var currentEmailLabel: UILabel! @IBOutlet fileprivate weak var currentEmail: UILabel! - @IBOutlet fileprivate weak var errorLabel: UILabel! - @IBOutlet fileprivate weak var errorView: UIView! + @IBOutlet fileprivate weak var emailUnverifiedLabel: UILabel! + @IBOutlet fileprivate weak var messageLabelsView: UIView! @IBOutlet fileprivate weak var newEmailLabel: UILabel! @IBOutlet fileprivate weak var newEmailTextField: UITextField! @IBOutlet fileprivate weak var onePasswordButton: UIButton! @@ -16,6 +16,7 @@ internal final class ChangeEmailViewController: UIViewController { @IBOutlet fileprivate weak var passwordTextField: UITextField! @IBOutlet fileprivate weak var resendVerificationEmailButton: UIButton! @IBOutlet fileprivate weak var resendVerificationStackView: UIStackView! + @IBOutlet fileprivate weak var undeliverableEmailLabel: UILabel! @IBOutlet fileprivate weak var scrollView: UIScrollView! @IBOutlet fileprivate weak var resendVerificationEmailStackView: UIStackView! @@ -70,7 +71,7 @@ internal final class ChangeEmailViewController: UIViewController { _ = onePasswordButton |> onePasswordButtonStyle - _ = errorLabel + _ = emailUnverifiedLabel |> settingsDescriptionLabelStyle |> UILabel.lens.text %~ { _ in Strings.Email_unverified() } @@ -110,6 +111,7 @@ internal final class ChangeEmailViewController: UIViewController { self.resendVerificationStackView.rac.hidden = self.viewModel.outputs.resendVerificationStackViewIsHidden self.currentEmail.rac.text = self.viewModel.outputs.emailText + self.emailUnverifiedLabel.rac.hidden = self.viewModel.outputs.emailUnverifiedLabelIsHidden self.onePasswordButton.rac.hidden = self.viewModel.outputs.onePasswordButtonIsHidden diff --git a/Kickstarter-iOS/Views/Storyboards/Settings.storyboard b/Kickstarter-iOS/Views/Storyboards/Settings.storyboard index 149a9141cd..7c6a649f64 100644 --- a/Kickstarter-iOS/Views/Storyboards/Settings.storyboard +++ b/Kickstarter-iOS/Views/Storyboards/Settings.storyboard @@ -1,11 +1,11 @@ - + - + @@ -151,7 +151,7 @@ - + @@ -203,71 +203,81 @@ - - + + - - + + - + + + + + + + - - - - - - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - + + + + + + + - + - + - + @@ -303,7 +313,7 @@ - + @@ -356,9 +366,7 @@ - - @@ -402,8 +410,8 @@ - - + + @@ -412,6 +420,7 @@ + diff --git a/Kickstarter.xcodeproj/project.pbxproj b/Kickstarter.xcodeproj/project.pbxproj index 826a204702..e373ba508a 100644 --- a/Kickstarter.xcodeproj/project.pbxproj +++ b/Kickstarter.xcodeproj/project.pbxproj @@ -1008,7 +1008,7 @@ D6DC65522178CDDD008CF69C /* GraphUserEmailTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6DC65512178CDDC008CF69C /* GraphUserEmailTemplate.swift */; }; D6E925CE211107CD00E13010 /* SettingsNewslettersDataSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6765B4C211091AB00AE3DB4 /* SettingsNewslettersDataSourceTests.swift */; }; D6ED1B37216D0C64007F7547 /* ChangeEmailViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6ED1B36216D0C64007F7547 /* ChangeEmailViewModelTests.swift */; }; - D6ED1B39216D50BE007F7547 /* GraphUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6ED1B38216D50BE007F7547 /* GraphUser.swift */; }; + D6ED1B39216D50BE007F7547 /* UserEmailFields.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6ED1B38216D50BE007F7547 /* UserEmailFields.swift */; }; D6ED1B3B216D525B007F7547 /* ChangeEmailInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6ED1B3A216D525B007F7547 /* ChangeEmailInput.swift */; }; D6ED1B3E216D61E0007F7547 /* UpdateUserAccountMutation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6ED1B3D216D61E0007F7547 /* UpdateUserAccountMutation.swift */; }; D6ED386A1F796C26006CAAE9 /* GraphCategoriesEnvelopeLenses.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6ED38691F796C26006CAAE9 /* GraphCategoriesEnvelopeLenses.swift */; }; @@ -1857,7 +1857,6 @@ 775DFA9C215E758400620CED /* GraphMutation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GraphMutation.swift; sourceTree = ""; }; 775DFAD4215EB2AB00620CED /* Service+RequestHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Service+RequestHelpers.swift"; sourceTree = ""; }; 775DFAD621627D9C00620CED /* GraphError+LocalizedDescription.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "GraphError+LocalizedDescription.swift"; sourceTree = ""; }; - 775DFAD82162A43F00620CED /* ChangePasswordInput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangePasswordInput.swift; sourceTree = ""; }; 775DFB082162C08800620CED /* MessageBannerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageBannerViewController.swift; sourceTree = ""; }; 776B6F6F215183A400AB0652 /* ChangeEmailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeEmailViewController.swift; sourceTree = ""; }; 778215EA20F79FA300F3D09F /* HelpDataSourceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HelpDataSourceTests.swift; sourceTree = ""; }; @@ -2700,7 +2699,7 @@ D6DC653221768B6E008CF69C /* ChangeEmailViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChangeEmailViewModel.swift; sourceTree = ""; }; D6DC65512178CDDC008CF69C /* GraphUserEmailTemplate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GraphUserEmailTemplate.swift; sourceTree = ""; }; D6ED1B36216D0C64007F7547 /* ChangeEmailViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeEmailViewModelTests.swift; sourceTree = ""; }; - D6ED1B38216D50BE007F7547 /* GraphUser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GraphUser.swift; sourceTree = ""; }; + D6ED1B38216D50BE007F7547 /* UserEmailFields.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserEmailFields.swift; sourceTree = ""; }; D6ED1B3A216D525B007F7547 /* ChangeEmailInput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeEmailInput.swift; sourceTree = ""; }; D6ED1B3D216D61E0007F7547 /* UpdateUserAccountMutation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdateUserAccountMutation.swift; sourceTree = ""; }; D6ED38691F796C26006CAAE9 /* GraphCategoriesEnvelopeLenses.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GraphCategoriesEnvelopeLenses.swift; sourceTree = ""; }; @@ -4141,7 +4140,6 @@ D015877D1EEB2ED6006E7684 /* BackingTests.swift */, D6B9DF3E1F72E25A0064A4D8 /* Category.swift */, D6AE52271FD1B4BA00BEC788 /* CategoryEnvelope.swift */, - 775DFAD82162A43F00620CED /* ChangePasswordInput.swift */, D01587801EEB2ED6006E7684 /* CategoryTests.swift */, D01587EE1EEB2ED7006E7684 /* templates */, D01587971EEB2ED6006E7684 /* lenses */, @@ -4166,7 +4164,7 @@ D01587921EEB2ED6006E7684 /* FindFriendsEnvelopeTests.swift */, D01587931EEB2ED6006E7684 /* FriendStatsEnvelope.swift */, D01587941EEB2ED6006E7684 /* FriendStatsEnvelopeTests.swift */, - D6ED1B38216D50BE007F7547 /* GraphUser.swift */, + D6ED1B38216D50BE007F7547 /* UserEmailFields.swift */, D01587951EEB2ED6006E7684 /* Item.swift */, D01587961EEB2ED6006E7684 /* ItemTests.swift */, D01587CB1EEB2ED7006E7684 /* Location.swift */, @@ -6270,7 +6268,7 @@ D015888D1EEB2ED7006E7684 /* ConfigLenses.swift in Sources */, D0158A1E1EEB30A2006E7684 /* ProjectStatsEnvelope.FundingDateStatsTemplates.swift in Sources */, D015899B1EEB2ED7006E7684 /* Service.swift in Sources */, - D6ED1B39216D50BE007F7547 /* GraphUser.swift in Sources */, + D6ED1B39216D50BE007F7547 /* UserEmailFields.swift in Sources */, D01588731EEB2ED7006E7684 /* FindFriendsEnvelope.swift in Sources */, D01588A51EEB2ED7006E7684 /* Project.DatesLenses.swift in Sources */, D01588EB1EEB2ED7006E7684 /* MessageSubject.swift in Sources */, diff --git a/KsApi/Service.swift b/KsApi/Service.swift index 5cafab083a..cf0f447966 100644 --- a/KsApi/Service.swift +++ b/KsApi/Service.swift @@ -213,8 +213,8 @@ public struct Service: ServiceType { return fetch(query: query) } - public func fetchGraphUserEmail(query: NonEmptySet) - -> SignalProducer, GraphError> { + public func fetchGraphUserEmailFields(query: NonEmptySet) + -> SignalProducer, GraphError> { return fetch(query: query) } diff --git a/KsApi/models/GraphUser.swift b/KsApi/models/GraphUser.swift deleted file mode 100644 index 0380676290..0000000000 --- a/KsApi/models/GraphUser.swift +++ /dev/null @@ -1,6 +0,0 @@ -import Foundation - -public struct GraphUserEmail: Swift.Decodable { - - public let email: String -} diff --git a/KsApi/models/UserEmailFields.swift b/KsApi/models/UserEmailFields.swift new file mode 100644 index 0000000000..f16e9dc517 --- /dev/null +++ b/KsApi/models/UserEmailFields.swift @@ -0,0 +1,6 @@ +import Foundation + +public struct UserEmailFields: Swift.Decodable { + public let email: String + public let isEmailVerified: Bool +} diff --git a/KsApi/queries/UserQueries.swift b/KsApi/queries/UserQueries.swift index d1fbc194b1..1c2661ff29 100644 --- a/KsApi/queries/UserQueries.swift +++ b/KsApi/queries/UserQueries.swift @@ -9,7 +9,7 @@ public enum UserQueries: Queryable { case .chosenCurrency: return NonEmptySet(Query.user(chosenCurrencyQueryFields())) case .email: - return NonEmptySet(Query.user(.email +| [])) + return NonEmptySet(Query.user(userEmailQueryFields())) } } } @@ -21,3 +21,7 @@ public func chosenCurrencyQueryFields() -> NonEmptySet { public func userEmailQueryFields() -> NonEmptySet { return .email +| [] } + +public func changeEmailQueryFields() -> NonEmptySet { + return .email +| [.isEmailVerified] +} diff --git a/Library/ViewModels/ChangeEmailViewModel.swift b/Library/ViewModels/ChangeEmailViewModel.swift index 06e047a8b1..e7fc772b2f 100644 --- a/Library/ViewModels/ChangeEmailViewModel.swift +++ b/Library/ViewModels/ChangeEmailViewModel.swift @@ -24,7 +24,7 @@ public protocol ChangeEmailViewModelOutputs { var didFailToChangeEmail: Signal { get } var dismissKeyboard: Signal { get } var emailText: Signal { get } - var messageBannerViewIsHidden: Signal { get } + var emailUnverifiedLabelIsHidden: Signal { get } var onePasswordButtonIsHidden: Signal { get } var onePasswordFindLoginForURLString: Signal { get } var passwordText: Signal { get } @@ -62,7 +62,9 @@ ChangeEmailViewModelOutputs { changeEmailEvent.values().ignoreValues() ) .switchMap { _ in - AppEnvironment.current.apiService.fetchGraphUserEmail(query: UserQueries.email.query) + AppEnvironment.current + .apiService + .fetchGraphUserEmail(query: NonEmptySet(Query.user(changeEmailQueryFields()))) .ksr_delay(AppEnvironment.current.apiDelayInterval, on: AppEnvironment.current.scheduler) .materialize() } From de4c08e330fa7654735120fae63877c560838eae Mon Sep 17 00:00:00 2001 From: Isabel Barrera Date: Tue, 6 Nov 2018 10:49:13 -0500 Subject: [PATCH 02/10] Renaming GraphUserEmail --- KsApi/MockService.swift | 14 +++++++------- KsApi/ServiceType.swift | 6 +++--- KsApi/models/UserEmailFields.swift | 2 +- .../models/templates/GraphUserEmailTemplate.swift | 6 +++--- Library/ViewModels/ChangeEmailViewModel.swift | 4 +++- 5 files changed, 17 insertions(+), 15 deletions(-) diff --git a/KsApi/MockService.swift b/KsApi/MockService.swift index 352ae2cc23..c13a1b6655 100644 --- a/KsApi/MockService.swift +++ b/KsApi/MockService.swift @@ -15,7 +15,7 @@ internal struct MockService: ServiceType { fileprivate let changeCurrencyError: GraphError? fileprivate let changeEmailError: GraphError? - fileprivate let changeEmailResponse: UserEnvelope? + fileprivate let changeEmailResponse: UserEnvelope? fileprivate let changePasswordError: GraphError? @@ -60,7 +60,7 @@ internal struct MockService: ServiceType { fileprivate let fetchDraftError: ErrorEnvelope? fileprivate let fetchGraphCurrencyResponse: UserCurrency? - fileprivate let fetchGraphUserEmailResponse: GraphUserEmail? + fileprivate let fetchGraphUserEmailResponse: UserEmailFields? fileprivate let addAttachmentResponse: UpdateDraft.Image? fileprivate let addAttachmentError: ErrorEnvelope? @@ -167,7 +167,7 @@ internal struct MockService: ServiceType { currency: String = "USD", buildVersion: String = "1", changeEmailError: GraphError? = nil, - changeEmailResponse: UserEnvelope? = UserEnvelope( + changeEmailResponse: UserEnvelope? = UserEnvelope( me: .template ), changePasswordError: GraphError? = nil, @@ -197,7 +197,7 @@ internal struct MockService: ServiceType { exportDataError: ErrorEnvelope? = nil, fetchDraftResponse: UpdateDraft? = nil, fetchDraftError: ErrorEnvelope? = nil, - fetchGraphUserEmailResponse: GraphUserEmail? = nil, + fetchGraphUserEmailResponse: UserEmailFields? = nil, fetchGraphCurrencyResponse: UserCurrency? = nil, addAttachmentResponse: UpdateDraft.Image? = nil, addAttachmentError: ErrorEnvelope? = nil, @@ -608,9 +608,9 @@ internal struct MockService: ServiceType { return SignalProducer(value: CategoryEnvelope(node: .template |> Category.lens.id .~ "\(query.head)")) } - internal func fetchGraphUserEmail(query: NonEmptySet) - -> SignalProducer, GraphError> { - return SignalProducer(value: changeEmailResponse ?? UserEnvelope(me: .template)) + internal func fetchGraphUserEmailFields(query: NonEmptySet) + -> SignalProducer, GraphError> { + return SignalProducer(value: changeEmailResponse ?? UserEnvelope(me: .template)) } internal func fetchGraphCurrency(query: NonEmptySet) diff --git a/KsApi/ServiceType.swift b/KsApi/ServiceType.swift index 34c5994f40..c3ba1cae02 100644 --- a/KsApi/ServiceType.swift +++ b/KsApi/ServiceType.swift @@ -124,9 +124,9 @@ public protocol ServiceType { func fetchGraphCurrency(query: NonEmptySet) -> SignalProducer, GraphError> - /// Fetch User's email objects using graphQL. - func fetchGraphUserEmail(query: NonEmptySet) - -> SignalProducer, GraphError> + /// Fetch User's email fields object using graphQL. + func fetchGraphUserEmailFields(query: NonEmptySet) + -> SignalProducer, GraphError> /// Fetches all of the messages in a particular message thread. func fetchMessageThread(messageThreadId: Int) diff --git a/KsApi/models/UserEmailFields.swift b/KsApi/models/UserEmailFields.swift index f16e9dc517..d1a500d9dc 100644 --- a/KsApi/models/UserEmailFields.swift +++ b/KsApi/models/UserEmailFields.swift @@ -2,5 +2,5 @@ import Foundation public struct UserEmailFields: Swift.Decodable { public let email: String - public let isEmailVerified: Bool + public let isEmailVerified: Bool? } diff --git a/KsApi/models/templates/GraphUserEmailTemplate.swift b/KsApi/models/templates/GraphUserEmailTemplate.swift index 379a9c7898..e35270495c 100644 --- a/KsApi/models/templates/GraphUserEmailTemplate.swift +++ b/KsApi/models/templates/GraphUserEmailTemplate.swift @@ -1,6 +1,6 @@ import Foundation -extension GraphUserEmail { - - internal static let template = GraphUserEmail(email: "ksr@kickstarter.com") +extension UserEmailFields { + internal static let template = UserEmailFields(email: "ksr@kickstarter.com", + isEmailVerified: true) } diff --git a/Library/ViewModels/ChangeEmailViewModel.swift b/Library/ViewModels/ChangeEmailViewModel.swift index e7fc772b2f..470b423e7f 100644 --- a/Library/ViewModels/ChangeEmailViewModel.swift +++ b/Library/ViewModels/ChangeEmailViewModel.swift @@ -64,12 +64,13 @@ ChangeEmailViewModelOutputs { .switchMap { _ in AppEnvironment.current .apiService - .fetchGraphUserEmail(query: NonEmptySet(Query.user(changeEmailQueryFields()))) + .fetchGraphUserEmailFields(query: NonEmptySet(Query.user(changeEmailQueryFields()))) .ksr_delay(AppEnvironment.current.apiDelayInterval, on: AppEnvironment.current.scheduler) .materialize() } self.emailText = userEmailEvent.values().map { $0.me.email } + self.emailUnverifiedLabelIsHidden = userEmailEvent.values().map { $0.me.isEmailVerified ?? true } self.resendVerificationStackViewIsHidden = viewDidLoadProperty.signal.mapConst(true) @@ -190,6 +191,7 @@ ChangeEmailViewModelOutputs { public let didFailToChangeEmail: Signal public let dismissKeyboard: Signal public let emailText: Signal + public let emailUnverifiedLabelIsHidden: Signal public let messageBannerViewIsHidden: Signal public let onePasswordButtonIsHidden: Signal public let onePasswordFindLoginForURLString: Signal From a0e6b06f1bd40046fde1b8570a7feadb36b433e8 Mon Sep 17 00:00:00 2001 From: Isabel Barrera Date: Wed, 7 Nov 2018 12:22:20 -0500 Subject: [PATCH 03/10] ViewModel tests --- .../ChangeEmailViewController.swift | 29 +++-- .../Views/Storyboards/Settings.storyboard | 74 +++++------ KsApi/GraphSchema.swift | 2 + KsApi/models/UserEmailFields.swift | 5 +- .../templates/GraphUserEmailTemplate.swift | 3 +- KsApi/queries/UserQueries.swift | 2 +- Library/ViewModels/ChangeEmailViewModel.swift | 46 +++++-- .../ChangeEmailViewModelTests.swift | 123 ++++++++++++++++-- 8 files changed, 206 insertions(+), 78 deletions(-) diff --git a/Kickstarter-iOS/Views/Controllers/ChangeEmailViewController.swift b/Kickstarter-iOS/Views/Controllers/ChangeEmailViewController.swift index b0fe458d6b..267d05ee1c 100644 --- a/Kickstarter-iOS/Views/Controllers/ChangeEmailViewController.swift +++ b/Kickstarter-iOS/Views/Controllers/ChangeEmailViewController.swift @@ -7,19 +7,17 @@ import UIKit internal final class ChangeEmailViewController: UIViewController { @IBOutlet fileprivate weak var currentEmailLabel: UILabel! @IBOutlet fileprivate weak var currentEmail: UILabel! - @IBOutlet fileprivate weak var emailUnverifiedLabel: UILabel! - @IBOutlet fileprivate weak var messageLabelsView: UIView! + @IBOutlet fileprivate weak var messageLabelView: UIView! @IBOutlet fileprivate weak var newEmailLabel: UILabel! @IBOutlet fileprivate weak var newEmailTextField: UITextField! @IBOutlet fileprivate weak var onePasswordButton: UIButton! @IBOutlet fileprivate weak var passwordLabel: UILabel! @IBOutlet fileprivate weak var passwordTextField: UITextField! @IBOutlet fileprivate weak var resendVerificationEmailButton: UIButton! - @IBOutlet fileprivate weak var resendVerificationStackView: UIStackView! - @IBOutlet fileprivate weak var undeliverableEmailLabel: UILabel! - @IBOutlet fileprivate weak var scrollView: UIScrollView! - @IBOutlet fileprivate weak var resendVerificationEmailStackView: UIStackView! + @IBOutlet fileprivate weak var resendVerificationEmailView: UIView! + @IBOutlet fileprivate weak var warningMessageLabel: UILabel! + @IBOutlet fileprivate weak var unverifiedEmailLabel: UILabel! private let viewModel: ChangeEmailViewModelType = ChangeEmailViewModel() private var messageBannerView: MessageBannerViewController! @@ -71,12 +69,21 @@ internal final class ChangeEmailViewController: UIViewController { _ = onePasswordButton |> onePasswordButtonStyle - _ = emailUnverifiedLabel + _ = messageLabelView + |> UIView.lens.backgroundColor .~ .ksr_grey_200 + + _ = unverifiedEmailLabel |> settingsDescriptionLabelStyle |> UILabel.lens.text %~ { _ in Strings.Email_unverified() } + _ = warningMessageLabel + |> settingsDescriptionLabelStyle + |> UILabel.lens.textColor .~ .ksr_red_400 + |> UILabel.lens.text %~ { _ in Strings.We_ve_been_unable_to_send_email() } + _ = currentEmailLabel |> settingsTitleLabelStyle + |> UILabel.lens.text %~ { _ in Strings.Current_email() } _ = currentEmail |> settingsDetailLabelStyle @@ -109,12 +116,12 @@ internal final class ChangeEmailViewController: UIViewController { override func bindViewModel() { super.bindViewModel() - self.resendVerificationStackView.rac.hidden = self.viewModel.outputs.resendVerificationStackViewIsHidden self.currentEmail.rac.text = self.viewModel.outputs.emailText - self.emailUnverifiedLabel.rac.hidden = self.viewModel.outputs.emailUnverifiedLabelIsHidden - + self.resendVerificationEmailView.rac.hidden = self.viewModel.outputs.resendVerificationEmailViewIsHidden self.onePasswordButton.rac.hidden = self.viewModel.outputs.onePasswordButtonIsHidden - + self.messageLabelView.rac.hidden = self.viewModel.outputs.messageLabelViewHidden + self.unverifiedEmailLabel.rac.hidden = self.viewModel.outputs.unverifiedEmailLabelHidden + self.warningMessageLabel.rac.hidden = self.viewModel.outputs.warningMessageLabelHidden self.passwordTextField.rac.text = self.viewModel.outputs.passwordText self.viewModel.outputs.activityIndicatorShouldShow diff --git a/Kickstarter-iOS/Views/Storyboards/Settings.storyboard b/Kickstarter-iOS/Views/Storyboards/Settings.storyboard index 7c6a649f64..e71847b662 100644 --- a/Kickstarter-iOS/Views/Storyboards/Settings.storyboard +++ b/Kickstarter-iOS/Views/Storyboards/Settings.storyboard @@ -1,11 +1,11 @@ - + - + @@ -151,7 +151,7 @@ - + @@ -203,45 +203,37 @@ - - + - - +