@@ -204,14 +204,16 @@ export function getArrayFormRow(args) {
204204 let rows = [ ] ;
205205 let groups = [ ] ;
206206
207+ let isReadonly = getKeyword ( schema , 'readonly' , 'readOnly' , false ) ;
208+
207209 let removable = true ;
208210 let min_items = getKeyword ( schema , 'min_items' , 'minItems' ) || 0 ;
209- if ( data . length <= min_items )
211+ if ( data . length <= min_items || isReadonly )
210212 removable = false ;
211213
212214 let addable = true ;
213215 let max_items = getKeyword ( schema , 'max_items' , 'maxItems' ) || 100 ;
214- if ( data . length >= max_items )
216+ if ( data . length >= max_items || isReadonly )
215217 addable = false ;
216218
217219 let isRef = schema . items . hasOwnProperty ( '$ref' ) ;
@@ -236,6 +238,9 @@ export function getArrayFormRow(args) {
236238 errorMap : args . errorMap ,
237239 } ;
238240
241+ if ( isReadonly )
242+ nextArgs . schema . readOnly = true ;
243+
239244 if ( nextArgs . schema . widget === 'multiselect' ) {
240245 nextArgs . data = data ;
241246 nextArgs . name = name ;
@@ -250,12 +255,12 @@ export function getArrayFormRow(args) {
250255 nextArgs . data = data [ i ] ;
251256 nextArgs . name = joinCoords ( name , i ) ;
252257
253- if ( i === 0 )
258+ if ( i === 0 || isReadonly )
254259 nextArgs . onMoveUp = null ;
255260 else
256261 nextArgs . onMoveUp = ( e ) => onMove ( joinCoords ( name , i ) , joinCoords ( name , i - 1 ) ) ;
257262
258- if ( i === data . length - 1 )
263+ if ( i === data . length - 1 || isReadonly )
259264 nextArgs . onMoveDown = null ;
260265 else
261266 nextArgs . onMoveDown = ( e ) => onMove ( joinCoords ( name , i ) , joinCoords ( name , i + 1 ) ) ;
@@ -328,8 +333,8 @@ export function getArrayFormRow(args) {
328333 < div className = "rjf-form-group-wrapper" key = { 'group_wrapper_' + name + '_' + index } >
329334 < FormRowControls
330335 onRemove = { removable ? ( e ) => onRemove ( joinCoords ( name , index ) ) : null }
331- onMoveUp = { index > 0 ? ( e ) => onMove ( joinCoords ( name , index ) , joinCoords ( name , index - 1 ) ) : null }
332- onMoveDown = { index < groups . length - 1 ? ( e ) => onMove ( joinCoords ( name , index ) , joinCoords ( name , index + 1 ) ) : null }
336+ onMoveUp = { index > 0 && ! isReadonly ? ( e ) => onMove ( joinCoords ( name , index ) , joinCoords ( name , index - 1 ) ) : null }
337+ onMoveDown = { index < groups . length - 1 && ! isReadonly ? ( e ) => onMove ( joinCoords ( name , index ) , joinCoords ( name , index + 1 ) ) : null }
333338 />
334339 { i }
335340 </ div >
@@ -359,6 +364,8 @@ export function getObjectFormRow(args) {
359364
360365 let rows = [ ] ;
361366
367+ let isReadonly = getKeyword ( schema , 'readonly' , 'readOnly' , false ) ;
368+
362369 let schema_keys = getKeyword ( schema , 'keys' , 'properties' , { } ) ;
363370
364371 if ( schema . hasOwnProperty ( 'allOf' ) ) {
@@ -393,6 +400,9 @@ export function getObjectFormRow(args) {
393400 if ( isRef )
394401 schemaValue = args . getRef ( schemaValue [ '$ref' ] ) ;
395402
403+ if ( isReadonly )
404+ schemaValue . readOnly = true ;
405+
396406 let type = normalizeKeyword ( schemaValue . type ) ;
397407
398408 if ( ! schemaValue . title ) {
0 commit comments