@rjsf/mui 5.0.0-beta.1 → 5.0.0-beta.11

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.
Files changed (60) hide show
  1. package/README.md +6 -4
  2. package/dist/index.d.ts +60 -6
  3. package/dist/mui.cjs.development.js +189 -108
  4. package/dist/mui.cjs.development.js.map +1 -1
  5. package/dist/mui.cjs.production.min.js +1 -1
  6. package/dist/mui.cjs.production.min.js.map +1 -1
  7. package/dist/mui.esm.js +187 -106
  8. package/dist/mui.esm.js.map +1 -1
  9. package/dist/mui.umd.development.js +190 -109
  10. package/dist/mui.umd.development.js.map +1 -1
  11. package/dist/mui.umd.production.min.js +1 -1
  12. package/dist/mui.umd.production.min.js.map +1 -1
  13. package/package.json +11 -7
  14. package/dist/AddButton/AddButton.d.ts +0 -4
  15. package/dist/AddButton/index.d.ts +0 -2
  16. package/dist/ArrayFieldItemTemplate/ArrayFieldItemTemplate.d.ts +0 -3
  17. package/dist/ArrayFieldItemTemplate/index.d.ts +0 -2
  18. package/dist/ArrayFieldTemplate/ArrayFieldTemplate.d.ts +0 -3
  19. package/dist/ArrayFieldTemplate/index.d.ts +0 -2
  20. package/dist/BaseInputTemplate/BaseInputTemplate.d.ts +0 -3
  21. package/dist/BaseInputTemplate/index.d.ts +0 -2
  22. package/dist/CheckboxWidget/CheckboxWidget.d.ts +0 -3
  23. package/dist/CheckboxWidget/index.d.ts +0 -2
  24. package/dist/CheckboxesWidget/CheckboxesWidget.d.ts +0 -3
  25. package/dist/CheckboxesWidget/index.d.ts +0 -2
  26. package/dist/DateTimeWidget/DateTimeWidget.d.ts +0 -3
  27. package/dist/DateTimeWidget/index.d.ts +0 -2
  28. package/dist/DateWidget/DateWidget.d.ts +0 -3
  29. package/dist/DateWidget/index.d.ts +0 -2
  30. package/dist/DescriptionField/DescriptionField.d.ts +0 -3
  31. package/dist/DescriptionField/index.d.ts +0 -2
  32. package/dist/ErrorList/ErrorList.d.ts +0 -3
  33. package/dist/ErrorList/index.d.ts +0 -2
  34. package/dist/FieldTemplate/FieldTemplate.d.ts +0 -3
  35. package/dist/FieldTemplate/WrapIfAdditional.d.ts +0 -7
  36. package/dist/FieldTemplate/index.d.ts +0 -2
  37. package/dist/IconButton/IconButton.d.ts +0 -5
  38. package/dist/IconButton/index.d.ts +0 -2
  39. package/dist/MuiForm/MuiForm.d.ts +0 -4
  40. package/dist/MuiForm/index.d.ts +0 -2
  41. package/dist/ObjectFieldTemplate/ObjectFieldTemplate.d.ts +0 -3
  42. package/dist/ObjectFieldTemplate/index.d.ts +0 -2
  43. package/dist/RadioWidget/RadioWidget.d.ts +0 -3
  44. package/dist/RadioWidget/index.d.ts +0 -2
  45. package/dist/RangeWidget/RangeWidget.d.ts +0 -3
  46. package/dist/RangeWidget/index.d.ts +0 -2
  47. package/dist/SelectWidget/SelectWidget.d.ts +0 -3
  48. package/dist/SelectWidget/index.d.ts +0 -2
  49. package/dist/SubmitButton/SubmitButton.d.ts +0 -4
  50. package/dist/SubmitButton/index.d.ts +0 -2
  51. package/dist/Templates/Templates.d.ts +0 -20
  52. package/dist/Templates/index.d.ts +0 -2
  53. package/dist/TextareaWidget/TextareaWidget.d.ts +0 -3
  54. package/dist/TextareaWidget/index.d.ts +0 -2
  55. package/dist/Theme/Theme.d.ts +0 -3
  56. package/dist/Theme/index.d.ts +0 -2
  57. package/dist/TitleField/TitleField.d.ts +0 -3
  58. package/dist/TitleField/index.d.ts +0 -2
  59. package/dist/Widgets/Widgets.d.ts +0 -11
  60. package/dist/Widgets/index.d.ts +0 -2
package/README.md CHANGED
@@ -8,10 +8,10 @@
8
8
  <br />
9
9
  <p align="center">
