11import { getBlankData } from './data' ;
22import { Button , FormInput , FormCheckInput , FormRadioInput , FormSelectInput ,
3- FormFileInput , FormRow , FormGroup , FormTextareaInput } from './components' ;
3+ FormFileInput , FormRow , FormGroup , FormRowControls , FormTextareaInput } from './components' ;
44import { getVerboseName } from './util' ;
55
66
@@ -105,12 +105,17 @@ function FormField(props) {
105105
106106
107107export function getStringFormRow ( args ) {
108- let { data, schema, name, onChange, onRemove, removable, onEdit, editable} = args ;
108+ let {
109+ data, schema, name, onChange, onRemove, removable, onEdit, editable,
110+ onMoveUp, onMoveDown
111+ } = args ;
109112
110113 return (
111114 < FormRow
112115 key = { name }
113116 onRemove = { removable ? ( e ) => onRemove ( name ) : null }
117+ onMoveUp = { onMoveUp }
118+ onMoveDown = { onMoveDown }
114119 >
115120 < FormField
116121 data = { data }
@@ -125,7 +130,7 @@ export function getStringFormRow(args) {
125130}
126131
127132export function getArrayFormRow ( args ) {
128- let { data, schema, name, onChange, onAdd, onRemove, level} = args ;
133+ let { data, schema, name, onChange, onAdd, onRemove, onMove , level} = args ;
129134
130135 let rows = [ ] ;
131136 let groups = [ ] ;
@@ -153,13 +158,24 @@ export function getArrayFormRow(args) {
153158 onAdd : onAdd ,
154159 onRemove : onRemove ,
155160 level : level + 1 ,
156- removable : removable
161+ removable : removable ,
162+ onMove : onMove ,
157163 } ;
158164
159165 for ( let i = 0 ; i < data . length ; i ++ ) {
160166 nextArgs . data = data [ i ] ;
161167 nextArgs . name = name + '-' + i ;
162168
169+ if ( i === 0 )
170+ nextArgs . onMoveUp = null ;
171+ else
172+ nextArgs . onMoveUp = ( e ) => onMove ( name + '-' + i , name + '-' + ( i - 1 ) ) ;
173+
174+ if ( i === data . length - 1 )
175+ nextArgs . onMoveDown = null ;
176+ else
177+ nextArgs . onMoveDown = ( e ) => onMove ( name + '-' + i , name + '-' + ( i + 1 ) ) ; ;
178+
163179 if ( type === 'array' ) {
164180 groups . push ( getArrayFormRow ( nextArgs ) ) ;
165181 } else if ( type === 'object' ) {
@@ -193,15 +209,11 @@ export function getArrayFormRow(args) {
193209 { groupTitle }
194210 { groups . map ( ( i , index ) => (
195211 < div className = "rjf-form-group-wrapper" key = { 'group_wrapper_' + name + '_' + index } >
196- { removable &&
197- < Button
198- className = "remove"
199- onClick = { ( e ) => onRemove ( name + '-' + index ) }
200- title = "Remove"
201- >
202- < span > ×</ span >
203- </ Button >
204- }
212+ < FormRowControls
213+ onRemove = { removable ? ( e ) => onRemove ( name + '-' + index ) : null }
214+ onMoveUp = { index > 0 ? ( e ) => onMove ( name + '-' + index , name + '-' + ( index - 1 ) ) : null }
215+ onMoveDown = { index < groups . length - 1 ? ( e ) => onMove ( name + '-' + index , name + '-' + ( index + 1 ) ) : null }
216+ />
205217 { i }
206218 </ div >
207219 )
@@ -224,7 +236,7 @@ export function getArrayFormRow(args) {
224236
225237
226238export function getObjectFormRow ( args ) {
227- let { data, schema, name, onChange, onAdd, onRemove, level} = args ;
239+ let { data, schema, name, onChange, onAdd, onRemove, level, onMove } = args ;
228240
229241 let rows = [ ] ;
230242
@@ -263,7 +275,8 @@ export function getObjectFormRow(args) {
263275 onAdd : onAdd ,
264276 onRemove : onRemove ,
265277 level : level + 1 ,
266- removable : removable
278+ removable : removable ,
279+ onMove : onMove
267280 } ;
268281
269282 if ( type === 'array' ) {
0 commit comments