@jsonforms/material-renderers 3.3.0 → 3.4.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import type { StatePropsOfMasterItem } from '@jsonforms/core';
2
2
  import React from 'react';
3
- export declare const ListWithDetailMasterItem: ({ index, childLabel, selected, enabled, handleSelect, removeItem, path, translations, }: StatePropsOfMasterItem) => React.JSX.Element;
3
+ export declare const ListWithDetailMasterItem: ({ index, childLabel, selected, enabled, handleSelect, removeItem, path, translations, disableRemove, }: StatePropsOfMasterItem) => React.JSX.Element;
4
4
  declare const _default: React.ComponentType<import("@jsonforms/core").OwnPropsOfMasterListItem>;
5
5
  export default _default;
@@ -1,6 +1,6 @@
1
1
  import { ArrayLayoutProps, RankedTester } from '@jsonforms/core';
2
2
  import React from 'react';
3
- export declare const MaterialListWithDetailRenderer: ({ uischemas, schema, uischema, path, enabled, errors, visible, label, required, removeItems, addItem, data, renderers, cells, config, rootSchema, translations, description, }: ArrayLayoutProps) => React.JSX.Element;
3
+ export declare const MaterialListWithDetailRenderer: ({ uischemas, schema, uischema, path, enabled, errors, visible, label, required, removeItems, addItem, data, renderers, cells, config, rootSchema, translations, description, disableAdd, disableRemove, }: ArrayLayoutProps) => React.JSX.Element;
4
4
  export declare const materialListWithDetailTester: RankedTester;
5
5
  declare const _default: React.ComponentType<import("@jsonforms/core").OwnPropsOfControl>;
6
6
  export default _default;
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
2
  export declare const UnwrappedAdditional: {
3
3
  MaterialLabelRenderer: ({ text, visible }: import("@jsonforms/core").LabelProps) => import("react").JSX.Element;
4
- MaterialListWithDetailRenderer: ({ uischemas, schema, uischema, path, enabled, errors, visible, label, required, removeItems, addItem, data, renderers, cells, config, rootSchema, translations, description, }: import("@jsonforms/core").ArrayLayoutProps) => import("react").JSX.Element;
4
+ MaterialListWithDetailRenderer: ({ uischemas, schema, uischema, path, enabled, errors, visible, label, required, removeItems, addItem, data, renderers, cells, config, rootSchema, translations, description, disableAdd, disableRemove, }: import("@jsonforms/core").ArrayLayoutProps) => import("react").JSX.Element;
5
5
  };
@@ -18,8 +18,9 @@ interface NonEmptyRowProps {
18
18
  cells?: JsonFormsCellRendererRegistryEntry[];
19
19
  path: string;
20
20
  translations: ArrayTranslations;
21
+ disableRemove?: boolean;
21
22
  }
