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

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
  };
@@ -210,7 +210,7 @@ var fixedCellSmall = {
210
210
  paddingRight: 0,
211
211
  };
212
212
  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;
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, disableAdd = _a.disableAdd;
214
214
  return (React__default["default"].createElement(material.TableRow, null,
215
215
  React__default["default"].createElement(NoBorderTableCell, { colSpan: numColumns },
216
216
  React__default["default"].createElement(material.Stack, null,
@@ -220,7 +220,7 @@ var TableToolbar = React__default["default"].memo(function TableToolbar(_a) {
220
220
  React__default["default"].createElement(material.Grid, { item: true }, errors.length !== 0 && (React__default["default"].createElement(material.Grid, { item: true },
221
221
  React__default["default"].createElement(ValidationIcon, { id: 'tooltip-validation', errorMessages: errors }))))),
222
222
  description && React__default["default"].createElement(material.FormHelperText, null, description))),
223
- enabled ? (React__default["default"].createElement(NoBorderTableCell, { align: 'right', style: fixedCellSmall },
223
+ enabled && !disableAdd ? (React__default["default"].createElement(NoBorderTableCell, { align: 'right', style: fixedCellSmall },
224
224
  React__default["default"].createElement(material.Tooltip, { id: 'tooltip-add', title: translations.addTooltip, placement: 'bottom' },
225
225
  React__default["default"].createElement(material.IconButton, { "aria-label": translations.addAriaLabel, onClick: addItem(path, core.createDefaultValue(schema, rootSchema)), size: 'large' },
226
226
  React__default["default"].createElement(iconsMaterial.Add, null))))) : null));
@@ -320,7 +320,7 @@ var NonEmptyCell = function (ownProps) {
320
320
  return React__default["default"].createElement(NonEmptyCellComponent, __assign({}, emptyCellProps, { isValid: isValid }));
321
321
  };
322
322
  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;
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, disableRemove = _a.disableRemove;
324
324
  var moveUp = React.useMemo(function () { return moveUpCreator(path, rowIndex); }, [moveUpCreator, path, rowIndex]);
325
325
  var moveDown = React.useMemo(function () { return moveDownCreator(path, rowIndex); }, [moveDownCreator, path, rowIndex]);
326
326
  return (React__default["default"].createElement(material.TableRow, { key: childPath, hover: true },
@@ -336,14 +336,14 @@ var NonEmptyRowComponent = function (_a) {
336
336
  React__default["default"].createElement(material.Tooltip, { id: 'tooltip-down', title: translations.down, placement: 'bottom', open: enableDown ? undefined : false },
337
337
  React__default["default"].createElement(material.IconButton, { "aria-label": translations.downAriaLabel, onClick: moveDown, disabled: !enableDown, size: 'large' },
338
338
  React__default["default"].createElement(iconsMaterial.ArrowDownward, null)))))) : null,
339
- React__default["default"].createElement(material.Grid, { item: true },
339
+ !disableRemove ? (React__default["default"].createElement(material.Grid, { item: true },
340
340
  React__default["default"].createElement(material.Tooltip, { id: 'tooltip-remove', title: translations.removeTooltip, placement: 'bottom' },
341
341
  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));
342
+ React__default["default"].createElement(iconsMaterial.Delete, null))))) : null))) : null));
343
343
  };
344
344
  var NonEmptyRow = React__default["default"].memo(NonEmptyRowComponent);
345
345
  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;
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, disableRemove = _a.disableRemove;
347
347
  var isEmptyTable = data === 0;
348
348
  if (isEmptyTable) {
349
349
  return (React__default["default"].createElement(EmptyTable, { numColumns: getValidColumnProps(schema).length + 1, translations: translations }));
@@ -352,7 +352,7 @@ var TableRows = function (_a) {
352
352
  return (React__default["default"].createElement(React__default["default"].Fragment, null, range__default["default"](data).map(function (index) {
353
353
  var childPath = core.Paths.compose(path, "".concat(index));
354
354
  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 }));
355
+ appliedUiSchemaOptions.showArrayTableSortButtons, enabled: enabled, cells: cells, path: path, translations: translations, disableRemove: disableRemove }));
356
356
  })));
357
357
  };
