@jsonforms/material-renderers 2.5.2 → 3.0.0-alpha.3

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 (357) hide show
  1. package/README.md +1 -1
  2. package/docs/assets/js/search.json +1 -1
  3. package/docs/classes/combinatorproperties.html +2 -5
  4. package/docs/classes/materialanyofstringorenumcontrol.html +6 -9
  5. package/docs/classes/materialtablecontrol.html +4 -7
  6. package/docs/globals.html +1040 -328
  7. package/docs/index.html +84 -51
  8. package/docs/interfaces/ajvprops.html +1 -4
  9. package/docs/interfaces/arraylayouttoolbarprops.html +5 -8
  10. package/docs/interfaces/categorizationstate.html +1 -4
  11. package/docs/interfaces/categorizationstepperstate.html +0 -3
  12. package/docs/interfaces/combinatorpropertiesprops.html +0 -3
  13. package/docs/interfaces/deletedialogprops.html +0 -3
  14. package/docs/interfaces/dispatchpropsofexpandpanel.html +3 -6
  15. package/docs/interfaces/emptytableprops.html +0 -3
  16. package/docs/interfaces/expandpanelprops.html +19 -22
  17. package/docs/interfaces/jsonformstheme.html +39 -49
  18. package/docs/interfaces/materialcategorizationlayoutrendererprops.html +11 -14
  19. package/docs/interfaces/materialcategorizationstepperlayoutrendererprops.html +7 -10
  20. package/docs/interfaces/materiallayoutrendererprops.html +0 -3
  21. package/docs/interfaces/materialtabletoolbarprops.html +10 -13
  22. package/docs/interfaces/muitextinputprops.html +2 -5
  23. package/docs/interfaces/nonemptycellcomponentprops.html +266 -0
  24. package/docs/interfaces/nonemptycellprops.html +0 -3
  25. package/docs/interfaces/nonemptyrowprops.html +80 -27
  26. package/docs/interfaces/ownoneofprops.html +0 -3
  27. package/docs/interfaces/ownpropsofexpandpanel.html +14 -17
  28. package/docs/interfaces/ownpropsofnonemptycell.html +0 -3
  29. package/docs/interfaces/statepropsofexpandpanel.html +16 -19
  30. package/docs/interfaces/tableheadercellprops.html +0 -3
  31. package/docs/interfaces/tablerowsprop.html +9 -12
  32. package/docs/interfaces/validationprops.html +2 -5
  33. package/docs/interfaces/withdeletedialogsupport.html +0 -3
  34. package/docs/interfaces/withinput.html +1 -4
  35. package/docs/interfaces/withoptionlabel.html +7 -7
  36. package/example/index.ts +5 -20
  37. package/lib/additional/ListWithDetailMasterItem.d.ts +1 -1
  38. package/lib/additional/ListWithDetailMasterItem.js +8 -8
  39. package/lib/additional/ListWithDetailMasterItem.js.map +1 -1
  40. package/lib/additional/MaterialLabelRenderer.d.ts +1 -1
  41. package/lib/additional/MaterialLabelRenderer.js +6 -4
  42. package/lib/additional/MaterialLabelRenderer.js.map +1 -1
  43. package/lib/additional/MaterialListWithDetailRenderer.d.ts +1 -1
  44. package/lib/additional/MaterialListWithDetailRenderer.js +10 -8
  45. package/lib/additional/MaterialListWithDetailRenderer.js.map +1 -1
  46. package/lib/additional/index.js +3 -2
  47. package/lib/additional/index.js.map +1 -1
  48. package/lib/cells/CustomizableCells.d.ts +1 -0
  49. package/lib/cells/CustomizableCells.js +11 -8
  50. package/lib/cells/CustomizableCells.js.map +1 -1
  51. package/lib/cells/MaterialBooleanCell.d.ts +1 -1
  52. package/lib/cells/MaterialBooleanCell.js +3 -1
  53. package/lib/cells/MaterialBooleanCell.js.map +1 -1
  54. package/lib/cells/MaterialBooleanToggleCell.d.ts +1 -1
  55. package/lib/cells/MaterialBooleanToggleCell.js +3 -1
  56. package/lib/cells/MaterialBooleanToggleCell.js.map +1 -1
  57. package/lib/cells/MaterialDateCell.d.ts +1 -1
  58. package/lib/cells/MaterialDateCell.js +4 -2
  59. package/lib/cells/MaterialDateCell.js.map +1 -1
  60. package/lib/cells/MaterialEnumCell.d.ts +1 -1
  61. package/lib/cells/MaterialEnumCell.js +3 -1
  62. package/lib/cells/MaterialEnumCell.js.map +1 -1
  63. package/lib/cells/MaterialIntegerCell.d.ts +1 -1
  64. package/lib/cells/MaterialIntegerCell.js +3 -1
  65. package/lib/cells/MaterialIntegerCell.js.map +1 -1
  66. package/lib/cells/MaterialNumberCell.d.ts +1 -1
  67. package/lib/cells/MaterialNumberCell.js +3 -1
  68. package/lib/cells/MaterialNumberCell.js.map +1 -1
  69. package/lib/cells/MaterialNumberFormatCell.d.ts +1 -1
  70. package/lib/cells/MaterialNumberFormatCell.js +3 -1
  71. package/lib/cells/MaterialNumberFormatCell.js.map +1 -1
  72. package/lib/cells/MaterialOneOfEnumCell.d.ts +10 -0
  73. package/lib/cells/MaterialOneOfEnumCell.js +41 -0
  74. package/lib/cells/MaterialOneOfEnumCell.js.map +1 -0
  75. package/lib/cells/MaterialTextCell.d.ts +1 -1
  76. package/lib/cells/MaterialTextCell.js +3 -1
  77. package/lib/cells/MaterialTextCell.js.map +1 -1
  78. package/lib/cells/MaterialTimeCell.d.ts +1 -1
  79. package/lib/cells/MaterialTimeCell.js +3 -1
  80. package/lib/cells/MaterialTimeCell.js.map +1 -1
  81. package/lib/cells/index.d.ts +2 -1
  82. package/lib/cells/index.js +13 -9
  83. package/lib/cells/index.js.map +1 -1
  84. package/lib/complex/CombinatorProperties.js +4 -2
  85. package/lib/complex/CombinatorProperties.js.map +1 -1
  86. package/lib/complex/DeleteDialog.js +9 -9
  87. package/lib/complex/DeleteDialog.js.map +1 -1
  88. package/lib/complex/MaterialAllOfRenderer.d.ts +3 -2
  89. package/lib/complex/MaterialAllOfRenderer.js +12 -10
  90. package/lib/complex/MaterialAllOfRenderer.js.map +1 -1
  91. package/lib/complex/MaterialAnyOfRenderer.d.ts +3 -2
  92. package/lib/complex/MaterialAnyOfRenderer.js +7 -5
  93. package/lib/complex/MaterialAnyOfRenderer.js.map +1 -1
  94. package/lib/complex/MaterialArrayControlRenderer.d.ts +1 -1
  95. package/lib/complex/MaterialArrayControlRenderer.js +5 -3
  96. package/lib/complex/MaterialArrayControlRenderer.js.map +1 -1
  97. package/lib/complex/MaterialEnumArrayRenderer.d.ts +2 -2
  98. package/lib/complex/MaterialEnumArrayRenderer.js +12 -9
  99. package/lib/complex/MaterialEnumArrayRenderer.js.map +1 -1
  100. package/lib/complex/MaterialObjectRenderer.d.ts +3 -2
  101. package/lib/complex/MaterialObjectRenderer.js +7 -5
  102. package/lib/complex/MaterialObjectRenderer.js.map +1 -1
  103. package/lib/complex/MaterialOneOfRenderer.d.ts +2 -1
  104. package/lib/complex/MaterialOneOfRenderer.js +16 -15
  105. package/lib/complex/MaterialOneOfRenderer.js.map +1 -1
  106. package/lib/complex/MaterialTableControl.d.ts +16 -1
  107. package/lib/complex/MaterialTableControl.js +42 -35
  108. package/lib/complex/MaterialTableControl.js.map +1 -1
  109. package/lib/complex/NoBorderTableCell.d.ts +2 -2
  110. package/lib/complex/NoBorderTableCell.js +8 -10
  111. package/lib/complex/NoBorderTableCell.js.map +1 -1
  112. package/lib/complex/TableToolbar.d.ts +2 -2
  113. package/lib/complex/TableToolbar.js +12 -14
  114. package/lib/complex/TableToolbar.js.map +1 -1
  115. package/lib/complex/ValidationIcon.d.ts +2 -6
  116. package/lib/complex/ValidationIcon.js +9 -13
  117. package/lib/complex/ValidationIcon.js.map +1 -1
  118. package/lib/complex/index.js +6 -5
  119. package/lib/complex/index.js.map +1 -1
  120. package/lib/controls/MaterialAnyOfStringOrEnumControl.d.ts +1 -1
  121. package/lib/controls/MaterialAnyOfStringOrEnumControl.js +18 -13
  122. package/lib/controls/MaterialAnyOfStringOrEnumControl.js.map +1 -1
  123. package/lib/controls/MaterialBooleanControl.d.ts +1 -1
  124. package/lib/controls/MaterialBooleanControl.js +6 -4
  125. package/lib/controls/MaterialBooleanControl.js.map +1 -1
  126. package/lib/controls/MaterialBooleanToggleControl.d.ts +1 -1
  127. package/lib/controls/MaterialBooleanToggleControl.js +6 -4
  128. package/lib/controls/MaterialBooleanToggleControl.js.map +1 -1
  129. package/lib/controls/MaterialDateControl.d.ts +3 -15
  130. package/lib/controls/MaterialDateControl.js +29 -50
  131. package/lib/controls/MaterialDateControl.js.map +1 -1
  132. package/lib/controls/MaterialDateTimeControl.d.ts +3 -6
  133. package/lib/controls/MaterialDateTimeControl.js +29 -31
  134. package/lib/controls/MaterialDateTimeControl.js.map +1 -1
  135. package/lib/controls/MaterialEnumControl.d.ts +1 -1
  136. package/lib/controls/MaterialEnumControl.js +3 -1
  137. package/lib/controls/MaterialEnumControl.js.map +1 -1
  138. package/lib/controls/MaterialInputControl.d.ts +2 -5
  139. package/lib/controls/MaterialInputControl.js +25 -30
  140. package/lib/controls/MaterialInputControl.js.map +1 -1
  141. package/lib/controls/MaterialIntegerControl.d.ts +1 -1
  142. package/lib/controls/MaterialIntegerControl.js +3 -1
  143. package/lib/controls/MaterialIntegerControl.js.map +1 -1
  144. package/lib/controls/MaterialNativeControl.d.ts +3 -6
  145. package/lib/controls/MaterialNativeControl.js +16 -20
  146. package/lib/controls/MaterialNativeControl.js.map +1 -1
  147. package/lib/controls/MaterialNumberControl.d.ts +1 -1
  148. package/lib/controls/MaterialNumberControl.js +3 -1
  149. package/lib/controls/MaterialNumberControl.js.map +1 -1
  150. package/lib/controls/MaterialOneOfEnumControl.d.ts +1 -1
  151. package/lib/controls/MaterialOneOfEnumControl.js +3 -1
  152. package/lib/controls/MaterialOneOfEnumControl.js.map +1 -1
  153. package/lib/controls/MaterialOneOfRadioGroupControl.d.ts +1 -1
  154. package/lib/controls/MaterialOneOfRadioGroupControl.js +3 -1
  155. package/lib/controls/MaterialOneOfRadioGroupControl.js.map +1 -1
  156. package/lib/controls/MaterialRadioGroup.d.ts +2 -5
  157. package/lib/controls/MaterialRadioGroup.js +16 -23
  158. package/lib/controls/MaterialRadioGroup.js.map +1 -1
  159. package/lib/controls/MaterialRadioGroupControl.d.ts +1 -1
  160. package/lib/controls/MaterialRadioGroupControl.js +3 -1
  161. package/lib/controls/MaterialRadioGroupControl.js.map +1 -1
  162. package/lib/controls/MaterialSliderControl.d.ts +3 -6
  163. package/lib/controls/MaterialSliderControl.js +36 -40
  164. package/lib/controls/MaterialSliderControl.js.map +1 -1
  165. package/lib/controls/MaterialTextControl.d.ts +1 -1
  166. package/lib/controls/MaterialTextControl.js +3 -1
  167. package/lib/controls/MaterialTextControl.js.map +1 -1
  168. package/lib/controls/MaterialTimeControl.d.ts +6 -0
  169. package/lib/controls/MaterialTimeControl.js +62 -0
  170. package/lib/controls/MaterialTimeControl.js.map +1 -0
  171. package/lib/controls/index.d.ts +11 -9
  172. package/lib/controls/index.js +19 -14
  173. package/lib/controls/index.js.map +1 -1
  174. package/lib/extended/MaterialAutocompleteEnumControl.d.ts +1 -1
  175. package/lib/extended/MaterialAutocompleteEnumControl.js +3 -1
  176. package/lib/extended/MaterialAutocompleteEnumControl.js.map +1 -1
  177. package/lib/extended/MaterialAutocompleteOneOfEnumControl.d.ts +1 -1
  178. package/lib/extended/MaterialAutocompleteOneOfEnumControl.js +3 -1
  179. package/lib/extended/MaterialAutocompleteOneOfEnumControl.js.map +1 -1
  180. package/lib/extended/MuiAutocomplete.d.ts +3 -4
  181. package/lib/extended/MuiAutocomplete.js +7 -7
  182. package/lib/extended/MuiAutocomplete.js.map +1 -1
  183. package/lib/extended/index.d.ts +3 -3
  184. package/lib/extended/index.js +3 -2
  185. package/lib/extended/index.js.map +1 -1
  186. package/lib/index.js +3 -0
  187. package/lib/index.js.map +1 -1
  188. package/lib/jsonforms-material.js +248 -315
  189. package/lib/jsonforms-material.js.map +1 -1
  190. package/lib/layouts/ArrayToolbar.js +14 -16
  191. package/lib/layouts/ArrayToolbar.js.map +1 -1
  192. package/lib/layouts/ExpandPanelRenderer.d.ts +2 -3
  193. package/lib/layouts/ExpandPanelRenderer.js +47 -45
  194. package/lib/layouts/ExpandPanelRenderer.js.map +1 -1
  195. package/lib/layouts/MaterialArrayLayout.d.ts +1 -11
  196. package/lib/layouts/MaterialArrayLayout.js +19 -31
  197. package/lib/layouts/MaterialArrayLayout.js.map +1 -1
  198. package/lib/layouts/MaterialArrayLayoutRenderer.d.ts +1 -1
  199. package/lib/layouts/MaterialArrayLayoutRenderer.js +5 -3
  200. package/lib/layouts/MaterialArrayLayoutRenderer.js.map +1 -1
  201. package/lib/layouts/MaterialCategorizationLayout.d.ts +2 -10
  202. package/lib/layouts/MaterialCategorizationLayout.js +35 -52
  203. package/lib/layouts/MaterialCategorizationLayout.js.map +1 -1
  204. package/lib/layouts/MaterialCategorizationStepperLayout.d.ts +2 -9
  205. package/lib/layouts/MaterialCategorizationStepperLayout.js +45 -56
  206. package/lib/layouts/MaterialCategorizationStepperLayout.js.map +1 -1
  207. package/lib/layouts/MaterialGroupLayout.d.ts +1 -1
  208. package/lib/layouts/MaterialGroupLayout.js +11 -9
  209. package/lib/layouts/MaterialGroupLayout.js.map +1 -1
  210. package/lib/layouts/MaterialHorizontalLayout.d.ts +1 -1
  211. package/lib/layouts/MaterialHorizontalLayout.js +3 -1
  212. package/lib/layouts/MaterialHorizontalLayout.js.map +1 -1
  213. package/lib/layouts/MaterialVerticalLayout.d.ts +1 -1
  214. package/lib/layouts/MaterialVerticalLayout.js +3 -1
  215. package/lib/layouts/MaterialVerticalLayout.js.map +1 -1
  216. package/lib/layouts/index.js +6 -5
  217. package/lib/layouts/index.js.map +1 -1
  218. package/lib/mui-controls/MuiCheckbox.js +4 -4
  219. package/lib/mui-controls/MuiCheckbox.js.map +1 -1
  220. package/lib/mui-controls/MuiInputInteger.js +10 -7
  221. package/lib/mui-controls/MuiInputInteger.js.map +1 -1
  222. package/lib/mui-controls/MuiInputNumber.js +10 -7
  223. package/lib/mui-controls/MuiInputNumber.js.map +1 -1
  224. package/lib/mui-controls/MuiInputNumberFormat.js +8 -9
  225. package/lib/mui-controls/MuiInputNumberFormat.js.map +1 -1
  226. package/lib/mui-controls/MuiInputText.d.ts +1 -1
  227. package/lib/mui-controls/MuiInputText.js +17 -13
  228. package/lib/mui-controls/MuiInputText.js.map +1 -1
  229. package/lib/mui-controls/MuiInputTime.js +6 -4
  230. package/lib/mui-controls/MuiInputTime.js.map +1 -1
  231. package/lib/mui-controls/MuiSelect.js +4 -5
  232. package/lib/mui-controls/MuiSelect.js.map +1 -1
  233. package/lib/mui-controls/MuiToggle.js +4 -4
  234. package/lib/mui-controls/MuiToggle.js.map +1 -1
  235. package/lib/util/datejs.d.ts +3 -0
  236. package/lib/util/datejs.js +29 -0
  237. package/lib/util/datejs.js.map +1 -0
  238. package/lib/util/debounce.d.ts +1 -0
  239. package/lib/util/debounce.js +48 -0
  240. package/lib/util/debounce.js.map +1 -0
  241. package/lib/util/focus.d.ts +1 -0
  242. package/lib/util/focus.js +36 -0
  243. package/lib/util/focus.js.map +1 -0
  244. package/lib/util/index.d.ts +3 -0
  245. package/lib/util/index.js +4 -0
  246. package/lib/util/index.js.map +1 -1
  247. package/lib/util/layout.d.ts +2 -1
  248. package/lib/util/layout.js +13 -9
  249. package/lib/util/layout.js.map +1 -1
  250. package/lib/util/theme.d.ts +1 -1
  251. package/package.json +22 -26
  252. package/src/additional/ListWithDetailMasterItem.tsx +3 -6
  253. package/src/additional/MaterialLabelRenderer.tsx +1 -1
  254. package/src/additional/MaterialListWithDetailRenderer.tsx +4 -5
  255. package/src/cells/CustomizableCells.ts +1 -0
  256. package/src/cells/MaterialDateCell.tsx +1 -1
  257. package/src/cells/MaterialOneOfEnumCell.tsx +46 -0
  258. package/src/cells/MaterialTimeCell.tsx +1 -0
  259. package/src/cells/index.ts +5 -0
  260. package/src/complex/CombinatorProperties.tsx +2 -2
  261. package/src/complex/DeleteDialog.tsx +2 -2
  262. package/src/complex/MaterialAllOfRenderer.tsx +6 -5
  263. package/src/complex/MaterialAnyOfRenderer.tsx +5 -4
  264. package/src/complex/MaterialArrayControlRenderer.tsx +1 -1
  265. package/src/complex/MaterialEnumArrayRenderer.tsx +2 -1
  266. package/src/complex/MaterialObjectRenderer.tsx +6 -6
  267. package/src/complex/MaterialOneOfRenderer.tsx +9 -9
  268. package/src/complex/MaterialTableControl.tsx +45 -37
  269. package/src/complex/NoBorderTableCell.tsx +10 -12
  270. package/src/complex/TableToolbar.tsx +10 -9
  271. package/src/complex/ValidationIcon.tsx +12 -19
  272. package/src/controls/MaterialAnyOfStringOrEnumControl.tsx +17 -14
  273. package/src/controls/MaterialBooleanControl.tsx +1 -1
  274. package/src/controls/MaterialBooleanToggleControl.tsx +1 -1
  275. package/src/controls/MaterialDateControl.tsx +87 -119
  276. package/src/controls/MaterialDateTimeControl.tsx +91 -78
  277. package/src/controls/MaterialEnumControl.tsx +1 -1
  278. package/src/controls/MaterialInputControl.tsx +65 -72
  279. package/src/controls/MaterialNativeControl.tsx +55 -60
  280. package/src/controls/MaterialOneOfEnumControl.tsx +1 -1
  281. package/src/controls/MaterialOneOfRadioGroupControl.tsx +4 -4
  282. package/src/controls/MaterialRadioGroup.tsx +73 -74
  283. package/src/controls/MaterialRadioGroupControl.tsx +1 -1
  284. package/src/controls/MaterialSliderControl.tsx +93 -89
  285. package/src/controls/MaterialTimeControl.tsx +133 -0
  286. package/src/controls/index.ts +7 -0
  287. package/src/extended/MuiAutocomplete.tsx +11 -9
  288. package/src/extended/index.ts +1 -1
  289. package/src/index.ts +6 -0
  290. package/src/layouts/ArrayToolbar.tsx +11 -7
  291. package/src/layouts/ExpandPanelRenderer.tsx +46 -44
  292. package/src/layouts/MaterialArrayLayout.tsx +73 -83
  293. package/src/layouts/MaterialArrayLayoutRenderer.tsx +1 -1
  294. package/src/layouts/MaterialCategorizationLayout.tsx +50 -67
  295. package/src/layouts/MaterialCategorizationStepperLayout.tsx +80 -88
  296. package/src/layouts/MaterialGroupLayout.tsx +1 -1
  297. package/src/mui-controls/MuiCheckbox.tsx +2 -3
  298. package/src/mui-controls/MuiInputInteger.tsx +13 -10
  299. package/src/mui-controls/MuiInputNumber.tsx +10 -7
  300. package/src/mui-controls/MuiInputNumberFormat.tsx +9 -12
  301. package/src/mui-controls/MuiInputText.tsx +30 -21
  302. package/src/mui-controls/MuiInputTime.tsx +7 -5
  303. package/src/mui-controls/MuiSelect.tsx +4 -5
  304. package/src/mui-controls/MuiToggle.tsx +2 -3
  305. package/src/util/datejs.ts +32 -0
  306. package/src/util/debounce.ts +43 -0
  307. package/src/util/focus.ts +32 -0
  308. package/src/util/index.ts +3 -0
  309. package/src/util/layout.tsx +7 -8
  310. package/src/util/theme.ts +1 -1
  311. package/test/renderers/MaterialAllOfRenderer.test.tsx +1 -1
  312. package/test/renderers/MaterialAnyOfRenderer.test.tsx +15 -9
  313. package/test/renderers/MaterialAnyOfStringOrEnumControl.test.tsx +1 -1
  314. package/test/renderers/MaterialArrayControl.test.tsx +1 -1
  315. package/test/renderers/MaterialArrayLayout.test.tsx +9 -9
  316. package/test/renderers/MaterialBooleanCell.test.tsx +1 -1
  317. package/test/renderers/MaterialBooleanToggleCell.test.tsx +3 -2
  318. package/test/renderers/MaterialBooleanToggleControl.test.tsx +3 -3
  319. package/test/renderers/MaterialCategorizationLayout.test.tsx +75 -2
  320. package/test/renderers/MaterialCategorizationStepperLayout.test.tsx +75 -2
  321. package/test/renderers/MaterialDateCell.test.tsx +1 -1
  322. package/test/renderers/MaterialDateControl.test.tsx +46 -2
  323. package/test/renderers/MaterialDateTimeControl.test.tsx +57 -12
  324. package/test/renderers/MaterialEnumArrayRenderer.test.tsx +1 -1
  325. package/test/renderers/MaterialEnumCell.test.tsx +1 -1
  326. package/test/renderers/MaterialGroupLayout.test.tsx +1 -1
  327. package/test/renderers/MaterialInputControl.test.tsx +4 -4
  328. package/test/renderers/MaterialIntegerCell.test.tsx +42 -21
  329. package/test/renderers/MaterialLabelRenderer.test.tsx +1 -1
  330. package/test/renderers/MaterialLayouts.test.tsx +1 -1
  331. package/test/renderers/MaterialListWithDetailRenderer.test.tsx +2 -2
  332. package/test/renderers/MaterialNativeControl.test.tsx +2 -2
  333. package/test/renderers/MaterialNumberCell.test.tsx +46 -25
  334. package/test/renderers/MaterialObjectControl.test.tsx +1 -1
  335. package/test/renderers/MaterialOneOfEnumCell.test.tsx +93 -0
  336. package/test/renderers/MaterialOneOfRadioGroupControl.test.tsx +1 -1
  337. package/test/renderers/MaterialOneOfRenderer.test.tsx +20 -14
  338. package/test/renderers/MaterialRadioGroupControl.test.tsx +1 -1
  339. package/test/renderers/MaterialSliderControl.test.tsx +2 -2
  340. package/test/renderers/MaterialTextCell.test.tsx +47 -33
  341. package/test/renderers/MaterialTextControl.test.tsx +8 -4
  342. package/test/renderers/MaterialTimeCell.test.tsx +42 -21
  343. package/test/renderers/MaterialTimeControl.test.tsx +380 -0
  344. package/webpack/webpack.build.js +3 -3
  345. package/docs/classes/materialarraylayout.html +0 -777
  346. package/docs/classes/materialcategorizationlayoutrenderer.html +0 -786
  347. package/docs/classes/materialcategorizationstepperlayoutrenderer.html +0 -762
  348. package/docs/classes/materialdatecontrol.html +0 -825
  349. package/docs/classes/materialdatetimecontrol.html +0 -825
  350. package/docs/classes/materialinputcontrol.html +0 -825
  351. package/docs/classes/materialnativecontrol.html +0 -825
  352. package/docs/classes/materialradiogroup.html +0 -825
  353. package/docs/classes/materialslidercontrol.html +0 -825
  354. package/docs/interfaces/datecontrol.html +0 -157
  355. package/docs/interfaces/materialarraylayoutstate.html +0 -157
  356. package/docs/interfaces/statepropsofdatecontrol.html +0 -468
  357. package/example/CustomAutocomplete.tsx +0 -54
