Skip to content

Commit fc35950

Browse files
committed
Add PinCodeTextField autocomplete support
1 parent 9cf1012 commit fc35950

3 files changed

Lines changed: 19 additions & 6 deletions

File tree

Xcodes/Frontend/SignIn/PinCodeTextView.swift

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@ struct PinCodeTextField: NSViewRepresentable {
66

77
@Binding var code: String
88
let numberOfDigits: Int
9+
let complete: (String) -> Void
910

1011
func makeNSView(context: Context) -> NSViewType {
1112
let view = PinCodeTextView(numberOfDigits: numberOfDigits, itemSpacing: 10)
12-
view.codeDidChange = { c in code = c }
13+
view.codeDidChange = { c in code = c }
14+
view.codeDidComplete = { complete($0) }
1315
return view
1416
}
1517

@@ -29,8 +31,9 @@ struct PinCodeTextField_Previews: PreviewProvider {
2931
struct PreviewContainer: View {
3032
@State private var code = "1234567890"
3133
var body: some View {
32-
PinCodeTextField(code: $code, numberOfDigits: 11)
33-
.padding()
34+
PinCodeTextField(code: $code, numberOfDigits: 11) {
35+
print("Input is complete \($0)")
36+
}.padding()
3437
}
3538
}
3639

@@ -52,10 +55,16 @@ class PinCodeTextView: NSControl, NSTextFieldDelegate {
5255
handler(String(code.compactMap { $0 }))
5356
}
5457
updateText()
58+
59+
if code.compactMap({ $0 }).count == numberOfDigits,
60+
let handler = codeDidComplete {
61+
handler(String(code.compactMap { $0 }))
62+
}
5563
}
5664
}
5765
var codeDidChange: ((String) -> Void)? = nil
58-
66+
var codeDidComplete: ((String) -> Void)? = nil
67+
5968
private let numberOfDigits: Int
6069
private let stackView: NSStackView = .init(frame: .zero)
6170
private var characterViews: [PinCodeCharacterTextField] = []

Xcodes/Frontend/SignIn/SignIn2FAView.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ struct SignIn2FAView: View {
1515

1616
HStack {
1717
Spacer()
18-
PinCodeTextField(code: $code, numberOfDigits: authOptions.securityCode.length)
18+
PinCodeTextField(code: $code, numberOfDigits: authOptions.securityCode.length) {
19+
appState.submitSecurityCode(.device(code: $0), sessionData: sessionData)
20+
}
1921
Spacer()
2022
}
2123
.padding()

Xcodes/Frontend/SignIn/SignInSMSView.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ struct SignInSMSView: View {
1515

1616
HStack {
1717
Spacer()
18-
PinCodeTextField(code: $code, numberOfDigits: authOptions.securityCode.length)
18+
PinCodeTextField(code: $code, numberOfDigits: authOptions.securityCode.length) {
19+
appState.submitSecurityCode(.sms(code: $0, phoneNumberId: trustedPhoneNumber.id), sessionData: sessionData)
20+
}
1921
Spacer()
2022
}
2123
.padding()

0 commit comments

Comments
 (0)