@jsonforms/material-renderers 3.0.0-alpha.1 → 3.0.0-alpha.2

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 (293) hide show
  1. package/docs/assets/js/search.json +1 -1
  2. package/docs/classes/combinatorproperties.html +2 -5
  3. package/docs/classes/materialanyofstringorenumcontrol.html +6 -9
  4. package/docs/classes/materialtablecontrol.html +4 -7
  5. package/docs/globals.html +803 -213
  6. package/docs/index.html +63 -42
  7. package/docs/interfaces/ajvprops.html +1 -4
  8. package/docs/interfaces/arraylayouttoolbarprops.html +0 -3
  9. package/docs/interfaces/categorizationstate.html +0 -3
  10. package/docs/interfaces/categorizationstepperstate.html +0 -3
  11. package/docs/interfaces/combinatorpropertiesprops.html +0 -3
  12. package/docs/interfaces/deletedialogprops.html +0 -3
  13. package/docs/interfaces/dispatchpropsofexpandpanel.html +3 -6
  14. package/docs/interfaces/emptytableprops.html +0 -3
  15. package/docs/interfaces/expandpanelprops.html +19 -22
  16. package/docs/interfaces/jsonformstheme.html +0 -3
  17. package/docs/interfaces/materialcategorizationlayoutrendererprops.html +1 -4
  18. package/docs/interfaces/materialcategorizationstepperlayoutrendererprops.html +1 -4
  19. package/docs/interfaces/materiallayoutrendererprops.html +0 -3
  20. package/docs/interfaces/materialtabletoolbarprops.html +0 -3
  21. package/docs/interfaces/muitextinputprops.html +2 -5
  22. package/docs/interfaces/nonemptycellcomponentprops.html +266 -0
  23. package/docs/interfaces/nonemptycellprops.html +0 -3
  24. package/docs/interfaces/nonemptyrowprops.html +80 -27
  25. package/docs/interfaces/ownoneofprops.html +0 -3
  26. package/docs/interfaces/ownpropsofexpandpanel.html +14 -17
  27. package/docs/interfaces/ownpropsofnonemptycell.html +0 -3
  28. package/docs/interfaces/statepropsofexpandpanel.html +16 -19
  29. package/docs/interfaces/tableheadercellprops.html +0 -3
  30. package/docs/interfaces/tablerowsprop.html +9 -12
  31. package/docs/interfaces/validationprops.html +0 -3
  32. package/docs/interfaces/withdeletedialogsupport.html +0 -3
  33. package/docs/interfaces/withinput.html +1 -4
  34. package/docs/interfaces/withoptionlabel.html +3 -6
  35. package/lib/additional/ListWithDetailMasterItem.d.ts +1 -1
  36. package/lib/additional/ListWithDetailMasterItem.js.map +1 -1
  37. package/lib/additional/MaterialLabelRenderer.d.ts +1 -1
  38. package/lib/additional/MaterialLabelRenderer.js +3 -1
  39. package/lib/additional/MaterialLabelRenderer.js.map +1 -1
  40. package/lib/additional/MaterialListWithDetailRenderer.d.ts +1 -1
  41. package/lib/additional/MaterialListWithDetailRenderer.js +3 -1
  42. package/lib/additional/MaterialListWithDetailRenderer.js.map +1 -1
  43. package/lib/additional/index.js +3 -2
  44. package/lib/additional/index.js.map +1 -1
  45. package/lib/cells/CustomizableCells.js +10 -9
  46. package/lib/cells/CustomizableCells.js.map +1 -1
  47. package/lib/cells/MaterialBooleanCell.d.ts +1 -1
  48. package/lib/cells/MaterialBooleanCell.js +3 -1
  49. package/lib/cells/MaterialBooleanCell.js.map +1 -1
  50. package/lib/cells/MaterialBooleanToggleCell.d.ts +1 -1
  51. package/lib/cells/MaterialBooleanToggleCell.js +3 -1
  52. package/lib/cells/MaterialBooleanToggleCell.js.map +1 -1
  53. package/lib/cells/MaterialDateCell.d.ts +1 -1
  54. package/lib/cells/MaterialDateCell.js +3 -1
  55. package/lib/cells/MaterialDateCell.js.map +1 -1
  56. package/lib/cells/MaterialEnumCell.d.ts +1 -1
  57. package/lib/cells/MaterialEnumCell.js +3 -1
  58. package/lib/cells/MaterialEnumCell.js.map +1 -1
  59. package/lib/cells/MaterialIntegerCell.d.ts +1 -1
  60. package/lib/cells/MaterialIntegerCell.js +3 -1
  61. package/lib/cells/MaterialIntegerCell.js.map +1 -1
  62. package/lib/cells/MaterialNumberCell.d.ts +1 -1
  63. package/lib/cells/MaterialNumberCell.js +3 -1
  64. package/lib/cells/MaterialNumberCell.js.map +1 -1
  65. package/lib/cells/MaterialNumberFormatCell.d.ts +1 -1
  66. package/lib/cells/MaterialNumberFormatCell.js +3 -1
  67. package/lib/cells/MaterialNumberFormatCell.js.map +1 -1
  68. package/lib/cells/MaterialOneOfEnumCell.d.ts +1 -1
  69. package/lib/cells/MaterialOneOfEnumCell.js +3 -1
  70. package/lib/cells/MaterialOneOfEnumCell.js.map +1 -1
  71. package/lib/cells/MaterialTextCell.d.ts +1 -1
  72. package/lib/cells/MaterialTextCell.js +3 -1
  73. package/lib/cells/MaterialTextCell.js.map +1 -1
  74. package/lib/cells/MaterialTimeCell.d.ts +1 -1
  75. package/lib/cells/MaterialTimeCell.js +3 -1
  76. package/lib/cells/MaterialTimeCell.js.map +1 -1
  77. package/lib/cells/index.js +11 -10
  78. package/lib/cells/index.js.map +1 -1
  79. package/lib/complex/CombinatorProperties.js +3 -1
  80. package/lib/complex/CombinatorProperties.js.map +1 -1
  81. package/lib/complex/DeleteDialog.js +1 -0
  82. package/lib/complex/DeleteDialog.js.map +1 -1
  83. package/lib/complex/MaterialAllOfRenderer.d.ts +3 -2
  84. package/lib/complex/MaterialAllOfRenderer.js +3 -1
  85. package/lib/complex/MaterialAllOfRenderer.js.map +1 -1
  86. package/lib/complex/MaterialAnyOfRenderer.d.ts +3 -2
  87. package/lib/complex/MaterialAnyOfRenderer.js +3 -1
  88. package/lib/complex/MaterialAnyOfRenderer.js.map +1 -1
  89. package/lib/complex/MaterialArrayControlRenderer.d.ts +1 -1
  90. package/lib/complex/MaterialArrayControlRenderer.js +3 -1
  91. package/lib/complex/MaterialArrayControlRenderer.js.map +1 -1
  92. package/lib/complex/MaterialEnumArrayRenderer.d.ts +2 -2
  93. package/lib/complex/MaterialEnumArrayRenderer.js +6 -3
  94. package/lib/complex/MaterialEnumArrayRenderer.js.map +1 -1
  95. package/lib/complex/MaterialObjectRenderer.d.ts +3 -2
  96. package/lib/complex/MaterialObjectRenderer.js +3 -1
  97. package/lib/complex/MaterialObjectRenderer.js.map +1 -1
  98. package/lib/complex/MaterialOneOfRenderer.d.ts +2 -1
  99. package/lib/complex/MaterialOneOfRenderer.js +5 -4
  100. package/lib/complex/MaterialOneOfRenderer.js.map +1 -1
  101. package/lib/complex/MaterialTableControl.d.ts +16 -1
  102. package/lib/complex/MaterialTableControl.js +16 -8
  103. package/lib/complex/MaterialTableControl.js.map +1 -1
  104. package/lib/complex/NoBorderTableCell.js.map +1 -1
  105. package/lib/complex/TableToolbar.js.map +1 -1
  106. package/lib/complex/ValidationIcon.d.ts +5 -3
  107. package/lib/complex/ValidationIcon.js.map +1 -1
  108. package/lib/complex/index.js +6 -5
  109. package/lib/complex/index.js.map +1 -1
  110. package/lib/controls/MaterialAnyOfStringOrEnumControl.d.ts +1 -1
  111. package/lib/controls/MaterialAnyOfStringOrEnumControl.js +17 -12
  112. package/lib/controls/MaterialAnyOfStringOrEnumControl.js.map +1 -1
  113. package/lib/controls/MaterialBooleanControl.d.ts +1 -1
  114. package/lib/controls/MaterialBooleanControl.js +3 -1
  115. package/lib/controls/MaterialBooleanControl.js.map +1 -1
  116. package/lib/controls/MaterialBooleanToggleControl.d.ts +1 -1
  117. package/lib/controls/MaterialBooleanToggleControl.js +3 -1
  118. package/lib/controls/MaterialBooleanToggleControl.js.map +1 -1
  119. package/lib/controls/MaterialDateControl.d.ts +3 -6
  120. package/lib/controls/MaterialDateControl.js +25 -29
  121. package/lib/controls/MaterialDateControl.js.map +1 -1
  122. package/lib/controls/MaterialDateTimeControl.d.ts +3 -6
  123. package/lib/controls/MaterialDateTimeControl.js +25 -29
  124. package/lib/controls/MaterialDateTimeControl.js.map +1 -1
  125. package/lib/controls/MaterialEnumControl.d.ts +1 -1
  126. package/lib/controls/MaterialEnumControl.js +3 -1
  127. package/lib/controls/MaterialEnumControl.js.map +1 -1
  128. package/lib/controls/MaterialInputControl.d.ts +2 -5
  129. package/lib/controls/MaterialInputControl.js +23 -28
  130. package/lib/controls/MaterialInputControl.js.map +1 -1
  131. package/lib/controls/MaterialIntegerControl.d.ts +1 -1
  132. package/lib/controls/MaterialIntegerControl.js +3 -1
  133. package/lib/controls/MaterialIntegerControl.js.map +1 -1
  134. package/lib/controls/MaterialNativeControl.d.ts +3 -6
  135. package/lib/controls/MaterialNativeControl.js +15 -19
  136. package/lib/controls/MaterialNativeControl.js.map +1 -1
  137. package/lib/controls/MaterialNumberControl.d.ts +1 -1
  138. package/lib/controls/MaterialNumberControl.js +3 -1
  139. package/lib/controls/MaterialNumberControl.js.map +1 -1
  140. package/lib/controls/MaterialOneOfEnumControl.d.ts +1 -1
  141. package/lib/controls/MaterialOneOfEnumControl.js +3 -1
  142. package/lib/controls/MaterialOneOfEnumControl.js.map +1 -1
  143. package/lib/controls/MaterialOneOfRadioGroupControl.d.ts +1 -1
  144. package/lib/controls/MaterialOneOfRadioGroupControl.js +3 -1
  145. package/lib/controls/MaterialOneOfRadioGroupControl.js.map +1 -1
  146. package/lib/controls/MaterialRadioGroup.d.ts +2 -5
  147. package/lib/controls/MaterialRadioGroup.js +15 -20
  148. package/lib/controls/MaterialRadioGroup.js.map +1 -1
  149. package/lib/controls/MaterialRadioGroupControl.d.ts +1 -1
  150. package/lib/controls/MaterialRadioGroupControl.js +3 -1
  151. package/lib/controls/MaterialRadioGroupControl.js.map +1 -1
  152. package/lib/controls/MaterialSliderControl.d.ts +3 -6
  153. package/lib/controls/MaterialSliderControl.js +35 -39
  154. package/lib/controls/MaterialSliderControl.js.map +1 -1
  155. package/lib/controls/MaterialTextControl.d.ts +1 -1
  156. package/lib/controls/MaterialTextControl.js +3 -1
  157. package/lib/controls/MaterialTextControl.js.map +1 -1
  158. package/lib/controls/MaterialTimeControl.d.ts +3 -6
  159. package/lib/controls/MaterialTimeControl.js +25 -29
  160. package/lib/controls/MaterialTimeControl.js.map +1 -1
  161. package/lib/controls/index.d.ts +10 -10
  162. package/lib/controls/index.js +16 -15
  163. package/lib/controls/index.js.map +1 -1
  164. package/lib/extended/MaterialAutocompleteEnumControl.d.ts +1 -1
  165. package/lib/extended/MaterialAutocompleteEnumControl.js +3 -1
  166. package/lib/extended/MaterialAutocompleteEnumControl.js.map +1 -1
  167. package/lib/extended/MaterialAutocompleteOneOfEnumControl.d.ts +1 -1
  168. package/lib/extended/MaterialAutocompleteOneOfEnumControl.js +3 -1
  169. package/lib/extended/MaterialAutocompleteOneOfEnumControl.js.map +1 -1
  170. package/lib/extended/MuiAutocomplete.d.ts +2 -2
  171. package/lib/extended/MuiAutocomplete.js +4 -3
  172. package/lib/extended/MuiAutocomplete.js.map +1 -1
  173. package/lib/extended/index.d.ts +2 -2
  174. package/lib/extended/index.js +2 -1
  175. package/lib/extended/index.js.map +1 -1
  176. package/lib/index.js +1 -0
  177. package/lib/index.js.map +1 -1
  178. package/lib/jsonforms-material.js +8 -8
  179. package/lib/jsonforms-material.js.map +1 -1
  180. package/lib/layouts/ArrayToolbar.js +1 -0
  181. package/lib/layouts/ArrayToolbar.js.map +1 -1
  182. package/lib/layouts/ExpandPanelRenderer.d.ts +3 -3
  183. package/lib/layouts/ExpandPanelRenderer.js +16 -13
  184. package/lib/layouts/ExpandPanelRenderer.js.map +1 -1
  185. package/lib/layouts/MaterialArrayLayout.d.ts +1 -11
  186. package/lib/layouts/MaterialArrayLayout.js +19 -31
  187. package/lib/layouts/MaterialArrayLayout.js.map +1 -1
  188. package/lib/layouts/MaterialArrayLayoutRenderer.d.ts +1 -1
  189. package/lib/layouts/MaterialArrayLayoutRenderer.js +3 -1
  190. package/lib/layouts/MaterialArrayLayoutRenderer.js.map +1 -1
  191. package/lib/layouts/MaterialCategorizationLayout.d.ts +2 -10
  192. package/lib/layouts/MaterialCategorizationLayout.js +31 -47
  193. package/lib/layouts/MaterialCategorizationLayout.js.map +1 -1
  194. package/lib/layouts/MaterialCategorizationStepperLayout.d.ts +2 -9
  195. package/lib/layouts/MaterialCategorizationStepperLayout.js +42 -53
  196. package/lib/layouts/MaterialCategorizationStepperLayout.js.map +1 -1
  197. package/lib/layouts/MaterialGroupLayout.d.ts +1 -1
  198. package/lib/layouts/MaterialGroupLayout.js +3 -1
  199. package/lib/layouts/MaterialGroupLayout.js.map +1 -1
  200. package/lib/layouts/MaterialHorizontalLayout.d.ts +1 -1
  201. package/lib/layouts/MaterialHorizontalLayout.js +3 -1
  202. package/lib/layouts/MaterialHorizontalLayout.js.map +1 -1
  203. package/lib/layouts/MaterialVerticalLayout.d.ts +1 -1
  204. package/lib/layouts/MaterialVerticalLayout.js +3 -1
  205. package/lib/layouts/MaterialVerticalLayout.js.map +1 -1
  206. package/lib/layouts/index.js +6 -5
  207. package/lib/layouts/index.js.map +1 -1
  208. package/lib/mui-controls/MuiCheckbox.js +2 -2
  209. package/lib/mui-controls/MuiCheckbox.js.map +1 -1
  210. package/lib/mui-controls/MuiInputInteger.js +9 -6
  211. package/lib/mui-controls/MuiInputInteger.js.map +1 -1
  212. package/lib/mui-controls/MuiInputNumber.js +9 -6
  213. package/lib/mui-controls/MuiInputNumber.js.map +1 -1
  214. package/lib/mui-controls/MuiInputNumberFormat.js +7 -8
  215. package/lib/mui-controls/MuiInputNumberFormat.js.map +1 -1
  216. package/lib/mui-controls/MuiInputText.js +11 -7
  217. package/lib/mui-controls/MuiInputText.js.map +1 -1
  218. package/lib/mui-controls/MuiInputTime.js +5 -3
  219. package/lib/mui-controls/MuiInputTime.js.map +1 -1
  220. package/lib/mui-controls/MuiSelect.js +3 -3
  221. package/lib/mui-controls/MuiSelect.js.map +1 -1
  222. package/lib/mui-controls/MuiToggle.js +2 -2
  223. package/lib/mui-controls/MuiToggle.js.map +1 -1
  224. package/lib/util/datejs.d.ts +2 -2
  225. package/lib/util/datejs.js +5 -2
  226. package/lib/util/datejs.js.map +1 -1
  227. package/lib/util/debounce.d.ts +1 -0
  228. package/lib/util/debounce.js +48 -0
  229. package/lib/util/debounce.js.map +1 -0
  230. package/lib/util/focus.d.ts +1 -0
  231. package/lib/util/focus.js +36 -0
  232. package/lib/util/focus.js.map +1 -0
  233. package/lib/util/index.d.ts +2 -0
  234. package/lib/util/index.js +3 -0
  235. package/lib/util/index.js.map +1 -1
  236. package/lib/util/layout.d.ts +2 -1
  237. package/lib/util/layout.js +8 -4
  238. package/lib/util/layout.js.map +1 -1
  239. package/package.json +5 -5
  240. package/src/cells/MaterialTimeCell.tsx +1 -0
  241. package/src/complex/MaterialAllOfRenderer.tsx +2 -1
  242. package/src/complex/MaterialAnyOfRenderer.tsx +2 -1
  243. package/src/complex/MaterialEnumArrayRenderer.tsx +1 -0
  244. package/src/complex/MaterialObjectRenderer.tsx +2 -1
  245. package/src/complex/MaterialOneOfRenderer.tsx +6 -6
  246. package/src/complex/MaterialTableControl.tsx +36 -24
  247. package/src/controls/MaterialAnyOfStringOrEnumControl.tsx +16 -12
  248. package/src/controls/MaterialDateControl.tsx +80 -85
  249. package/src/controls/MaterialDateTimeControl.tsx +83 -86
  250. package/src/controls/MaterialInputControl.tsx +62 -69
  251. package/src/controls/MaterialNativeControl.tsx +54 -57
  252. package/src/controls/MaterialRadioGroup.tsx +67 -69
  253. package/src/controls/MaterialSliderControl.tsx +92 -87
  254. package/src/controls/MaterialTimeControl.tsx +77 -80
  255. package/src/extended/MuiAutocomplete.tsx +2 -3
  256. package/src/layouts/ExpandPanelRenderer.tsx +11 -17
  257. package/src/layouts/MaterialArrayLayout.tsx +73 -82
  258. package/src/layouts/MaterialCategorizationLayout.tsx +49 -65
  259. package/src/layouts/MaterialCategorizationStepperLayout.tsx +79 -87
  260. package/src/mui-controls/MuiCheckbox.tsx +1 -2
  261. package/src/mui-controls/MuiInputInteger.tsx +12 -9
  262. package/src/mui-controls/MuiInputNumber.tsx +9 -6
  263. package/src/mui-controls/MuiInputNumberFormat.tsx +8 -11
  264. package/src/mui-controls/MuiInputText.tsx +17 -15
  265. package/src/mui-controls/MuiInputTime.tsx +6 -4
  266. package/src/mui-controls/MuiSelect.tsx +2 -3
  267. package/src/mui-controls/MuiToggle.tsx +1 -2
  268. package/src/util/debounce.ts +43 -0
  269. package/src/util/focus.ts +32 -0
  270. package/src/util/index.ts +2 -0
  271. package/src/util/layout.tsx +5 -6
  272. package/test/renderers/MaterialAnyOfRenderer.test.tsx +14 -8
  273. package/test/renderers/MaterialArrayLayout.test.tsx +6 -6
  274. package/test/renderers/MaterialCategorizationLayout.test.tsx +73 -0
  275. package/test/renderers/MaterialCategorizationStepperLayout.test.tsx +73 -0
  276. package/test/renderers/MaterialInputControl.test.tsx +3 -3
  277. package/test/renderers/MaterialIntegerCell.test.tsx +41 -20
  278. package/test/renderers/MaterialNumberCell.test.tsx +45 -24
  279. package/test/renderers/MaterialOneOfRenderer.test.tsx +7 -4
  280. package/test/renderers/MaterialTextCell.test.tsx +41 -20
  281. package/test/renderers/MaterialTimeCell.test.tsx +41 -20
  282. package/test/renderers/MaterialTimeControl.test.tsx +3 -3
  283. package/docs/classes/materialarraylayout.html +0 -777
  284. package/docs/classes/materialcategorizationlayoutrenderer.html +0 -786
  285. package/docs/classes/materialcategorizationstepperlayoutrenderer.html +0 -762
  286. package/docs/classes/materialdatecontrol.html +0 -825
  287. package/docs/classes/materialdatetimecontrol.html +0 -825
  288. package/docs/classes/materialinputcontrol.html +0 -825
  289. package/docs/classes/materialnativecontrol.html +0 -825
  290. package/docs/classes/materialradiogroup.html +0 -825
  291. package/docs/classes/materialslidercontrol.html +0 -825
  292. package/docs/classes/materialtimecontrol.html +0 -825
  293. package/docs/interfaces/materialarraylayoutstate.html +0 -157
