diff --git a/PadelClub.xcodeproj/project.pbxproj b/PadelClub.xcodeproj/project.pbxproj index fc7c7c7..d4e011c 100644 --- a/PadelClub.xcodeproj/project.pbxproj +++ b/PadelClub.xcodeproj/project.pbxproj @@ -1882,7 +1882,7 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = PadelClub/PadelClub.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 74; + CURRENT_PROJECT_VERSION = 75; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DEVELOPMENT_ASSET_PATHS = "\"PadelClub/Preview Content\""; @@ -1922,7 +1922,7 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = PadelClub/PadelClub.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 74; + CURRENT_PROJECT_VERSION = 75; DEFINES_MODULE = YES; DEVELOPMENT_ASSET_PATHS = "\"PadelClub/Preview Content\""; DEVELOPMENT_TEAM = BQ3Y44M3Q6; diff --git a/PadelClub/Utils/URLs.swift b/PadelClub/Utils/URLs.swift index e6aa0de..5f00aee 100644 --- a/PadelClub/Utils/URLs.swift +++ b/PadelClub/Utils/URLs.swift @@ -28,7 +28,7 @@ enum PageLink: String, Identifiable, CaseIterable { case teams = "Équipes" case summons = "Convocations" case groupStages = "Poules" - case matches = "Matchs" + case matches = "Tournoi" case rankings = "Classement" case broadcast = "Mode TV (Tournoi)" case clubBroadcast = "Mode TV (Club)" diff --git a/PadelClub/Views/Calling/SendToAllView.swift b/PadelClub/Views/Calling/SendToAllView.swift index 0a449c6..e5c43bb 100644 --- a/PadelClub/Views/Calling/SendToAllView.swift +++ b/PadelClub/Views/Calling/SendToAllView.swift @@ -84,10 +84,10 @@ struct SendToAllView: View { let links : [PageLink] = [.teams, .summons, .groupStages, .matches, .rankings] Picker(selection: $pageLink) { ForEach(links) { pageLink in - Text(pageLink.localizedLabel()) + Text(pageLink.localizedLabel()).tag(pageLink) } } label: { - Text("Choisir une page du tournoi en particulier") + Text("Lien à partager") } .pickerStyle(.menu) } diff --git a/PadelClub/Views/Tournament/Screen/BroadcastView.swift b/PadelClub/Views/Tournament/Screen/BroadcastView.swift index 6ee3edc..4e62923 100644 --- a/PadelClub/Views/Tournament/Screen/BroadcastView.swift +++ b/PadelClub/Views/Tournament/Screen/BroadcastView.swift @@ -34,264 +34,245 @@ struct BroadcastView: View { List { if Store.main.userId == nil { Section { - TipView(createAccountTip) { action in - switch action.id { - case CreateAccountTip.ActionKey.accessPadelClubWebPage.rawValue: - UIApplication.shared.open(URLs.main.url) - case CreateAccountTip.ActionKey.createAccount.rawValue: + ContentUnavailableView { + Label("Créer votre compte Padel Club", systemImage: "person.bust") + + } description: { + let message = "Un compte est nécessaire pour publier le tournoi sur [Padel Club](\(URLs.main.rawValue)) et profiter de toutes les pages du site, comme le mode TV pour transformer l'expérience de vos tournois !" + Text(.init(message)) + + } actions: { + RowButtonView("Créer votre compte") { navigation.selectedTab = .umpire - default: - break - //todo -// case CreateAccountTip.ActionKey.learnMore.rawValue: -// UIApplication.shared.open(URLs.padelClubLandingPage.url) + } + + RowButtonView("Jeter un oeil au site Padel Club") { + UIApplication.shared.open(URLs.main.url) } } - .tipStyle(tint: .master) - } - } - - Section { - TipView(tournamentPublishingTip) { action in - UIApplication.shared.open(URLs.main.url) } - .tipStyle(tint: nil) - } - Section { - TipView(tournamentTVBroadcastTip) - .tipStyle(tint: nil) - } - - if tournament.isPrivate == false { - if let url = tournament.shareURL(.clubBroadcast) { - Section { - Link(destination: url) { - Text(url.absoluteString) - } - .contextMenu { - Button("Copier") { - let pasteboard = UIPasteboard.general - pasteboard.string = url.absoluteString - } - } - } header: { - Text("Lien pour la diffusion TV") - } footer: { - Text("Lien à mettre sur une smart tv ou ordinateur dans le club house par exemple !") + } else { + Section { + TipView(tournamentPublishingTip) { action in + UIApplication.shared.open(URLs.main.url) } + .tipStyle(tint: nil) } - Section { - LabeledContent { - if tournament.isTournamentPublished() { - Image(systemName:"checkmark").foregroundStyle(.green) - } else { - Text(tournament.publishedTournamentDate().formatted()) + let links : [PageLink] = [.teams, .summons, .groupStages, .matches, .rankings, .broadcast, .clubBroadcast] + Picker(selection: $pageLink) { + ForEach(links) { pageLink in + Text(pageLink.localizedLabel()).tag(pageLink) } } label: { - if tournament.isTournamentPublished() { - Text("Publiée") - } else { - Text("Publication prévue") - } - } - - if tournament.canBePublished() == false { - Text("Pour être visible automatiquement, le tournoi doit avoir été créé il y a 24h, avoir une structure et au moins 4 inscriptions.") + Text("Choisir la page à partager") } + .pickerStyle(.menu) + actionForURL(title: "Partager la page '" + pageLink.localizedLabel() + "'", url: tournament.shareURL(pageLink)) } header: { - Text("Information sur le tournoi") - } footer: { - if Date() < tournament.publishedTournamentDate() || tournament.canBePublished() == false { - HStack { - Spacer() - FooterButtonView(tournament.publishTournament ? "masquer sur le site" : "publier maintenant") { - tournament.publishTournament.toggle() - _save() - } - } - } + Text("Lien du tournoi à partager") } - + Section { - LabeledContent { - if tournament.areTeamsPublished() { - Image(systemName:"checkmark").foregroundStyle(.green) - } else { - Text(tournament.publishedTeamsDate().formatted()) - } - } label: { - if tournament.areTeamsPublished() { - Text("Publiée") - } else { - Text("Publication prévue") - } + let club = tournament.club() + actionForURL(title: (club == nil) ? "Aucun club indiqué pour ce tournoi" : club!.clubTitle(), description: "Page du club", url: club?.shareURL()) + actionForURL(title: "Padel Club", url: URLs.main.url) + } header: { + Text("Autres liens") + } + + if tournament.isPrivate == false { + Section { + TipView(tournamentTVBroadcastTip) + .tipStyle(tint: nil) } - Toggle(isOn: $tournament.hideTeamsWeight) { - Text("Masquer les poids des équipes") - } - } header: { - Text("Liste des équipes") - } footer: { - if Date() < tournament.publishedTeamsDate() { - HStack { - Spacer() - FooterButtonView(tournament.publishTeams ? "masquer sur le site" : "publier maintenant") { - tournament.publishTeams.toggle() - _save() + if let url = tournament.shareURL(.clubBroadcast) { + Section { + Link(destination: url) { + Text(url.absoluteString) } + .contextMenu { + Button("Copier") { + let pasteboard = UIPasteboard.general + pasteboard.string = url.absoluteString + } + } + } header: { + Text("Lien pour la diffusion TV") + } footer: { + Text("Lien à mettre sur une smart tv ou ordinateur dans le club house par exemple !") } } - } - - Section { - LabeledContent { - if tournament.areSummonsPublished() { - Image(systemName:"checkmark").foregroundStyle(.green) - } else { - Text(tournament.publishedTeamsDate().formatted()) + + + Section { + LabeledContent { + if tournament.isTournamentPublished() { + Image(systemName:"checkmark").foregroundStyle(.green) + } else { + Text(tournament.publishedTournamentDate().formatted()) + } + } label: { + if tournament.isTournamentPublished() { + Text("Publiée") + } else { + Text("Publication prévue") + } } - } label: { - if tournament.areSummonsPublished() { - Text("Publiées") - } else { - Text("Publication prévue") + + if tournament.canBePublished() == false { + Text("Pour être visible automatiquement, le tournoi doit avoir été créé il y a 24h, avoir une structure et au moins 4 inscriptions.") } - } - } header: { - Text("Convocations") - } footer: { - if Date() < tournament.publishedTeamsDate() { - HStack { - Spacer() - FooterButtonView(tournament.publishSummons ? "masquer sur le site" : "publier maintenant") { - tournament.publishSummons.toggle() - _save() + } header: { + Text("Information sur le tournoi") + } footer: { + if Date() < tournament.publishedTournamentDate() || tournament.canBePublished() == false { + HStack { + Spacer() + FooterButtonView(tournament.publishTournament ? "masquer sur le site" : "publier maintenant") { + tournament.publishTournament.toggle() + _save() + } } } } - } - - if let publishedGroupStagesDate = tournament.publishedGroupStagesDate() { + Section { - let areGroupStagesPublished = tournament.areGroupStagesPublished() LabeledContent { - if areGroupStagesPublished { + if tournament.areTeamsPublished() { Image(systemName:"checkmark").foregroundStyle(.green) } else { - Text(publishedGroupStagesDate.formatted()) + Text(tournament.publishedTeamsDate().formatted()) } } label: { - if areGroupStagesPublished { - Text("Publiées") + if tournament.areTeamsPublished() { + Text("Publiée") } else { Text("Publication prévue") } } + + Toggle(isOn: $tournament.hideTeamsWeight) { + Text("Masquer les poids des équipes") + } } header: { - Text("Poules") + Text("Liste des équipes") } footer: { - if Date() < publishedGroupStagesDate { + if Date() < tournament.publishedTeamsDate() { HStack { Spacer() - FooterButtonView(tournament.publishGroupStages ? "masquer sur le site" : "publier maintenant") { - tournament.publishGroupStages.toggle() + FooterButtonView(tournament.publishTeams ? "masquer sur le site" : "publier maintenant") { + tournament.publishTeams.toggle() _save() } } } } - } - - if let publishedBracketsDate = tournament.publishedBracketsDate() { + Section { - let areBracketsPublished = tournament.areBracketsPublished() LabeledContent { - if areBracketsPublished { + if tournament.areSummonsPublished() { Image(systemName:"checkmark").foregroundStyle(.green) } else { - Text(publishedBracketsDate.formatted()) + Text(tournament.publishedTeamsDate().formatted()) } } label: { - if areBracketsPublished { - Text("Publié") + if tournament.areSummonsPublished() { + Text("Publiées") } else { Text("Publication prévue") } } } header: { - Text("Tableau") + Text("Convocations") } footer: { - if Date() < publishedBracketsDate { + if Date() < tournament.publishedTeamsDate() { HStack { Spacer() - FooterButtonView(tournament.publishBrackets ? "masquer sur le site" : "publier maintenant") { - tournament.publishBrackets.toggle() + FooterButtonView(tournament.publishSummons ? "masquer sur le site" : "publier maintenant") { + tournament.publishSummons.toggle() _save() } } } } - } - } - - //todo waitinglist & info - - Section { - Toggle(isOn: $tournament.isPrivate) { - Text("Tournoi privé") - } - } footer: { - let footerString = "Le tournoi sera masqué sur le site [Padel Club](\(URLs.main.rawValue))" - Text(.init(footerString)) - } - - Section { - LabeledContent { - actionForURL(URLs.main.url) - } label: { - Text("Padel Club") - } - - let club = tournament.club() - LabeledContent { - if let clubURL = club?.shareURL() { - actionForURL(clubURL) - } - } label: { - Text("Club") - if let club { - Text(club.clubTitle()) - } else { - Text("Aucun club indiqué pour ce tournoi") + + if let publishedGroupStagesDate = tournament.publishedGroupStagesDate() { + Section { + let areGroupStagesPublished = tournament.areGroupStagesPublished() + LabeledContent { + if areGroupStagesPublished { + Image(systemName:"checkmark").foregroundStyle(.green) + } else { + Text(publishedGroupStagesDate.formatted()) + } + } label: { + if areGroupStagesPublished { + Text("Publiées") + } else { + Text("Publication prévue") + } + } + } header: { + Text("Poules") + } footer: { + if Date() < publishedGroupStagesDate { + HStack { + Spacer() + FooterButtonView(tournament.publishGroupStages ? "masquer sur le site" : "publier maintenant") { + tournament.publishGroupStages.toggle() + _save() + } + } + } + } } - } - - if let url = tournament.shareURL(pageLink) { - LabeledContent { - actionForURL(url) - } label: { - Text("Tournoi") - Text(pageLink.localizedLabel()) + + if let publishedBracketsDate = tournament.publishedBracketsDate() { + Section { + let areBracketsPublished = tournament.areBracketsPublished() + LabeledContent { + if areBracketsPublished { + Image(systemName:"checkmark").foregroundStyle(.green) + } else { + Text(publishedBracketsDate.formatted()) + } + } label: { + if areBracketsPublished { + Text("Publié") + } else { + Text("Publication prévue") + } + } + } header: { + Text("Tableau") + } footer: { + if Date() < publishedBracketsDate { + HStack { + Spacer() + FooterButtonView(tournament.publishBrackets ? "masquer sur le site" : "publier maintenant") { + tournament.publishBrackets.toggle() + _save() + } + } + } + } } } - let links : [PageLink] = [.teams, .summons, .groupStages, .matches, .rankings, .broadcast, .clubBroadcast] - Picker(selection: $pageLink) { - ForEach(links) { pageLink in - Text(pageLink.localizedLabel()).tag(pageLink) + //todo waitinglist & info + + Section { + Toggle(isOn: $tournament.isPrivate) { + Text("Tournoi privé") } - } label: { - Text("Modifier la page du tournoi à partager") + } footer: { + let footerString = "Le tournoi sera masqué sur le site [Padel Club](\(URLs.main.rawValue))" + Text(.init(footerString)) } - .pickerStyle(.menu) - } header: { - Text("Liens à partager") - .textCase(nil) } - } .headerProminence(.increased) .navigationTitle("Publication") @@ -343,31 +324,48 @@ struct BroadcastView: View { } @ViewBuilder - func actionForURL(_ url: URL, removeSource: Bool = false) -> some View { - Menu { - Button { - UIApplication.shared.open(url) + func actionForURL(title: String, description: String? = nil, url: URL?, removeSource: Bool = false) -> some View { + if let url { + Menu { + Button { + UIApplication.shared.open(url) + } label: { + Label("Voir", systemImage: "safari") + } + + Button { + urlToShow = url.absoluteString + } label: { + Label("QRCode", systemImage: "qrcode") + } + + ShareLink(item: url) { + Label("Partager le lien", systemImage: "link") + } } label: { - Label("Voir", systemImage: "safari") + LabeledContent { + Image(systemName: "square.and.arrow.up") + .foregroundColor(.master) + } label: { + Text(title) + .foregroundColor(.primary) + if let description { + Text(description) + .foregroundColor(.secondary) + } + } } - - Button { - urlToShow = url.absoluteString + .buttonStyle(.plain) + } else { + LabeledContent { + Image(systemName: "xmark").foregroundColor(.logoYellow) } label: { - Label("QRCode", systemImage: "qrcode") - } - - ShareLink(item: url) { - Label("Partager le lien", systemImage: "link") - } - } label: { - HStack { - Spacer() - Image(systemName: "square.and.arrow.up") + Text(title) + if let description { + Text(description) + } } } - .frame(maxWidth: .infinity) - .buttonStyle(.borderless) }