10
10
  <a href="https://github.com/rjsf-team/react-jsonschema-form">
11
- <img src="https://raw.githubusercontent.com/rjsf-team/react-jsonschema-form/59a8206e148474bea854bbb004f624143fbcbac8/packages/material-ui/logo.png" alt="Logo" width="120" height="120">
11
+ <img src="https://raw.githubusercontent.com/rjsf-team/react-jsonschema-form/7ebc86621d8df8c21f0c39bcca6d476f6f7a2051/packages/mui/logo.png" alt="Logo" width="120" height="120">
12
12
  </a>
13
13
 
14
- <h3 align="center">@rjsf/material-ui</h3>
14
+ <h3 align="center">@rjsf/mui</h3>
15
15
 
16
16
  <p align="center">
17
17
  Material UI 5 theme, fields and widgets for <a href="https://github.com/rjsf-team/react-jsonschema-form/"><code>react-jsonschema-form</code></a>.
@@ -30,12 +30,14 @@
30
30
  <!-- TABLE OF CONTENTS -->
31
31
 
32
32
  ## Table of Contents
33
-
33
+ - [Table of Contents](#table-of-contents)
34
34
  - [About The Project](#about-the-project)
35
+ - [Built With](#built-with)
35
36
  - [Getting Started](#getting-started)
36
37
  - [Prerequisites](#prerequisites)
37
38
  - [Installation](#installation)
38
39
  - [Usage](#usage)
40
+ - [Material UI version 5](#material-ui-version-5)
39
41
  - [Roadmap](#roadmap)
40
42
  - [Contributing](#contributing)
41
43
  - [Contact](#contact)
@@ -44,7 +46,7 @@
44
46
 
45
47
  ## About The Project
46
48
 
47
- [![@rjsf/material-ui Screen Shot][product-screenshot]](https://rjsf-team.github.io/@rjsf/material-ui)
49
+ [![@rjsf/material-ui Screen Shot][product-screenshot]](https://rjsf-team.github.io/@rjsf/mui)
48
50
 
49
51
  Exports `material-ui` version 4 and 5 themes, fields and widgets for `react-jsonschema-form`.
50
52
 
package/dist/index.d.ts CHANGED
@@ -1,6 +1,60 @@
1
- import MuiForm from "./MuiForm/MuiForm";
2
- export { default as Form } from "./MuiForm";
3
- export { default as Templates } from "./Templates";
4
- export { default as Theme } from "./Theme";
5
- export { default as Widgets } from "./Widgets";
6
- export default MuiForm;
1
+ /// <reference types="react" />
2
+ import * as react from 'react';
3
+ import { ComponentType } from 'react';
4
+ import { FormProps, ThemeProps } from '@rjsf/core';
5
+ import * as _rjsf_utils from '@rjsf/utils';
6
+ import { IconButtonProps, FieldErrorProps, FieldHelpProps } from '@rjsf/utils';
7
+
8
+ declare const MuiForm: ComponentType<FormProps>;
9
+
10
+ declare function MoveDownButton(props: IconButtonProps): JSX.Element;
11
+ declare function MoveUpButton(props: IconButtonProps): JSX.Element;
12
+ declare function RemoveButton(props: IconButtonProps): JSX.Element;
13
+
14
+ /** The `FieldErrorTemplate` component renders the errors local to the particular field
15
+ *
16
+ * @param props - The `FieldErrorProps` for the errors being rendered
17
+ */
18
+ declare function FieldErrorTemplate(props: FieldErrorProps): JSX.Element | null;
19
+
20
+ /** The `FieldHelpTemplate` component renders any help desired for a field
21
+ *
22
+ * @param props - The `FieldHelpProps` to be rendered
23
+ */
24
+ declare function FieldHelpTemplate(props: FieldHelpProps): JSX.Element | null;
25
+
26
+ declare const _default$1: {
27
+ ArrayFieldItemTemplate: (props: _rjsf_utils.ArrayFieldTemplateItemType<any, any>) => JSX.Element;
28
+ ArrayFieldTemplate: (props: _rjsf_utils.ArrayFieldTemplateProps<any, any>) => JSX.Element;
29
+ BaseInputTemplate: ({ id, placeholder, required, readonly, disabled, type, label, value, onChange, onBlur, onFocus, autofocus, options, schema, uiSchema, rawErrors, formContext, registry, ...textFieldProps }: _rjsf_utils.WidgetProps<any, any>) => JSX.Element;
30
+ ButtonTemplates: {
31
+ AddButton: react.ComponentType<_rjsf_utils.IconButtonProps<any, any>>;
32
+ MoveDownButton: typeof MoveDownButton;
33
+ MoveUpButton: typeof MoveUpButton;
34
+ RemoveButton: typeof RemoveButton;
35
+ SubmitButton: react.ComponentType<_rjsf_utils.SubmitButtonProps<any, any>>;
36
+ };
37
+ DescriptionFieldTemplate: ({ description, id }: _rjsf_utils.DescriptionFieldProps<any, any>) => JSX.Element | null;
38
+ ErrorListTemplate: ({ errors }: _rjsf_utils.ErrorListProps<any, any>) => JSX.Element;
39
+ FieldErrorTemplate: typeof FieldErrorTemplate;
40
+ FieldHelpTemplate: typeof FieldHelpTemplate;
41
+ FieldTemplate: ({ id, children, classNames, disabled, displayLabel, hidden, label, onDropPropertyClick, onKeyChange, readonly, required, rawErrors, errors, help, rawDescription, schema, uiSchema, registry, }: _rjsf_utils.FieldTemplateProps<any, any>) => JSX.Element;
42
+ ObjectFieldTemplate: ({ description, title, properties, required, disabled, readonly, uiSchema, idSchema, schema, formData, onAddClick, registry, }: _rjsf_utils.ObjectFieldTemplateProps<any, any>) => JSX.Element;
43
+ TitleFieldTemplate: ({ id, title }: _rjsf_utils.TitleFieldProps<any, any>) => JSX.Element;
44
+ WrapIfAdditionalTemplate: ({ children, classNames, disabled, id, label, onDropPropertyClick, onKeyChange, readonly, required, schema, uiSchema, registry, }: _rjsf_utils.WrapIfAdditionalTemplateProps<any, any>) => JSX.Element;
45
+ };
46
+
47
+ declare const Theme: ThemeProps;
48
+
49
+ declare const _default: {
50
+ CheckboxWidget: (props: _rjsf_utils.WidgetProps<any, any>) => JSX.Element;
51
+ CheckboxesWidget: ({ schema, label, id, disabled, options, value, autofocus, readonly, required, onChange, onBlur, onFocus, }: _rjsf_utils.WidgetProps<any, any>) => JSX.Element;
52
+ DateWidget: (props: _rjsf_utils.WidgetProps<any, any>) => JSX.Element;
53
+ DateTimeWidget: (props: _rjsf_utils.WidgetProps<any, any>) => JSX.Element;
54
+ RadioWidget: ({ id, schema, options, value, required, disabled, readonly, label, onChange, onBlur, onFocus, }: _rjsf_utils.WidgetProps<any, any>) => JSX.Element;
55
+ RangeWidget: ({ value, readonly, disabled, onBlur, onFocus, options, schema, onChange, required, label, id, }: _rjsf_utils.WidgetProps<any, any>) => JSX.Element;
56
+ SelectWidget: ({ schema, id, options, label, required, disabled, readonly, value, multiple, autofocus, onChange, onBlur, onFocus, rawErrors, }: _rjsf_utils.WidgetProps<any, any>) => JSX.Element;
57
+ TextareaWidget: (props: _rjsf_utils.WidgetProps<any, any>) => JSX.Element;
58
+ };
59
+
60
+ export { MuiForm as Form, _default$1 as Templates, Theme, _default as Widgets, MuiForm as default };
@@ -20,12 +20,12 @@ var ListItemText = require('@mui/material/ListItemText');
20
20
  var ArrowDownwardIcon = require('@mui/icons-material/ArrowDownward');
21
21
  var ArrowUpwardIcon = require('@mui/icons-material/ArrowUpward');
22
22
  var RemoveIcon = require('@mui/icons-material/Remove');
23
- var FormControl = require('@mui/material/FormControl');
24
23
  var FormHelperText = require('@mui/material/FormHelperText');
25
- var InputLabel = require('@mui/material/InputLabel');
26
- var Input = require('@mui/material/OutlinedInput');
24
+ var FormControl = require('@mui/material/FormControl');
27
25
  var Button = require('@mui/material/Button');
28
26
  var Divider = require('@mui/material/Divider');
27
+ var InputLabel = require('@mui/material/InputLabel');
28
+ var Input = require('@mui/material/OutlinedInput');
29
29
  var Checkbox = require('@mui/material/Checkbox');
30
30
  var FormControlLabel = require('@mui/material/FormControlLabel');
31
31
  var FormGroup = require('@mui/material/FormGroup');
@@ -53,12 +53,12 @@ var ListItemText__default = /*#__PURE__*/_interopDefaultLegacy(ListItemText);
53
53
  var ArrowDownwardIcon__default = /*#__PURE__*/_interopDefaultLegacy(ArrowDownwardIcon);
54
54
  var ArrowUpwardIcon__default = /*#__PURE__*/_interopDefaultLegacy(ArrowUpwardIcon);
55
55
  var RemoveIcon__default = /*#__PURE__*/_interopDefaultLegacy(RemoveIcon);
56
- var FormControl__default = /*#__PURE__*/_interopDefaultLegacy(FormControl);
57
56
  var FormHelperText__default = /*#__PURE__*/_interopDefaultLegacy(FormHelperText);
58
- var InputLabel__default = /*#__PURE__*/_interopDefaultLegacy(InputLabel);
59
- var Input__default = /*#__PURE__*/_interopDefaultLegacy(Input);
57
+ var FormControl__default = /*#__PURE__*/_interopDefaultLegacy(FormControl);
60
58
  var Button__default = /*#__PURE__*/_interopDefaultLegacy(Button);
61
59
  var Divider__default = /*#__PURE__*/_interopDefaultLegacy(Divider);
60
+ var InputLabel__default = /*#__PURE__*/_interopDefaultLegacy(InputLabel);
61
+ var Input__default = /*#__PURE__*/_interopDefaultLegacy(Input);
62
62
  var Checkbox__default = /*#__PURE__*/_interopDefaultLegacy(Checkbox);
63
63
  var FormControlLabel__default = /*#__PURE__*/_interopDefaultLegacy(FormControlLabel);
64
64
  var FormGroup__default = /*#__PURE__*/_interopDefaultLegacy(FormGroup);
@@ -68,7 +68,11 @@ var RadioGroup__default = /*#__PURE__*/_interopDefaultLegacy(RadioGroup);
68
68
  var Slider__default = /*#__PURE__*/_interopDefaultLegacy(Slider);
69
69
  var MenuItem__default = /*#__PURE__*/_interopDefaultLegacy(MenuItem);
70
70
 
71
- const AddButton = props => {
71
+ const AddButton = _ref => {
72
+ let {
73
+ uiSchema,
74
+ ...props
75
+ } = _ref;
72
76
  return /*#__PURE__*/React__default["default"].createElement(IconButton__default["default"], {
73
77
  title: "Add Item",
74
78
  ...props,
@@ -88,6 +92,7 @@ const ArrayFieldItemTemplate = props => {
88
92
  onDropIndexClick,
89
93
  onReorderClick,
90
94
  readonly,
95
+ uiSchema,
91
96
  registry
92
97
  } = props;
93
98
  const {
@@ -122,15 +127,18 @@ const ArrayFieldItemTemplate = props => {
122
127
  }, (hasMoveUp || hasMoveDown) && /*#__PURE__*/React__default["default"].createElement(MoveUpButton, {
123
128
  style: btnStyle,
124
129
  disabled: disabled || readonly || !hasMoveUp,
125
- onClick: onReorderClick(index, index - 1)
130
+ onClick: onReorderClick(index, index - 1),
131
+ uiSchema: uiSchema
126
132
  }), (hasMoveUp || hasMoveDown) && /*#__PURE__*/React__default["default"].createElement(MoveDownButton, {
127
133
  style: btnStyle,
128
134
  disabled: disabled || readonly || !hasMoveDown,
129
- onClick: onReorderClick(index, index + 1)
135
+ onClick: onReorderClick(index, index + 1),
136
+ uiSchema: uiSchema
130
137
  }), hasRemove && /*#__PURE__*/React__default["default"].createElement(RemoveButton, {
131
138
  style: btnStyle,
132
139
  disabled: disabled || readonly,
133
- onClick: onDropIndexClick(index)
140
+ onClick: onDropIndexClick(index),
141
+ uiSchema: uiSchema
134
142
  })));
135
143
  };
136
144
 
@@ -165,12 +173,14 @@ const ArrayFieldTemplate = props => {
165
173
  }, /*#__PURE__*/React__default["default"].createElement(ArrayFieldTitleTemplate, {
166
174
  idSchema: idSchema,
167
175
  title: uiOptions.title || title,
176
+ schema: schema,
168
177
  uiSchema: uiSchema,
169
178
  required: required,
170
179
  registry: registry
171
- }), (uiOptions.description || schema.description) && /*#__PURE__*/React__default["default"].createElement(ArrayFieldDescriptionTemplate, {
180
+ }), /*#__PURE__*/React__default["default"].createElement(ArrayFieldDescriptionTemplate, {
172
181
  idSchema: idSchema,
173
182
  description: uiOptions.description || schema.description,
183
+ schema: schema,
174
184
  uiSchema: uiSchema,
175
185
  registry: registry
176
186
  }), /*#__PURE__*/React__default["default"].createElement(Grid__default["default"], {
@@ -195,7 +205,8 @@ const ArrayFieldTemplate = props => {
195
205
  }, /*#__PURE__*/React__default["default"].createElement(AddButton, {
196
206
  className: "array-item-add",
197
207
  onClick: onAddClick,
198
- disabled: disabled || readonly
208
+ disabled: disabled || readonly,
209
+ uiSchema: uiSchema
199
210
  })))))));
200
211
  };
201
212
 
@@ -233,7 +244,10 @@ const BaseInputTemplate = _ref => {
233
244
  inputProps: {
234
245
  step,
235
246
  min,
236
- max
247
+ max,
248
+ ...(schema.examples ? {
249
+ list: "examples_" + id
250
+ } : undefined)
237
251
  },
238
252
  ...rest
239
253
  };
@@ -269,8 +283,9 @@ const BaseInputTemplate = _ref => {
269
283
  schemaUtils
270
284
  } = registry;
271
285
  const displayLabel = schemaUtils.getDisplayLabel(schema, uiSchema);
272
- return /*#__PURE__*/React__default["default"].createElement(TextField__default["default"], {
286
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(TextField__default["default"], {
273
287
  id: id,
288
+ name: id,
274
289
  placeholder: placeholder,
275
290
  label: displayLabel ? label || schema.title : false,
276
291
  autoFocus: autofocus,
@@ -283,7 +298,14 @@ const BaseInputTemplate = _ref => {
283
298
  onBlur: _onBlur,
284
299
  onFocus: _onFocus,
285
300
  ...textFieldProps
286
- });
301
+ }), schema.examples && /*#__PURE__*/React__default["default"].createElement("datalist", {
302
+ id: "examples_" + id
303
+ }, schema.examples.concat(schema.default ? [schema.default] : []).map(example => {
304
+ return /*#__PURE__*/React__default["default"].createElement("option", {
305
+ key: example,
306
+ value: example
307
+ });
308
+ })));
287
309
  };
288
310
 
289
311
  const DescriptionField = _ref => {
@@ -333,6 +355,7 @@ function MuiIconButton(props) {
333
355
  const {
334
356
  icon,
335
357
  color,
358
+ uiSchema,
336
359
  ...otherProps
337
360
  } = props;
338
361
  return /*#__PURE__*/React__default["default"].createElement(IconButton__default["default"], { ...otherProps,
@@ -373,77 +396,55 @@ function RemoveButton(props) {
373
396
  });
374
397
  }
375
398
 
376
- const WrapIfAdditional = _ref => {
377
- let {
378
- children,
379
- classNames,
380
- disabled,
381
- id,
382
- label,
383
- onDropPropertyClick,
384
- onKeyChange,
385
- readonly,
386
- required,
387
- schema,
388
- registry
389
- } = _ref;
390
- const {
391
- RemoveButton
392
- } = registry.templates.ButtonTemplates;
393
- const keyLabel = label + " Key"; // i18n ?
399
+ /** The `FieldErrorTemplate` component renders the errors local to the particular field
400
+ *
401
+ * @param props - The `FieldErrorProps` for the errors being rendered
402
+ */
394
403
 
395
- const additional = (utils.ADDITIONAL_PROPERTY_FLAG in schema);
396
- const btnStyle = {
397
- flex: 1,
398
- paddingLeft: 6,
399
- paddingRight: 6,
400
- fontWeight: "bold"
401
- };
404
+ function FieldErrorTemplate(props) {
405
+ const {
406
+ errors = [],
407
+ idSchema
408
+ } = props;
402
409
 
403
- if (!additional) {
404
- return /*#__PURE__*/React__default["default"].createElement("div", {
405
- className: classNames
406
- }, children);
410
+ if (errors.length === 0) {
411
+ return null;
407
412
  }
408
413
 
409
- const handleBlur = _ref2 => {
410
- let {
411
- target
412
- } = _ref2;
413
- return onKeyChange(target.value);
414
- };
414
+ const id = idSchema.$id + "__error";
415
+ return /*#__PURE__*/React__default["default"].createElement(List__default["default"], {
416
+ dense: true,
417
+ disablePadding: true
418
+ }, errors.map((error, i) => {
419
+ return /*#__PURE__*/React__default["default"].createElement(ListItem__default["default"], {
420
+ key: i,
421
+ disableGutters: true
422
+ }, /*#__PURE__*/React__default["default"].createElement(FormHelperText__default["default"], {
423
+ id: id
424
+ }, error));
425
+ }));
426
+ }
415
427
 
416
- return /*#__PURE__*/React__default["default"].createElement(Grid__default["default"], {
417
- container: true,
418
- key: id + "-key",
419
- alignItems: "center",
420
- spacing: 2,
421
- className: classNames
422
- }, /*#__PURE__*/React__default["default"].createElement(Grid__default["default"], {
423
- item: true,
424
- xs: true
425
- }, /*#__PURE__*/React__default["default"].createElement(FormControl__default["default"], {
426
- fullWidth: true,
427
- required: required
428
- }, /*#__PURE__*/React__default["default"].createElement(InputLabel__default["default"], null, keyLabel), /*#__PURE__*/React__default["default"].createElement(Input__default["default"], {
429
- defaultValue: label,
430
- disabled: disabled || readonly,
431
- id: id + "-key",
432
- name: id + "-key",
433
- onBlur: !readonly ? handleBlur : undefined,
434
- type: "text"
435
- }))), /*#__PURE__*/React__default["default"].createElement(Grid__default["default"], {
436
- item: true,
437
- xs: true
438
- }, children), /*#__PURE__*/React__default["default"].createElement(Grid__default["default"], {
439
- item: true
440
- }, /*#__PURE__*/React__default["default"].createElement(RemoveButton, {
441
- iconType: "default",
442
- style: btnStyle,
443
- disabled: disabled || readonly,
444
- onClick: onDropPropertyClick(label)
445
- })));
446
- };
428
+ /** The `FieldHelpTemplate` component renders any help desired for a field
429
+ *
430
+ * @param props - The `FieldHelpProps` to be rendered
431
+ */
432
+
433
+ function FieldHelpTemplate(props) {
434
+ const {
435
+ idSchema,
436
+ help
437
+ } = props;
438
+
439
+ if (!help) {
440
+ return null;
441
+ }
442
+
443
+ const id = idSchema.$id + "__help";
444
+ return /*#__PURE__*/React__default["default"].createElement(FormHelperText__default["default"], {
445
+ id: id
446
+ }, help);
447
+ }
447
448
 
448
449
  const FieldTemplate = _ref => {
449
450
  let {
@@ -459,11 +460,15 @@ const FieldTemplate = _ref => {
459
460
  readonly,
460
461
  required,
461
462
  rawErrors = [],
462
- rawHelp,
463
+ errors,
464
+ help,
463
465
  rawDescription,
464
466
  schema,
467
+ uiSchema,
465
468
  registry
466
469
  } = _ref;
470
+ const uiOptions = utils.getUiOptions(uiSchema);
471
+ const WrapIfAdditionalTemplate = utils.getTemplate("WrapIfAdditionalTemplate", registry, uiOptions);
467
472
 
468
473
  if (hidden) {
469
474
  return /*#__PURE__*/React__default["default"].createElement("div", {
@@ -473,7 +478,7 @@ const FieldTemplate = _ref => {
473
478
  }, children);
474
479
  }
475
480
 
476
- return /*#__PURE__*/React__default["default"].createElement(WrapIfAdditional, {
481
+ return /*#__PURE__*/React__default["default"].createElement(WrapIfAdditionalTemplate, {
477
482
  classNames: classNames,
478
483
  disabled: disabled,
479
484
  id: id,
@@ -483,6 +488,7 @@ const FieldTemplate = _ref => {
483
488
  readonly: readonly,
484
489
  required: required,
485
490
  schema: schema,
491
+ uiSchema: uiSchema,
486
492
  registry: registry
487
493
  }, /*#__PURE__*/React__default["default"].createElement(FormControl__default["default"], {
488
494
  fullWidth: true,
@@ -491,19 +497,7 @@ const FieldTemplate = _ref => {
491
497
  }, children, displayLabel && rawDescription ? /*#__PURE__*/React__default["default"].createElement(Typography__default["default"], {
492
498
  variant: "caption",
493
499
  color: "textSecondary"
494
- }, rawDescription) : null, rawErrors.length > 0 && /*#__PURE__*/React__default["default"].createElement(List__default["default"], {
495
- dense: true,
496
- disablePadding: true
497
- }, rawErrors.map((error, i) => {
498
- return /*#__PURE__*/React__default["default"].createElement(ListItem__default["default"], {
499
- key: i,
500
- disableGutters: true
501
- }, /*#__PURE__*/React__default["default"].createElement(FormHelperText__default["default"], {
502
- id: id
503
- }, error));
504
- })), rawHelp && /*#__PURE__*/React__default["default"].createElement(FormHelperText__default["default"], {
505
- id: id
506
- }, rawHelp)));
500
+ }, rawDescription) : null, errors, help));
507
501
  };
508
502
 
509
503
  const ObjectFieldTemplate = _ref => {
@@ -534,11 +528,14 @@ const ObjectFieldTemplate = _ref => {
534
528
  id: idSchema.$id + "-title",
535
529
  title: title,
536
530
  required: required,
531
+ schema: schema,
537
532
  uiSchema: uiSchema,
538
533
  registry: registry
539
534
  }), (uiOptions.description || description) && /*#__PURE__*/React__default["default"].createElement(DescriptionFieldTemplate, {
540
535
  id: idSchema.$id + "-description",
541
536
  description: uiOptions.description || description,
537
+ schema: schema,
538
+ uiSchema: uiSchema,
542
539
  registry: registry
543
540
  }), /*#__PURE__*/React__default["default"].createElement(Grid__default["default"], {
544
541
  container: true,
@@ -563,7 +560,8 @@ const ObjectFieldTemplate = _ref => {
563
560
  }, /*#__PURE__*/React__default["default"].createElement(AddButton, {
564
561
  className: "object-property-expand",
565
562
  onClick: onAddClick(schema),
566
- disabled: disabled || readonly
563
+ disabled: disabled || readonly,
564
+ uiSchema: uiSchema
567
565
  })))));
568
566
  };
569
567
 
@@ -602,6 +600,81 @@ const TitleField = _ref => {
602
600
  }, title), /*#__PURE__*/React__default["default"].createElement(Divider__default["default"], null));
603
601
  };
604
602
 
603
+ const WrapIfAdditionalTemplate = _ref => {
604
+ let {
605
+ children,
606
+ classNames,
607
+ disabled,
608
+ id,
609
+ label,
610
+ onDropPropertyClick,
611
+ onKeyChange,
612
+ readonly,
613
+ required,
614
+ schema,
615
+ uiSchema,
616
+ registry
617
+ } = _ref;
618
+ // Button templates are not overridden in the uiSchema
619
+ const {
620
+ RemoveButton
621
+ } = registry.templates.ButtonTemplates;
622
+ const keyLabel = label + " Key"; // i18n ?
623
+
624
+ const additional = (utils.ADDITIONAL_PROPERTY_FLAG in schema);
625
+ const btnStyle = {
626
+ flex: 1,
627
+ paddingLeft: 6,
628
+ paddingRight: 6,
629
+ fontWeight: "bold"
630
+ };
631
+
632
+ if (!additional) {
633
+ return /*#__PURE__*/React__default["default"].createElement("div", {
634
+ className: classNames
635
+ }, children);
636
+ }
637
+
638
+ const handleBlur = _ref2 => {
639
+ let {
640
+ target
641
+ } = _ref2;
642
+ return onKeyChange(target.value);
643
+ };
644
+
645
+ return /*#__PURE__*/React__default["default"].createElement(Grid__default["default"], {
646
+ container: true,
647
+ key: id + "-key",
648
+ alignItems: "center",
649
+ spacing: 2,
650
+ className: classNames
651
+ }, /*#__PURE__*/React__default["default"].createElement(Grid__default["default"], {
652
+ item: true,
653
+ xs: true
654
+ }, /*#__PURE__*/React__default["default"].createElement(FormControl__default["default"], {
655
+ fullWidth: true,
656
+ required: required
657
+ }, /*#__PURE__*/React__default["default"].createElement(InputLabel__default["default"], null, keyLabel), /*#__PURE__*/React__default["default"].createElement(Input__default["default"], {
658
+ defaultValue: label,
659
+ disabled: disabled || readonly,
660
+ id: id + "-key",
661
+ name: id + "-key",
662
+ onBlur: !readonly ? handleBlur : undefined,
663
+ type: "text"
664
+ }))), /*#__PURE__*/React__default["default"].createElement(Grid__default["default"], {
665
+ item: true,
666
+ xs: true
667
+ }, children), /*#__PURE__*/React__default["default"].createElement(Grid__default["default"], {
668
+ item: true
669
+ }, /*#__PURE__*/React__default["default"].createElement(RemoveButton, {
670
+ iconType: "default",
671
+ style: btnStyle,
672
+ disabled: disabled || readonly,
673
+ onClick: onDropPropertyClick(label),
674
+ uiSchema: uiSchema
675
+ })));
676
+ };
677
+
605
678
  var Templates = {
606
679
  ArrayFieldItemTemplate,
607
680
  ArrayFieldTemplate,
@@ -615,9 +688,12 @@ var Templates = {
615
688
  },
616
689
  DescriptionFieldTemplate: DescriptionField,
617
690
  ErrorListTemplate: ErrorList,
691
+ FieldErrorTemplate,
692
+ FieldHelpTemplate,
618
693
  FieldTemplate,
619
694
  ObjectFieldTemplate,
620
- TitleFieldTemplate: TitleField
695
+ TitleFieldTemplate: TitleField,
696
+ WrapIfAdditionalTemplate
621
697
  };
622
698
 
623
699
  const CheckboxWidget = props => {
@@ -661,6 +737,7 @@ const CheckboxWidget = props => {
661
737
  return /*#__PURE__*/React__default["default"].createElement(FormControlLabel__default["default"], {
662
738
  control: /*#__PURE__*/React__default["default"].createElement(Checkbox__default["default"], {
663
739
  id: id,
740
+ name: id,
664
741
  checked: typeof value === "undefined" ? false : Boolean(value),
665
742
  required: required,
666
743
  disabled: disabled || readonly,
@@ -750,11 +827,12 @@ const CheckboxesWidget = _ref => {
750
827
  }, label || schema.title), /*#__PURE__*/React__default["default"].createElement(FormGroup__default["default"], {
751
828
  id: id,
752
829
  row: !!inline
753
- }, enumOptions.map((option, index) => {
830
+ }, Array.isArray(enumOptions) && enumOptions.map((option, index) => {
754
831
  const checked = value.indexOf(option.value) !== -1;
755
- const itemDisabled = enumDisabled && enumDisabled.indexOf(option.value) != -1;
832
+ const itemDisabled = Array.isArray(enumDisabled) && enumDisabled.indexOf(option.value) !== -1;
756
833
  const checkbox = /*#__PURE__*/React__default["default"].createElement(Checkbox__default["default"], {
757
- id: id + "_" + index,
834
+ id: id + "-" + option.value,
835
+ name: id,
758
836
  checked: checked,
759
837
  disabled: disabled || itemDisabled || readonly,
760
838
  autoFocus: autofocus && index === 0,
@@ -764,7 +842,7 @@ const CheckboxesWidget = _ref => {
764
842
  });
765
843
  return /*#__PURE__*/React__default["default"].createElement(FormControlLabel__default["default"], {
766
844
  control: checkbox,
767
- key: index,
845
+ key: option.value,
768
846
  label: option.label
769
847
  });
770
848
  })));
@@ -853,22 +931,23 @@ const RadioWidget = _ref => {
853
931
  htmlFor: id
854
932
  }, label || schema.title), /*#__PURE__*/React__default["default"].createElement(RadioGroup__default["default"], {
855
933
  id: id,
934
+ name: id,
856
935
  value: "" + value,
857
936
  row: row,
858
937
  onChange: _onChange,
859
938
  onBlur: _onBlur,
860
939
  onFocus: _onFocus
861
- }, enumOptions.map((option, i) => {
862
- const itemDisabled = enumDisabled && enumDisabled.indexOf(option.value) != -1;
940
+ }, Array.isArray(enumOptions) && enumOptions.map(option => {
941
+ const itemDisabled = Array.isArray(enumDisabled) && enumDisabled.indexOf(option.value) !== -1;
863
942
  const radio = /*#__PURE__*/React__default["default"].createElement(FormControlLabel__default["default"], {
864
943
  control: /*#__PURE__*/React__default["default"].createElement(Radio__default["default"], {
865
- name: id + "-" + i,
866
- color: "primary",
867
- key: i
944
+ name: id,
945
+ id: id + "-" + option.value,
946
+ color: "primary"
868
947
  }),
869
948
  label: "" + option.label,
870
949
  value: "" + option.value,
871
- key: i,
950
+ key: option.value,
872
951
  disabled: disabled || itemDisabled || readonly
873
952
  });
874
953
  return radio;
@@ -893,6 +972,7 @@ const RangeWidget = _ref => {
893
972
  value,
894
973
  label,
895
974
  id,
975
+ name: id,
896
976
  ...utils.rangeSpec(schema)
897
977
  };
898
978
 
@@ -983,6 +1063,7 @@ const SelectWidget = _ref => {
983
1063
 
984
1064
  return /*#__PURE__*/React__default["default"].createElement(TextField__default["default"], {
985
1065
  id: id,
1066
+ name: id,
986
1067
  label: label || schema.title,
987
1068
  select: true,
988
1069
  value: typeof value === "undefined" ? emptyValue : value,