@@ -27,14 +27,20 @@ export class IfElementHandler extends CustomPropertyHandler {
2727 resolvePropertyElement ( ifElement : parseXml . Element , widgetResolveResult : WidgetResolveResult , parent : parseXml . Element , parentChildren : parseXml . Element [ ] , resolveWidget : ( element : parseXml . Element , parent : parseXml . Element ) => WidgetResolveResult ) : WidgetModel {
2828 const ifChains : IfModel [ ] = [ ] ;
2929 const wrappers : WidgetModel [ ] = [ ] ;
30-
30+ const multipleChild = widgetResolveResult . widget instanceof Array ;
31+
3132 // apply binding for <if> element
3233 const ifBoundResult = this . propertyResolver . pipeValueResolver . resolve ( ifElement , 'value' , widgetResolveResult . propertyElementProperties . filter ( a => a . name === 'value' ) [ 0 ] . value , widgetResolveResult . widget ) ;
34+ if ( ifBoundResult . wrapperWidget && multipleChild ) {
35+ throw new Error ( "::You can't use behavior or stream pipe on <if> element that has more than one child. Instead wrap the children with Column or Row." ) ;
36+ }
37+
3338 const ifConditionValue = ifBoundResult . value ;
39+ const childWidget : any [ ] = multipleChild ? ( widgetResolveResult . widget as any ) : [ widgetResolveResult . widget ] ;
3440 wrappers . push ( ifBoundResult . wrapperWidget as any ) ;
3541 ifChains . push ( {
3642 condition : ifConditionValue ,
37- childWidget : [ widgetResolveResult . widget ]
43+ childWidget : [ ... childWidget ]
3844 } ) ;
3945
4046
@@ -168,13 +174,13 @@ export class IfElementHandler extends CustomPropertyHandler {
168174 code += ifChains . map ( a => {
169175 return `SwitchCase${ hasMultipleChild ? 'MultiChild' : '' } (
170176${ tabs } ${ a . condition } ,
171- ${ tabs } () => ${ hasMultipleChild ? `[\n${ itemTabs } ` : '' } ${ a . childWidget . map ( c => generateChildWidgetCode ( c , tabsLevel + 3 + ( hasMultipleChild ? 1 : 0 ) ) ) . join ( `,\n${ itemTabs } ` ) } ${ hasMultipleChild ? `\n${ itemTabs } ]` : '' }
177+ ${ tabs } () => ${ hasMultipleChild ? `[\n${ itemTabs } ` : '' } ${ a . childWidget . map ( c => generateChildWidgetCode ( c , tabsLevel + 3 + ( hasMultipleChild ? 1 : 0 ) ) ) . join ( `,\n${ itemTabs } ` ) || 'null' } ${ hasMultipleChild ? `\n${ itemTabs } ]` : '' }
172178${ tabs } ),`;
173179 } ) . join ( `\n${ tabs } ` ) ;
174180
175181 code += `
176182${ tabs } ],
177- ${ tabs } () => ${ hasMultipleChild ? `[\n${ elseItemsTabs } ` : '' } ${ elseCode } ${ hasMultipleChild ? `\n${ elseItemsTabs } ]` : '' }
183+ ${ tabs } () => ${ hasMultipleChild ? `[\n${ elseItemsTabs } ` : '' } ${ elseCode || 'null' } ${ hasMultipleChild ? `\n${ elseItemsTabs } ]` : '' }
178184${ tabs } )`;
179185
180186 return code ;
0 commit comments