@@ -22,114 +22,119 @@
22
22
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
23
  THE SOFTWARE.
24
24
  */
25
- import React from 'react';
25
+ import React, {useCallback} from 'react';
26
26
  import {
27
- computeLabel,
28
27
  ControlProps,
29
- ControlState,
28
+ showAsRequired,
30
29
  isDescriptionHidden,
31
30
  isRangeControl,
32
31
  RankedTester,
33
32
  rankWith
34
33
  } from '@jsonforms/core';
35
- import { Control, withJsonFormsControlProps } from '@jsonforms/react';
34
+ import { withJsonFormsControlProps } from '@jsonforms/react';
36
35
 
37
36
  import {
38
37
  FormControl,
39
38
  FormHelperText,
39
+ FormLabel,
40
40
  Hidden,
41
41
  Slider,
42
42
  Typography
43
43
  } from '@material-ui/core';
44
44
  import merge from 'lodash/merge';
45
+ import { useFocus } from '../util';
45
46
 
46
- export class MaterialSliderControl extends Control<ControlProps, ControlState> {
47
- render() {
48
- const {
49
- id,
50
- data,
51
- description,
52
- enabled,
53
- errors,
54
- label,
55
- schema,
56
- handleChange,
57
- visible,
58
- path,
59
- required,
60
- config
61
- } = this.props;
62
- const isValid = errors.length === 0;
63
- const appliedUiSchemaOptions = merge(
64
- {},
65
- config,
66
- this.props.uischema.options
67
- );
68
- const labelStyle: { [x: string]: any } = {
69
- whiteSpace: 'nowrap',
70
- overflow: 'hidden',
71
- textOverflow: 'ellipsis',
72
- width: '100%'
73
- };
74
- const rangeContainerStyle: { [x: string]: any } = {
75
- display: 'flex'
76
- };
77
- const rangeItemStyle: { [x: string]: any } = {
78
- flexGrow: '1'
79
- };
80
- const sliderStyle: { [x: string]: any } = {
81
- marginTop: '7px'
82
- };
47
+ export const MaterialSliderControl = (props: ControlProps) => {
48
+ const [focused, onFocus, onBlur] = useFocus();
49
+ const {
50
+ id,
51
+ data,
52
+ description,
53
+ enabled,
54
+ errors,
55
+ label,
56
+ schema,
57
+ handleChange,
58
+ visible,
59
+ path,
60
+ required,
61
+ config
62
+ } = props;
63
+ const isValid = errors.length === 0;
64
+ const appliedUiSchemaOptions = merge(
65
+ {},
66
+ config,
67
+ props.uischema.options
68
+ );
69
+ const labelStyle: { [x: string]: any } = {
70
+ whiteSpace: 'nowrap',
71
+ overflow: 'hidden',
72
+ textOverflow: 'ellipsis',
73
+ width: '100%'
74
+ };
75
+ const rangeContainerStyle: { [x: string]: any } = {
76
+ display: 'flex'
77
+ };
78
+ const rangeItemStyle: { [x: string]: any } = {
79
+ flexGrow: '1'
80
+ };
81
+ const sliderStyle: { [x: string]: any } = {
82
+ marginTop: '7px'
83
+ };
83
84
 
84
- const showDescription = !isDescriptionHidden(
85
- visible,
86
- description,
87
- this.state.isFocused,
88
- appliedUiSchemaOptions.showUnfocusedDescription
89
- );
90
- return (
91
- <Hidden xsUp={!visible}>
92
- <FormControl
93
- fullWidth={!appliedUiSchemaOptions.trim}
94
- onFocus={this.onFocus}
95
- onBlur={this.onBlur}
96
- id={id}
85
+ const showDescription = !isDescriptionHidden(
86
+ visible,
87
+ description,
88
+ focused,
89
+ appliedUiSchemaOptions.showUnfocusedDescription
90
+ );
91
+
92
+ const onChange = useCallback((_ev: any, value: any) => handleChange(path, Number(value)), [path, handleChange]);
93
+
94
+ return (
95
+ <Hidden xsUp={!visible}>
96
+ <FormControl
97
+ fullWidth={!appliedUiSchemaOptions.trim}
98
+ onFocus={onFocus}
99
+ onBlur={onBlur}
100
+ id={id}
101
+ >
102
+ <FormLabel
103
+ htmlFor={id}
104
+ error={!isValid}
105
+ component={'legend' as 'label'}
106
+ required={showAsRequired(required,
107
+ appliedUiSchemaOptions.hideRequiredAsterisk)}
97
108
  >
98
109
  <Typography id={id + '-typo'} style={labelStyle} variant='caption'>
99
- {computeLabel(
100
- label,
101
- required,
102
- appliedUiSchemaOptions.hideRequiredAsterisk
103
- )}
110
+ {label}
111
+ </Typography>
112
+ </FormLabel>
113
+ <div style={rangeContainerStyle}>
114
+ <Typography style={rangeItemStyle} variant='caption' align='left'>
115
+ {schema.minimum}
116
+ </Typography>
117
+ <Typography style={rangeItemStyle} variant='caption' align='right'>
118
+ {schema.maximum}
104
119
  </Typography>
105
- <div style={rangeContainerStyle}>
106
- <Typography style={rangeItemStyle} variant='caption' align='left'>
107
- {schema.minimum}
108
- </Typography>
109
- <Typography style={rangeItemStyle} variant='caption' align='right'>
110
- {schema.maximum}
111
- </Typography>
112
- </div>
113
- <Slider
114
- style={sliderStyle}
115
- min={schema.minimum}
116
- max={schema.maximum}
117
- value={Number(data || schema.default)}
118
- onChange={(_ev: any, value: any) => {
119
- handleChange(path, Number(value));
120
- }}
121
- id={id + '-input'}
122
- disabled={!enabled}
123
- step={schema.multipleOf || 1}
124
- />
125
- <FormHelperText error={!isValid}>
126
- {!isValid ? errors : showDescription ? description : null}
127
- </FormHelperText>
128
- </FormControl>
129
- </Hidden>
130
- );
131
- }
132
- }
120
+ </div>
121
+ <Slider
122
+ style={sliderStyle}
123
+ min={schema.minimum}
124
+ max={schema.maximum}
125
+ value={Number(data || schema.default)}
126
+ onChange={onChange}
127
+ id={id + '-input'}
128
+ disabled={!enabled}
129
+ step={schema.multipleOf || 1}
130
+ />
131
+ <FormHelperText error={!isValid}>
132
+ {!isValid ? errors : showDescription ? description : null}
133
+ </FormHelperText>
134
+ </FormControl>
135
+ </Hidden>
136
+ );
137
+ };
133
138
  export const materialSliderControlTester: RankedTester = rankWith(
134
139
  4,
135
140
  isRangeControl
@@ -22,106 +22,103 @@
22
22
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
23
  THE SOFTWARE.
24
24
  */
25
- import React from 'react';
25
+ import React, { useMemo } from 'react';
26
26
  import merge from 'lodash/merge';
27
27
  import {
28
28
  ControlProps,
29
- ControlState,
30
29
  isTimeControl,
31
30
  isDescriptionHidden,
32
31
  RankedTester,
33
32
  rankWith
34
33
  } from '@jsonforms/core';
35
- import { Control, withJsonFormsControlProps } from '@jsonforms/react';
34
+ import { withJsonFormsControlProps } from '@jsonforms/react';
36
35
  import { FormHelperText, Hidden } from '@material-ui/core';
37
36
  import {
38
37
  KeyboardTimePicker,
39
38
  MuiPickersUtilsProvider
40
39
  } from '@material-ui/pickers';
41
40
  import DayjsUtils from '@date-io/dayjs';
42
- import { createOnChangeHandler, getData } from '../util';
41
+ import { createOnChangeHandler, getData, useFocus } from '../util';
43
42
 
44
- export class MaterialTimeControl extends Control<
45
- ControlProps,
46
- ControlState
47
- > {
48
- render() {
43
+ export const MaterialTimeControl = (props: ControlProps) => {
44
+ const [focused, onFocus, onBlur] = useFocus();
49
45
  const {
50
- id,
51
- description,
52
- errors,
53
- label,
54
- uischema,
55
- visible,
56
- enabled,
57
- required,
58
- path,
59
- handleChange,
60
- data,
61
- config
62
- } = this.props;
63
- const appliedUiSchemaOptions = merge({}, config, uischema.options);
64
- const isValid = errors.length === 0;
46
+ id,
47
+ description,
48
+ errors,
49
+ label,
50
+ uischema,
51
+ visible,
52
+ enabled,
53
+ required,
54
+ path,
55
+ handleChange,
56
+ data,
57
+ config
58
+ } = props;
59
+ const appliedUiSchemaOptions = merge({}, config, uischema.options);
60
+ const isValid = errors.length === 0;
61
+
62
+ const showDescription = !isDescriptionHidden(
63
+ visible,
64
+ description,
65
+ focused,
66
+ appliedUiSchemaOptions.showUnfocusedDescription
67
+ );
65
68
 
66
- const showDescription = !isDescriptionHidden(
67
- visible,
68
- description,
69
- this.state.isFocused,
70
- appliedUiSchemaOptions.showUnfocusedDescription
71
- );
69
+ const format = appliedUiSchemaOptions.timeFormat ?? 'HH:mm';
70
+ const saveFormat = appliedUiSchemaOptions.timeSaveFormat ?? 'HH:mm:ss';
72
71
 
73
- const format = appliedUiSchemaOptions.timeFormat ?? 'HH:mm';
74
- const saveFormat = appliedUiSchemaOptions.timeSaveFormat ?? 'HH:mm';
72
+ const firstFormHelperText = showDescription
73
+ ? description
74
+ : !isValid
75
+ ? errors
76
+ : null;
77
+ const secondFormHelperText = showDescription && !isValid ? errors : null;
75
78
 
76
- const firstFormHelperText = showDescription
77
- ? description
78
- : !isValid
79
- ? errors
80
- : null;
81
- const secondFormHelperText = showDescription && !isValid ? errors : null;
79
+ const onChange = useMemo(() => createOnChangeHandler(
80
+ path,
81
+ handleChange,
82
+ saveFormat
83
+ ),[path, handleChange, saveFormat]);
82
84
 
83
- return (
84
- <Hidden xsUp={!visible}>
85
- <MuiPickersUtilsProvider utils={DayjsUtils}>
86
- <KeyboardTimePicker
87
- id={id + '-input'}
88
- required={required && !appliedUiSchemaOptions.hideRequiredAsterisk}
89
- label={label}
90
- error={!isValid}
91
- fullWidth={!appliedUiSchemaOptions.trim}
92
- onFocus={this.onFocus}
93
- onBlur={this.onBlur}
94
- InputLabelProps={data ? { shrink: true } : undefined}
95
- value={getData(data, saveFormat)}
96
- clearable
97
- onChange={createOnChangeHandler(
98
- path,
99
- handleChange,
100
- saveFormat
101
- )}
102
- format={format}
103
- ampm={!!appliedUiSchemaOptions.ampm}
104
- views={appliedUiSchemaOptions.views}
105
- disabled={!enabled}
106
- autoFocus={appliedUiSchemaOptions.focus}
107
- cancelLabel={appliedUiSchemaOptions.cancelLabel}
108
- clearLabel={appliedUiSchemaOptions.clearLabel}
109
- okLabel={appliedUiSchemaOptions.okLabel}
110
- invalidDateMessage={null}
111
- maxDateMessage={null}
112
- minDateMessage={null}
113
- />
114
- <FormHelperText error={!isValid && !showDescription}>
115
- {firstFormHelperText}
116
- </FormHelperText>
117
- <FormHelperText error={!isValid}>
118
- {secondFormHelperText}
119
- </FormHelperText>
120
- </MuiPickersUtilsProvider>
121
- </Hidden>
122
- );
123
- }
124
- }
85
+ return (
86
+ <Hidden xsUp={!visible}>
87
+ <MuiPickersUtilsProvider utils={DayjsUtils}>
88
+ <KeyboardTimePicker
89
+ id={id + '-input'}
90
+ required={required && !appliedUiSchemaOptions.hideRequiredAsterisk}
91
+ label={label}
92
+ error={!isValid}
93
+ fullWidth={!appliedUiSchemaOptions.trim}
94
+ onFocus={onFocus}
95
+ onBlur={onBlur}
96
+ InputLabelProps={data ? { shrink: true } : undefined}
97
+ value={getData(data, saveFormat)}
98
+ clearable
99
+ onChange={onChange}
100
+ format={format}
101
+ ampm={!!appliedUiSchemaOptions.ampm}
102
+ views={appliedUiSchemaOptions.views}
103
+ disabled={!enabled}
104
+ autoFocus={appliedUiSchemaOptions.focus}
105
+ cancelLabel={appliedUiSchemaOptions.cancelLabel}
106
+ clearLabel={appliedUiSchemaOptions.clearLabel}
107
+ okLabel={appliedUiSchemaOptions.okLabel}
108
+ invalidDateMessage={null}
109
+ maxDateMessage={null}
110
+ minDateMessage={null}
111
+ />
112
+ <FormHelperText error={!isValid && !showDescription}>
113
+ {firstFormHelperText}
114
+ </FormHelperText>
115
+ <FormHelperText error={!isValid}>
116
+ {secondFormHelperText}
117
+ </FormHelperText>
118
+ </MuiPickersUtilsProvider>
119
+ </Hidden>
120
+ );
121
+ };
125
122
 
