Adds a show button for password fields

multistore
Laurent 1 year ago
parent fc982e5f07
commit 5dffc41026
  1. 18
      PadelClub.xcodeproj/project.pbxproj
  2. 43
      PadelClub/Views/Components/PasswordField.swift
  3. 6
      PadelClub/Views/User/ChangePasswordView.swift
  4. 2
      PadelClub/Views/User/LoginView.swift
  5. 4
      PadelClub/Views/User/UserCreationView.swift

@ -46,6 +46,7 @@
C4B3A1552C2581DA0078EAA8 /* Patcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B3A1542C2581DA0078EAA8 /* Patcher.swift */; }; C4B3A1552C2581DA0078EAA8 /* Patcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B3A1542C2581DA0078EAA8 /* Patcher.swift */; };
C4EC6F572BE92CAC000CEAB4 /* local.plist in Resources */ = {isa = PBXBuildFile; fileRef = C4EC6F562BE92CAC000CEAB4 /* local.plist */; }; C4EC6F572BE92CAC000CEAB4 /* local.plist in Resources */ = {isa = PBXBuildFile; fileRef = C4EC6F562BE92CAC000CEAB4 /* local.plist */; };
C4EC6F592BE92D88000CEAB4 /* PListReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4EC6F582BE92D88000CEAB4 /* PListReader.swift */; }; C4EC6F592BE92D88000CEAB4 /* PListReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4EC6F582BE92D88000CEAB4 /* PListReader.swift */; };
C4FC2E272C2AABC90021F3BF /* PasswordField.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4FC2E262C2AABC90021F3BF /* PasswordField.swift */; };
FF025AD82BD0C10F00A86CF8 /* TeamHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF025AD72BD0C10F00A86CF8 /* TeamHeaderView.swift */; }; FF025AD82BD0C10F00A86CF8 /* TeamHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF025AD72BD0C10F00A86CF8 /* TeamHeaderView.swift */; };
FF025ADB2BD0C2D000A86CF8 /* MatchTeamDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF025ADA2BD0C2D000A86CF8 /* MatchTeamDetailView.swift */; }; FF025ADB2BD0C2D000A86CF8 /* MatchTeamDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF025ADA2BD0C2D000A86CF8 /* MatchTeamDetailView.swift */; };
FF025ADD2BD0C94300A86CF8 /* FooterButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF025ADC2BD0C94300A86CF8 /* FooterButtonView.swift */; }; FF025ADD2BD0C94300A86CF8 /* FooterButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF025ADC2BD0C94300A86CF8 /* FooterButtonView.swift */; };
@ -333,6 +334,7 @@
C4B3A1542C2581DA0078EAA8 /* Patcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Patcher.swift; sourceTree = "<group>"; }; C4B3A1542C2581DA0078EAA8 /* Patcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Patcher.swift; sourceTree = "<group>"; };
C4EC6F562BE92CAC000CEAB4 /* local.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = local.plist; sourceTree = "<group>"; }; C4EC6F562BE92CAC000CEAB4 /* local.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = local.plist; sourceTree = "<group>"; };
C4EC6F582BE92D88000CEAB4 /* PListReader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PListReader.swift; sourceTree = "<group>"; }; C4EC6F582BE92D88000CEAB4 /* PListReader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PListReader.swift; sourceTree = "<group>"; };
C4FC2E262C2AABC90021F3BF /* PasswordField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasswordField.swift; sourceTree = "<group>"; };
FF025AD72BD0C10F00A86CF8 /* TeamHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TeamHeaderView.swift; sourceTree = "<group>"; }; FF025AD72BD0C10F00A86CF8 /* TeamHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TeamHeaderView.swift; sourceTree = "<group>"; };
FF025ADA2BD0C2D000A86CF8 /* MatchTeamDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MatchTeamDetailView.swift; sourceTree = "<group>"; }; FF025ADA2BD0C2D000A86CF8 /* MatchTeamDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MatchTeamDetailView.swift; sourceTree = "<group>"; };
FF025ADC2BD0C94300A86CF8 /* FooterButtonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FooterButtonView.swift; sourceTree = "<group>"; }; FF025ADC2BD0C94300A86CF8 /* FooterButtonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FooterButtonView.swift; sourceTree = "<group>"; };
@ -780,15 +782,16 @@
C4A47DA02B7D0BD800ADC637 /* Components */ = { C4A47DA02B7D0BD800ADC637 /* Components */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
C4A47D9E2B7D0BCE00ADC637 /* StepperView.swift */,
FF5DA1942BB927E800A33061 /* GenericDestinationPickerView.swift */,
FF6EC8F62B94773100EA7F5A /* RowButtonView.swift */,
FF025ADC2BD0C94300A86CF8 /* FooterButtonView.swift */,
FFBF065D2BBD8040009D6715 /* MatchListView.swift */,
FF967CF72BAEDF0000A9A3BD /* Labels.swift */,
FFC91AF82BD6A09100B29808 /* FortuneWheelView.swift */,
FF1DF49A2BD8D23900822FA0 /* BarButtonView.swift */, FF1DF49A2BD8D23900822FA0 /* BarButtonView.swift */,
FFF03C932BD91D0C00B516FC /* ButtonValidateView.swift */, FFF03C932BD91D0C00B516FC /* ButtonValidateView.swift */,
FF025ADC2BD0C94300A86CF8 /* FooterButtonView.swift */,
FFC91AF82BD6A09100B29808 /* FortuneWheelView.swift */,
FF5DA1942BB927E800A33061 /* GenericDestinationPickerView.swift */,
FF967CF72BAEDF0000A9A3BD /* Labels.swift */,
FFBF065D2BBD8040009D6715 /* MatchListView.swift */,
C4FC2E262C2AABC90021F3BF /* PasswordField.swift */,
FF6EC8F62B94773100EA7F5A /* RowButtonView.swift */,
C4A47D9E2B7D0BCE00ADC637 /* StepperView.swift */,
); );
path = Components; path = Components;
sourceTree = "<group>"; sourceTree = "<group>";
@ -1579,6 +1582,7 @@
FF967CF62BAED51600A9A3BD /* TournamentRunningView.swift in Sources */, FF967CF62BAED51600A9A3BD /* TournamentRunningView.swift in Sources */,
FF8F264D2BAE0B4100650388 /* TournamentDatePickerView.swift in Sources */, FF8F264D2BAE0B4100650388 /* TournamentDatePickerView.swift in Sources */,
FFF116E32BD2AF4800A33B06 /* CourtAvailabilitySettingsView.swift in Sources */, FFF116E32BD2AF4800A33B06 /* CourtAvailabilitySettingsView.swift in Sources */,
C4FC2E272C2AABC90021F3BF /* PasswordField.swift in Sources */,
FF967D042BAEF1C300A9A3BD /* MatchRowView.swift in Sources */, FF967D042BAEF1C300A9A3BD /* MatchRowView.swift in Sources */,
C44B79112BBDA63A00906534 /* Locale+Extensions.swift in Sources */, C44B79112BBDA63A00906534 /* Locale+Extensions.swift in Sources */,
FF1F4B742BFA00FC000B4573 /* HtmlService.swift in Sources */, FF1F4B742BFA00FC000B4573 /* HtmlService.swift in Sources */,

