mirror of
https://github.com/XcodesOrg/XcodesApp.git
synced 2026-03-25 08:55:46 +00:00
Add PinCodeTextField autocomplete support
This commit is contained in:
parent
9cf10125ca
commit
fc35950885
3 changed files with 19 additions and 6 deletions
|
|
@ -6,10 +6,12 @@ struct PinCodeTextField: NSViewRepresentable {
|
|||
|
||||
@Binding var code: String
|
||||
let numberOfDigits: Int
|
||||
let complete: (String) -> Void
|
||||
|
||||
func makeNSView(context: Context) -> NSViewType {
|
||||
let view = PinCodeTextView(numberOfDigits: numberOfDigits, itemSpacing: 10)
|
||||
view.codeDidChange = { c in code = c }
|
||||
view.codeDidChange = { c in code = c }
|
||||
view.codeDidComplete = { complete($0) }
|
||||
return view
|
||||
}
|
||||
|
||||
|
|
@ -29,8 +31,9 @@ struct PinCodeTextField_Previews: PreviewProvider {
|
|||
struct PreviewContainer: View {
|
||||
@State private var code = "1234567890"
|
||||
var body: some View {
|
||||
PinCodeTextField(code: $code, numberOfDigits: 11)
|
||||
.padding()
|
||||
PinCodeTextField(code: $code, numberOfDigits: 11) {
|
||||
print("Input is complete \($0)")
|
||||
}.padding()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -52,10 +55,16 @@ class PinCodeTextView: NSControl, NSTextFieldDelegate {
|
|||
handler(String(code.compactMap { $0 }))
|
||||
}
|
||||
updateText()
|
||||
|
||||
if code.compactMap({ $0 }).count == numberOfDigits,
|
||||
let handler = codeDidComplete {
|
||||
handler(String(code.compactMap { $0 }))
|
||||
}
|
||||
}
|
||||
}
|
||||
var codeDidChange: ((String) -> Void)? = nil
|
||||
|
||||
var codeDidComplete: ((String) -> Void)? = nil
|
||||
|
||||
private let numberOfDigits: Int
|
||||
private let stackView: NSStackView = .init(frame: .zero)
|
||||
private var characterViews: [PinCodeCharacterTextField] = []
|
||||
|
|
|
|||
|
|
@ -15,7 +15,9 @@ struct SignIn2FAView: View {
|
|||
|
||||
HStack {
|
||||
Spacer()
|
||||
PinCodeTextField(code: $code, numberOfDigits: authOptions.securityCode.length)
|
||||
PinCodeTextField(code: $code, numberOfDigits: authOptions.securityCode.length) {
|
||||
appState.submitSecurityCode(.device(code: $0), sessionData: sessionData)
|
||||
}
|
||||
Spacer()
|
||||
}
|
||||
.padding()
|
||||
|
|
|
|||
|
|
@ -15,7 +15,9 @@ struct SignInSMSView: View {
|
|||
|
||||
HStack {
|
||||
Spacer()
|
||||
PinCodeTextField(code: $code, numberOfDigits: authOptions.securityCode.length)
|
||||
PinCodeTextField(code: $code, numberOfDigits: authOptions.securityCode.length) {
|
||||
appState.submitSecurityCode(.sms(code: $0, phoneNumberId: trustedPhoneNumber.id), sessionData: sessionData)
|
||||
}
|
||||
Spacer()
|
||||
}
|
||||
.padding()
|
||||
|
|
|
|||
Loading…
Reference in a new issue