annotate GeoQuiz/ProfileModalView.swift @ 20:e281791e0494

finish implementation
author Dennis C. M. <dennis@denniscm.com>
date Sun, 23 Oct 2022 11:48:39 +0100
parents f140bb277c96
children b145c408f791
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
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
12 @ObservedObject var storeKitController: StoreKitController
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,
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
29 storeKitController: storeKitController,
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
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
33 VStack(spacing: 20) {
20
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
34 HStack {
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
35 Text("Latest games")
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
36 .foregroundColor(.secondary)
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
37
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
38 Spacer()
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
39
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
40 NavigationLink {
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
41 PlayedGamesList(playedGames: playedGames)
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
42 } label: {
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
43 Text("Show all")
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
44 }
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
45 .disabled(playedGames.isEmpty)
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
46 }
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
47
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
48 if playedGames.isEmpty {
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
49 Spacer()
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
50 LatestGamesPlaceholder()
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
51 } else {
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) {
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
78 ProfileEditModalView(user: userController)
17
8dac58bb4569 fix build bug
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
79 }
8dac58bb4569 fix build bug
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
80 }
6
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
81 }
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
82 }
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
83
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
84 struct ProfileView_Previews: PreviewProvider {
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
85 static var previews: some View {
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
86 ProfileModalView(userController: UserController(), storeKitController: StoreKitController())
16
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
87 .environment(\.managedObjectContext, PersistenceController.preview.container.viewContext)
6
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
88 }
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
89 }