126
123
  export const materialTimeControlTester: RankedTester = rankWith(
127
124
  4,
@@ -27,7 +27,6 @@ import { EnumCellProps, EnumOption, WithClassname } from '@jsonforms/core';
27
27
 
28
28
  import Input from '@material-ui/core/Input';
29
29
  import Autocomplete, { AutocompleteRenderOptionState } from '@material-ui/lab/Autocomplete';
30
- import { areEqual } from '@jsonforms/react';
31
30
  import merge from 'lodash/merge';
32
31
  import { FilterOptionsState } from '@material-ui/lab/useAutocomplete';
33
32
 
@@ -37,7 +36,7 @@ export interface WithOptionLabel {
37
36
  filterOptions?(options: EnumOption[], state: FilterOptionsState<EnumOption>) : EnumOption[];
38
37
  }
39
38
 
40
- export const MuiAutocomplete = React.memo((props: EnumCellProps & WithClassname & WithOptionLabel) => {
39
+ export const MuiAutocomplete = (props: EnumCellProps & WithClassname & WithOptionLabel) => {
41
40
  const {
42
41
  data,
43
42
  className,
@@ -90,4 +89,4 @@ export const MuiAutocomplete = React.memo((props: EnumCellProps & WithClassname
90
89
  filterOptions={filterOptions}
91
90
  />
92
91
  );
93
- }, areEqual);
92
+ };
@@ -1,8 +1,7 @@
1
1
  import merge from 'lodash/merge';
2
2
  import get from 'lodash/get';
3
- import React, { ComponentType, Dispatch, Fragment, ReducerAction, useMemo, useState, useEffect } from 'react';
3
+ import React, { ComponentType, Dispatch, Fragment, ReducerAction, useMemo, useState, useEffect, useCallback } from 'react';
4
4
  import {
5
- areEqual,
6
5
  JsonFormsDispatch,
7
6
  JsonFormsStateContext,
8
7
  withJsonFormsContext
@@ -73,7 +72,7 @@ export interface ExpandPanelProps
73
72
  extends StatePropsOfExpandPanel,
74
73
  DispatchPropsOfExpandPanel {}
75
74
 
76
- const ExpandPanelRenderer = (props: ExpandPanelProps) => {
75
+ const ExpandPanelRendererComponent = (props: ExpandPanelProps) => {
77
76
  const [labelHtmlId] = useState<string>(createId('expand-panel'));
78
77
 
79
78
  useEffect(() => {
@@ -201,6 +200,8 @@ const ExpandPanelRenderer = (props: ExpandPanelProps) => {
201
200
  );
202
201
  };
203
202
 
203
+ const ExpandPanelRenderer = React.memo(ExpandPanelRendererComponent);
204
+
204
205
  /**
205
206
  * Maps state to dispatch properties of an expand pandel control.
206
207
  *
@@ -210,7 +211,7 @@ const ExpandPanelRenderer = (props: ExpandPanelProps) => {
210
211
  export const ctxDispatchToExpandPanelProps: (
211
212
  dispatch: Dispatch<ReducerAction<any>>
212
213
  ) => DispatchPropsOfExpandPanel = dispatch => ({
213
- removeItems: (path: string, toDelete: number[]) => (event: any): void => {
214
+ removeItems: useCallback((path: string, toDelete: number[]) => (event: any): void => {
214
215
  event.stopPropagation();
215
216
  dispatch(
216
217
  update(path, array => {
@@ -221,8 +222,8 @@ export const ctxDispatchToExpandPanelProps: (
221
222
  return array;
222
223
  })
223
224
  );
224
- },
225
- moveUp: (path: string, toMove: number) => (event: any): void => {
225
+ }, [dispatch]),
226
+ moveUp: useCallback((path: string, toMove: number) => (event: any): void => {
226
227
  event.stopPropagation();
227
228
  dispatch(
228
229
  update(path, array => {
@@ -230,8 +231,8 @@ export const ctxDispatchToExpandPanelProps: (
230
231
  return array;
231
232
  })
232
233
  );
233
- },
234
- moveDown: (path: string, toMove: number) => (event: any): void => {
234
+ }, [dispatch]),
235
+ moveDown: useCallback((path: string, toMove: number) => (event: any): void => {
235
236
  event.stopPropagation();
236
237
  dispatch(
237
238
  update(path, array => {
@@ -239,7 +240,7 @@ export const ctxDispatchToExpandPanelProps: (
239
240
  return array;
240
241
  })
241
242
  );
242
- }
243
+ }, [dispatch])
243
244
  });
244
245
 
245
246
  /**
@@ -277,13 +278,6 @@ export const withJsonFormsExpandPanelProps = (
277
278
  Component: ComponentType<ExpandPanelProps>
278
279
  ): ComponentType<OwnPropsOfExpandPanel> =>
279
280
  withJsonFormsContext(
280
- withContextToExpandPanelProps(
281
- React.memo(
282
- Component,
283
- (prevProps: ExpandPanelProps, nextProps: ExpandPanelProps) =>
284
- areEqual(prevProps, nextProps)
285
- )
286
- )
287
- );
281
+ withContextToExpandPanelProps(Component));
288
282
 
289
283
  export default withJsonFormsExpandPanelProps(ExpandPanelRenderer);
@@ -23,7 +23,7 @@
23
23
  THE SOFTWARE.
24
24
  */
25
25
  import range from 'lodash/range';
26
- import React from 'react';
26
+ import React, {useState, useCallback} from 'react';
27
27
  import {
28
28
  ArrayLayoutProps,
29
29
  composePaths,
@@ -35,87 +35,78 @@ import { ArrayLayoutToolbar } from './ArrayToolbar';
35
35
  import ExpandPanelRenderer from './ExpandPanelRenderer';
36
36
  import merge from 'lodash/merge';
37
37
 
38
- interface MaterialArrayLayoutState {
39
- expanded: string | boolean;
40
- }
41
- export class MaterialArrayLayout extends React.PureComponent<
42
- ArrayLayoutProps,
43
- MaterialArrayLayoutState
44
- > {
45
- state: MaterialArrayLayoutState = {
46
- expanded: null
47
- };
48
- innerCreateDefaultValue = () => createDefaultValue(this.props.schema);
49
- handleChange = (panel: string) => (_event: any, expanded: boolean) => {
50
- this.setState({
51
- expanded: expanded ? panel : false
52
- });
53
- };
54
- isExpanded = (index: number) =>
55
- this.state.expanded === composePaths(this.props.path, `${index}`);
56
- render() {
57
- const {
58
- data,
59
- path,
60
- schema,
61
- uischema,
62
- errors,
63
- addItem,
64
- renderers,
65
- cells,
66
- label,
67
- required,
68
- rootSchema,
69
- config,
70
- uischemas
71
- } = this.props;
72
- const appliedUiSchemaOptions = merge(
73
- {},
74
- config,
75
- this.props.uischema.options
76
- );
38
+ const MaterialArrayLayoutComponent = (props: ArrayLayoutProps)=> {
39
+ const [expanded, setExpanded] = useState<string|boolean>(false);
40
+ const innerCreateDefaultValue = useCallback(() => createDefaultValue(props.schema), [props.schema]);
41
+ const handleChange = useCallback((panel: string) => (_event: any, expandedPanel: boolean) => {
42
+ setExpanded(expandedPanel ? panel : false)
43
+ }, []);
44
+ const isExpanded = (index: number) =>
45
+ expanded === composePaths(props.path, `${index}`);
46
+
47
+ const {
48
+ data,
49
+ path,
50
+ schema,
51
+ uischema,
52
+ errors,
53
+ addItem,
54
+ renderers,
55
+ cells,
56
+ label,
57
+ required,
58
+ rootSchema,
59
+ config,
60
+ uischemas
61
+ } = props;
62
+ const appliedUiSchemaOptions = merge(
63
+ {},
64
+ config,
65
+ props.uischema.options
66
+ );
77
67
 
78
- return (
68
+ return (
69
+ <div>
70
+ <ArrayLayoutToolbar
71
+ label={computeLabel(
72
+ label,
73
+ required,
74
+ appliedUiSchemaOptions.hideRequiredAsterisk
75
+ )}
76
+ errors={errors}
77
+ path={path}
78
+ addItem={addItem}
79
+ createDefault={innerCreateDefaultValue}
80
+ />
79
81
  <div>
80
- <ArrayLayoutToolbar
81
- label={computeLabel(
82
- label,
83
- required,
84
- appliedUiSchemaOptions.hideRequiredAsterisk
85
- )}
86
- errors={errors}
87
- path={path}
88
- addItem={addItem}
89
- createDefault={this.innerCreateDefaultValue}
90
- />
91
- <div>
92
- {data > 0 ? (
93
- map(range(data), index => {
94
- return (
95
- <ExpandPanelRenderer
96
- index={index}
97
- expanded={this.isExpanded(index)}
98
- schema={schema}
99
- path={path}
100
- handleExpansion={this.handleChange}
101
- uischema={uischema}
102
- renderers={renderers}
103
- cells={cells}
104
- key={index}
105
- rootSchema={rootSchema}
106
- enableMoveUp={index != 0}
107
- enableMoveDown={index < data - 1}
108
- config={config}
109
- childLabelProp={appliedUiSchemaOptions.elementLabelProp}
110
- uischemas={uischemas}
111
- />
112
- );
113
- })
114
- ) : (
115
- <p>No data</p>
116
- )}
117
- </div>
82
+ {data > 0 ? (
83
+ map(range(data), index => {
84
+ return (
85
+ <ExpandPanelRenderer
86
+ index={index}
87
+ expanded={isExpanded(index)}
88
+ schema={schema}
89
+ path={path}
90
+ handleExpansion={handleChange}
91
+ uischema={uischema}
92
+ renderers={renderers}
93
+ cells={cells}
94
+ key={index}
95
+ rootSchema={rootSchema}
96
+ enableMoveUp={index != 0}
97
+ enableMoveDown={index < data - 1}
98
+ config={config}
99
+ childLabelProp={appliedUiSchemaOptions.elementLabelProp}
100
+ uischemas={uischemas}
101
+ />
102
+ );
103
+ })
104
+ ) : (
105
+ <p>No data</p>
106
+ )}
118
107
  </div>
119
- );
120
- }
121
- }
108
+ </div>
109
+ );
110
+ };
111
+
112
+ export const MaterialArrayLayout = React.memo(MaterialArrayLayoutComponent);