annotate GeoQuiz/ContentView.swift @ 26:425078c01194

refactor code
author Dennis C. M. <dennis@denniscm.com>
date Wed, 09 Nov 2022 10:30:01 +0100
parents b145c408f791
children 3f4b366d476d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
1 //
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
2 // ContentView.swift
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
3 // GeoQuiz
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
4 //
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
5 // Created by Dennis Concepción Martín on 5/9/22.
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
6 //
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
7
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
8 import SwiftUI
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
9
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
10 struct ContentView: View {
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
11 @State private var path: [GameType] = []
7
d945e52b0704 implement dynamic map
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
12 @State private var showingBuyPremiumModalView = false
5
f31a61462e7a add sound effects
Dennis C. M. <dennis@denniscm.com>
parents: 4
diff changeset
13 @State private var showingSettingsModalView = false
11
039b26a99a48 implementing RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 10
diff changeset
14 @State private var showingProfileModalView = false
0
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
15
26
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 21
diff changeset
16 @StateObject var storeController = StoreController()
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
17 @StateObject var userController = UserController()
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
18
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
19 let premiumGames: [GameType] = [.guessTheCapital, .guessTheCountry, .guessThePopulation]
13
bdfff35dd43c implement RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
20
0
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
21 var body: some View {
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
22 NavigationStack(path: $path) {
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
23 ScrollView(showsIndicators: false) {
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
24 ForEach(GameType.allCases, id: \.rawValue) { gameType in
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
25 NavigationLink(value: gameType) { EmptyView() }
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
26 }
13
bdfff35dd43c implement RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
27
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
28 VStack(alignment: .leading, spacing: 30) {
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
29 Text("Select a game 🎮")
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
30 .font(.largeTitle.bold())
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
31 .padding(.bottom)
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
32
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
33 Button {
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
34 path.append(.guessTheFlag)
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
35 } label: {
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
36 GameButton(gameType: .guessTheFlag, isActive: true)
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
37 }
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
38
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
39 ForEach(premiumGames, id: \.rawValue) { gameType in
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
40 Button {
26
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 21
diff changeset
41 if storeController.premiumIsActive {
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
42 path.append(gameType)
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
43 } else {
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
44 showingBuyPremiumModalView = true
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
45 }
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
46 } label: {
26
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 21
diff changeset
47 GameButton(gameType: gameType, isActive: storeController.premiumIsActive)
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
48 }
13
bdfff35dd43c implement RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
49 }
0
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
50 }
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
51 .padding()
0
413e2d21333e first commit
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 .navigationTitle("GeoQuiz")
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
54 .navigationBarTitleDisplayMode(.inline)
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
55
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
56 .navigationDestination(for: GameType.self) { gameMode in
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
57 switch gameMode {
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
58 case .guessTheFlag:
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
59 GuessTheFlagView()
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
60 case .guessTheCapital:
21
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
61 GuessTheCapitalView()
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
62 case .guessTheCountry:
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
63 GuessTheCountryView()
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
64 case .guessThePopulation:
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
65 GuessThePopulationView()
5
f31a61462e7a add sound effects
Dennis C. M. <dennis@denniscm.com>
parents: 4
diff changeset
66 }
f31a61462e7a add sound effects
Dennis C. M. <dennis@denniscm.com>
parents: 4
diff changeset
67 }
f31a61462e7a add sound effects
Dennis C. M. <dennis@denniscm.com>
parents: 4
diff changeset
68
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
69 .toolbar {
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
70 ToolbarItem(placement: .navigationBarLeading) {
13
bdfff35dd43c implement RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
71 Button {
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
72 showingSettingsModalView = true
13
bdfff35dd43c implement RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
73 } label: {
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
74 Label("Settings", systemImage: "gear")
13
bdfff35dd43c implement RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
75 }
5
f31a61462e7a add sound effects
Dennis C. M. <dennis@denniscm.com>
parents: 4
diff changeset
76 }
11
039b26a99a48 implementing RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 10
diff changeset
77
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
78 ToolbarItemGroup {
26
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 21
diff changeset
79 if !storeController.premiumIsActive {
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
80 Button {
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
81 showingBuyPremiumModalView = true
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
82 } label: {
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
83 Label("Buy premium", systemImage: "star")
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
84 }
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
85 }
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
86
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
87 Button {
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
88 showingProfileModalView = true
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
89 } label: {
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
90 Label("Profile", systemImage: "person")
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
91 }
11
039b26a99a48 implementing RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 10
diff changeset
92 }
0
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
93 }
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
94 .sheet(isPresented: $showingBuyPremiumModalView) {
26
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 21
diff changeset
95 BuyPremiumModalView(storeController: storeController)
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
96 }
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
97
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
98 .sheet(isPresented: $showingSettingsModalView) {
26
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 21
diff changeset
99 SettingsModalView(userController: userController)
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
100 }
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
101
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
102 .sheet(isPresented: $showingProfileModalView) {
26
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 21
diff changeset
103 ProfileModalView(userController: userController, storeController: storeController)
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
104 }
0
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
105 }
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
106 .navigationViewStyle(StackNavigationViewStyle())
0
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
107 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
108 }
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
109
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
110 struct ContentView_Previews: PreviewProvider {
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
111 static var previews: some View {
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
112 ContentView()
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
113 .environment(\.managedObjectContext, PersistenceController.preview.container.viewContext)
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
114 }
0
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
115 }