358
358
  var MaterialTableControl = (function (_super) {
@@ -363,7 +363,10 @@ var MaterialTableControl = (function (_super) {
363
363
  return _this;
364
364
  }
365
365
  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;
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, disableAdd = _a.disableAdd, disableRemove = _a.disableRemove, config = _a.config;
367
+ var appliedUiSchemaOptions = merge__default["default"]({}, config, uischema.options);
368
+ var doDisableAdd = disableAdd || appliedUiSchemaOptions.disableAdd;
369
+ var doDisableRemove = disableRemove || appliedUiSchemaOptions.disableRemove;
367
370
  var controlElement = uischema;
368
371
  var isObjectSchema = schema.type === 'object';
369
372
  var headerCells = isObjectSchema
@@ -374,12 +377,12 @@ var MaterialTableControl = (function (_super) {
374
377
  }
375
378
  return (React__default["default"].createElement(material.Table, null,
376
379
  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 }),
380
+ 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
381
  isObjectSchema && (React__default["default"].createElement(material.TableRow, null,
379
382
  headerCells,
380
383
  enabled ? React__default["default"].createElement(material.TableCell, null) : null))),
381
384
  React__default["default"].createElement(material.TableBody, null,
382
- React__default["default"].createElement(TableRows, __assign({ openDeleteDialog: openDeleteDialog, translations: translations }, this.props)))));
385
+ React__default["default"].createElement(TableRows, __assign({ openDeleteDialog: openDeleteDialog, translations: translations }, this.props, { disableRemove: doDisableRemove })))));
383
386
  };
384
387
  return MaterialTableControl;
385
388
  }(React__default["default"].Component));
@@ -817,7 +820,7 @@ var MaterialLabelRenderer = function (_a) {
817
820
  var MaterialLabelRenderer$1 = react.withJsonFormsLabelProps(MaterialLabelRenderer);
818
821
 
819
822
  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;
823
+ 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
824
  return (React__default["default"].createElement(material.Toolbar, { disableGutters: true },
822
825
  React__default["default"].createElement(material.Stack, null,
823
826
  React__default["default"].createElement(material.Grid, { container: true, alignItems: 'center', justifyContent: 'space-between' },
@@ -827,7 +830,7 @@ var ArrayLayoutToolbar = React__default["default"].memo(function ArrayLayoutTool
827
830
  React__default["default"].createElement(material.Typography, { variant: 'h6' }, label)),
828
831
  React__default["default"].createElement(material.Grid, { item: true }, errors.length !== 0 && (React__default["default"].createElement(material.Grid, { item: true },
829
832
  React__default["default"].createElement(ValidationIcon, { id: 'tooltip-validation', errorMessages: errors })))))),
830
- enabled && (React__default["default"].createElement(material.Grid, { item: true },
833
+ enabled && !disableAdd && (React__default["default"].createElement(material.Grid, { item: true },
831
834
  React__default["default"].createElement(material.Grid, { container: true },
832
835
  React__default["default"].createElement(material.Grid, { item: true },
833
836
  React__default["default"].createElement(material.Tooltip, { id: 'tooltip-add', title: translations.addTooltip, placement: 'bottom' },
@@ -837,12 +840,12 @@ var ArrayLayoutToolbar = React__default["default"].memo(function ArrayLayoutTool
837
840
  });
838
841
 
839
842
  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;
843
+ 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
844
  return (React__default["default"].createElement(material.ListItem, { button: true, selected: selected, onClick: handleSelect(index) },
842
845
  React__default["default"].createElement(material.ListItemAvatar, null,
843
846
  React__default["default"].createElement(material.Avatar, { "aria-label": 'Index' }, index + 1)),
844
847
  React__default["default"].createElement(material.ListItemText, { primary: childLabel }),
845
- enabled && (React__default["default"].createElement(material.ListItemSecondaryAction, null,
848
+ enabled && !disableRemove && (React__default["default"].createElement(material.ListItemSecondaryAction, null,
846
849
  React__default["default"].createElement(material.Tooltip, { id: 'tooltip-remove', title: translations.removeTooltip, placement: 'bottom' },
847
850
  React__default["default"].createElement(material.IconButton, { "aria-label": translations.removeAriaLabel, onClick: removeItem(path, index), size: 'large' },
848
851
  React__default["default"].createElement(iconsMaterial.Delete, null)))))));
@@ -850,7 +853,7 @@ var ListWithDetailMasterItem = function (_a) {
850
853
  var ListWithDetailMasterItem$1 = react.withJsonFormsMasterListItemProps(ListWithDetailMasterItem);
851
854
 
852
855
  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;
856
+ 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
857
  var _b = React.useState(undefined), selectedIndex = _b[0], setSelectedIndex = _b[1];
855
858
  var handleRemoveItem = React.useCallback(function (p, value) { return function () {
856
859
  removeItems(p, [value])();
@@ -867,6 +870,8 @@ var MaterialListWithDetailRenderer = function (_a) {
867
870
  return core.findUISchema(uischemas, schema, uischema.scope, path, undefined, uischema, rootSchema);
868
871
  }, [uischemas, schema, uischema.scope, path, uischema, rootSchema]);
869
872
  var appliedUiSchemaOptions = merge__default["default"]({}, config, uischema.options);
873
+ var doDisableAdd = disableAdd || appliedUiSchemaOptions.disableAdd;
874
+ var doDisableRemove = disableRemove || appliedUiSchemaOptions.disableRemove;
870
875
  React__default["default"].useEffect(function () {
871
876
  setSelectedIndex(undefined);
872
877
  }, [schema]);
@@ -874,10 +879,10 @@ var MaterialListWithDetailRenderer = function (_a) {
874
879
  return null;
875
880
  }
876
881
  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 }),
882
+ 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
883
  React__default["default"].createElement(material.Grid, { container: true, direction: 'row', spacing: 2 },
879
884
  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)))),
885
+ 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
886
  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
887
  };
883
888
  var materialListWithDetailTester = core.rankWith(4, core.and(core.uiTypeIs('ListWithDetail'), core.isObjectArray));
@@ -1337,7 +1342,7 @@ var ExpandPanelRendererComponent = function (props) {
1337
1342
  core.removeId(labelHtmlId);
1338
1343
  };
1339
1344
  }, [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;
1345
+ 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
1346
  var foundUISchema = React.useMemo(function () {
1342
1347
  return core.findUISchema(uischemas, schema, uischema.scope, path, undefined, uischema, rootSchema);
1343
1348
  }, [uischemas, schema, uischema.scope, path, uischema, rootSchema]);
@@ -1366,7 +1371,7 @@ var ExpandPanelRendererComponent = function (props) {
1366
1371
  React__default["default"].createElement(material.Tooltip, { id: 'tooltip-down', title: translations.down, placement: 'bottom', open: enableMoveDown ? undefined : false },
1367
1372
  React__default["default"].createElement(material.IconButton, { onClick: moveDown(path, index), style: iconStyle, disabled: !enableMoveDown, "aria-label": translations.downAriaLabel, size: 'large' },
1368
1373
  React__default["default"].createElement(iconsMaterial.ArrowDownward, null)))))) : (''),
1369
- enabled && (React__default["default"].createElement(material.Grid, { item: true },
1374
+ enabled && !disableRemove && (React__default["default"].createElement(material.Grid, { item: true },
1370
1375
  React__default["default"].createElement(material.Tooltip, { id: 'tooltip-remove', title: translations.removeTooltip, placement: 'bottom' },
1371
1376
  React__default["default"].createElement(material.IconButton, { onClick: removeItems(path, [index]), style: iconStyle, "aria-label": translations.removeAriaLabel, size: 'large' },
1372
1377
  React__default["default"].createElement(iconsMaterial.Delete, null))))))))))),
@@ -1384,7 +1389,7 @@ var ctxDispatchToExpandPanelProps = function (dispatch) { return ({
1384
1389
  .reverse()
1385
1390
  .forEach(function (s) { return array.splice(s, 1); });
1386
1391
  return array;
1387
- }));
1392
+ }, { type: 'REMOVE', indices: toDelete }));
1388
1393
  };
