Skip to content

Commit 0342c95

Browse files
committed
Fix #78: Support readOnly keyword on array and object level
1 parent 764d9e4 commit 0342c95

File tree

1 file changed

+16
-6
lines changed

1 file changed

+16
-6
lines changed

src/ui.js

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)