11import { getBlankData } from './data' ;
22import { Button , FormInput , FormCheckInput , FormRadioInput , FormSelectInput ,
33 FormFileInput , FormRow , FormGroup , FormRowControls , FormTextareaInput ,
4- FormDateTimeInput } from './components' ;
4+ FormDateTimeInput , FormMultiSelectInput } from './components' ;
55import { getVerboseName } from './util' ;
66
77
@@ -89,6 +89,9 @@ function FormField(props) {
8989 case 'select' :
9090 InputField = FormSelectInput ;
9191 break ;
92+ case 'multiselect' :
93+ InputField = FormMultiSelectInput ;
94+ break ;
9295 case 'textarea' :
9396 InputField = FormTextareaInput ;
9497 break ;
@@ -114,7 +117,7 @@ function FormField(props) {
114117export function getStringFormRow ( args ) {
115118 let {
116119 data, schema, name, onChange, onRemove, removable, onEdit, editable,
117- onMoveUp, onMoveDown
120+ onMoveUp, onMoveDown, parentType , ... fieldProps
118121 } = args ;
119122
120123 return (
@@ -131,6 +134,8 @@ export function getStringFormRow(args) {
131134 onChange = { onChange }
132135 onEdit = { onEdit }
133136 editable = { editable }
137+ parentType = { parentType }
138+ { ...fieldProps }
134139 />
135140 </ FormRow >
136141 ) ;
@@ -167,29 +172,41 @@ export function getArrayFormRow(args) {
167172 level : level + 1 ,
168173 removable : removable ,
169174 onMove : onMove ,
175+ parentType : 'array' ,
170176 } ;
171177
172- for ( let i = 0 ; i < data . length ; i ++ ) {
173- nextArgs . data = data [ i ] ;
174- nextArgs . name = name + '-' + i ;
175-
176- if ( i === 0 )
177- nextArgs . onMoveUp = null ;
178- else
179- nextArgs . onMoveUp = ( e ) => onMove ( name + '-' + i , name + '-' + ( i - 1 ) ) ;
180-
181- if ( i === data . length - 1 )
182- nextArgs . onMoveDown = null ;
183- else
184- nextArgs . onMoveDown = ( e ) => onMove ( name + '-' + i , name + '-' + ( i + 1 ) ) ;
178+ if ( nextArgs . schema . widget === 'multiselect' ) {
179+ nextArgs . data = data ;
180+ nextArgs . name = name ;
181+ nextArgs . removable = false ;
182+ nextArgs . onMoveUp = null ;
183+ nextArgs . onMoveDown = null ;
184+ addable = false ;
185+ rows . push ( getStringFormRow ( nextArgs ) ) ;
186+ } else {
185187
186- if ( type === 'array' ) {
187- groups . push ( getArrayFormRow ( nextArgs ) ) ;
188- } else if ( type === 'object' ) {
189- groups . push ( getObjectFormRow ( nextArgs ) ) ;
190- } else {
191- rows . push ( getStringFormRow ( nextArgs ) ) ;
192- }
188+ for ( let i = 0 ; i < data . length ; i ++ ) {
189+ nextArgs . data = data [ i ] ;
190+ nextArgs . name = name + '-' + i ;
191+
192+ if ( i === 0 )
193+ nextArgs . onMoveUp = null ;
194+ else
195+ nextArgs . onMoveUp = ( e ) => onMove ( name + '-' + i , name + '-' + ( i - 1 ) ) ;
196+
197+ if ( i === data . length - 1 )
198+ nextArgs . onMoveDown = null ;
199+ else
200+ nextArgs . onMoveDown = ( e ) => onMove ( name + '-' + i , name + '-' + ( i + 1 ) ) ;
201+
202+ if ( type === 'array' ) {
203+ groups . push ( getArrayFormRow ( nextArgs ) ) ;
204+ } else if ( type === 'object' ) {
205+ groups . push ( getObjectFormRow ( nextArgs ) ) ;
206+ } else {
207+ rows . push ( getStringFormRow ( nextArgs ) ) ;
208+ }
209+ }
193210 }
194211
195212 let coords = name ; // coordinates for insertion and deletion
@@ -283,7 +300,8 @@ export function getObjectFormRow(args) {
283300 onRemove : onRemove ,
284301 level : level + 1 ,
285302 removable : removable ,
286- onMove : onMove
303+ onMove : onMove ,
304+ parentType : 'object' ,
287305 } ;
288306
289307 if ( type === 'array' ) {
0 commit comments