annotate GeoQuiz/ProfileModalView.swift @ 16:1011e56b7832

implement user profile
author Dennis C. M. <dennis@denniscm.com>
date Thu, 20 Oct 2022 13:49:42 +0200
parents f1967f8cc67b
children 8dac58bb4569
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
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
9 import PhotosUI
6
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
10
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
11 struct ProfileModalView: View {
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
12 @ObservedObject var user: User
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
13 @ObservedObject var storeKitRC: StoreKitRC
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
15 @Environment(\.dismiss) var dismiss
15
f1967f8cc67b first iteration of core data
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
16 @Environment(\.managedObjectContext) var moc
f1967f8cc67b first iteration of core data
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
17
f1967f8cc67b first iteration of core data
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
18 @FetchRequest(sortDescriptors: [
16
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
19 SortDescriptor(\.date, order: .reverse),
15
f1967f8cc67b first iteration of core data
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
20 ]) var playedGames: FetchedResults<PlayedGame>
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
21
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
22 @State private var showingEditModalView = false
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
23
6
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
24 var body: some View {
16
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
25 NavigationView {
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
26 ScrollView {
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
27 VStack(alignment: .leading, spacing: 15) {
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
28 UserProfile(user: user, storeKitRC: storeKitRC)
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
29
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
30 UserProgress(playedGames: playedGames)
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
31
16
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
32 ForEach(playedGames) { playedGame in
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
33 RecentGame(game: playedGame)
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
34 }
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
35 .onDelete(perform: deleteGame)
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
36 }
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
37 .padding()
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
38 }
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
39 .background(.customBackground)
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
40 .navigationTitle("Profile")
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
41 .navigationBarTitleDisplayMode(.inline)
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
42 .toolbar {
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
43 ToolbarItem(placement: .cancellationAction) {
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
44 Button {
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
45 dismiss()
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
46 } label: {
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
47 Label("Exit", systemImage: "multiply")
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
48 }
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
49 }
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
50
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
51 ToolbarItem(placement: .navigationBarTrailing) {
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
52 Button("Edit") {
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
53 showingEditModalView = true
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
54 }
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
55 }
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
56 }
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
57
16
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
58 .sheet(isPresented: $showingEditModalView) {
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
59 ProfileEditModalView(user: user)
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
60 }
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
61 }
16
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
62
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
63 }
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
64
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
65 private func deleteGame(at offsets: IndexSet) {
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
66 for offset in offsets {
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
67 let game = playedGames[offset]
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
68 moc.delete(game)
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
69 }
16
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
70
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
71 try? moc.save()
6
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
72 }
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
73 }
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
74
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
75 struct ProfileView_Previews: PreviewProvider {
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
76 static var previews: some View {
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
77 ProfileModalView(user: User(), storeKitRC: StoreKitRC())
16
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
78 .environment(\.managedObjectContext, PersistenceController.preview.container.viewContext)
6
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
79 }
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
80 }