Mercurial > public > geoquiz
comparison GeoQuiz/ProfileEditModalView.swift @ 16:1011e56b7832
implement user profile
author | Dennis C. M. <dennis@denniscm.com> |
---|---|
date | Thu, 20 Oct 2022 13:49:42 +0200 |
parents | GeoQuiz/Components/ProfileEditModalView.swift@136928bae534 |
children | f140bb277c96 |
comparison
equal
deleted
inserted
replaced
15:f1967f8cc67b | 16:1011e56b7832 |
---|---|
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 { | |
12 @ObservedObject var user: User | |
13 @Environment(\.dismiss) var dismiss | |
14 | |
15 @State private var selectedItem: PhotosPickerItem? = nil | |
16 | |
17 var body: some View { | |
18 NavigationStack { | |
19 Form { | |
20 Section { | |
21 HStack { | |
22 Spacer() | |
23 ZStack { | |
24 UserImage(uiImage: user.data.uiImage) | |
25 .onChange(of: selectedItem) { newItem in | |
26 Task { | |
27 if let data = try? await newItem?.loadTransferable(type: Data.self) { | |
28 user.data.imageData = data | |
29 } | |
30 } | |
31 } | |
32 | |
33 PhotosPicker( | |
34 selection: $selectedItem, | |
35 matching: .images, | |
36 photoLibrary: .shared()) { | |
37 EmptyView() | |
38 } | |
39 } | |
40 | |
41 Spacer() | |
42 } | |
43 } header: { | |
44 Text("Profile image") | |
45 } | |
46 | |
47 Section { | |
48 TextField("Enter a username", text: $user.data.username) | |
49 } header: { | |
50 Text("Username") | |
51 } | |
52 } | |
53 .navigationTitle("Edit profile") | |
54 .navigationBarTitleDisplayMode(.inline) | |
55 .toolbar { | |
56 ToolbarItem(placement: .navigationBarTrailing) { | |
57 Button("Done") { | |
58 dismiss() | |
59 } | |
60 } | |
61 } | |
62 } | |
63 } | |
64 } | |
65 | |
66 struct ProfileEditModalView_Previews: PreviewProvider { | |
67 static var previews: some View { | |
68 ProfileEditModalView(user: User()) | |
69 } | |
70 } |