Use UserIndicatorPresenter for onboarding personalisation.

Remove the service from the display name screen to match the avatar screen.
Add a loading indicator to PhotoPickerPresenter.
Fix layout issue when selecting non-square avatar image.
This commit is contained in:
Doug
2022-03-15 16:00:06 +00:00
parent 071a43cc90
commit ed9139a41a
20 changed files with 158 additions and 207 deletions
@@ -27,16 +27,7 @@ struct OnboardingDisplayNameScreen: View {
@State private var isEditingTextField = false
#warning("Move these computed properties to the view model")
var textFieldFooterString: String {
if let errorMessage = viewModel.viewState.validationErrorMessage {
return errorMessage
}
return VectorL10n.onboardingDisplayNameHint
}
var textFieldFooterColor: Color {
private var textFieldFooterColor: Color {
viewModel.viewState.validationErrorMessage == nil ? theme.colors.tertiaryContent : theme.colors.alert
}
@@ -44,6 +35,8 @@ struct OnboardingDisplayNameScreen: View {
@ObservedObject var viewModel: OnboardingDisplayNameViewModel.Context
// MARK: - Views
var body: some View {
ScrollView {
VStack(spacing: 0) {
@@ -62,7 +55,6 @@ struct OnboardingDisplayNameScreen: View {
}
.accentColor(theme.colors.accent)
.background(theme.colors.background.ignoresSafeArea())
.waitOverlay(show: viewModel.viewState.isWaiting, allowUserInteraction: false)
.alert(item: $viewModel.alertInfo) { $0.alert }
.onChange(of: viewModel.displayName) { _ in
viewModel.send(viewAction: .validateDisplayName)
@@ -98,7 +90,7 @@ struct OnboardingDisplayNameScreen: View {
isEditing: isEditingTextField,
isError: viewModel.viewState.validationErrorMessage != nil))
Text(textFieldFooterString)
Text(viewModel.viewState.textFieldFooterMessage)
.font(theme.fonts.footnote)
.foregroundColor(textFieldFooterColor)
.frame(maxWidth: .infinity, alignment: .leading)
@@ -112,7 +104,7 @@ struct OnboardingDisplayNameScreen: View {
viewModel.send(viewAction: .save)
}
.buttonStyle(PrimaryActionButtonStyle())
.disabled(viewModel.displayName.isEmpty || viewModel.viewState.isWaiting)
.disabled(viewModel.displayName.isEmpty)
Button { viewModel.send(viewAction: .skip) } label: {
Text(VectorL10n.onboardingPersonalizationSkip)