14
|
1 //
|
|
2 // ProfileEditModalView.swift
|
|
3 // GeoQuiz
|
|
4 //
|
|
5 // Created by Dennis Concepción Martín on 19/10/22.
|
|
6 //
|
|
7
|
|
8 import SwiftUI
|
|
9 import PhotosUI
|
|
10
|
|
11 struct ProfileEditModalView: View {
|
19
|
12 @ObservedObject var userController: UserController
|
|
13
|
|
14 @State var newUsername: String
|
|
15 @State private var selectedImageItem: PhotosPickerItem? = nil
|
|
16
|
14
|
17 @Environment(\.dismiss) var dismiss
|
|
18
|
21
|
19 init(userController: UserController) {
|
|
20 self.userController = userController
|
|
21 self._newUsername = State(initialValue: userController.data.username)
|
19
|
22 }
|
14
|
23
|
|
24 var body: some View {
|
|
25 NavigationStack {
|
|
26 Form {
|
|
27 Section {
|
|
28 HStack {
|
|
29 Spacer()
|
19
|
30 PhotosPicker(
|
|
31 selection: $selectedImageItem,
|
|
32 matching: .images,
|
|
33 photoLibrary: .shared()) {
|
|
34 UserImage(userController: userController)
|
|
35 .frame(height: 150)
|
|
36 .overlay(
|
|
37 Image(systemName: "camera.fill")
|
|
38 .foregroundColor(.white)
|
|
39 .font(.title)
|
|
40 .shadow(radius: 5)
|
|
41 )
|
|
42 }
|
|
43 .onChange(of: selectedImageItem) { newItem in
|
|
44 Task {
|
|
45 if let data = try? await newItem?.loadTransferable(type: Data.self) {
|
|
46 userController.data.imageData = data
|
14
|
47 }
|
|
48 }
|
19
|
49 }
|
14
|
50
|
|
51 Spacer()
|
|
52 }
|
19
|
53 .listRowBackground(Color.clear)
|
14
|
54 }
|
|
55
|
|
56 Section {
|
19
|
57 TextField("Enter a username", text: $newUsername)
|
14
|
58 } header: {
|
|
59 Text("Username")
|
|
60 }
|
19
|
61
|
14
|
62 }
|
|
63 .navigationTitle("Edit profile")
|
|
64 .navigationBarTitleDisplayMode(.inline)
|
|
65 .toolbar {
|
19
|
66 ToolbarItem(placement: .cancellationAction) {
|
|
67 Button {
|
|
68 dismiss()
|
|
69 } label: {
|
|
70 Label("Exit", systemImage: "multiply")
|
|
71 }
|
|
72 }
|
|
73
|
14
|
74 ToolbarItem(placement: .navigationBarTrailing) {
|
19
|
75 Button {
|
|
76 userController.data.username = newUsername
|
14
|
77 dismiss()
|
19
|
78 } label: {
|
|
79 Text("Done")
|
14
|
80 }
|
19
|
81 .disabled(newUsername.isEmpty)
|
14
|
82 }
|
|
83 }
|
|
84 }
|
|
85 }
|
|
86 }
|
|
87
|
|
88 struct ProfileEditModalView_Previews: PreviewProvider {
|
|
89 static var previews: some View {
|
21
|
90 ProfileEditModalView(userController: UserController())
|
14
|
91 }
|
|
92 }
|