1515import  _  from  'lodash' ; 
1616import  validator  from  'validator' ; 
1717
18- import  {  BaseTextField ,  isJinja  }  from  './base' ; 
18+ import  {  BaseTextField ,  isJinja ,   isYaql  }  from  './base' ; 
1919
2020const  jsonCheck  =  ( value )  =>  { 
2121  try  { 
@@ -78,13 +78,26 @@ export default class ArrayField extends BaseTextField {
7878      return  v ; 
7979    } 
8080
81+     /* YAQL parameter that came input as single yaql */ 
82+     if  ( isYaql ( v )  &&  ! v . includes ( ',' ) )  { 
83+       return  v ; 
84+     } 
85+ 
8186    const  {  items }  =  this . props . spec  ||  { } ; 
82-     return  split ( v ) 
83-       . map ( ( v )  =>  typeConversions ( items  &&  items . type ,  v ) ) 
87+ 
88+     let  t  =  v ; 
89+     /* Trim [], required for when kept [] around YAQL parameter */ 
90+     if  ( v  &&  v . startsWith ( '[' )  &&  v . endsWith ( ']' ) )  { 
91+       t  =  v . substring ( 1 ,  v . length - 1 ) . trim ( ) ; 
92+     } 
93+ 
94+     return  split ( t ) 
95+       . map ( ( t )  =>  typeConversions ( items  &&  items . type ,  t ) ) 
8496    ; 
8597  } 
8698
8799  toStateValue ( v )  { 
100+ 
88101    if  ( jsonCheck ( v ) )  { 
89102      return  JSON . stringify ( v ) ; 
90103    } 
@@ -93,11 +106,27 @@ export default class ArrayField extends BaseTextField {
93106      return  v ; 
94107    } 
95108
109+     /* string which is YAQL */ 
110+     if  ( isYaql ( v ) )  { 
111+       return  v ; 
112+     } 
113+ 
96114    const  {  secret }  =  this . props . spec  ||  { } ; 
115+ 
97116    if  ( secret  &&  v  &&  ! Array . isArray ( v ) )  { 
98117      return  v ; 
99118    } 
100119
120+     /*  
121+      * Keep [] if after converting to comma separated string would be treated 
122+      * as YAQL, as need to distingish between when pass an array parameter or 
123+      * an array of string parameters. 
124+      */ 
125+     if  ( v  &&  Array . isArray ( v )  &&  isYaql ( v . join ( ', ' ) )  &&  v . length  ===  1 )  { 
126+       return  '[ ' . concat ( v . join ( ', ' ) , ' ]' ) ; 
127+     } 
128+ 
129+ 
101130    return  v  ? v . join ( ', ' )  : '' ; 
102131  } 
103132
0 commit comments