@@ -13,74 +13,55 @@ import {InputFieldType} from '../parsers/InputFieldDeclarationParser';
1313
1414
1515export class InputFieldFactory {
16+ static allowCodeBlockMap : Record < string , { codeBlock : boolean , inlineCodeBlock : boolean } > = {
17+ [ InputFieldType . TOGGLE ] : { codeBlock : ToggleInputField . allowCodeBlock , inlineCodeBlock : ToggleInputField . allowInlineCodeBlock } ,
18+ [ InputFieldType . SLIDER ] : { codeBlock : SliderInputField . allowCodeBlock , inlineCodeBlock : SliderInputField . allowInlineCodeBlock } ,
19+ [ InputFieldType . TEXT ] : { codeBlock : TextInputField . allowCodeBlock , inlineCodeBlock : TextInputField . allowInlineCodeBlock } ,
20+ [ InputFieldType . TEXT_AREA ] : { codeBlock : TextAreaInputField . allowCodeBlock , inlineCodeBlock : TextAreaInputField . allowInlineCodeBlock } ,
21+ [ InputFieldType . SELECT ] : { codeBlock : SelectInputField . allowCodeBlock , inlineCodeBlock : SelectInputField . allowInlineCodeBlock } ,
22+ [ InputFieldType . MULTI_SELECT ] : { codeBlock : MultiSelectInputField . allowCodeBlock , inlineCodeBlock : MultiSelectInputField . allowInlineCodeBlock } ,
23+ [ InputFieldType . DATE ] : { codeBlock : DateInputField . allowCodeBlock , inlineCodeBlock : DateInputField . allowInlineCodeBlock } ,
24+ [ InputFieldType . TIME ] : { codeBlock : TimeInputField . allowCodeBlock , inlineCodeBlock : TimeInputField . allowInlineCodeBlock } ,
25+ }
26+
1627 static createInputField ( inputFieldType : InputFieldType , args : { type : InputFieldMarkdownRenderChildType , inputFieldMarkdownRenderChild : InputFieldMarkdownRenderChild , onValueChanged : ( value : any ) => void | Promise < void > } ) : AbstractInputField {
1728 if ( inputFieldType === InputFieldType . TOGGLE ) {
18- if ( args . type === InputFieldMarkdownRenderChildType . CODE_BLOCK && ! ToggleInputField . allowCodeBlock ) {
19- throw new MetaBindParsingError ( `can not create ${ inputFieldType } as code block` ) ;
20- }
21- if ( args . type === InputFieldMarkdownRenderChildType . INLINE_CODE_BLOCK && ! ToggleInputField . allowInlineCodeBlock ) {
22- throw new MetaBindParsingError ( `can not create ${ inputFieldType } as inline code block` ) ;
23- }
29+ InputFieldFactory . checkInputFieldMarkdownRenderChildTypeAllowed ( inputFieldType , args . type ) ;
2430 return new ToggleInputField ( args . inputFieldMarkdownRenderChild , args . onValueChanged ) ;
2531 } else if ( inputFieldType === InputFieldType . SLIDER ) {
26- if ( args . type === InputFieldMarkdownRenderChildType . CODE_BLOCK && ! SliderInputField . allowCodeBlock ) {
27- throw new MetaBindParsingError ( `can not create ${ inputFieldType } as code block` ) ;
28- }
29- if ( args . type === InputFieldMarkdownRenderChildType . INLINE_CODE_BLOCK && ! SliderInputField . allowInlineCodeBlock ) {
30- throw new MetaBindParsingError ( `can not create ${ inputFieldType } as inline code block` ) ;
31- }
32+ InputFieldFactory . checkInputFieldMarkdownRenderChildTypeAllowed ( inputFieldType , args . type ) ;
3233 return new SliderInputField ( args . inputFieldMarkdownRenderChild , args . onValueChanged ) ;
3334 } else if ( inputFieldType === InputFieldType . TEXT ) {
34- if ( args . type === InputFieldMarkdownRenderChildType . CODE_BLOCK && ! TextInputField . allowCodeBlock ) {
35- throw new MetaBindParsingError ( `can not create ${ inputFieldType } as code block` ) ;
36- }
37- if ( args . type === InputFieldMarkdownRenderChildType . INLINE_CODE_BLOCK && ! TextInputField . allowInlineCodeBlock ) {
38- throw new MetaBindParsingError ( `can not create ${ inputFieldType } as inline code block` ) ;
39- }
35+ InputFieldFactory . checkInputFieldMarkdownRenderChildTypeAllowed ( inputFieldType , args . type ) ;
4036 return new TextInputField ( args . inputFieldMarkdownRenderChild , args . onValueChanged ) ;
4137 } else if ( inputFieldType === InputFieldType . TEXT_AREA ) {
42- if ( args . type === InputFieldMarkdownRenderChildType . CODE_BLOCK && ! TextAreaInputField . allowCodeBlock ) {
43- throw new MetaBindParsingError ( `can not create ${ inputFieldType } as code block` ) ;
44- }
45- if ( args . type === InputFieldMarkdownRenderChildType . INLINE_CODE_BLOCK && ! TextAreaInputField . allowInlineCodeBlock ) {
46- throw new MetaBindParsingError ( `can not create ${ inputFieldType } as inline code block` ) ;
47- }
38+ InputFieldFactory . checkInputFieldMarkdownRenderChildTypeAllowed ( inputFieldType , args . type ) ;
4839 return new TextAreaInputField ( args . inputFieldMarkdownRenderChild , args . onValueChanged ) ;
4940 } else if ( inputFieldType === InputFieldType . SELECT ) {
50- if ( args . type === InputFieldMarkdownRenderChildType . CODE_BLOCK && ! SelectInputField . allowCodeBlock ) {
51- throw new MetaBindParsingError ( `can not create ${ inputFieldType } as code block` ) ;
52- }
53- if ( args . type === InputFieldMarkdownRenderChildType . INLINE_CODE_BLOCK && ! SelectInputField . allowInlineCodeBlock ) {
54- throw new MetaBindParsingError ( `can not create ${ inputFieldType } as inline code block` ) ;
55- }
41+ InputFieldFactory . checkInputFieldMarkdownRenderChildTypeAllowed ( inputFieldType , args . type ) ;
5642 return new SelectInputField ( args . inputFieldMarkdownRenderChild , args . onValueChanged ) ;
5743 } else if ( inputFieldType === InputFieldType . MULTI_SELECT ) {
58- if ( args . type === InputFieldMarkdownRenderChildType . CODE_BLOCK && ! MultiSelectInputField . allowCodeBlock ) {
59- throw new MetaBindParsingError ( `can not create ${ inputFieldType } as code block` ) ;
60- }
61- if ( args . type === InputFieldMarkdownRenderChildType . INLINE_CODE_BLOCK && ! MultiSelectInputField . allowInlineCodeBlock ) {
62- throw new MetaBindParsingError ( `can not create ${ inputFieldType } as inline code block` ) ;
63- }
44+ InputFieldFactory . checkInputFieldMarkdownRenderChildTypeAllowed ( inputFieldType , args . type ) ;
6445 return new MultiSelectInputField ( args . inputFieldMarkdownRenderChild , args . onValueChanged ) ;
6546 } else if ( inputFieldType === InputFieldType . DATE ) {
66- if ( args . type === InputFieldMarkdownRenderChildType . CODE_BLOCK && ! DateInputField . allowCodeBlock ) {
67- throw new MetaBindParsingError ( `can not create ${ inputFieldType } as code block` ) ;
68- }
69- if ( args . type === InputFieldMarkdownRenderChildType . INLINE_CODE_BLOCK && ! DateInputField . allowInlineCodeBlock ) {
70- throw new MetaBindParsingError ( `can not create ${ inputFieldType } as inline code block` ) ;
71- }
47+ InputFieldFactory . checkInputFieldMarkdownRenderChildTypeAllowed ( inputFieldType , args . type ) ;
7248 return new DateInputField ( args . inputFieldMarkdownRenderChild , args . onValueChanged ) ;
7349 } else if ( inputFieldType === InputFieldType . TIME ) {
74- if ( args . type === InputFieldMarkdownRenderChildType . CODE_BLOCK && ! TimeInputField . allowCodeBlock ) {
75- throw new MetaBindParsingError ( `can not create ${ inputFieldType } as code block` ) ;
76- }
77- if ( args . type === InputFieldMarkdownRenderChildType . INLINE_CODE_BLOCK && ! TimeInputField . allowInlineCodeBlock ) {
78- throw new MetaBindParsingError ( `can not create ${ inputFieldType } as inline code block` ) ;
79- }
50+ InputFieldFactory . checkInputFieldMarkdownRenderChildTypeAllowed ( inputFieldType , args . type ) ;
8051 return new TimeInputField ( args . inputFieldMarkdownRenderChild , args . onValueChanged ) ;
8152 }
8253
8354 return null ;
8455 }
8556
57+ static checkInputFieldMarkdownRenderChildTypeAllowed ( inputFieldType : InputFieldType , type : InputFieldMarkdownRenderChildType ) {
58+ const allowCodeBlock : { codeBlock : boolean ; inlineCodeBlock : boolean } = InputFieldFactory . allowCodeBlockMap [ inputFieldType ] ;
59+ if ( type === InputFieldMarkdownRenderChildType . CODE_BLOCK && ! allowCodeBlock . codeBlock ) {
60+ throw new MetaBindParsingError ( `\'${ inputFieldType } \' is not allowed as code block` ) ;
61+ }
62+ if ( type === InputFieldMarkdownRenderChildType . INLINE_CODE_BLOCK && ! allowCodeBlock . inlineCodeBlock ) {
63+ throw new MetaBindParsingError ( `\'${ inputFieldType } \' is not allowed as inline code block` ) ;
64+ }
65+ }
66+
8667}
0 commit comments