File tree Expand file tree Collapse file tree
ExampleApp/ExampleApp/UI/ContentScreen Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -20,28 +20,32 @@ struct ContentView: View {
2020 ) { proxy in
2121 FormField (
2222 value: $viewModel. name,
23- rules: viewModel. nameValidationRules
23+ rules: viewModel. nameValidationRules,
24+ isRequired: true
2425 ) { failedRules in
2526 TextInputField ( title: " Name " , text: $viewModel. name, failedRules: failedRules)
2627 }
2728 . disabled ( viewModel. isLoading)
2829 FormField (
2930 value: $viewModel. age,
30- rules: viewModel. ageValidationRules
31+ rules: viewModel. ageValidationRules,
32+ isRequired: false
3133 ) { failedRules in
3234 TextInputField ( title: " Age " , text: $viewModel. age, failedRules: failedRules)
3335 }
3436 . disabled ( viewModel. isLoading)
3537 FormField (
3638 value: $viewModel. pass,
37- rules: viewModel. passValidationRules
39+ rules: viewModel. passValidationRules,
40+ isRequired: true
3841 ) { failedRules in
3942 SecureInputField ( title: " Password " , text: $viewModel. pass, failedRules: failedRules)
4043 }
4144 . disabled ( viewModel. isLoading)
4245 FormField (
4346 value: $viewModel. confirmPass,
44- rules: viewModel. confirmPassValidationRules
47+ rules: viewModel. confirmPassValidationRules,
48+ isRequired: true
4549 ) { failedRules in
4650 SecureInputField ( title: " Confirm Password " , text: $viewModel. confirmPass, failedRules: failedRules)
4751 }
Original file line number Diff line number Diff line change @@ -67,7 +67,8 @@ struct ContentView: View {
6767 ) { proxy in
6868 FormField (
6969 value : $name,
70- rules : [TextValidationRule.notEmpty (message : " Name field should no be empty" )]
70+ rules : [TextValidationRule.notEmpty (message : " Name field should no be empty" )],
71+ isRequired : true , // field parameter, necessary for correct determination of validity of all fields
7172 ) { failedRules in
7273 MyField (title : " Name" , text : $name, failedRules : failedRules)
7374 }
Original file line number Diff line number Diff line change @@ -12,7 +12,8 @@ public struct FormField<Content: View>: View {
1212 @ViewBuilder private let content : ( [ ValidationRule ] ) -> Content
1313
1414 @State private var failedValidationRules : [ ValidationRule ] = [ ]
15- private var isValid : Bool { failedValidationRules. isEmpty && value. isEmpty == false }
15+ private var isValid : Bool { getValidationStatus ( ) }
16+ private var isRequired : Bool
1617
1718 // Fields Focus
1819 @FocusState private var isFocused : Bool
@@ -27,9 +28,11 @@ public struct FormField<Content: View>: View {
2728 public init (
2829 value: Binding < String > ,
2930 rules: [ ValidationRule ] = [ ] ,
31+ isRequired: Bool ,
3032 @ViewBuilder content: @escaping ( [ ValidationRule ] ) -> Content
3133 ) {
3234 self . _value = value
35+ self . isRequired = isRequired
3336 self . content = content
3437 self . validator = FieldValidator ( rules: rules)
3538 }
@@ -95,8 +98,8 @@ public struct FormField<Content: View>: View {
9598
9699 if
97100 validationBehaviour. contains ( . onFieldFocus)
98- && failedValidationRules. isEmpty
99- && newValue == true
101+ && failedValidationRules. isEmpty
102+ && newValue == true
100103 {
101104 failedValidationRules = await validator. validate (
102105 value: value,
@@ -107,4 +110,8 @@ public struct FormField<Content: View>: View {
107110 }
108111 }
109112 }
113+
114+ private func getValidationStatus( ) -> Bool {
115+ isRequired ? failedValidationRules. isEmpty && value. isEmpty == false : failedValidationRules. isEmpty
116+ }
110117}
You can’t perform that action at this time.
0 commit comments