Mercurial > public > geoquiz
view GeoQuiz/ProfileEditModalView.swift @ 21:b145c408f791
refactor code
author | Dennis C. M. <dennis@denniscm.com> |
---|---|
date | Tue, 25 Oct 2022 15:30:01 +0200 |
parents | f140bb277c96 |
children |
line wrap: on
line source
// // ProfileEditModalView.swift // GeoQuiz // // Created by Dennis Concepción Martín on 19/10/22. // import SwiftUI import PhotosUI struct ProfileEditModalView: View { @ObservedObject var userController: UserController @State var newUsername: String @State private var selectedImageItem: PhotosPickerItem? = nil @Environment(\.dismiss) var dismiss init(userController: UserController) { self.userController = userController self._newUsername = State(initialValue: userController.data.username) } var body: some View { NavigationStack { Form { Section { HStack { Spacer() 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 } } } Spacer() } .listRowBackground(Color.clear) } Section { 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 { userController.data.username = newUsername dismiss() } label: { Text("Done") } .disabled(newUsername.isEmpty) } } } } } struct ProfileEditModalView_Previews: PreviewProvider { static var previews: some View { ProfileEditModalView(userController: UserController()) } }