@@ -10,6 +10,9 @@ import TextConditionValidator from "./field/text/textConditionValidator";
1010import Select from "./field/select/select" ;
1111import SelectConditionHandler from "./field/select/selectConditionHandler" ;
1212import SelectConditionValidator from "./field/select/selectConditionValidator" ;
13+ import Radio from "./field/radio/radio" ;
14+ import RadioConditionValidator from "./field/radio/radioConditionValidator" ;
15+ import RadioConditionsHandler from "./field/radio/radioConditionsHandler" ;
1316
1417class FieldBuilder implements FieldBuilderInterface {
1518 private name : string = 'data-js-field-name' ;
@@ -25,9 +28,16 @@ class FieldBuilder implements FieldBuilderInterface {
2528 case 'checkbox' :
2629 return this . buildCheckbox ( field ) ;
2730 case 'text' :
31+ case 'email' :
32+ case 'url' :
33+ case 'date' :
34+ case 'time' :
2835 return this . buildText ( field ) ;
2936 case 'select' :
3037 return this . buildSelect ( field ) ;
38+ case 'radio' :
39+ case 'trueFalse' :
40+ return this . buildRadio ( field ) ;
3141 }
3242
3343 return this . buildNullField ( field , type ) ;
@@ -42,9 +52,25 @@ class FieldBuilder implements FieldBuilderInterface {
4252 new NullFieldConditionsHandler ( field , this . getFieldCondition ( field ) )
4353 ) ;
4454 }
55+
56+ private buildRadio ( field : HTMLElement ) : FieldInterface {
57+ const choices = field . querySelectorAll ( 'input[type="radio"]' ) as NodeListOf < HTMLInputElement > ;
58+
59+ if ( choices . length === 0 ) {
60+ console . error ( 'Radio field is missing input elements' ) ;
61+ return this . buildNullField ( field , 'radio' ) ;
62+ }
63+
64+ return new Radio (
65+ field ,
66+ choices ,
67+ this . getFieldName ( field ) ,
68+ new RadioConditionValidator ( ) ,
69+ new RadioConditionsHandler ( this . getFieldCondition ( field ) )
70+ ) ;
71+ }
4572
4673 private buildSelect ( field : HTMLElement ) : FieldInterface {
47- console . log ( field )
4874 const select = field . querySelector ( 'select' ) as HTMLSelectElement ;
4975 const options = select ?. querySelectorAll ( 'option' ) as NodeListOf < HTMLOptionElement > ;
5076
@@ -64,10 +90,10 @@ class FieldBuilder implements FieldBuilderInterface {
6490 }
6591
6692 private buildText ( field : HTMLElement ) : FieldInterface {
67- const input = field . querySelector ( 'input[type="text"]' ) as HTMLInputElement ;
68-
93+ const input = field . querySelector ( 'input:is( [type="text"], [type="email"], [type="url"], [type="date"], [type="time"]) ' ) as HTMLInputElement ;
94+ console . log ( field ) ;
6995 if ( ! input ) {
70- console . error ( 'Text field is an input element' ) ;
96+ console . error ( 'Text field is not an input element with type "text", "email" or "url", "date" or "time" ' ) ;
7197 return this . buildNullField ( field , 'text' ) ;
7298 }
7399
0 commit comments