Mercurial > public > geoquiz
diff GeoQuiz/ProfileEditModalView.swift @ 19:f140bb277c96
refactor code
author | Dennis C. M. <dennis@denniscm.com> |
---|---|
date | Sun, 23 Oct 2022 00:11:38 +0100 |
parents | 1011e56b7832 |
children | b145c408f791 |
line wrap: on
line diff
--- a/GeoQuiz/ProfileEditModalView.swift Sat Oct 22 08:56:54 2022 +0100 +++ b/GeoQuiz/ProfileEditModalView.swift Sun Oct 23 00:11:38 2022 +0100 @@ -9,10 +9,17 @@ import PhotosUI struct ProfileEditModalView: View { - @ObservedObject var user: User + @ObservedObject var userController: UserController + + @State var newUsername: String + @State private var selectedImageItem: PhotosPickerItem? = nil + @Environment(\.dismiss) var dismiss - @State private var selectedItem: PhotosPickerItem? = nil + init(user: UserController) { + self.userController = user + self._newUsername = State(initialValue: user.data.username) + } var body: some View { NavigationStack { @@ -20,43 +27,58 @@ Section { HStack { Spacer() - ZStack { - UserImage(uiImage: user.data.uiImage) - .onChange(of: selectedItem) { newItem in - Task { - if let data = try? await newItem?.loadTransferable(type: Data.self) { - user.data.imageData = data - } + PhotosPicker( + selection: $selectedImageItem, + matching: .images, + photoLibrary: .shared()) { + UserImage(userController: userController) + .frame(height: 150) + .overlay( + Image(systemName: "camera.fill") + .foregroundColor(.white) + .font(.title) + .shadow(radius: 5) + ) + } + .onChange(of: selectedImageItem) { newItem in + Task { + if let data = try? await newItem?.loadTransferable(type: Data.self) { + userController.data.imageData = data } } - - PhotosPicker( - selection: $selectedItem, - matching: .images, - photoLibrary: .shared()) { - EmptyView() - } - } + } Spacer() } - } header: { - Text("Profile image") + .listRowBackground(Color.clear) } Section { - TextField("Enter a username", text: $user.data.username) + TextField("Enter a username", text: $newUsername) } header: { Text("Username") } + } .navigationTitle("Edit profile") .navigationBarTitleDisplayMode(.inline) .toolbar { + ToolbarItem(placement: .cancellationAction) { + Button { + dismiss() + } label: { + Label("Exit", systemImage: "multiply") + } + } + ToolbarItem(placement: .navigationBarTrailing) { - Button("Done") { + Button { + userController.data.username = newUsername dismiss() + } label: { + Text("Done") } + .disabled(newUsername.isEmpty) } } } @@ -65,6 +87,6 @@ struct ProfileEditModalView_Previews: PreviewProvider { static var previews: some View { - ProfileEditModalView(user: User()) + ProfileEditModalView(user: UserController()) } }