22
- export declare const NonEmptyRow: React.MemoExoticComponent<({ childPath, schema, rowIndex, openDeleteDialog, moveUpCreator, moveDownCreator, enableUp, enableDown, showSortButtons, enabled, cells, path, translations, }: NonEmptyRowProps & WithDeleteDialogSupport) => React.JSX.Element>;
23
+ export declare const NonEmptyRow: React.MemoExoticComponent<({ childPath, schema, rowIndex, openDeleteDialog, moveUpCreator, moveDownCreator, enableUp, enableDown, showSortButtons, enabled, cells, path, translations, disableRemove, }: NonEmptyRowProps & WithDeleteDialogSupport) => React.JSX.Element>;
23
24
  export declare class MaterialTableControl extends React.Component<ArrayLayoutProps & WithDeleteDialogSupport, any> {
24
25
  addItem: (path: string, value: any) => () => void;
25
26
  render(): React.JSX.Element;
@@ -12,6 +12,7 @@ export interface MaterialTableToolbarProps {
12
12
  enabled: boolean;
13
13
  translations: ArrayTranslations;
14
14
  addItem(path: string, value: any): () => void;
15
+ disableAdd?: boolean;
15
16
  }
16
17
  declare const TableToolbar: React.NamedExoticComponent<MaterialTableToolbarProps>;
17
18
  export default TableToolbar;
package/lib/index.d.ts CHANGED
@@ -38,5 +38,5 @@ export declare const Unwrapped: {
38
38
  MaterialObjectRenderer: ({ renderers, cells, uischemas, schema, label, path, visible, enabled, uischema, rootSchema, }: import("@jsonforms/core").StatePropsOfControlWithDetail) => import("react").JSX.Element;
39
39
  MaterialOneOfRenderer: ({ handleChange, schema, path, renderers, cells, rootSchema, id, visible, indexOfFittingSchema, uischema, uischemas, data, }: import("@jsonforms/core").CombinatorRendererProps) => import("react").JSX.Element;
40
40
  MaterialLabelRenderer: ({ text, visible }: import("@jsonforms/core").LabelProps) => import("react").JSX.Element;
41
- MaterialListWithDetailRenderer: ({ uischemas, schema, uischema, path, enabled, errors, visible, label, required, removeItems, addItem, data, renderers, cells, config, rootSchema, translations, description, }: import("@jsonforms/core").ArrayLayoutProps) => import("react").JSX.Element;
41
+ MaterialListWithDetailRenderer: ({ uischemas, schema, uischema, path, enabled, errors, visible, label, required, removeItems, addItem, data, renderers, cells, config, rootSchema, translations, description, disableAdd, disableRemove, }: import("@jsonforms/core").ArrayLayoutProps) => import("react").JSX.Element;
42
42
  };
@@ -11,16 +11,21 @@ var isEmpty = require('lodash/isEmpty');
11
11
  var union = require('lodash/union');
12
12
  var startCase = require('lodash/startCase');
13
13
  var range = require('lodash/range');
14
- var iconsMaterial = require('@mui/icons-material');
14
+ var DeleteIcon = require('@mui/icons-material/Delete');
15
+ var ArrowDownward = require('@mui/icons-material/ArrowDownward');
16
+ var ArrowUpward = require('@mui/icons-material/ArrowUpward');
15
17
  var styles$1 = require('@mui/material/styles');
18
+ var AddIcon = require('@mui/icons-material/Add');
19
+ var ErrorOutlineIcon = require('@mui/icons-material/ErrorOutline');
16
20
  var merge = require('lodash/merge');
17
21
  var dayjs = require('dayjs');
18
22
  var customParsing = require('dayjs/plugin/customParseFormat');
19
23
  var debounce = require('lodash/debounce');
24
+ var Close = require('@mui/icons-material/Close');
20
25
  var map = require('lodash/map');
21
- var AddIcon = require('@mui/icons-material/Add');
22
26
  var xDatePickers = require('@mui/x-date-pickers');
23
27
  var AdapterDayjs = require('@mui/x-date-pickers/AdapterDayjs');
28
+ var ExpandMoreIcon = require('@mui/icons-material/ExpandMore');
24
29
 
25
30
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
26
31
 
@@ -30,12 +35,18 @@ var isEmpty__default = /*#__PURE__*/_interopDefaultLegacy(isEmpty);
30
35
  var union__default = /*#__PURE__*/_interopDefaultLegacy(union);
31
36
  var startCase__default = /*#__PURE__*/_interopDefaultLegacy(startCase);
32
37
  var range__default = /*#__PURE__*/_interopDefaultLegacy(range);
38
+ var DeleteIcon__default = /*#__PURE__*/_interopDefaultLegacy(DeleteIcon);
39
+ var ArrowDownward__default = /*#__PURE__*/_interopDefaultLegacy(ArrowDownward);
40
+ var ArrowUpward__default = /*#__PURE__*/_interopDefaultLegacy(ArrowUpward);
41
+ var AddIcon__default = /*#__PURE__*/_interopDefaultLegacy(AddIcon);
42
+ var ErrorOutlineIcon__default = /*#__PURE__*/_interopDefaultLegacy(ErrorOutlineIcon);
33
43
  var merge__default = /*#__PURE__*/_interopDefaultLegacy(merge);
34
44
  var dayjs__default = /*#__PURE__*/_interopDefaultLegacy(dayjs);
35
45
  var customParsing__default = /*#__PURE__*/_interopDefaultLegacy(customParsing);
36
46
  var debounce__default = /*#__PURE__*/_interopDefaultLegacy(debounce);
47
+ var Close__default = /*#__PURE__*/_interopDefaultLegacy(Close);
37
48
  var map__default = /*#__PURE__*/_interopDefaultLegacy(map);
38
- var AddIcon__default = /*#__PURE__*/_interopDefaultLegacy(AddIcon);
49
+ var ExpandMoreIcon__default = /*#__PURE__*/_interopDefaultLegacy(ExpandMoreIcon);
39
50
 
40
51
  /******************************************************************************
41
52
  Copyright (c) Microsoft Corporation.
@@ -202,7 +213,7 @@ var ValidationIcon = function (_a) {
202
213
  var errorMessages = _a.errorMessages, id = _a.id;
203
214
  return (React__default["default"].createElement(material.Tooltip, { id: id, title: errorMessages },
204
215
  React__default["default"].createElement(StyledBadge, { badgeContent: errorMessages.split('\n').length },
205
- React__default["default"].createElement(iconsMaterial.ErrorOutline, { color: 'inherit' }))));
216
+ React__default["default"].createElement(ErrorOutlineIcon__default["default"], { color: 'inherit' }))));
206
217
  };
207
218
 
208
219
  var fixedCellSmall = {
@@ -210,7 +221,7 @@ var fixedCellSmall = {
210
221
  paddingRight: 0,
211
222
  };
212
223
  var TableToolbar = React__default["default"].memo(function TableToolbar(_a) {
213
- var numColumns = _a.numColumns, errors = _a.errors, label = _a.label, description = _a.description, path = _a.path, addItem = _a.addItem, schema = _a.schema, enabled = _a.enabled, translations = _a.translations, rootSchema = _a.rootSchema;
224
+ var numColumns = _a.numColumns, errors = _a.errors, label = _a.label, description = _a.description, path = _a.path, addItem = _a.addItem, schema = _a.schema, enabled = _a.enabled, translations = _a.translations, rootSchema = _a.rootSchema, disableAdd = _a.disableAdd;
214
225
  return (React__default["default"].createElement(material.TableRow, null,
215
226
  React__default["default"].createElement(NoBorderTableCell, { colSpan: numColumns },
216
227
  React__default["default"].createElement(material.Stack, null,
@@ -220,10 +231,10 @@ var TableToolbar = React__default["default"].memo(function TableToolbar(_a) {
220
231
  React__default["default"].createElement(material.Grid, { item: true }, errors.length !== 0 && (React__default["default"].createElement(material.Grid, { item: true },
221
232
  React__default["default"].createElement(ValidationIcon, { id: 'tooltip-validation', errorMessages: errors }))))),
222
233
  description && React__default["default"].createElement(material.FormHelperText, null, description))),
223
- enabled ? (React__default["default"].createElement(NoBorderTableCell, { align: 'right', style: fixedCellSmall },
234
+ enabled && !disableAdd ? (React__default["default"].createElement(NoBorderTableCell, { align: 'right', style: fixedCellSmall },
224
235
  React__default["default"].createElement(material.Tooltip, { id: 'tooltip-add', title: translations.addTooltip, placement: 'bottom' },
225
236
  React__default["default"].createElement(material.IconButton, { "aria-label": translations.addAriaLabel, onClick: addItem(path, core.createDefaultValue(schema, rootSchema)), size: 'large' },
226
- React__default["default"].createElement(iconsMaterial.Add, null))))) : null));
237
+ React__default["default"].createElement(AddIcon__default["default"], null))))) : null));
227
238
  });
228
239
 
229
240
  var styles = {
@@ -320,7 +331,7 @@ var NonEmptyCell = function (ownProps) {
320
331
  return React__default["default"].createElement(NonEmptyCellComponent, __assign({}, emptyCellProps, { isValid: isValid }));
321
332
  };
322
333
  var NonEmptyRowComponent = function (_a) {
323
- var childPath = _a.childPath, schema = _a.schema, rowIndex = _a.rowIndex, openDeleteDialog = _a.openDeleteDialog, moveUpCreator = _a.moveUpCreator, moveDownCreator = _a.moveDownCreator, enableUp = _a.enableUp, enableDown = _a.enableDown, showSortButtons = _a.showSortButtons, enabled = _a.enabled, cells = _a.cells, path = _a.path, translations = _a.translations;
334
+ var childPath = _a.childPath, schema = _a.schema, rowIndex = _a.rowIndex, openDeleteDialog = _a.openDeleteDialog, moveUpCreator = _a.moveUpCreator, moveDownCreator = _a.moveDownCreator, enableUp = _a.enableUp, enableDown = _a.enableDown, showSortButtons = _a.showSortButtons, enabled = _a.enabled, cells = _a.cells, path = _a.path, translations = _a.translations, disableRemove = _a.disableRemove;
324
335
  var moveUp = React.useMemo(function () { return moveUpCreator(path, rowIndex); }, [moveUpCreator, path, rowIndex]);
325
336
  var moveDown = React.useMemo(function () { return moveDownCreator(path, rowIndex); }, [moveDownCreator, path, rowIndex]);
326
337
  return (React__default["default"].createElement(material.TableRow, { key: childPath, hover: true },
@@ -331,19 +342,19 @@ var NonEmptyRowComponent = function (_a) {
331
342
  React__default["default"].createElement(material.Grid, { item: true },
332
343
  React__default["default"].createElement(material.Tooltip, { id: 'tooltip-up', title: translations.up, placement: 'bottom', open: enableUp ? undefined : false },
333
344
  React__default["default"].createElement(material.IconButton, { "aria-label": translations.upAriaLabel, onClick: moveUp, disabled: !enableUp, size: 'large' },
334
- React__default["default"].createElement(iconsMaterial.ArrowUpward, null)))),
345
+ React__default["default"].createElement(ArrowUpward__default["default"], null)))),
335
346
  React__default["default"].createElement(material.Grid, { item: true },
336
347
  React__default["default"].createElement(material.Tooltip, { id: 'tooltip-down', title: translations.down, placement: 'bottom', open: enableDown ? undefined : false },
337
348
  React__default["default"].createElement(material.IconButton, { "aria-label": translations.downAriaLabel, onClick: moveDown, disabled: !enableDown, size: 'large' },
338
- React__default["default"].createElement(iconsMaterial.ArrowDownward, null)))))) : null,
339
- React__default["default"].createElement(material.Grid, { item: true },
349
+ React__default["default"].createElement(ArrowDownward__default["default"], null)))))) : null,
350
+ !disableRemove ? (React__default["default"].createElement(material.Grid, { item: true },
340
351
  React__default["default"].createElement(material.Tooltip, { id: 'tooltip-remove', title: translations.removeTooltip, placement: 'bottom' },
341
352
  React__default["default"].createElement(material.IconButton, { "aria-label": translations.removeAriaLabel, onClick: function () { return openDeleteDialog(childPath, rowIndex); }, size: 'large' },
342
- React__default["default"].createElement(iconsMaterial.Delete, null))))))) : null));
353
+ React__default["default"].createElement(DeleteIcon__default["default"], null))))) : null))) : null));
343
354
  };
344
355
  var NonEmptyRow = React__default["default"].memo(NonEmptyRowComponent);
345
356
  var TableRows = function (_a) {
346
- var data = _a.data, path = _a.path, schema = _a.schema, openDeleteDialog = _a.openDeleteDialog, moveUp = _a.moveUp, moveDown = _a.moveDown, uischema = _a.uischema, config = _a.config, enabled = _a.enabled, cells = _a.cells, translations = _a.translations;
357
+ var data = _a.data, path = _a.path, schema = _a.schema, openDeleteDialog = _a.openDeleteDialog, moveUp = _a.moveUp, moveDown = _a.moveDown, uischema = _a.uischema, config = _a.config, enabled = _a.enabled, cells = _a.cells, translations = _a.translations, disableRemove = _a.disableRemove;
347
358
  var isEmptyTable = data === 0;
348
359
  if (isEmptyTable) {
349
360
  return (React__default["default"].createElement(EmptyTable, { numColumns: getValidColumnProps(schema).length + 1, translations: translations }));
@@ -352,7 +363,7 @@ var TableRows = function (_a) {
352
363
  return (React__default["default"].createElement(React__default["default"].Fragment, null, range__default["default"](data).map(function (index) {
353
364
  var childPath = core.Paths.compose(path, "".concat(index));
354
365
  return (React__default["default"].createElement(NonEmptyRow, { key: childPath, childPath: childPath, rowIndex: index, schema: schema, openDeleteDialog: openDeleteDialog, moveUpCreator: moveUp, moveDownCreator: moveDown, enableUp: index !== 0, enableDown: index !== data - 1, showSortButtons: appliedUiSchemaOptions.showSortButtons ||
355
- appliedUiSchemaOptions.showArrayTableSortButtons, enabled: enabled, cells: cells, path: path, translations: translations }));
366
+ appliedUiSchemaOptions.showArrayTableSortButtons, enabled: enabled, cells: cells, path: path, translations: translations, disableRemove: disableRemove }));
356
367
  })));
357
368
  };
358
369
  var MaterialTableControl = (function (_super) {
@@ -363,7 +374,10 @@ var MaterialTableControl = (function (_super) {
363
374
  return _this;
364
375
  }
365
376
  MaterialTableControl.prototype.render = function () {
366
- var _a = this.props, label = _a.label, description = _a.description, path = _a.path, schema = _a.schema, rootSchema = _a.rootSchema, uischema = _a.uischema, errors = _a.errors, openDeleteDialog = _a.openDeleteDialog, visible = _a.visible, enabled = _a.enabled, cells = _a.cells, translations = _a.translations;
377
+ var _a = this.props, label = _a.label, description = _a.description, path = _a.path, schema = _a.schema, rootSchema = _a.rootSchema, uischema = _a.uischema, errors = _a.errors, openDeleteDialog = _a.openDeleteDialog, visible = _a.visible, enabled = _a.enabled, cells = _a.cells, translations = _a.translations, disableAdd = _a.disableAdd, disableRemove = _a.disableRemove, config = _a.config;
378
+ var appliedUiSchemaOptions = merge__default["default"]({}, config, uischema.options);
379
+ var doDisableAdd = disableAdd || appliedUiSchemaOptions.disableAdd;
380
+ var doDisableRemove = disableRemove || appliedUiSchemaOptions.disableRemove;
367
381
  var controlElement = uischema;
368
382
  var isObjectSchema = schema.type === 'object';
369
383
  var headerCells = isObjectSchema
@@ -374,12 +388,12 @@ var MaterialTableControl = (function (_super) {
374
388
  }
375
389
  return (React__default["default"].createElement(material.Table, null,
376
390
  React__default["default"].createElement(material.TableHead, null,
377
- React__default["default"].createElement(TableToolbar, { errors: errors, label: label, description: description, addItem: this.addItem, numColumns: isObjectSchema ? headerCells.length : 1, path: path, uischema: controlElement, schema: schema, rootSchema: rootSchema, enabled: enabled, translations: translations }),
391
+ React__default["default"].createElement(TableToolbar, { errors: errors, label: label, description: description, addItem: this.addItem, numColumns: isObjectSchema ? headerCells.length : 1, path: path, uischema: controlElement, schema: schema, rootSchema: rootSchema, enabled: enabled, translations: translations, disableAdd: doDisableAdd }),
378
392
  isObjectSchema && (React__default["default"].createElement(material.TableRow, null,
379
393
  headerCells,
380
394
  enabled ? React__default["default"].createElement(material.TableCell, null) : null))),
381
395
  React__default["default"].createElement(material.TableBody, null,
382
- React__default["default"].createElement(TableRows, __assign({ openDeleteDialog: openDeleteDialog, translations: translations }, this.props)))));
396
+ React__default["default"].createElement(TableRows, __assign({ openDeleteDialog: openDeleteDialog, translations: translations }, this.props, { disableRemove: doDisableRemove })))));
383
397
  };
384
398
  return MaterialTableControl;
385
399
  }(React__default["default"].Component));
@@ -671,7 +685,7 @@ var MuiInputText = React__default["default"].memo(function MuiInputText(props) {
671
685
  right: 0,
672
686
  } },
673
687
  React__default["default"].createElement(material.IconButton, { "aria-label": 'Clear input field', onClick: onClear, size: 'large' },
674
- React__default["default"].createElement(iconsMaterial.Close, { style: closeStyle }))), inputComponent: inputComponent }));
688
+ React__default["default"].createElement(Close__default["default"], { style: closeStyle }))), inputComponent: inputComponent }));
675
689
  });
676
690
 
677
691
  var MuiInputTime = React__default["default"].memo(function MuiInputTime(props) {
@@ -683,10 +697,10 @@ var MuiInputTime = React__default["default"].memo(function MuiInputTime(props) {
683
697
  });
684
698
 
685
699
  var MuiSelect = React__default["default"].memo(function MuiSelect(props) {
686
- var data = props.data, className = props.className, id = props.id, enabled = props.enabled, schema = props.schema, uischema = props.uischema, path = props.path, handleChange = props.handleChange, options = props.options, config = props.config, label = props.label, t = props.t;
700
+ var data = props.data, className = props.className, id = props.id, enabled = props.enabled, schema = props.schema, uischema = props.uischema, path = props.path, handleChange = props.handleChange, options = props.options, config = props.config, label = props.label, t = props.t, multiple = props.multiple;
687
701
  var appliedUiSchemaOptions = merge__default["default"]({}, config, uischema.options);
688
702
  var noneOptionLabel = React.useMemo(function () { return t('enum.none', i18nDefaults['enum.none'], { schema: schema, uischema: uischema, path: path }); }, [t, schema, uischema, path]);
689
- return (React__default["default"].createElement(material.Select, { className: className, id: id, label: label, disabled: !enabled, autoFocus: appliedUiSchemaOptions.focus, value: data !== undefined ? data : '', onChange: function (ev) { return handleChange(path, ev.target.value || undefined); }, fullWidth: true }, [
703
+ return (React__default["default"].createElement(material.Select, { className: className, id: id, label: label, disabled: !enabled, autoFocus: appliedUiSchemaOptions.focus, value: data !== undefined ? data : '', onChange: function (ev) { return handleChange(path, ev.target.value || undefined); }, fullWidth: true, multiple: multiple || false }, [
690
704
  React__default["default"].createElement(material.MenuItem, { value: '', key: 'jsonforms.enum.none' },
691
705
  React__default["default"].createElement("em", null, noneOptionLabel)),
692
706
  ].concat(options.map(function (optionValue) { return (React__default["default"].createElement(material.MenuItem, { value: optionValue.value, key: optionValue.value }, optionValue.label)); }))));
@@ -817,7 +831,7 @@ var MaterialLabelRenderer = function (_a) {
817
831
  var MaterialLabelRenderer$1 = react.withJsonFormsLabelProps(MaterialLabelRenderer);
818
832
 
819
833
  var ArrayLayoutToolbar = React__default["default"].memo(function ArrayLayoutToolbar(_a) {
820
- var label = _a.label, description = _a.description, errors = _a.errors, addItem = _a.addItem, path = _a.path, enabled = _a.enabled, createDefault = _a.createDefault, translations = _a.translations;
834
+ var label = _a.label, description = _a.description, errors = _a.errors, addItem = _a.addItem, path = _a.path, enabled = _a.enabled, createDefault = _a.createDefault, translations = _a.translations, disableAdd = _a.disableAdd;
821
835
  return (React__default["default"].createElement(material.Toolbar, { disableGutters: true },
822
836
  React__default["default"].createElement(material.Stack, null,
823
837
  React__default["default"].createElement(material.Grid, { container: true, alignItems: 'center', justifyContent: 'space-between' },
@@ -827,7 +841,7 @@ var ArrayLayoutToolbar = React__default["default"].memo(function ArrayLayoutTool
827
841
  React__default["default"].createElement(material.Typography, { variant: 'h6' }, label)),
828
842
  React__default["default"].createElement(material.Grid, { item: true }, errors.length !== 0 && (React__default["default"].createElement(material.Grid, { item: true },
829
843
  React__default["default"].createElement(ValidationIcon, { id: 'tooltip-validation', errorMessages: errors })))))),
830
- enabled && (React__default["default"].createElement(material.Grid, { item: true },
844
+ enabled && !disableAdd && (React__default["default"].createElement(material.Grid, { item: true },
831
845
  React__default["default"].createElement(material.Grid, { container: true },
832
846
  React__default["default"].createElement(material.Grid, { item: true },
833
847
  React__default["default"].createElement(material.Tooltip, { id: 'tooltip-add', title: translations.addTooltip, placement: 'bottom' },
@@ -837,20 +851,20 @@ var ArrayLayoutToolbar = React__default["default"].memo(function ArrayLayoutTool
837
851
  });
838
852
 
839
853
  var ListWithDetailMasterItem = function (_a) {
840
- var index = _a.index, childLabel = _a.childLabel, selected = _a.selected, enabled = _a.enabled, handleSelect = _a.handleSelect, removeItem = _a.removeItem, path = _a.path, translations = _a.translations;
854
+ var index = _a.index, childLabel = _a.childLabel, selected = _a.selected, enabled = _a.enabled, handleSelect = _a.handleSelect, removeItem = _a.removeItem, path = _a.path, translations = _a.translations, disableRemove = _a.disableRemove;
841
855
  return (React__default["default"].createElement(material.ListItem, { button: true, selected: selected, onClick: handleSelect(index) },
842
856
  React__default["default"].createElement(material.ListItemAvatar, null,
843
857
  React__default["default"].createElement(material.Avatar, { "aria-label": 'Index' }, index + 1)),
844
858
  React__default["default"].createElement(material.ListItemText, { primary: childLabel }),
845
- enabled && (React__default["default"].createElement(material.ListItemSecondaryAction, null,
859
+ enabled && !disableRemove && (React__default["default"].createElement(material.ListItemSecondaryAction, null,
846
860
  React__default["default"].createElement(material.Tooltip, { id: 'tooltip-remove', title: translations.removeTooltip, placement: 'bottom' },
847
861
  React__default["default"].createElement(material.IconButton, { "aria-label": translations.removeAriaLabel, onClick: removeItem(path, index), size: 'large' },
848
- React__default["default"].createElement(iconsMaterial.Delete, null)))))));
862
+ React__default["default"].createElement(DeleteIcon__default["default"], null)))))));
849
863
  };
850
864
  var ListWithDetailMasterItem$1 = react.withJsonFormsMasterListItemProps(ListWithDetailMasterItem);
851
865
 
852
866
  var MaterialListWithDetailRenderer = function (_a) {
853
- var uischemas = _a.uischemas, schema = _a.schema, uischema = _a.uischema, path = _a.path, enabled = _a.enabled, errors = _a.errors, visible = _a.visible, label = _a.label, required = _a.required, removeItems = _a.removeItems, addItem = _a.addItem, data = _a.data, renderers = _a.renderers, cells = _a.cells, config = _a.config, rootSchema = _a.rootSchema, translations = _a.translations, description = _a.description;
867
+ var uischemas = _a.uischemas, schema = _a.schema, uischema = _a.uischema, path = _a.path, enabled = _a.enabled, errors = _a.errors, visible = _a.visible, label = _a.label, required = _a.required, removeItems = _a.removeItems, addItem = _a.addItem, data = _a.data, renderers = _a.renderers, cells = _a.cells, config = _a.config, rootSchema = _a.rootSchema, translations = _a.translations, description = _a.description, disableAdd = _a.disableAdd, disableRemove = _a.disableRemove;
854
868
  var _b = React.useState(undefined), selectedIndex = _b[0], setSelectedIndex = _b[1];
855
869
  var handleRemoveItem = React.useCallback(function (p, value) { return function () {
856
870
  removeItems(p, [value])();
@@ -867,6 +881,8 @@ var MaterialListWithDetailRenderer = function (_a) {
867
881
  return core.findUISchema(uischemas, schema, uischema.scope, path, undefined, uischema, rootSchema);
868
882
  }, [uischemas, schema, uischema.scope, path, uischema, rootSchema]);
869
883
  var appliedUiSchemaOptions = merge__default["default"]({}, config, uischema.options);
884
+ var doDisableAdd = disableAdd || appliedUiSchemaOptions.disableAdd;
885
+ var doDisableRemove = disableRemove || appliedUiSchemaOptions.disableRemove;
870
886
  React__default["default"].useEffect(function () {
871
887
  setSelectedIndex(undefined);
872
888
  }, [schema]);
@@ -874,10 +890,10 @@ var MaterialListWithDetailRenderer = function (_a) {
874
890
  return null;
875
891
  }
876
892
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
877
- React__default["default"].createElement(ArrayLayoutToolbar, { translations: translations, label: core.computeLabel(label, required, appliedUiSchemaOptions.hideRequiredAsterisk), description: description, errors: errors, path: path, enabled: enabled, addItem: addItem, createDefault: handleCreateDefaultValue }),
893
+ React__default["default"].createElement(ArrayLayoutToolbar, { translations: translations, label: core.computeLabel(label, required, appliedUiSchemaOptions.hideRequiredAsterisk), description: description, errors: errors, path: path, enabled: enabled, addItem: addItem, createDefault: handleCreateDefaultValue, disableAdd: doDisableAdd }),
878
894
  React__default["default"].createElement(material.Grid, { container: true, direction: 'row', spacing: 2 },
879
895
  React__default["default"].createElement(material.Grid, { item: true, xs: 3 },
880
- React__default["default"].createElement(material.List, null, data > 0 ? (map__default["default"](range__default["default"](data), function (index) { return (React__default["default"].createElement(ListWithDetailMasterItem$1, { index: index, path: path, schema: schema, enabled: enabled, handleSelect: handleListItemClick, removeItem: handleRemoveItem, selected: selectedIndex === index, key: index, uischema: foundUISchema, childLabelProp: appliedUiSchemaOptions.elementLabelProp, translations: translations })); })) : (React__default["default"].createElement("p", null, translations.noDataMessage)))),
896
+ React__default["default"].createElement(material.List, null, data > 0 ? (map__default["default"](range__default["default"](data), function (index) { return (React__default["default"].createElement(ListWithDetailMasterItem$1, { index: index, path: path, schema: schema, enabled: enabled, handleSelect: handleListItemClick, removeItem: handleRemoveItem, selected: selectedIndex === index, key: index, uischema: foundUISchema, childLabelProp: appliedUiSchemaOptions.elementLabelProp, translations: translations, disableRemove: doDisableRemove })); })) : (React__default["default"].createElement("p", null, translations.noDataMessage)))),
881
897
  React__default["default"].createElement(material.Grid, { item: true, xs: true }, selectedIndex !== undefined ? (React__default["default"].createElement(react.JsonFormsDispatch, { renderers: renderers, cells: cells, visible: visible, schema: schema, uischema: foundUISchema, path: core.composePaths(path, "".concat(selectedIndex)) })) : (React__default["default"].createElement(material.Typography, { variant: 'h6' }, translations.noSelection))))));
882
898
  };
883
899
  var materialListWithDetailTester = core.rankWith(4, core.and(core.uiTypeIs('ListWithDetail'), core.isObjectArray));
@@ -1337,7 +1353,7 @@ var ExpandPanelRendererComponent = function (props) {
1337
1353
  core.removeId(labelHtmlId);
1338
1354
  };
1339
1355
  }, [labelHtmlId]);
1340
- var enabled = props.enabled, childLabel = props.childLabel, childPath = props.childPath, index = props.index, expanded = props.expanded, moveDown = props.moveDown, moveUp = props.moveUp, enableMoveDown = props.enableMoveDown, enableMoveUp = props.enableMoveUp, handleExpansion = props.handleExpansion, removeItems = props.removeItems, path = props.path, rootSchema = props.rootSchema, schema = props.schema, uischema = props.uischema, uischemas = props.uischemas, renderers = props.renderers, cells = props.cells, config = props.config, translations = props.translations;
1356
+ var enabled = props.enabled, childLabel = props.childLabel, childPath = props.childPath, index = props.index, expanded = props.expanded, moveDown = props.moveDown, moveUp = props.moveUp, enableMoveDown = props.enableMoveDown, enableMoveUp = props.enableMoveUp, handleExpansion = props.handleExpansion, removeItems = props.removeItems, path = props.path, rootSchema = props.rootSchema, schema = props.schema, uischema = props.uischema, uischemas = props.uischemas, renderers = props.renderers, cells = props.cells, config = props.config, translations = props.translations, disableRemove = props.disableRemove;
1341
1357
  var foundUISchema = React.useMemo(function () {
1342
1358
  return core.findUISchema(uischemas, schema, uischema.scope, path, undefined, uischema, rootSchema);
1343
1359
  }, [uischemas, schema, uischema.scope, path, uischema, rootSchema]);
@@ -1345,7 +1361,7 @@ var ExpandPanelRendererComponent = function (props) {
1345
1361
  var showSortButtons = appliedUiSchemaOptions.showSortButtons ||
1346
1362
  appliedUiSchemaOptions.showArrayLayoutSortButtons;
1347
1363
  return (React__default["default"].createElement(material.Accordion, { "aria-labelledby": labelHtmlId, expanded: expanded, onChange: handleExpansion(childPath) },
1348
- React__default["default"].createElement(material.AccordionSummary, { expandIcon: React__default["default"].createElement(iconsMaterial.ExpandMore, null) },
1364
+ React__default["default"].createElement(material.AccordionSummary, { expandIcon: React__default["default"].createElement(ExpandMoreIcon__default["default"], null) },
1349
1365
  React__default["default"].createElement(material.Grid, { container: true, alignItems: 'center' },
1350
1366
  React__default["default"].createElement(material.Grid, { item: true, xs: 7, md: 9 },
1351
1367
  React__default["default"].createElement(material.Grid, { container: true, alignItems: 'center' },
@@ -1361,15 +1377,15 @@ var ExpandPanelRendererComponent = function (props) {
1361
1377
  React__default["default"].createElement(material.Grid, { item: true },
1362
1378
  React__default["default"].createElement(material.Tooltip, { id: 'tooltip-up', title: translations.up, placement: 'bottom', open: enableMoveUp ? undefined : false },
1363
1379
  React__default["default"].createElement(material.IconButton, { onClick: moveUp(path, index), style: iconStyle, disabled: !enableMoveUp, "aria-label": translations.upAriaLabel, size: 'large' },
1364
- React__default["default"].createElement(iconsMaterial.ArrowUpward, null)))),
1380
+ React__default["default"].createElement(ArrowUpward__default["default"], null)))),
1365
1381
  React__default["default"].createElement(material.Grid, { item: true },
1366
1382
  React__default["default"].createElement(material.Tooltip, { id: 'tooltip-down', title: translations.down, placement: 'bottom', open: enableMoveDown ? undefined : false },
1367
1383
  React__default["default"].createElement(material.IconButton, { onClick: moveDown(path, index), style: iconStyle, disabled: !enableMoveDown, "aria-label": translations.downAriaLabel, size: 'large' },
1368
- React__default["default"].createElement(iconsMaterial.ArrowDownward, null)))))) : (''),
1369
- enabled && (React__default["default"].createElement(material.Grid, { item: true },
1384
+ React__default["default"].createElement(ArrowDownward__default["default"], null)))))) : (''),
1385
+ enabled && !disableRemove && (React__default["default"].createElement(material.Grid, { item: true },
1370
1386
  React__default["default"].createElement(material.Tooltip, { id: 'tooltip-remove', title: translations.removeTooltip, placement: 'bottom' },
1371
1387
  React__default["default"].createElement(material.IconButton, { onClick: removeItems(path, [index]), style: iconStyle, "aria-label": translations.removeAriaLabel, size: 'large' },
1372
- React__default["default"].createElement(iconsMaterial.Delete, null))))))))))),
1388
+ React__default["default"].createElement(DeleteIcon__default["default"], null))))))))))),
1373
1389
  React__default["default"].createElement(material.AccordionDetails, null,
1374
1390
  React__default["default"].createElement(react.JsonFormsDispatch, { enabled: enabled, schema: schema, uischema: foundUISchema, path: childPath, key: childPath, renderers: renderers, cells: cells }))));
1375
1391
  };
@@ -1384,7 +1400,7 @@ var ctxDispatchToExpandPanelProps = function (dispatch) { return ({
1384
1400
  .reverse()
1385
1401
  .forEach(function (s) { return array.splice(s, 1); });
1386
1402
  return array;
1387
- }));
1403
+ }, { type: 'REMOVE', indices: toDelete }));
1388
1404
  };
1389
1405
  }, [dispatch]),
1390
1406
  moveUp: React.useCallback(function (path, toMove) {
@@ -1393,6 +1409,9 @@ var ctxDispatchToExpandPanelProps = function (dispatch) { return ({
1393
1409
  dispatch(core.update(path, function (array) {
1394
1410
  core.moveUp(array, toMove);
1395
1411
  return array;
1412
+ }, {
1413
+ type: 'MOVE',
1414
+ moves: [{ from: toMove, to: toMove - 1 }],
1396
1415
  }));
1397
1416
  };
1398
1417
  }, [dispatch]),
@@ -1402,6 +1421,9 @@ var ctxDispatchToExpandPanelProps = function (dispatch) { return ({
1402
1421
  dispatch(core.update(path, function (array) {
1403
1422
  core.moveDown(array, toMove);
1404
1423
  return array;
1424
+ }, {
1425
+ type: 'MOVE',
1426
+ moves: [{ from: toMove, to: toMove + 1 }],
1405
1427
  }));
1406
1428
  };
1407
1429
  }, [dispatch]),
@@ -1551,12 +1573,14 @@ var MaterialArrayLayoutComponent = function (props) {
1551
1573
  var isExpanded = function (index) {
1552
1574
  return expanded === core.composePaths(props.path, "".concat(index));
1553
1575
  };
1554
- var enabled = props.enabled, data = props.data, path = props.path, schema = props.schema, uischema = props.uischema, errors = props.errors, addItem = props.addItem, renderers = props.renderers, cells = props.cells, label = props.label, required = props.required, rootSchema = props.rootSchema, config = props.config, uischemas = props.uischemas, translations = props.translations, description = props.description;
1576
+ var enabled = props.enabled, data = props.data, path = props.path, schema = props.schema, uischema = props.uischema, errors = props.errors, addItem = props.addItem, renderers = props.renderers, cells = props.cells, label = props.label, required = props.required, rootSchema = props.rootSchema, config = props.config, uischemas = props.uischemas, translations = props.translations, description = props.description, disableAdd = props.disableAdd, disableRemove = props.disableRemove;
1555
1577
  var appliedUiSchemaOptions = merge__default["default"]({}, config, props.uischema.options);
1578
+ var doDisableAdd = disableAdd || appliedUiSchemaOptions.disableAdd;
1579
+ var doDisableRemove = disableRemove || appliedUiSchemaOptions.disableRemove;
1556
1580
  return (React__default["default"].createElement("div", null,
1557
- React__default["default"].createElement(ArrayLayoutToolbar, { translations: translations, label: core.computeLabel(label, required, appliedUiSchemaOptions.hideRequiredAsterisk), description: description, errors: errors, path: path, enabled: enabled, addItem: addItem, createDefault: innerCreateDefaultValue }),
1581
+ React__default["default"].createElement(ArrayLayoutToolbar, { translations: translations, label: core.computeLabel(label, required, appliedUiSchemaOptions.hideRequiredAsterisk), description: description, errors: errors, path: path, enabled: enabled, addItem: addItem, createDefault: innerCreateDefaultValue, disableAdd: doDisableAdd }),
1558
1582
  React__default["default"].createElement("div", null, data > 0 ? (map__default["default"](range__default["default"](data), function (index) {
1559
- return (React__default["default"].createElement(ExpandPanelRenderer$1, { enabled: enabled, index: index, expanded: isExpanded(index), schema: schema, path: path, handleExpansion: handleChange, uischema: uischema, renderers: renderers, cells: cells, key: index, rootSchema: rootSchema, enableMoveUp: index != 0, enableMoveDown: index < data - 1, config: config, childLabelProp: appliedUiSchemaOptions.elementLabelProp, uischemas: uischemas, translations: translations }));
1583
+ return (React__default["default"].createElement(ExpandPanelRenderer$1, { enabled: enabled, index: index, expanded: isExpanded(index), schema: schema, path: path, handleExpansion: handleChange, uischema: uischema, renderers: renderers, cells: cells, key: index, rootSchema: rootSchema, enableMoveUp: index != 0, enableMoveDown: index < data - 1, config: config, childLabelProp: appliedUiSchemaOptions.elementLabelProp, uischemas: uischemas, translations: translations, disableRemove: doDisableRemove }));
1560
1584
  })) : (React__default["default"].createElement("p", null, translations.noDataMessage)))));
1561
1585
  };
1562
1586
  var MaterialArrayLayout$1 = React__default["default"].memo(MaterialArrayLayoutComponent);