annotate GeoQuiz/ProfileModalView.swift @ 26:425078c01194

refactor code
author Dennis C. M. <dennis@denniscm.com>
date Wed, 09 Nov 2022 10:30:01 +0100
parents 02dcebb8cc4a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
1 //
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
2 // ProfileModalView.swift
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
3 // GeoQuiz
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
4 //
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
5 // Created by Dennis Concepción Martín on 25/9/22.
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
6 //
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
7
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
8 import SwiftUI
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
9
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
10 struct ProfileModalView: View {
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
11 @ObservedObject var userController: UserController
26
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 23
diff changeset
12 @ObservedObject var storeController: StoreController
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
13
20
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
14 @State private var showingEditModalView = false
15
f1967f8cc67b first iteration of core data
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
15
f1967f8cc67b first iteration of core data
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
16 @FetchRequest(sortDescriptors: [
16
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
17 SortDescriptor(\.date, order: .reverse),
15
f1967f8cc67b first iteration of core data
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
18 ]) var playedGames: FetchedResults<PlayedGame>
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
19
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
20 @Environment(\.dismiss) var dismiss
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
21 @Environment(\.managedObjectContext) var moc
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
22
6
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
23 var body: some View {
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
24 NavigationStack {
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
25 ScrollView {
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
26 VStack(spacing: 30) {
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
27 UserProfile(
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
28 userController: userController,
26
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 23
diff changeset
29 storeController: storeController,
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
30 isShowing: $showingEditModalView
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
31 )
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
32
21
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
33 if !playedGames.isEmpty {
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
34 VStack(spacing: 20) {
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
35 HStack {
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
36 Text("Latest games")
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
37 .foregroundColor(.secondary)
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
38
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
39 Spacer()
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
40
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
41 NavigationLink {
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
42 PlayedGamesList()
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
43 } label: {
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
44 HStack {
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
45 Text("Show all")
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
46 Image(systemName: "chevron.right")
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
47 }
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
48 }
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
49 .disabled(playedGames.isEmpty)
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
50 }
20
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
51
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
52 ForEach(playedGames.prefix(8)) { playedGame in
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
53 RecentGame(game: playedGame)
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
54 .padding()
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
55 .background(Color(.secondarySystemGroupedBackground))
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
56 .cornerRadius(20)
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
57 }
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
58 }
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
59 }
17
8dac58bb4569 fix build bug
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
60 }
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
61 .padding()
17
8dac58bb4569 fix build bug
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
62 }
20
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
63 .frame(maxWidth: .infinity)
17
8dac58bb4569 fix build bug
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
64 .navigationTitle("Profile")
8dac58bb4569 fix build bug
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
65 .navigationBarTitleDisplayMode(.inline)
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
66 .background(Color(.systemGroupedBackground))
17
8dac58bb4569 fix build bug
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
67 .toolbar {
8dac58bb4569 fix build bug
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
68 ToolbarItem(placement: .cancellationAction) {
8dac58bb4569 fix build bug
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
69 Button {
8dac58bb4569 fix build bug
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
70 dismiss()
8dac58bb4569 fix build bug
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
71 } label: {
8dac58bb4569 fix build bug
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
72 Label("Exit", systemImage: "multiply")
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
73 }
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
74 }
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
75 }
17
8dac58bb4569 fix build bug
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
76
8dac58bb4569 fix build bug
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
77 .sheet(isPresented: $showingEditModalView) {
21
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
78 ProfileEditModalView(userController: userController)
17
8dac58bb4569 fix build bug
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
79 }
21
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
80
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
81 #if DEBUG
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
82 .onAppear {
23
02dcebb8cc4a fix layout issues
Dennis C. M. <dennis@denniscm.com>
parents: 22
diff changeset
83 if playedGames.isEmpty {
02dcebb8cc4a fix layout issues
Dennis C. M. <dennis@denniscm.com>
parents: 22
diff changeset
84 PersistenceController.createMockData(with: moc)
02dcebb8cc4a fix layout issues
Dennis C. M. <dennis@denniscm.com>
parents: 22
diff changeset
85 }
21
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
86 }
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
87 #endif
17
8dac58bb4569 fix build bug
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
88 }
6
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
89 }
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
90 }
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
91
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
92 struct ProfileView_Previews: PreviewProvider {
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
93 static var previews: some View {
26
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 23
diff changeset
94 ProfileModalView(userController: UserController(), storeController: StoreController())
16
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
95 .environment(\.managedObjectContext, PersistenceController.preview.container.viewContext)
6
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
96 }
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
97 }