@@ -3,6 +3,7 @@ import { YamlHandlerResponse } from 'cdm/MashallModel';
33import { RowSelectOption } from 'cdm/ComponentsModel' ;
44import { InputType , DEFAULT_COLUMN_CONFIG } from 'helpers/Constants' ;
55import { AbstractYamlHandler } from 'parsers/handlers/marshall/AbstractYamlPropertyHandler' ;
6+ import { RowType } from 'cdm/RowTypeModel' ;
67
78export class MarshallColumnsHandler extends AbstractYamlHandler {
89 handlerName : string = 'columns' ;
@@ -12,16 +13,7 @@ export class MarshallColumnsHandler extends AbstractYamlHandler {
1213 if ( ! yaml . columns ) {
1314 // if columns is not defined, load default
1415 this . addError ( `There was not columns in yaml. Default will be loaded` ) ;
15- yaml . columns = {
16- Column1 : {
17- input : InputType . TEXT ,
18- accessorKey : 'Column1' ,
19- key : 'Column1' ,
20- label : 'Column 1' ,
21- position : 1 ,
22- config : DEFAULT_COLUMN_CONFIG
23- }
24- } ;
16+ yaml . columns = { } ;
2517 }
2618 // Check every column
2719 Object . keys ( yaml . columns )
@@ -32,7 +24,7 @@ export class MarshallColumnsHandler extends AbstractYamlHandler {
3224 this . addError ( `There was not input in column ${ key } ` ) ;
3325 column . input = InputType . TEXT ;
3426 } else {
35- column = marshallParticularInputInfo ( column ) ;
27+ column = this . marshallParticularInputInfo ( column ) ;
3628 // PARTICULAR INPUT INFO
3729 }
3830 if ( ! column . accessorKey ) {
@@ -48,13 +40,10 @@ export class MarshallColumnsHandler extends AbstractYamlHandler {
4840 column . label = key ;
4941 }
5042
51- if ( column . skipPersist === undefined ) {
52- column . skipPersist = false ;
53- }
5443
55- if ( column . isHidden === undefined ) {
56- column . isHidden = false ;
57- }
44+ column . skipPersist = this . parseBoolean ( column . skipPersist ) ;
45+
46+ column . isHidden = this . parseBoolean ( column . isHidden ) ;
5847
5948 if ( column . sortIndex === undefined || typeof column . sortIndex !== 'number' ) {
6049 column . sortIndex = - 1 ;
@@ -65,62 +54,80 @@ export class MarshallColumnsHandler extends AbstractYamlHandler {
6554 column . config = DEFAULT_COLUMN_CONFIG ;
6655 } else {
6756 // General config
68- if ( column . config . isInline === undefined ) {
69- column . config . isInline = DEFAULT_COLUMN_CONFIG . isInline ;
70- }
71- column = marshallParticularConfigInfo ( column ) ;
57+ column . config . isInline = this . parseBoolean ( column . config . isInline ) ;
58+ column = this . marshallParticularConfigInfo ( column ) ;
7259 }
7360 // Update mashaller response
7461 yaml . columns [ key ] = column ;
7562 } ) ;
7663 handlerResponse . yaml = yaml ;
7764 return this . goNext ( handlerResponse ) ;
7865 }
79- }
8066
81- function marshallParticularInputInfo ( column : DatabaseColumn ) : DatabaseColumn {
82- switch ( column . input ) {
83- case InputType . SELECT :
84- case InputType . TAGS :
85- if ( ! column . options || ! Array . isArray ( column . options ) ) {
86- column . options = [ ] ;
87- } else {
88- // Control undefined or null labels and backgroundColors
89- column . options = column . options . filter ( ( option : RowSelectOption ) => {
90- return option . backgroundColor
91- && option . label
92- && option . label !== ''
93- && option . backgroundColor !== '' ;
94- // Control duplicates labels in options
95- } ) . filter ( ( option : RowSelectOption , index : number , self : RowSelectOption [ ] ) => {
96- return self . findIndex ( ( t : RowSelectOption ) => {
97- return t . label === option . label ;
98- } ) === index ;
99- }
100- ) ;
101- }
102- break ;
67+ parseBoolean ( value : RowType , defaultValue = false ) : boolean {
68+ if ( value === undefined || value === null ) {
69+ return defaultValue ;
70+ }
71+
72+ if ( typeof value === 'boolean' ) {
73+ return value ;
74+ }
75+
76+ if ( value === 'true' ) {
77+ return true ;
78+ } else if ( value === 'false' ) {
79+ return false ;
80+ }
81+ return defaultValue ;
82+ }
83+
84+ parseNumber ( value : RowType , defaultValue = 0 ) : number {
85+ if ( value === undefined || value === null ) {
86+ return defaultValue ;
87+ }
88+ if ( typeof value === 'number' ) {
89+ return value ;
90+ }
91+ return Number ( value ) ;
92+ }
93+
94+ marshallParticularConfigInfo ( column : DatabaseColumn ) : DatabaseColumn {
95+ switch ( column . input ) {
96+ case InputType . TEXT :
97+ column . config . enable_media_view = this . parseBoolean ( column . config . enable_media_view , DEFAULT_COLUMN_CONFIG . enable_media_view ) ;
98+ column . config . media_width = this . parseNumber ( column . config . media_width , DEFAULT_COLUMN_CONFIG . media_width ) ;
99+ column . config . media_height = this . parseNumber ( column . config . media_height , DEFAULT_COLUMN_CONFIG . media_height ) ;
100+ break ;
101+ case InputType . TASK :
102+ column . config . task_hide_completed = this . parseBoolean ( column . config . task_hide_completed , DEFAULT_COLUMN_CONFIG . task_hide_completed ) ;
103+ break ;
104+ }
105+ return column ;
103106 }
104- return column ;
105- }
106107
107- function marshallParticularConfigInfo ( column : DatabaseColumn ) : DatabaseColumn {
108- switch ( column . input ) {
109- case InputType . TEXT :
110- if ( column . config . enable_media_view === undefined ) {
111- column . config . enable_media_view = DEFAULT_COLUMN_CONFIG . enable_media_view ;
112- }
113- if ( column . config . media_width === undefined ) {
114- column . config . media_width = DEFAULT_COLUMN_CONFIG . media_width ;
115- }
116- if ( column . config . media_height === undefined ) {
117- column . config . media_height = DEFAULT_COLUMN_CONFIG . media_height ;
118- }
119- case InputType . TASK :
120- if ( column . config . task_hide_completed === undefined ) {
121- column . config . task_hide_completed = DEFAULT_COLUMN_CONFIG . task_hide_completed ;
108+ marshallParticularInputInfo ( column : DatabaseColumn ) : DatabaseColumn {
109+ switch ( column . input ) {
110+ case InputType . SELECT :
111+ case InputType . TAGS :
112+ if ( ! column . options || ! Array . isArray ( column . options ) ) {
113+ column . options = [ ] ;
114+ } else {
115+ // Control undefined or null labels and backgroundColors
116+ column . options = column . options . filter ( ( option : RowSelectOption ) => {
117+ return option . backgroundColor
118+ && option . label
119+ && option . label !== ''
120+ && option . backgroundColor !== '' ;
121+ // Control duplicates labels in options
122+ } ) . filter ( ( option : RowSelectOption , index : number , self : RowSelectOption [ ] ) => {
123+ return self . findIndex ( ( t : RowSelectOption ) => {
124+ return t . label === option . label ;
125+ } ) === index ;
126+ }
127+ ) ;
128+ }
122129 break ;
123- }
130+ }
131+ return column ;
124132 }
125- return column ;
126133}
0 commit comments