1389
1394
  }, [dispatch]),
1390
1395
  moveUp: React.useCallback(function (path, toMove) {
@@ -1393,6 +1398,9 @@ var ctxDispatchToExpandPanelProps = function (dispatch) { return ({
1393
1398
  dispatch(core.update(path, function (array) {
1394
1399
  core.moveUp(array, toMove);
1395
1400
  return array;
1401
+ }, {
1402
+ type: 'MOVE',
1403
+ moves: [{ from: toMove, to: toMove - 1 }],
1396
1404
  }));
1397
1405
  };
1398
1406
  }, [dispatch]),
@@ -1402,6 +1410,9 @@ var ctxDispatchToExpandPanelProps = function (dispatch) { return ({
1402
1410
  dispatch(core.update(path, function (array) {
1403
1411
  core.moveDown(array, toMove);
1404
1412
  return array;
1413
+ }, {
1414
+ type: 'MOVE',
1415
+ moves: [{ from: toMove, to: toMove + 1 }],
1405
1416
  }));
1406
1417
  };
1407
1418
  }, [dispatch]),
@@ -1551,12 +1562,14 @@ var MaterialArrayLayoutComponent = function (props) {
1551
1562
  var isExpanded = function (index) {
1552
1563
  return expanded === core.composePaths(props.path, "".concat(index));
1553
1564
  };
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;
1565
+ 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
1566
  var appliedUiSchemaOptions = merge__default["default"]({}, config, props.uischema.options);
1567
+ var doDisableAdd = disableAdd || appliedUiSchemaOptions.disableAdd;
1568
+ var doDisableRemove = disableRemove || appliedUiSchemaOptions.disableRemove;
1556
1569
  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 }),
1570
+ 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
1571
  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 }));
1572
+ 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
1573
  })) : (React__default["default"].createElement("p", null, translations.noDataMessage)))));
1561
1574
  };
1562
1575
  var MaterialArrayLayout$1 = React__default["default"].memo(MaterialArrayLayoutComponent);