@@ -7,6 +7,9 @@ import NullFieldConditionValidator from "./field/nullField/nullFieldConditionVal
77import Text from "./field/text/text" ;
88import TextConditionsHandler from "./field/text/textConditionHandler" ;
99import TextConditionValidator from "./field/text/textConditionValidator" ;
10+ import Select from "./field/select/select" ;
11+ import SelectConditionHandler from "./field/select/selectConditionHandler" ;
12+ import SelectConditionValidator from "./field/select/selectConditionValidator" ;
1013
1114class FieldBuilder implements FieldBuilderInterface {
1215 private name : string = 'data-js-field-name' ;
@@ -23,6 +26,8 @@ class FieldBuilder implements FieldBuilderInterface {
2326 return this . buildCheckbox ( field ) ;
2427 case 'text' :
2528 return this . buildText ( field ) ;
29+ case 'select' :
30+ return this . buildSelect ( field ) ;
2631 }
2732
2833 return this . buildNullField ( field , type ) ;
@@ -37,6 +42,27 @@ class FieldBuilder implements FieldBuilderInterface {
3742 new NullFieldConditionsHandler ( field , this . getFieldCondition ( field ) )
3843 ) ;
3944 }
45+
46+ private buildSelect ( field : HTMLElement ) : FieldInterface {
47+ console . log ( field )
48+ const select = field . querySelector ( 'select' ) as HTMLSelectElement ;
49+ const options = select ?. querySelectorAll ( 'option' ) as NodeListOf < HTMLOptionElement > ;
50+
51+ if ( ! options || options . length === 0 ) {
52+ console . error ( 'Select field is missing select element or options' ) ;
53+ return this . buildNullField ( field , 'select' ) ;
54+ }
55+
56+ return new Select (
57+ field ,
58+ select ,
59+ options ,
60+ this . getFieldName ( field ) ,
61+ new SelectConditionValidator ( ) ,
62+ new SelectConditionHandler ( this . getFieldCondition ( field ) )
63+ )
64+ return this . buildNullField ( field , 'select' ) ;
65+ }
4066
4167 private buildText ( field : HTMLElement ) : FieldInterface {
4268 const input = field . querySelector ( 'input[type="text"]' ) as HTMLInputElement ;
0 commit comments