Skip to content

Commit

Permalink
added an option to add live validation when using a regex on a textfield
Browse files Browse the repository at this point in the history
  • Loading branch information
bartreardon committed Jan 12, 2024
1 parent e0ddeeb commit 3a9b9ff
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 0 deletions.
1 change: 1 addition & 0 deletions dialog/App Processing/AppState.swift
Expand Up @@ -47,6 +47,7 @@ struct TextFieldState {
var prompt: String = ""
var regex: String = ""
var regexError: String = ""
var backgroundColour: Color = .clear
var required: Bool = false
var secure: Bool = false
var title: String
Expand Down
1 change: 1 addition & 0 deletions dialog/Command Line/CommandLineArguments.swift
Expand Up @@ -79,6 +79,7 @@ struct CommandLineArguments {
var titleFont = CommandlineArgument(long: "titlefont")
var messageFont = CommandlineArgument(long: "messagefont")
var textField = CommandlineArgument(long: "textfield")
var textFieldLiveValidation = CommandlineArgument(long: "textfieldlivevalidation", isbool: true)
var checkbox = CommandlineArgument(long: "checkbox")
var checkboxStyle = CommandlineArgument(long: "checkboxstyle")
var timerBar = CommandlineArgument(long: "timer")
Expand Down
1 change: 1 addition & 0 deletions dialog/Command Line/ProcessCLOptions.swift
Expand Up @@ -836,6 +836,7 @@ func processCLOptionValues() {
if selectItemsArg.present { appArguments.dropdownValues = selectItemsArg }
appArguments.dropdownDefault.evaluate(json: json)
appArguments.textField.evaluate(json: json)
appArguments.textFieldLiveValidation.evaluate(json: json)
appArguments.checkbox.evaluate(json: json)
appArguments.checkboxStyle.evaluate(json: json)

Expand Down
19 changes: 19 additions & 0 deletions dialog/Views/TextEntryView.swift
Expand Up @@ -15,6 +15,7 @@ struct TextEntryView: View {
@State var datepickerID: [Int]

var fieldwidth: CGFloat = 0
var textFieldValidationOpacity: CGFloat = 0

let dateFormatter = DateFormatter()

Expand All @@ -34,6 +35,10 @@ struct TextEntryView: View {
}
self.textfieldContent = textfieldContent
datepickerID = Array(0...textfieldContent.count)

if observedDialogContent.args.textFieldLiveValidation.present {
textFieldValidationOpacity = 0.1
}
}

var body: some View {
Expand Down Expand Up @@ -117,7 +122,20 @@ struct TextEntryView: View {
TextField(textfieldContent[index].prompt, text: $textfieldContent[index].value)
.onChange(of: textfieldContent[index].value, perform: { textContent in
userInputState.textFields[index].value = textContent
if textfieldContent[index].regex != "" && observedData.args.textFieldLiveValidation.present {
if checkRegexPattern(regexPattern: textfieldContent[index].regex, textToValidate: textfieldContent[index].value) {
textfieldContent[index].backgroundColour = Color.green
} else {
textfieldContent[index].backgroundColour = Color.red
}
if textfieldContent[index].value == "" {
textfieldContent[index].backgroundColour = Color.clear
}
}
})
//.background(textfieldContent[index].backgroundColour)


if textfieldContent[index].isDate {
DatePicker("", selection: $textfieldContent[index].date, displayedComponents: [.date])
.onChange(of: textfieldContent[index].date, perform: { dateContent in
Expand All @@ -140,6 +158,7 @@ struct TextEntryView: View {
.repeatCount(3, autoreverses: true),
value: observedData.showSheet
)
.background(textfieldContent[index].backgroundColour.opacity(textFieldValidationOpacity))
)
}
}
Expand Down

0 comments on commit 3a9b9ff

Please sign in to comment.