annotate GeoQuiz/ProfileEditModalView.swift @ 28:f51b70c2cccc

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