@ -12,7 +12,17 @@ struct PlayerDetailView: View {
@ Environment ( Tournament . self ) var tournament : Tournament
@ EnvironmentObject var dataStore : DataStore
@ Bindable var player : PlayerRegistration
@ FocusState private var textFieldIsFocus : Bool
@ State private var licenceId : String
@ State private var phoneNumber : String
@ State private var email : String
@ FocusState var focusedField : PlayerRegistration . CodingKeys ?
init ( player : PlayerRegistration ) {
self . player = player
_licenceId = . init ( wrappedValue : player . licenceId ? ? " " )
_email = . init ( wrappedValue : player . email ? ? " " )
_phoneNumber = . init ( wrappedValue : player . phoneNumber ? ? " " )
}
var body : some View {
Form {
@ -22,6 +32,9 @@ struct PlayerDetailView: View {
. keyboardType ( . alphabet )
. multilineTextAlignment ( . trailing )
. frame ( maxWidth : . infinity )
. onSubmit ( of : . text ) {
_save ( )
}
} label : {
Text ( " Nom " )
}
@ -31,6 +44,9 @@ struct PlayerDetailView: View {
. keyboardType ( . alphabet )
. multilineTextAlignment ( . trailing )
. frame ( maxWidth : . infinity )
. onSubmit ( of : . text ) {
_save ( )
}
} label : {
Text ( " Prénom " )
}
@ -44,7 +60,7 @@ struct PlayerDetailView: View {
. keyboardType ( . decimalPad )
. multilineTextAlignment ( . trailing )
. frame ( maxWidth : . infinity )
. focused ( $ textFieldIsFocus )
. focused ( $ focusedField , equals : . _rank )
} label : {
Text ( " Rang " )
}
@ -69,7 +85,7 @@ struct PlayerDetailView: View {
. keyboardType ( . decimalPad )
. multilineTextAlignment ( . trailing )
. frame ( maxWidth : . infinity )
. focused ( $ textFieldIsFocus )
. focused ( $ focusedField , equals : . _computedRank )
} label : {
Text ( " Poids re-calculé " )
}
@ -79,17 +95,90 @@ struct PlayerDetailView: View {
Text ( " Calculé en fonction du sexe " )
}
}
Section {
Toggle ( " Joueur sur place " , isOn : $ player . hasArrived )
}
Section {
LabeledContent {
TextField ( " Licence " , text : $ licenceId )
. keyboardType ( . alphabet )
. multilineTextAlignment ( . trailing )
. autocorrectionDisabled ( )
. frame ( maxWidth : . infinity )
. onSubmit ( of : . text ) {
player . licenceId = licenceId
_save ( )
}
} label : {
Text ( " Licence " )
}
RowButtonView ( " Copier dans le presse-papier " ) {
let pasteboard = UIPasteboard . general
pasteboard . string = player . licenceId ? . strippedLicense
}
}
Section {
LabeledContent {
TextField ( " Téléphone " , text : $ phoneNumber )
. keyboardType ( . namePhonePad )
. multilineTextAlignment ( . trailing )
. autocorrectionDisabled ( )
. frame ( maxWidth : . infinity )
. onSubmit ( of : . text ) {
player . phoneNumber = phoneNumber
_save ( )
}
} label : {
Text ( " Téléphone " )
}
RowButtonView ( " Copier dans le presse-papier " ) {
let pasteboard = UIPasteboard . general
pasteboard . string = player . phoneNumber
}
}
Section {
LabeledContent {
TextField ( " Email " , text : $ email )
. keyboardType ( . emailAddress )
. multilineTextAlignment ( . trailing )
. autocorrectionDisabled ( )
. frame ( maxWidth : . infinity )
. onSubmit ( of : . text ) {
player . email = email
_save ( )
}
} label : {
Text ( " Email " )
}
RowButtonView ( " Copier dans le presse-papier " ) {
let pasteboard = UIPasteboard . general
pasteboard . string = player . email
}
}
}
. toolbar {
ToolbarItem ( placement : . topBarTrailing ) {
ShareLink ( item : player . pasteData ( ) ) {
Label ( " Partagez " , systemImage : " square.and.arrow.up " )
}
}
}
. scrollDismissesKeyboard ( . immediately )
. onChange ( of : player . sex ) {
. onChange ( of : player . hasArrived ) {
_save ( )
}
. onChange ( of : player . computedRank ) {
player . team ( ) ? . updateWeight ( inTournamentCategory : tournament . tournamentCategory )
. onChange ( of : player . sex ) {
_save ( )
}
. onChange ( of : player . rank ) {
player . setComputedRank ( in : tournament )
. onChange ( of : player . computedRank ) {
player . team ( ) ? . updateWeight ( inTournamentCategory : tournament . tournamentCategory )
_save ( )
}
@ -100,7 +189,15 @@ struct PlayerDetailView: View {
. toolbar {
ToolbarItem ( placement : . keyboard ) {
Button ( " Valider " ) {
textFieldIsFocus = false
if focusedField = = . _rank {
player . setComputedRank ( in : tournament )
player . team ( ) ? . updateWeight ( inTournamentCategory : tournament . tournamentCategory )
_save ( )
} else if focusedField = = . _computedRank {
player . team ( ) ? . updateWeight ( inTournamentCategory : tournament . tournamentCategory )
_save ( )
}
focusedField = nil
}
}
}