@@ -46,6 +46,10 @@ import MaterialDateTimeControl, {
46
46
  materialDateTimeControlTester,
47
47
  MaterialDateTimeControl as MaterialDateTimeControlUnwrapped
48
48
  } from './MaterialDateTimeControl';
49
+ import MaterialTimeControl, {
50
+ materialTimeControlTester,
51
+ MaterialTimeControl as MaterialTimeControlUnwrapped
52
+ } from './MaterialTimeControl';
49
53
  import MaterialSliderControl, {
50
54
  materialSliderControlTester,
51
55
  MaterialSliderControl as MaterialSliderControlUnwrapped
@@ -89,6 +93,7 @@ export const Unwrapped = {
89
93
  MaterialNativeControl: MaterialNativeControlUnwrapped,
90
94
  MaterialDateControl: MaterialDateControlUnwrapped,
91
95
  MaterialDateTimeControl: MaterialDateTimeControlUnwrapped,
96
+ MaterialTimeControl: MaterialTimeControlUnwrapped,
92
97
  MaterialSliderControl: MaterialSliderControlUnwrapped,
93
98
  MaterialRadioGroupControl: MaterialRadioGroupControlUnwrapped,
94
99
  MaterialIntegerControl: MaterialIntegerControlUnwrapped,
@@ -112,6 +117,8 @@ export {
112
117
  materialDateControlTester,
113
118
  MaterialDateTimeControl,
114
119
  materialDateTimeControlTester,
120
+ MaterialTimeControl,
121
+ materialTimeControlTester,
115
122
  MaterialSliderControl,
116
123
  materialSliderControlTester,
117
124
  MaterialRadioGroupControl,
@@ -25,19 +25,21 @@
25
25
  import React, { ReactNode } from 'react';
26
26
  import { EnumCellProps, EnumOption, WithClassname } from '@jsonforms/core';
27
27
 
28
- import Input from '@material-ui/core/Input';
29
- import Autocomplete, { AutocompleteRenderOptionState } from '@material-ui/lab/Autocomplete';
30
- import { areEqual } from '@jsonforms/react';
28
+ import {
29
+ Autocomplete,
30
+ AutocompleteRenderOptionState,
31
+ Input,
32
+ FilterOptionsState
33
+ } from '@mui/material';
31
34
  import merge from 'lodash/merge';
32
- import { FilterOptionsState } from '@material-ui/lab/useAutocomplete';
33
35
 
34
36
  export interface WithOptionLabel {
35
- getOptionLabel?(option: EnumOption) : string;
36
- renderOption?(option: EnumOption, state: AutocompleteRenderOptionState): ReactNode;
37
- filterOptions?(options: EnumOption[], state: FilterOptionsState<EnumOption>) : EnumOption[];
37
+ getOptionLabel?(option: EnumOption) : string;
38
+ renderOption?(props: React.HTMLAttributes<HTMLLIElement>, option: EnumOption, state: AutocompleteRenderOptionState): ReactNode;
39
+ filterOptions?(options: EnumOption[], state: FilterOptionsState<EnumOption>) : EnumOption[];
38
40
  }
39
41
 
40
- export const MuiAutocomplete = React.memo((props: EnumCellProps & WithClassname & WithOptionLabel) => {
42
+ export const MuiAutocomplete = (props: EnumCellProps & WithClassname & WithOptionLabel) => {
41
43
  const {
42
44
  data,
43
45
  className,
@@ -90,4 +92,4 @@ export const MuiAutocomplete = React.memo((props: EnumCellProps & WithClassname
90
92
  filterOptions={filterOptions}
91
93
  />
92
94
  );
93
- }, areEqual);
95
+ };
@@ -36,7 +36,7 @@ import { JsonFormsRendererRegistryEntry } from '@jsonforms/core';
36
36
  import { materialRenderers } from '../';
37
37
 
38
38
  /**
39
- * Includes all 'materialRenderers' and adds additional renderers based on '@material-ui/lab'
39
+ * Includes all 'materialRenderers' and adds additional renderers based on '@mui/lab'
40
40
  */
41
41
  export const extendedMaterialRenderers: JsonFormsRendererRegistryEntry[] = [
42
42
  {
package/src/index.ts CHANGED
@@ -57,6 +57,8 @@ import {
57
57
  materialDateControlTester,
58
58
  MaterialDateTimeControl,
59
59
  materialDateTimeControlTester,
60
+ MaterialTimeControl,
61
+ materialTimeControlTester,
60
62
  MaterialEnumControl,
61
63
  materialEnumControlTester,
62
64
  MaterialIntegerControl,
@@ -103,6 +105,8 @@ import {
103
105
  materialNumberCellTester,
104
106
  MaterialNumberFormatCell,
105
107
  materialNumberFormatCellTester,
108
+ MaterialOneOfEnumCell,
109
+ materialOneOfEnumCellTester,
106
110
  MaterialTextCell,
107
111
  materialTextCellTester,
108
112
  MaterialTimeCell,
@@ -134,6 +138,7 @@ export const materialRenderers: JsonFormsRendererRegistryEntry[] = [
134
138
  { tester: materialTextControlTester, renderer: MaterialTextControl },
135
139
  { tester: materialDateTimeControlTester, renderer: MaterialDateTimeControl },
136
140
  { tester: materialDateControlTester, renderer: MaterialDateControl },
141
+ { tester: materialTimeControlTester, renderer: MaterialTimeControl },
137
142
  { tester: materialSliderControlTester, renderer: MaterialSliderControl },
138
143
  { tester: materialObjectControlTester, renderer: MaterialObjectRenderer },
139
144
  { tester: materialAllOfControlTester, renderer: MaterialAllOfRenderer },
@@ -188,6 +193,7 @@ export const materialCells: JsonFormsCellRendererRegistryEntry[] = [
188
193
  { tester: materialIntegerCellTester, cell: MaterialIntegerCell },
189
194
  { tester: materialNumberCellTester, cell: MaterialNumberCell },
190
195
  { tester: materialNumberFormatCellTester, cell: MaterialNumberFormatCell },
196
+ { tester: materialOneOfEnumCellTester, cell: MaterialOneOfEnumCell },
191
197
  { tester: materialTextCellTester, cell: MaterialTextCell },
192
198
  { tester: materialTimeCellTester, cell: MaterialTimeCell }
193
199
  ];
@@ -1,8 +1,12 @@
1
- import { Grid, Hidden, Tooltip } from '@material-ui/core';
2
- import IconButton from '@material-ui/core/IconButton';
3
- import Toolbar from '@material-ui/core/Toolbar';
4
- import Typography from '@material-ui/core/Typography';
5
- import AddIcon from '@material-ui/icons/Add';
1
+ import {
2
+ Grid,
3
+ IconButton,
4
+ Hidden,
5
+ Toolbar,
6
+ Tooltip,
7
+ Typography
8
+ } from '@mui/material';
9
+ import AddIcon from '@mui/icons-material/Add';
6
10
  import React from 'react';
7
11
  import ValidationIcon from '../complex/ValidationIcon';
8
12
  export interface ArrayLayoutToolbarProps {
@@ -22,7 +26,7 @@ export const ArrayLayoutToolbar = React.memo(
22
26
  }: ArrayLayoutToolbarProps) => {
23
27
  return (
24
28
  <Toolbar disableGutters={true}>
25
- <Grid container alignItems='center' justify='space-between'>
29
+ <Grid container alignItems='center' justifyContent='space-between'>
26
30
  <Grid item>
27
31
  <Typography variant={'h6'}>{label}</Typography>
28
32
  </Grid>
@@ -42,7 +46,7 @@ export const ArrayLayoutToolbar = React.memo(
42
46
  <IconButton
43
47
  aria-label={`Add to ${label}`}
44
48
  onClick={addItem(path, createDefault())}
45
- >
49
+ size='large'>
46
50
  <AddIcon />
47
51
  </IconButton>
48
52
  </Tooltip>
@@ -1,10 +1,8 @@
1
1
  import merge from 'lodash/merge';
2
2
  import get from 'lodash/get';
3
- import React, { Dispatch, Fragment, ReducerAction, useMemo, useState } from 'react';
4
- import { ComponentType } from 'enzyme';
3
+ import React, { ComponentType, Dispatch, Fragment, ReducerAction, useMemo, useState, useEffect, useCallback } from 'react';
5
4
  import {
6
- areEqual,
7
- ResolvedJsonFormsDispatch,
5
+ JsonFormsDispatch,
8
6
  JsonFormsStateContext,
9
7
  withJsonFormsContext
10
8
  } from '@jsonforms/react';
@@ -20,19 +18,22 @@ import {
20
18
  update,
21
19
  JsonFormsCellRendererRegistryEntry,
22
20
  JsonFormsUISchemaRegistryEntry,
23
- getFirstPrimitiveProp
21
+ getFirstPrimitiveProp,
22
+ createId,
23
+ removeId
24
24
  } from '@jsonforms/core';
25
- import ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails';
26
- import IconButton from '@material-ui/core/IconButton';
27
- import ExpansionPanel from '@material-ui/core/ExpansionPanel';
28
- import ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary';
29
- import { Grid } from '@material-ui/core';
30
- import ExpandMoreIcon from '@material-ui/icons/ExpandMore';
31
- import Avatar from '@material-ui/core/Avatar';
32
- import DeleteIcon from '@material-ui/icons/Delete';
33
- import ArrowUpward from '@material-ui/icons/ArrowUpward';
34
- import ArrowDownward from '@material-ui/icons/ArrowDownward';
35
- import uuid from 'uuid/v1';
25
+ import {
26
+ Accordion,
27
+ AccordionSummary,
28
+ AccordionDetails,
29
+ Avatar,
30
+ Grid,
31
+ IconButton
32
+ } from '@mui/material';
33
+ import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
34
+ import DeleteIcon from '@mui/icons-material/Delete';
35
+ import ArrowUpward from '@mui/icons-material/ArrowUpward';
36
+ import ArrowDownward from '@mui/icons-material/ArrowDownward';
36
37
 
37
38
  const iconStyle: any = { float: 'right' };
38
39
 
@@ -73,8 +74,14 @@ export interface ExpandPanelProps
73
74
  extends StatePropsOfExpandPanel,
74
75
  DispatchPropsOfExpandPanel {}
75
76
 
76
- const ExpandPanelRenderer = (props: ExpandPanelProps) => {
77
- const [labelHtmlId] = useState(`id${uuid()}`);
77
+ const ExpandPanelRendererComponent = (props: ExpandPanelProps) => {
78
+ const [labelHtmlId] = useState<string>(createId('expand-panel'));
79
+
80
+ useEffect(() => {
81
+ return () => {
82
+ removeId(labelHtmlId);
83
+ };
84
+ }, [labelHtmlId]);
78
85
 
79
86
  const {
80
87
  childLabel,
@@ -114,12 +121,12 @@ const ExpandPanelRenderer = (props: ExpandPanelProps) => {
114
121
  const appliedUiSchemaOptions = merge({}, config, uischema.options);
115
122
 
116
123
  return (
117
- <ExpansionPanel
124
+ <Accordion
118
125
  aria-labelledby={labelHtmlId}
119
126
  expanded={expanded}
120
127
  onChange={handleExpansion(childPath)}
121
128
  >
122
- <ExpansionPanelSummary expandIcon={<ExpandMoreIcon />}>
129
+ <AccordionSummary expandIcon={<ExpandMoreIcon />}>
123
130
  <Grid container alignItems={'center'}>
124
131
  <Grid item xs={7} md={9}>
125
132
  <Grid container alignItems={'center'}>
@@ -132,12 +139,12 @@ const ExpandPanelRenderer = (props: ExpandPanelProps) => {
132
139
  </Grid>
133
140
  </Grid>
134
141
  <Grid item xs={5} md={3}>
135
- <Grid container justify={'flex-end'}>
142
+ <Grid container justifyContent='flex-end'>
136
143
  <Grid item>
137
144
  <Grid
138
145
  container
139
146
  direction='row'
140
- justify='center'
147
+ justifyContent='center'
141
148
  alignItems='center'
142
149
  >
143
150
  {appliedUiSchemaOptions.showSortButtons ? (
@@ -148,7 +155,7 @@ const ExpandPanelRenderer = (props: ExpandPanelProps) => {
148
155
  style={iconStyle}
149
156
  disabled={!enableMoveUp}
150
157
  aria-label={`Move up`}
151
- >
158
+ size='large'>
152
159
  <ArrowUpward />
153
160
  </IconButton>
154
161
  </Grid>
@@ -158,7 +165,7 @@ const ExpandPanelRenderer = (props: ExpandPanelProps) => {
158
165
  style={iconStyle}
159
166
  disabled={!enableMoveDown}
160
167
  aria-label={`Move down`}
161
- >
168
+ size='large'>
162
169
  <ArrowDownward />
163
170
  </IconButton>
164
171
  </Grid>
@@ -171,7 +178,7 @@ const ExpandPanelRenderer = (props: ExpandPanelProps) => {
171
178
  onClick={removeItems(path, [index])}
172
179
  style={iconStyle}
173
180
  aria-label={`Delete`}
174
- >
181
+ size='large'>
175
182
  <DeleteIcon />
176
183
  </IconButton>
177
184
  </Grid>
@@ -180,9 +187,9 @@ const ExpandPanelRenderer = (props: ExpandPanelProps) => {
180
187
  </Grid>
181
188
  </Grid>
182
189
  </Grid>
183
- </ExpansionPanelSummary>
184
- <ExpansionPanelDetails>
185
- <ResolvedJsonFormsDispatch
190
+ </AccordionSummary>
191
+ <AccordionDetails>
192
+ <JsonFormsDispatch
186
193
  schema={schema}
187
194
  uischema={foundUISchema}
188
195
  path={childPath}
@@ -190,11 +197,13 @@ const ExpandPanelRenderer = (props: ExpandPanelProps) => {
190
197
  renderers={renderers}
191
198
  cells={cells}
192
199
  />
193
- </ExpansionPanelDetails>
194
- </ExpansionPanel>
200
+ </AccordionDetails>
201
+ </Accordion>
195
202
  );
196
203
  };
197
204
 
205
+ const ExpandPanelRenderer = React.memo(ExpandPanelRendererComponent);
206
+
198
207
  /**
199
208
  * Maps state to dispatch properties of an expand pandel control.
200
209
  *
@@ -204,7 +213,7 @@ const ExpandPanelRenderer = (props: ExpandPanelProps) => {
204
213
  export const ctxDispatchToExpandPanelProps: (
205
214
  dispatch: Dispatch<ReducerAction<any>>
206
215
  ) => DispatchPropsOfExpandPanel = dispatch => ({
207
- removeItems: (path: string, toDelete: number[]) => (event: any): void => {
216
+ removeItems: useCallback((path: string, toDelete: number[]) => (event: any): void => {
208
217
  event.stopPropagation();
209
218
  dispatch(
210
219
  update(path, array => {
@@ -215,8 +224,8 @@ export const ctxDispatchToExpandPanelProps: (
215
224
  return array;
216
225
  })
217
226
  );
218
- },
219
- moveUp: (path: string, toMove: number) => (event: any): void => {
227
+ }, [dispatch]),
228
+ moveUp: useCallback((path: string, toMove: number) => (event: any): void => {
220
229
  event.stopPropagation();
221
230
  dispatch(
222
231
  update(path, array => {
@@ -224,8 +233,8 @@ export const ctxDispatchToExpandPanelProps: (
224
233
  return array;
225
234
  })
226
235
  );
227
- },
228
- moveDown: (path: string, toMove: number) => (event: any): void => {
236
+ }, [dispatch]),
237
+ moveDown: useCallback((path: string, toMove: number) => (event: any): void => {
229
238
  event.stopPropagation();
230
239
  dispatch(
231
240
  update(path, array => {
@@ -233,7 +242,7 @@ export const ctxDispatchToExpandPanelProps: (
233
242
  return array;
234
243
  })
235
244
  );
236
- }
245
+ }, [dispatch])
237
246
  });
238
247
 
239
248
  /**
@@ -271,13 +280,6 @@ export const withJsonFormsExpandPanelProps = (
271
280
  Component: ComponentType<ExpandPanelProps>
272
281
  ): ComponentType<OwnPropsOfExpandPanel> =>
273
282
  withJsonFormsContext(
274
- withContextToExpandPanelProps(
275
- React.memo(
276
- Component,
277
- (prevProps: ExpandPanelProps, nextProps: ExpandPanelProps) =>
278
- areEqual(prevProps, nextProps)
279
- )
280
- )
281
- );
283
+ withContextToExpandPanelProps(Component));
282
284
 
283
285
  export default withJsonFormsExpandPanelProps(ExpandPanelRenderer);
@@ -23,100 +23,90 @@
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,
30
30
  computeLabel,
31
31
  createDefaultValue,
32
- isPlainLabel
33
32
  } from '@jsonforms/core';
34
33
  import map from 'lodash/map';
35
34
  import { ArrayLayoutToolbar } from './ArrayToolbar';
36
35
  import ExpandPanelRenderer from './ExpandPanelRenderer';
37
36
  import merge from 'lodash/merge';
38
37
 
39
- interface MaterialArrayLayoutState {
40
- expanded: string | boolean;
41
- }
42
- export class MaterialArrayLayout extends React.PureComponent<
43
- ArrayLayoutProps,
44
- MaterialArrayLayoutState
45
- > {
46
- state: MaterialArrayLayoutState = {
47
- expanded: null
48
- };
49
- innerCreateDefaultValue = () => createDefaultValue(this.props.schema);
50
- handleChange = (panel: string) => (_event: any, expanded: boolean) => {
51
- this.setState({
52
- expanded: expanded ? panel : false
53
- });
54
- };
55
- isExpanded = (index: number) =>
56
- this.state.expanded === composePaths(this.props.path, `${index}`);
57
- render() {
58
- const {
59
- data,
60
- path,
61
- schema,
62
- uischema,
63
- errors,
64
- addItem,
65
- renderers,
66
- cells,
67
- label,
68
- required,
69
- rootSchema,
70
- config,
71
- uischemas
72
- } = this.props;
73
- const appliedUiSchemaOptions = merge(
74
- {},
75
- config,
76
- this.props.uischema.options
77
- );
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
+ );
78
67
 
79
- 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
+ />
80
81
  <div>
81
- <ArrayLayoutToolbar
82
- label={computeLabel(
83
- isPlainLabel(label) ? label : label.default,
84
- required,
85
- appliedUiSchemaOptions.hideRequiredAsterisk
86
- )}
87
- errors={errors}
88
- path={path}
89
- addItem={addItem}
90
- createDefault={this.innerCreateDefaultValue}
91
- />
92
- <div>
93
- {data > 0 ? (
94
- map(range(data), index => {
95
- return (
96
- <ExpandPanelRenderer
97
- index={index}
98
- expanded={this.isExpanded(index)}
99
- schema={schema}
100
- path={path}
101
- handleExpansion={this.handleChange}
102
- uischema={uischema}
103
- renderers={renderers}
104
- cells={cells}
105
- key={index}
106
- rootSchema={rootSchema}
107
- enableMoveUp={index != 0}
108
- enableMoveDown={index < data - 1}
109
- config={config}
110
- childLabelProp={appliedUiSchemaOptions.elementLabelProp}
111
- uischemas={uischemas}
112
- />
113
- );
114
- })
115
- ) : (
116
- <p>No data</p>
117
- )}
118
- </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
+ )}
119
107
  </div>
120
- );
121
- }
122
- }
108
+ </div>
109
+ );
110
+ };
111
+
112
+ export const MaterialArrayLayout = React.memo(MaterialArrayLayoutComponent);
@@ -30,7 +30,7 @@ import {
30
30
  RankedTester,
31
31
  rankWith
32
32
  } from '@jsonforms/core';
33
- import { Hidden } from '@material-ui/core';
33
+ import { Hidden } from '@mui/material';
34
34
  import { MaterialArrayLayout } from './MaterialArrayLayout';
35
35
  import { withJsonFormsArrayLayoutProps } from '@jsonforms/react';
36
36
 
@@ -22,9 +22,8 @@
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';
26
- import { Hidden, Tab, Tabs } from '@material-ui/core';
27
- import AppBar from '@material-ui/core/AppBar';
25
+ import React, {useState} from 'react';
26
+ import { AppBar, Hidden, Tab, Tabs } from '@mui/material';
28
27
  import {
29
28
  and,
30
29
  Categorization,
@@ -37,7 +36,7 @@ import {
37
36
  UISchemaElement,
38
37
  uiTypeIs
39
38
  } from '@jsonforms/core';
40
- import { RendererComponent, withJsonFormsLayoutProps } from '@jsonforms/react';
39
+ import { withJsonFormsLayoutProps } from '@jsonforms/react';
41
40
  import {
42
41
  AjvProps,
43
42
  MaterialLayoutRenderer,
@@ -76,71 +75,55 @@ export interface MaterialCategorizationLayoutRendererProps
76
75
  onChange?(selected: number, prevSelected: number): void;
77
76
  }
78
77
 
79
- export class MaterialCategorizationLayoutRenderer extends RendererComponent<
80
- MaterialCategorizationLayoutRendererProps,
81
- CategorizationState
82
- > {
83
- state = {
84
- activeCategory: 0
78
+ export const MaterialCategorizationLayoutRenderer = (props: MaterialCategorizationLayoutRendererProps) => {
79
+ const {
80
+ data,
81
+ path,
82
+ renderers,
83
+ cells,
84
+ schema,
85
+ uischema,
86
+ visible,
87
+ enabled,
88
+ selected,
89
+ onChange,
90
+ ajv
91
+ } = props;
92
+ const categorization = uischema as Categorization;
93
+ const [activeCategory, setActiveCategory]= useState<number|undefined>(selected??0);
94
+ const categories = categorization.elements.filter((category: Category) =>
95
+ isVisible(category, data, undefined, ajv)
96
+ );
97
+ const childProps: MaterialLayoutRendererProps = {
98
+ elements: categories[activeCategory].elements,
99
+ schema,
100
+ path,
101
+ direction: 'column',
102
+ enabled,
103
+ visible,
104
+ renderers,
105
+ cells
85
106
  };
86
-
87
- render() {
88
- const {
89
- data,
90
- path,
91
- renderers,
92
- cells,
93
- schema,
94
- uischema,
95
- visible,
96
- enabled,
97
- selected,
98
- ajv
99
- } = this.props;
100
- const categorization = uischema as Categorization;
101
- const value = this.hasOwnState() ? this.state.activeCategory : selected;
102
- const childProps: MaterialLayoutRendererProps = {
103
- elements: categorization.elements[value].elements,
104
- schema,
105
- path,
106
- direction: 'column',
107
- enabled,
108
- visible,
109
- renderers,
110
- cells
111
- };
112
- const categories = categorization.elements.filter((category: Category) =>
113
- isVisible(category, data, undefined, ajv)
114
- );
115
- return (
116
- <Hidden xsUp={!visible}>
117
- <AppBar position='static'>
118
- <Tabs value={value} onChange={this.handleChange} variant='scrollable'>
119
- {categories.map((e: Category, idx: number) => (
120
- <Tab key={idx} label={e.label} />
121
- ))}
122
- </Tabs>
123
- </AppBar>
124
- <div style={{ marginTop: '0.5em' }}>
125
- <MaterialLayoutRenderer {...childProps} />
126
- </div>
127
- </Hidden>
128
- );
129
- }
130
-
131
- hasOwnState = () => {
132
- return this.props.ownState !== undefined ? this.props.ownState : true;
133
- };
134
-
135
- private handleChange = (_event: any, value: any) => {
136
- if (this.props.onChange) {
137
- this.props.onChange(value, this.state.activeCategory);
138
- }
139
- const hasOwnState = this.hasOwnState();
140
- if (hasOwnState) {
141
- this.setState({ activeCategory: value });
107
+ const onTabChange = (_event: any, value: any) => {
108
+ if (onChange) {
109
+ onChange(value, activeCategory);
142
110
  }
111
+ setActiveCategory(value);
143
112
  };
144
- }
113
+ return (
114
+ <Hidden xsUp={!visible}>
115
+ <AppBar position='static'>
116
+ <Tabs value={activeCategory} onChange={onTabChange} textColor='inherit' indicatorColor='secondary' variant='scrollable'>
117
+ {categories.map((e: Category, idx: number) => (
118
+ <Tab key={idx} label={e.label} />
119
+ ))}
120
+ </Tabs>
121
+ </AppBar>
122
+ <div style={{ marginTop: '0.5em' }}>
123
+ <MaterialLayoutRenderer {...childProps} />
124
+ </div>
125
+ </Hidden>
126
+ );
127
+ };
145
128
 
146
129
  export default withJsonFormsLayoutProps(withAjvProps(MaterialCategorizationLayoutRenderer));