diff --git a/PadelClub.xcodeproj/project.pbxproj b/PadelClub.xcodeproj/project.pbxproj index 6d8cb6a..8b64a60 100644 --- a/PadelClub.xcodeproj/project.pbxproj +++ b/PadelClub.xcodeproj/project.pbxproj @@ -114,6 +114,9 @@ C488C8742CC816410082001F /* Purchase.json in Resources */ = {isa = PBXBuildFile; fileRef = C488C8702CC816410082001F /* Purchase.json */; }; C488C8752CC816410082001F /* Purchase.json in Resources */ = {isa = PBXBuildFile; fileRef = C488C8702CC816410082001F /* Purchase.json */; }; C488C8762CC816410082001F /* BasePurchase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C488C86F2CC816410082001F /* BasePurchase.swift */; }; + C488C8822CCBE8FC0082001F /* NetworkStatusView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C488C8812CCBE8FC0082001F /* NetworkStatusView.swift */; }; + C488C8832CCBE8FC0082001F /* NetworkStatusView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C488C8812CCBE8FC0082001F /* NetworkStatusView.swift */; }; + C488C8842CCBE8FC0082001F /* NetworkStatusView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C488C8812CCBE8FC0082001F /* NetworkStatusView.swift */; }; C493B37E2C10AD3600862481 /* LoadingViewModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = C493B37D2C10AD3600862481 /* LoadingViewModifier.swift */; }; C49EF0192BD694290077B5AA /* PurchaseListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EF0182BD694290077B5AA /* PurchaseListView.swift */; }; C49EF01B2BD6A1E80077B5AA /* URLs.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EF01A2BD6A1E80077B5AA /* URLs.swift */; }; @@ -1002,6 +1005,7 @@ C488C81F2CC7E4240082001F /* Tournament.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = Tournament.json; sourceTree = ""; }; C488C86F2CC816410082001F /* BasePurchase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BasePurchase.swift; sourceTree = ""; }; C488C8702CC816410082001F /* Purchase.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = Purchase.json; sourceTree = ""; }; + C488C8812CCBE8FC0082001F /* NetworkStatusView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkStatusView.swift; sourceTree = ""; }; C493B37D2C10AD3600862481 /* LoadingViewModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadingViewModifier.swift; sourceTree = ""; }; C49EF0182BD694290077B5AA /* PurchaseListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PurchaseListView.swift; sourceTree = ""; }; C49EF01A2BD6A1E80077B5AA /* URLs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLs.swift; sourceTree = ""; }; @@ -1810,6 +1814,7 @@ children = ( FF3F74F52B919E45004CFE0E /* UmpireView.swift */, FFD783FE2B91BA42000F62A6 /* PadelClubView.swift */, + C488C8812CCBE8FC0082001F /* NetworkStatusView.swift */, ); path = Umpire; sourceTree = ""; @@ -2635,6 +2640,7 @@ FF8F26452BAE0A3400650388 /* TournamentDurationManagerView.swift in Sources */, FF1DC5532BAB354A00FD8220 /* MockData.swift in Sources */, FF967D092BAF3D4000A9A3BD /* TeamDetailView.swift in Sources */, + C488C8822CCBE8FC0082001F /* NetworkStatusView.swift in Sources */, FF5DA18F2BB9268800A33061 /* GroupStagesSettingsView.swift in Sources */, FF663FBE2BE019EC0031AE83 /* TournamentFilterView.swift in Sources */, FF1F4B752BFA00FC000B4573 /* HtmlGenerator.swift in Sources */, @@ -2772,6 +2778,7 @@ FF4CBF792C996C0600151637 /* LocationManager.swift in Sources */, FF4CBF7A2C996C0600151637 /* CapsuleViewModifier.swift in Sources */, C488C8472CC7E4240082001F /* BaseDateInterval.swift in Sources */, + C488C8832CCBE8FC0082001F /* NetworkStatusView.swift in Sources */, C488C8482CC7E4240082001F /* BaseMonthData.swift in Sources */, C488C8492CC7E4240082001F /* BaseTeamRegistration.swift in Sources */, C488C84A2CC7E4240082001F /* BaseGroupStage.swift in Sources */, @@ -3036,6 +3043,7 @@ FF70FAF82C90584900129CC2 /* LocationManager.swift in Sources */, FF70FAF92C90584900129CC2 /* CapsuleViewModifier.swift in Sources */, C488C8542CC7E4240082001F /* BaseDateInterval.swift in Sources */, + C488C8842CCBE8FC0082001F /* NetworkStatusView.swift in Sources */, C488C8552CC7E4240082001F /* BaseMonthData.swift in Sources */, C488C8562CC7E4240082001F /* BaseTeamRegistration.swift in Sources */, C488C8572CC7E4240082001F /* BaseGroupStage.swift in Sources */, diff --git a/PadelClub/AppDelegate.swift b/PadelClub/AppDelegate.swift index e3d9e73..12a9138 100644 --- a/PadelClub/AppDelegate.swift +++ b/PadelClub/AppDelegate.swift @@ -20,7 +20,6 @@ class AppDelegate : NSObject, UIApplicationDelegate, UNUserNotificationCenterDel UIApplication.shared.registerForRemoteNotifications() UNUserNotificationCenter.current().delegate = self - Logger.log("didFinishLaunchingWithOptions") return true } diff --git a/PadelClub/Data/Court.swift b/PadelClub/Data/Court.swift index d438f2e..d5bf930 100644 --- a/PadelClub/Data/Court.swift +++ b/PadelClub/Data/Court.swift @@ -31,7 +31,7 @@ final class Court: BaseCourt { } required init(from decoder: Decoder) throws { - fatalError("init(from:) has not been implemented") + try super.init(from: decoder) } func courtTitle() -> String { diff --git a/PadelClub/Views/Club/ClubDetailView.swift b/PadelClub/Views/Club/ClubDetailView.swift index 5ad196a..313e933 100644 --- a/PadelClub/Views/Club/ClubDetailView.swift +++ b/PadelClub/Views/Club/ClubDetailView.swift @@ -282,15 +282,11 @@ struct ClubDetailView: View { } private func _deleteClub() { - do { - clubDeleted = true - dataStore.user.clubs.removeAll(where: { $0 == club.id }) - self.dataStore.saveUser() - try dataStore.clubs.deleteById(club.id) - dismiss() - } catch { - Logger.error(error) - } + clubDeleted = true + dataStore.user.clubs.removeAll(where: { $0 == club.id }) + self.dataStore.saveUser() + dataStore.clubs.delete(instance: club) + dismiss() } } diff --git a/PadelClub/Views/Navigation/Umpire/NetworkStatusView.swift b/PadelClub/Views/Navigation/Umpire/NetworkStatusView.swift new file mode 100644 index 0000000..07f8ca1 --- /dev/null +++ b/PadelClub/Views/Navigation/Umpire/NetworkStatusView.swift @@ -0,0 +1,45 @@ +// +// NetworkStatusView.swift +// PadelClub +// +// Created by Laurent Morvillier on 25/10/2024. +// + +import SwiftUI +import LeStorage + +struct NetworkStatusView: View { + + @State private var isConnected = false + @State private var timer: Timer? + + var body: some View { + Image(systemName: self.isConnected ? "network" : "network.slash") + .resizable() + .scaledToFit() + + .onAppear { + self._defineStatus() + // Start the timer when the view appears + timer = Timer.scheduledTimer(withTimeInterval: 2.0, repeats: true) { _ in + withAnimation { + self._defineStatus() + } + } + } + .onDisappear { + // Clean up timer when view disappears + timer?.invalidate() + timer = nil + } + } + + fileprivate func _defineStatus() { + self.isConnected = LeStorage.NetworkMonitor.shared.isConnected + } + +} + +#Preview { + NetworkStatusView() +} diff --git a/PadelClub/Views/Navigation/Umpire/UmpireView.swift b/PadelClub/Views/Navigation/Umpire/UmpireView.swift index 347c4ba..d57292c 100644 --- a/PadelClub/Views/Navigation/Umpire/UmpireView.swift +++ b/PadelClub/Views/Navigation/Umpire/UmpireView.swift @@ -178,11 +178,12 @@ struct UmpireView: View { .toolbar { #if DEBUG ToolbarItem(placement: .topBarTrailing) { - if StoreCenter.main.collectionsCanSynchronize { - Image(systemName: "checkmark.icloud") - } else { - Image(systemName: "icloud.slash") - } + NetworkStatusView() +// if StoreCenter.main.collectionsCanSynchronize { +// Image(systemName: "checkmark.icloud") +// } else { +// Image(systemName: "icloud.slash") +// } } #endif }