@ -0,0 +1,43 @@
//
// PasswordView.swift
// PadelClub
//
// Created by Laurent Morvillier on 25/06/2024.
//
import SwiftUI
struct PasswordField: View {
var label: String
@Binding var password: String
@State var visible: Bool = false
init(_ label: String, text: Binding<String>) {
self.label = label
self._password = text
}
var body: some View {
HStack {
if self.visible {
TextField(self.label, text: self.$password)
} else {
SecureField(self.label, text: self.$password)
}
Spacer()
Button {
self.visible.toggle()
} label: {
let image = self.visible ? "eye.slash" : "eye"
Image(systemName: image)
}
}
}
}

@ -21,9 +21,9 @@ struct ChangePasswordView: View {
Form { Form {
SecureField("Old password", text: self.$oldPassword) PasswordField("Old password", text: self.$oldPassword)
SecureField("Password", text: self.$password1) PasswordField("Password", text: self.$password1)
SecureField("Password again", text: self.$password2) PasswordField("Password again", text: self.$password2)
Section { Section {
Button(action: { Button(action: {

@ -113,7 +113,7 @@ struct LoginView: View {
.onSubmit(of: .text) { .onSubmit(of: .text) {
focusedField = .password focusedField = .password
} }
SecureField("Mot de passe", text: self.$password) PasswordField("Mot de passe", text: self.$password)
.textContentType(.init(rawValue: "")) .textContentType(.init(rawValue: ""))
.submitLabel(.send) .submitLabel(.send)
.onSubmit(of: .text) { .onSubmit(of: .text) {

@ -82,7 +82,7 @@ struct UserCreationFormView: View {
} }
Section { Section {
SecureField("Mot de passe", text: self.$password1) PasswordField("Mot de passe", text: self.$password1)
.focused($focusedField, equals: .password) .focused($focusedField, equals: .password)
.textContentType(.init(rawValue: "")) .textContentType(.init(rawValue: ""))
.keyboardType(.asciiCapable) .keyboardType(.asciiCapable)
@ -92,7 +92,7 @@ struct UserCreationFormView: View {
focusedField = .confirmPassword focusedField = .confirmPassword
} }
SecureField("Confirmez le mot de passe", text: self.$password2) PasswordField("Confirmez le mot de passe", text: self.$password2)
.focused($focusedField, equals: .confirmPassword) .focused($focusedField, equals: .confirmPassword)
.textContentType(.init(rawValue: "")) .textContentType(.init(rawValue: ""))
.keyboardType(.asciiCapable) .keyboardType(.asciiCapable)

Loading…
Cancel
Save