@applica-software-guru/react-admin 1.3.143 → 1.3.145

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 (532) hide show
  1. package/dist/react-admin.cjs.js +59 -59
  2. package/dist/react-admin.cjs.js.map +1 -1
  3. package/dist/react-admin.es.js +10878 -10212
  4. package/dist/react-admin.es.js.map +1 -1
  5. package/dist/react-admin.umd.js +60 -60
  6. package/dist/react-admin.umd.js.map +1 -1
  7. package/package.json +1 -1
  8. package/src/components/ra-forms/LongForm/Form.tsx +2 -1
  9. package/src/components/ra-forms/LongForm/NavMenu.tsx +25 -3
  10. package/src/components/ra-forms/LongForm/Provider.tsx +35 -2
  11. package/src/components/ra-forms/LongForm/Tab.tsx +39 -7
  12. package/src/components/ra-forms/LongForm/index.ts +3 -0
  13. package/src/components/ra-forms/LongForm/types.ts +1 -0
  14. package/src/components/ra-lists/BulkActionsToolbar.tsx +141 -0
  15. package/src/components/ra-lists/BulkFloatingActionsToolbar.tsx +100 -0
  16. package/src/components/ra-lists/Datagrid/Datagrid.tsx +345 -0
  17. package/src/components/ra-lists/Datagrid/DatagridContext.ts +13 -0
  18. package/src/components/ra-lists/Datagrid/DatagridContextProvider.tsx +8 -0
  19. package/src/components/ra-lists/{Datagrid.tsx → Datagrid/index.tsx} +6 -9
  20. package/src/components/ra-lists/index.ts +6 -5
  21. package/src/playground/components/ra-forms/TestModelForm.jsx +18 -0
  22. package/vite.config.js +8 -8
  23. package/dist/Admin.d.ts +0 -10
  24. package/dist/Admin.d.ts.map +0 -1
  25. package/dist/AdminContext.d.ts +0 -10
  26. package/dist/AdminContext.d.ts.map +0 -1
  27. package/dist/ApplicaAdmin.d.ts +0 -142
  28. package/dist/ApplicaAdmin.d.ts.map +0 -1
  29. package/dist/components/@extended/AnimateButton.d.ts +0 -22
  30. package/dist/components/@extended/AnimateButton.d.ts.map +0 -1
  31. package/dist/components/@extended/Avatar.d.ts +0 -20
  32. package/dist/components/@extended/Avatar.d.ts.map +0 -1
  33. package/dist/components/@extended/Breadcrumbs.d.ts +0 -53
  34. package/dist/components/@extended/Breadcrumbs.d.ts.map +0 -1
  35. package/dist/components/@extended/Dot.d.ts +0 -17
  36. package/dist/components/@extended/Dot.d.ts.map +0 -1
  37. package/dist/components/@extended/IconButton.d.ts +0 -3
  38. package/dist/components/@extended/IconButton.d.ts.map +0 -1
  39. package/dist/components/@extended/LoadingButton.d.ts +0 -3
  40. package/dist/components/@extended/LoadingButton.d.ts.map +0 -1
  41. package/dist/components/@extended/Tooltip.d.ts +0 -17
  42. package/dist/components/@extended/Tooltip.d.ts.map +0 -1
  43. package/dist/components/@extended/Transitions.d.ts +0 -4
  44. package/dist/components/@extended/Transitions.d.ts.map +0 -1
  45. package/dist/components/@extended/index.d.ts +0 -11
  46. package/dist/components/@extended/index.d.ts.map +0 -1
  47. package/dist/components/@extended/progress/CircularWithLabel.d.ts +0 -12
  48. package/dist/components/@extended/progress/CircularWithLabel.d.ts.map +0 -1
  49. package/dist/components/@extended/progress/CircularWithPath.d.ts +0 -25
  50. package/dist/components/@extended/progress/CircularWithPath.d.ts.map +0 -1
  51. package/dist/components/@extended/progress/LinearWithIcon.d.ts +0 -14
  52. package/dist/components/@extended/progress/LinearWithIcon.d.ts.map +0 -1
  53. package/dist/components/@extended/progress/LinearWithLabel.d.ts +0 -12
  54. package/dist/components/@extended/progress/LinearWithLabel.d.ts.map +0 -1
  55. package/dist/components/@extended/progress/index.d.ts +0 -6
  56. package/dist/components/@extended/progress/index.d.ts.map +0 -1
  57. package/dist/components/ActionsMenu.d.ts +0 -31
  58. package/dist/components/ActionsMenu.d.ts.map +0 -1
  59. package/dist/components/AuthBackground.d.ts +0 -3
  60. package/dist/components/AuthBackground.d.ts.map +0 -1
  61. package/dist/components/AuthCard.d.ts +0 -12
  62. package/dist/components/AuthCard.d.ts.map +0 -1
  63. package/dist/components/AuthWrapper.d.ts +0 -19
  64. package/dist/components/AuthWrapper.d.ts.map +0 -1
  65. package/dist/components/Layout/Content.d.ts +0 -8
  66. package/dist/components/Layout/Content.d.ts.map +0 -1
  67. package/dist/components/Layout/Drawer/Drawer.d.ts +0 -8
  68. package/dist/components/Layout/Drawer/Drawer.d.ts.map +0 -1
  69. package/dist/components/Layout/Drawer/DrawerHeader.d.ts +0 -8
  70. package/dist/components/Layout/Drawer/DrawerHeader.d.ts.map +0 -1
  71. package/dist/components/Layout/Drawer/DrawerHeaderStyled.d.ts +0 -4
  72. package/dist/components/Layout/Drawer/DrawerHeaderStyled.d.ts.map +0 -1
  73. package/dist/components/Layout/Drawer/MiniDrawerStyled.d.ts +0 -3
  74. package/dist/components/Layout/Drawer/MiniDrawerStyled.d.ts.map +0 -1
  75. package/dist/components/Layout/Drawer/index.d.ts +0 -4
  76. package/dist/components/Layout/Drawer/index.d.ts.map +0 -1
  77. package/dist/components/Layout/Error.d.ts +0 -27
  78. package/dist/components/Layout/Error.d.ts.map +0 -1
  79. package/dist/components/Layout/Footer.d.ts +0 -19
  80. package/dist/components/Layout/Footer.d.ts.map +0 -1
  81. package/dist/components/Layout/Header/AppBarStyled.d.ts +0 -5
  82. package/dist/components/Layout/Header/AppBarStyled.d.ts.map +0 -1
  83. package/dist/components/Layout/Header/DrawerToggle.d.ts +0 -3
  84. package/dist/components/Layout/Header/DrawerToggle.d.ts.map +0 -1
  85. package/dist/components/Layout/Header/Header.d.ts +0 -8
  86. package/dist/components/Layout/Header/Header.d.ts.map +0 -1
  87. package/dist/components/Layout/Header/Notification/Notification.d.ts +0 -3
  88. package/dist/components/Layout/Header/Notification/Notification.d.ts.map +0 -1
  89. package/dist/components/Layout/Header/Notification/NotificationItem.d.ts +0 -19
  90. package/dist/components/Layout/Header/Notification/NotificationItem.d.ts.map +0 -1
  91. package/dist/components/Layout/Header/Notification/index.d.ts +0 -2
  92. package/dist/components/Layout/Header/Notification/index.d.ts.map +0 -1
  93. package/dist/components/Layout/Header/Profile/Profile.d.ts +0 -3
  94. package/dist/components/Layout/Header/Profile/Profile.d.ts.map +0 -1
  95. package/dist/components/Layout/Header/Profile/buttons/ChangePasswordButton.d.ts +0 -3
  96. package/dist/components/Layout/Header/Profile/buttons/ChangePasswordButton.d.ts.map +0 -1
  97. package/dist/components/Layout/Header/Profile/buttons/LogoutButton.d.ts +0 -3
  98. package/dist/components/Layout/Header/Profile/buttons/LogoutButton.d.ts.map +0 -1
  99. package/dist/components/Layout/Header/Profile/buttons/StopImpersonateButton.d.ts +0 -3
  100. package/dist/components/Layout/Header/Profile/buttons/StopImpersonateButton.d.ts.map +0 -1
  101. package/dist/components/Layout/Header/Profile/buttons/index.d.ts +0 -5
  102. package/dist/components/Layout/Header/Profile/buttons/index.d.ts.map +0 -1
  103. package/dist/components/Layout/Header/Profile/index.d.ts +0 -2
  104. package/dist/components/Layout/Header/Profile/index.d.ts.map +0 -1
  105. package/dist/components/Layout/Header/ResponsiveSection.d.ts +0 -5
  106. package/dist/components/Layout/Header/ResponsiveSection.d.ts.map +0 -1
  107. package/dist/components/Layout/Header/Spacer.d.ts +0 -5
  108. package/dist/components/Layout/Header/Spacer.d.ts.map +0 -1
  109. package/dist/components/Layout/Header/index.d.ts +0 -8
  110. package/dist/components/Layout/Header/index.d.ts.map +0 -1
  111. package/dist/components/Layout/HorizontalBar.d.ts +0 -5
  112. package/dist/components/Layout/HorizontalBar.d.ts.map +0 -1
  113. package/dist/components/Layout/Layout.d.ts +0 -24
  114. package/dist/components/Layout/Layout.d.ts.map +0 -1
  115. package/dist/components/Layout/NavMenu.d.ts +0 -5
  116. package/dist/components/Layout/NavMenu.d.ts.map +0 -1
  117. package/dist/components/Layout/Navigation/NavCollapse.d.ts +0 -23
  118. package/dist/components/Layout/Navigation/NavCollapse.d.ts.map +0 -1
  119. package/dist/components/Layout/Navigation/NavGroup.d.ts +0 -24
  120. package/dist/components/Layout/Navigation/NavGroup.d.ts.map +0 -1
  121. package/dist/components/Layout/Navigation/NavItem.d.ts +0 -13
  122. package/dist/components/Layout/Navigation/NavItem.d.ts.map +0 -1
  123. package/dist/components/Layout/Navigation/Navigation.d.ts +0 -7
  124. package/dist/components/Layout/Navigation/Navigation.d.ts.map +0 -1
  125. package/dist/components/Layout/Navigation/index.d.ts +0 -2
  126. package/dist/components/Layout/Navigation/index.d.ts.map +0 -1
  127. package/dist/components/Layout/Provider.d.ts +0 -84
  128. package/dist/components/Layout/Provider.d.ts.map +0 -1
  129. package/dist/components/Layout/Wrapper.d.ts +0 -6
  130. package/dist/components/Layout/Wrapper.d.ts.map +0 -1
  131. package/dist/components/Layout/index.d.ts +0 -12
  132. package/dist/components/Layout/index.d.ts.map +0 -1
  133. package/dist/components/Loadable.d.ts +0 -3
  134. package/dist/components/Loadable.d.ts.map +0 -1
  135. package/dist/components/Loader.d.ts +0 -3
  136. package/dist/components/Loader.d.ts.map +0 -1
  137. package/dist/components/Logo.d.ts +0 -20
  138. package/dist/components/Logo.d.ts.map +0 -1
  139. package/dist/components/MainCard.d.ts +0 -72
  140. package/dist/components/MainCard.d.ts.map +0 -1
  141. package/dist/components/MainIcon.d.ts +0 -11
  142. package/dist/components/MainIcon.d.ts.map +0 -1
  143. package/dist/components/MenuPopover/MenuPopover.d.ts +0 -20
  144. package/dist/components/MenuPopover/MenuPopover.d.ts.map +0 -1
  145. package/dist/components/MenuPopover/getPosition.d.ts +0 -51
  146. package/dist/components/MenuPopover/getPosition.d.ts.map +0 -1
  147. package/dist/components/MenuPopover/index.d.ts +0 -4
  148. package/dist/components/MenuPopover/index.d.ts.map +0 -1
  149. package/dist/components/MenuPopover/styles.d.ts +0 -2
  150. package/dist/components/MenuPopover/styles.d.ts.map +0 -1
  151. package/dist/components/Notification.d.ts +0 -7
  152. package/dist/components/Notification.d.ts.map +0 -1
  153. package/dist/components/ScrollTop.d.ts +0 -11
  154. package/dist/components/ScrollTop.d.ts.map +0 -1
  155. package/dist/components/ScrollX.d.ts +0 -3
  156. package/dist/components/ScrollX.d.ts.map +0 -1
  157. package/dist/components/SmallIcon.d.ts +0 -11
  158. package/dist/components/SmallIcon.d.ts.map +0 -1
  159. package/dist/components/index.d.ts +0 -24
  160. package/dist/components/index.d.ts.map +0 -1
  161. package/dist/components/ra-buttons/CreateInDialogButton.d.ts +0 -62
  162. package/dist/components/ra-buttons/CreateInDialogButton.d.ts.map +0 -1
  163. package/dist/components/ra-buttons/EditInDialogButton.d.ts +0 -24
  164. package/dist/components/ra-buttons/EditInDialogButton.d.ts.map +0 -1
  165. package/dist/components/ra-buttons/ImpersonateUserButton.d.ts +0 -12
  166. package/dist/components/ra-buttons/ImpersonateUserButton.d.ts.map +0 -1
  167. package/dist/components/ra-buttons/index.d.ts +0 -5
  168. package/dist/components/ra-buttons/index.d.ts.map +0 -1
  169. package/dist/components/ra-custom/ListItem.d.ts +0 -45
  170. package/dist/components/ra-custom/ListItem.d.ts.map +0 -1
  171. package/dist/components/ra-custom/index.d.ts +0 -3
  172. package/dist/components/ra-custom/index.d.ts.map +0 -1
  173. package/dist/components/ra-fields/ActionsField.d.ts +0 -23
  174. package/dist/components/ra-fields/ActionsField.d.ts.map +0 -1
  175. package/dist/components/ra-fields/AttachmentField.d.ts +0 -36
  176. package/dist/components/ra-fields/AttachmentField.d.ts.map +0 -1
  177. package/dist/components/ra-fields/BaseAttachmentField.d.ts +0 -32
  178. package/dist/components/ra-fields/BaseAttachmentField.d.ts.map +0 -1
  179. package/dist/components/ra-fields/CoverField.d.ts +0 -48
  180. package/dist/components/ra-fields/CoverField.d.ts.map +0 -1
  181. package/dist/components/ra-fields/DateAgoField.d.ts +0 -10
  182. package/dist/components/ra-fields/DateAgoField.d.ts.map +0 -1
  183. package/dist/components/ra-fields/DateField.d.ts +0 -7
  184. package/dist/components/ra-fields/DateField.d.ts.map +0 -1
  185. package/dist/components/ra-fields/EmailField.d.ts +0 -18
  186. package/dist/components/ra-fields/EmailField.d.ts.map +0 -1
  187. package/dist/components/ra-fields/FileField.d.ts +0 -29
  188. package/dist/components/ra-fields/FileField.d.ts.map +0 -1
  189. package/dist/components/ra-fields/FunctionField.d.ts +0 -8
  190. package/dist/components/ra-fields/FunctionField.d.ts.map +0 -1
  191. package/dist/components/ra-fields/ImageField.d.ts +0 -20
  192. package/dist/components/ra-fields/ImageField.d.ts.map +0 -1
  193. package/dist/components/ra-fields/ReadonlyField.d.ts +0 -27
  194. package/dist/components/ra-fields/ReadonlyField.d.ts.map +0 -1
  195. package/dist/components/ra-fields/ReferenceManyField.d.ts +0 -77
  196. package/dist/components/ra-fields/ReferenceManyField.d.ts.map +0 -1
  197. package/dist/components/ra-fields/SizeField.d.ts +0 -13
  198. package/dist/components/ra-fields/SizeField.d.ts.map +0 -1
  199. package/dist/components/ra-fields/TextField.d.ts +0 -7
  200. package/dist/components/ra-fields/TextField.d.ts.map +0 -1
  201. package/dist/components/ra-fields/index.d.ts +0 -15
  202. package/dist/components/ra-fields/index.d.ts.map +0 -1
  203. package/dist/components/ra-forms/CardForm.d.ts +0 -31
  204. package/dist/components/ra-forms/CardForm.d.ts.map +0 -1
  205. package/dist/components/ra-forms/ChangePasswordForm.d.ts +0 -7
  206. package/dist/components/ra-forms/ChangePasswordForm.d.ts.map +0 -1
  207. package/dist/components/ra-forms/Create.d.ts +0 -12
  208. package/dist/components/ra-forms/Create.d.ts.map +0 -1
  209. package/dist/components/ra-forms/Edit.d.ts +0 -26
  210. package/dist/components/ra-forms/Edit.d.ts.map +0 -1
  211. package/dist/components/ra-forms/FormHeader.d.ts +0 -29
  212. package/dist/components/ra-forms/FormHeader.d.ts.map +0 -1
  213. package/dist/components/ra-forms/LongForm/BaseForm.d.ts +0 -8
  214. package/dist/components/ra-forms/LongForm/BaseForm.d.ts.map +0 -1
  215. package/dist/components/ra-forms/LongForm/Content.d.ts +0 -8
  216. package/dist/components/ra-forms/LongForm/Content.d.ts.map +0 -1
  217. package/dist/components/ra-forms/LongForm/Form.d.ts +0 -11
  218. package/dist/components/ra-forms/LongForm/Form.d.ts.map +0 -1
  219. package/dist/components/ra-forms/LongForm/NavMenu.d.ts +0 -19
  220. package/dist/components/ra-forms/LongForm/NavMenu.d.ts.map +0 -1
  221. package/dist/components/ra-forms/LongForm/Provider.d.ts +0 -17
  222. package/dist/components/ra-forms/LongForm/Provider.d.ts.map +0 -1
  223. package/dist/components/ra-forms/LongForm/Sidebar.d.ts +0 -23
  224. package/dist/components/ra-forms/LongForm/Sidebar.d.ts.map +0 -1
  225. package/dist/components/ra-forms/LongForm/Tab.d.ts +0 -11
  226. package/dist/components/ra-forms/LongForm/Tab.d.ts.map +0 -1
  227. package/dist/components/ra-forms/LongForm/hooks.d.ts +0 -6
  228. package/dist/components/ra-forms/LongForm/hooks.d.ts.map +0 -1
  229. package/dist/components/ra-forms/LongForm/index.d.ts +0 -32
  230. package/dist/components/ra-forms/LongForm/index.d.ts.map +0 -1
  231. package/dist/components/ra-forms/LongForm/types.d.ts +0 -20
  232. package/dist/components/ra-forms/LongForm/types.d.ts.map +0 -1
  233. package/dist/components/ra-forms/LongForm/utils.d.ts +0 -9
  234. package/dist/components/ra-forms/LongForm/utils.d.ts.map +0 -1
  235. package/dist/components/ra-forms/Show.d.ts +0 -13
  236. package/dist/components/ra-forms/Show.d.ts.map +0 -1
  237. package/dist/components/ra-forms/SimpleForm.d.ts +0 -40
  238. package/dist/components/ra-forms/SimpleForm.d.ts.map +0 -1
  239. package/dist/components/ra-forms/SimpleFormIterator.d.ts +0 -6
  240. package/dist/components/ra-forms/SimpleFormIterator.d.ts.map +0 -1
  241. package/dist/components/ra-forms/TabbedForm.d.ts +0 -11
  242. package/dist/components/ra-forms/TabbedForm.d.ts.map +0 -1
  243. package/dist/components/ra-forms/TableForm/TableFormIterator.d.ts +0 -45
  244. package/dist/components/ra-forms/TableForm/TableFormIterator.d.ts.map +0 -1
  245. package/dist/components/ra-forms/TableForm/TableFormIteratorItem.d.ts +0 -18
  246. package/dist/components/ra-forms/TableForm/TableFormIteratorItem.d.ts.map +0 -1
  247. package/dist/components/ra-forms/TableForm/index.d.ts +0 -4
  248. package/dist/components/ra-forms/TableForm/index.d.ts.map +0 -1
  249. package/dist/components/ra-forms/Toolbar.d.ts +0 -11
  250. package/dist/components/ra-forms/Toolbar.d.ts.map +0 -1
  251. package/dist/components/ra-forms/index.d.ts +0 -15
  252. package/dist/components/ra-forms/index.d.ts.map +0 -1
  253. package/dist/components/ra-inputs/ArrayInput.d.ts +0 -15
  254. package/dist/components/ra-inputs/ArrayInput.d.ts.map +0 -1
  255. package/dist/components/ra-inputs/AttachmentInput.d.ts +0 -50
  256. package/dist/components/ra-inputs/AttachmentInput.d.ts.map +0 -1
  257. package/dist/components/ra-inputs/AutocompleteArrayInput.d.ts +0 -9
  258. package/dist/components/ra-inputs/AutocompleteArrayInput.d.ts.map +0 -1
  259. package/dist/components/ra-inputs/AutocompleteInput.d.ts +0 -7
  260. package/dist/components/ra-inputs/AutocompleteInput.d.ts.map +0 -1
  261. package/dist/components/ra-inputs/BooleanInput.d.ts +0 -25
  262. package/dist/components/ra-inputs/BooleanInput.d.ts.map +0 -1
  263. package/dist/components/ra-inputs/DateInput.d.ts +0 -18
  264. package/dist/components/ra-inputs/DateInput.d.ts.map +0 -1
  265. package/dist/components/ra-inputs/DateTimeInput.d.ts +0 -22
  266. package/dist/components/ra-inputs/DateTimeInput.d.ts.map +0 -1
  267. package/dist/components/ra-inputs/FileInput.d.ts +0 -47
  268. package/dist/components/ra-inputs/FileInput.d.ts.map +0 -1
  269. package/dist/components/ra-inputs/ImageInput.d.ts +0 -14
  270. package/dist/components/ra-inputs/ImageInput.d.ts.map +0 -1
  271. package/dist/components/ra-inputs/LabeledArrayInput.d.ts +0 -42
  272. package/dist/components/ra-inputs/LabeledArrayInput.d.ts.map +0 -1
  273. package/dist/components/ra-inputs/LabeledInput.d.ts +0 -41
  274. package/dist/components/ra-inputs/LabeledInput.d.ts.map +0 -1
  275. package/dist/components/ra-inputs/NumberInput.d.ts +0 -24
  276. package/dist/components/ra-inputs/NumberInput.d.ts.map +0 -1
  277. package/dist/components/ra-inputs/RecordInput.d.ts +0 -15
  278. package/dist/components/ra-inputs/RecordInput.d.ts.map +0 -1
  279. package/dist/components/ra-inputs/ReferenceArrayInput.d.ts +0 -24
  280. package/dist/components/ra-inputs/ReferenceArrayInput.d.ts.map +0 -1
  281. package/dist/components/ra-inputs/ReferenceInput.d.ts +0 -25
  282. package/dist/components/ra-inputs/ReferenceInput.d.ts.map +0 -1
  283. package/dist/components/ra-inputs/ReferenceManyInput.d.ts +0 -39
  284. package/dist/components/ra-inputs/ReferenceManyInput.d.ts.map +0 -1
  285. package/dist/components/ra-inputs/SearchInput.d.ts +0 -3
  286. package/dist/components/ra-inputs/SearchInput.d.ts.map +0 -1
  287. package/dist/components/ra-inputs/SelectArrayInput.d.ts +0 -28
  288. package/dist/components/ra-inputs/SelectArrayInput.d.ts.map +0 -1
  289. package/dist/components/ra-inputs/SelectInput.d.ts +0 -29
  290. package/dist/components/ra-inputs/SelectInput.d.ts.map +0 -1
  291. package/dist/components/ra-inputs/SmartTextInput.d.ts +0 -28
  292. package/dist/components/ra-inputs/SmartTextInput.d.ts.map +0 -1
  293. package/dist/components/ra-inputs/TextInput.d.ts +0 -19
  294. package/dist/components/ra-inputs/TextInput.d.ts.map +0 -1
  295. package/dist/components/ra-inputs/TimeInput.d.ts +0 -18
  296. package/dist/components/ra-inputs/TimeInput.d.ts.map +0 -1
  297. package/dist/components/ra-inputs/index.d.ts +0 -24
  298. package/dist/components/ra-inputs/index.d.ts.map +0 -1
  299. package/dist/components/ra-lists/Datagrid.d.ts +0 -638
  300. package/dist/components/ra-lists/Datagrid.d.ts.map +0 -1
  301. package/dist/components/ra-lists/Empty.d.ts +0 -44
  302. package/dist/components/ra-lists/Empty.d.ts.map +0 -1
  303. package/dist/components/ra-lists/List.d.ts +0 -29
  304. package/dist/components/ra-lists/List.d.ts.map +0 -1
  305. package/dist/components/ra-lists/ListView.d.ts +0 -257
  306. package/dist/components/ra-lists/ListView.d.ts.map +0 -1
  307. package/dist/components/ra-lists/NotificationList/NotificationList.d.ts +0 -5
  308. package/dist/components/ra-lists/NotificationList/NotificationList.d.ts.map +0 -1
  309. package/dist/components/ra-lists/NotificationList/button/MarkAsReadedButton.d.ts +0 -3
  310. package/dist/components/ra-lists/NotificationList/button/MarkAsReadedButton.d.ts.map +0 -1
  311. package/dist/components/ra-lists/NotificationList/button/MarkAsUnreadedButton.d.ts +0 -3
  312. package/dist/components/ra-lists/NotificationList/button/MarkAsUnreadedButton.d.ts.map +0 -1
  313. package/dist/components/ra-lists/NotificationList/button/index.d.ts +0 -3
  314. package/dist/components/ra-lists/NotificationList/button/index.d.ts.map +0 -1
  315. package/dist/components/ra-lists/NotificationList/field/NotificationField.d.ts +0 -3
  316. package/dist/components/ra-lists/NotificationList/field/NotificationField.d.ts.map +0 -1
  317. package/dist/components/ra-lists/NotificationList/field/index.d.ts +0 -2
  318. package/dist/components/ra-lists/NotificationList/field/index.d.ts.map +0 -1
  319. package/dist/components/ra-lists/NotificationList/index.d.ts +0 -3
  320. package/dist/components/ra-lists/NotificationList/index.d.ts.map +0 -1
  321. package/dist/components/ra-lists/index.d.ts +0 -6
  322. package/dist/components/ra-lists/index.d.ts.map +0 -1
  323. package/dist/components/ra-pages/ActivatePage.d.ts +0 -12
  324. package/dist/components/ra-pages/ActivatePage.d.ts.map +0 -1
  325. package/dist/components/ra-pages/GenericErrorPage.d.ts +0 -3
  326. package/dist/components/ra-pages/GenericErrorPage.d.ts.map +0 -1
  327. package/dist/components/ra-pages/LoginPage.d.ts +0 -52
  328. package/dist/components/ra-pages/LoginPage.d.ts.map +0 -1
  329. package/dist/components/ra-pages/RecoverPage.d.ts +0 -12
  330. package/dist/components/ra-pages/RecoverPage.d.ts.map +0 -1
  331. package/dist/components/ra-pages/RegisterPage.d.ts +0 -11
  332. package/dist/components/ra-pages/RegisterPage.d.ts.map +0 -1
  333. package/dist/components/ra-pages/index.d.ts +0 -6
  334. package/dist/components/ra-pages/index.d.ts.map +0 -1
  335. package/dist/components/ra-pages/types.d.ts +0 -32
  336. package/dist/components/ra-pages/types.d.ts.map +0 -1
  337. package/dist/components/third-party/SimpleBar.d.ts +0 -14
  338. package/dist/components/third-party/SimpleBar.d.ts.map +0 -1
  339. package/dist/components/third-party/index.d.ts +0 -3
  340. package/dist/components/third-party/index.d.ts.map +0 -1
  341. package/dist/contexts/AppConfigContext.d.ts +0 -32
  342. package/dist/contexts/AppConfigContext.d.ts.map +0 -1
  343. package/dist/contexts/MenuConfigContext.d.ts +0 -51
  344. package/dist/contexts/MenuConfigContext.d.ts.map +0 -1
  345. package/dist/contexts/MenuPropTypes.d.ts +0 -13
  346. package/dist/contexts/MenuPropTypes.d.ts.map +0 -1
  347. package/dist/contexts/TableFormIteratorContext.d.ts +0 -18
  348. package/dist/contexts/TableFormIteratorContext.d.ts.map +0 -1
  349. package/dist/contexts/TableFormIteratorItemContext.d.ts +0 -16
  350. package/dist/contexts/TableFormIteratorItemContext.d.ts.map +0 -1
  351. package/dist/contexts/ThemeConfigContext.d.ts +0 -69
  352. package/dist/contexts/ThemeConfigContext.d.ts.map +0 -1
  353. package/dist/contexts/index.d.ts +0 -8
  354. package/dist/contexts/index.d.ts.map +0 -1
  355. package/dist/dev/CatchResult.d.ts +0 -17
  356. package/dist/dev/CatchResult.d.ts.map +0 -1
  357. package/dist/dev/ErrorEventHandler.d.ts +0 -13
  358. package/dist/dev/ErrorEventHandler.d.ts.map +0 -1
  359. package/dist/dev/index.d.ts +0 -5
  360. package/dist/dev/index.d.ts.map +0 -1
  361. package/dist/dev/useErrorEventCatcher.d.ts +0 -12
  362. package/dist/dev/useErrorEventCatcher.d.ts.map +0 -1
  363. package/dist/hooks/index.d.ts +0 -14
  364. package/dist/hooks/index.d.ts.map +0 -1
  365. package/dist/hooks/mui.d.ts +0 -7
  366. package/dist/hooks/mui.d.ts.map +0 -1
  367. package/dist/hooks/useAppConfig.d.ts +0 -8
  368. package/dist/hooks/useAppConfig.d.ts.map +0 -1
  369. package/dist/hooks/useBreadcrumbs.d.ts +0 -9
  370. package/dist/hooks/useBreadcrumbs.d.ts.map +0 -1
  371. package/dist/hooks/useLocalStorage.d.ts +0 -2
  372. package/dist/hooks/useLocalStorage.d.ts.map +0 -1
  373. package/dist/hooks/useMemoizedObject.d.ts +0 -10
  374. package/dist/hooks/useMemoizedObject.d.ts.map +0 -1
  375. package/dist/hooks/useMenu.d.ts +0 -8
  376. package/dist/hooks/useMenu.d.ts.map +0 -1
  377. package/dist/hooks/useMenuConfig.d.ts +0 -11
  378. package/dist/hooks/useMenuConfig.d.ts.map +0 -1
  379. package/dist/hooks/useRefDimensions.d.ts +0 -13
  380. package/dist/hooks/useRefDimensions.d.ts.map +0 -1
  381. package/dist/hooks/useResourceTitle.d.ts +0 -3
  382. package/dist/hooks/useResourceTitle.d.ts.map +0 -1
  383. package/dist/hooks/useTableFormIterator.d.ts +0 -9
  384. package/dist/hooks/useTableFormIterator.d.ts.map +0 -1
  385. package/dist/hooks/useTableFormIteratorItem.d.ts +0 -9
  386. package/dist/hooks/useTableFormIteratorItem.d.ts.map +0 -1
  387. package/dist/hooks/useThemeConfig.d.ts +0 -3
  388. package/dist/hooks/useThemeConfig.d.ts.map +0 -1
  389. package/dist/i18n/MissingMessageHandler.d.ts +0 -19
  390. package/dist/i18n/MissingMessageHandler.d.ts.map +0 -1
  391. package/dist/i18n/createI18nProvider.d.ts +0 -10
  392. package/dist/i18n/createI18nProvider.d.ts.map +0 -1
  393. package/dist/i18n/index.d.ts +0 -4
  394. package/dist/i18n/index.d.ts.map +0 -1
  395. package/dist/i18n/useI18nLanguages.d.ts +0 -14
  396. package/dist/i18n/useI18nLanguages.d.ts.map +0 -1
  397. package/dist/i18n/useI18nProvider.d.ts +0 -7
  398. package/dist/i18n/useI18nProvider.d.ts.map +0 -1
  399. package/dist/index.d.ts +0 -10
  400. package/dist/index.d.ts.map +0 -1
  401. package/dist/themes/getColors.d.ts +0 -3
  402. package/dist/themes/getColors.d.ts.map +0 -1
  403. package/dist/themes/getShadow.d.ts +0 -10
  404. package/dist/themes/getShadow.d.ts.map +0 -1
  405. package/dist/themes/index.d.ts +0 -15
  406. package/dist/themes/index.d.ts.map +0 -1
  407. package/dist/themes/overrides/Accordion.d.ts +0 -24
  408. package/dist/themes/overrides/Accordion.d.ts.map +0 -1
  409. package/dist/themes/overrides/AccordionDetails.d.ts +0 -11
  410. package/dist/themes/overrides/AccordionDetails.d.ts.map +0 -1
  411. package/dist/themes/overrides/AccordionSummary.d.ts +0 -25
  412. package/dist/themes/overrides/AccordionSummary.d.ts.map +0 -1
  413. package/dist/themes/overrides/Alert.d.ts +0 -89
  414. package/dist/themes/overrides/Alert.d.ts.map +0 -1
  415. package/dist/themes/overrides/AlertTitle.d.ts +0 -12
  416. package/dist/themes/overrides/AlertTitle.d.ts.map +0 -1
  417. package/dist/themes/overrides/Autocomplete.d.ts +0 -23
  418. package/dist/themes/overrides/Autocomplete.d.ts.map +0 -1
  419. package/dist/themes/overrides/Badge.d.ts +0 -40
  420. package/dist/themes/overrides/Badge.d.ts.map +0 -1
  421. package/dist/themes/overrides/Button.d.ts +0 -7559
  422. package/dist/themes/overrides/Button.d.ts.map +0 -1
  423. package/dist/themes/overrides/ButtonBase.d.ts +0 -9
  424. package/dist/themes/overrides/ButtonBase.d.ts.map +0 -1
  425. package/dist/themes/overrides/ButtonGroup.d.ts +0 -8
  426. package/dist/themes/overrides/ButtonGroup.d.ts.map +0 -1
  427. package/dist/themes/overrides/CardContent.d.ts +0 -13
  428. package/dist/themes/overrides/CardContent.d.ts.map +0 -1
  429. package/dist/themes/overrides/Checkbox.d.ts +0 -122
  430. package/dist/themes/overrides/Checkbox.d.ts.map +0 -1
  431. package/dist/themes/overrides/Chip.d.ts +0 -208
  432. package/dist/themes/overrides/Chip.d.ts.map +0 -1
  433. package/dist/themes/overrides/Dialog.d.ts +0 -12
  434. package/dist/themes/overrides/Dialog.d.ts.map +0 -1
  435. package/dist/themes/overrides/DialogContentText.d.ts +0 -11
  436. package/dist/themes/overrides/DialogContentText.d.ts.map +0 -1
  437. package/dist/themes/overrides/DialogTitle.d.ts +0 -11
  438. package/dist/themes/overrides/DialogTitle.d.ts.map +0 -1
  439. package/dist/themes/overrides/Fab.d.ts +0 -159
  440. package/dist/themes/overrides/Fab.d.ts.map +0 -1
  441. package/dist/themes/overrides/IconButton.d.ts +0 -30
  442. package/dist/themes/overrides/IconButton.d.ts.map +0 -1
  443. package/dist/themes/overrides/InputBase.d.ts +0 -6
  444. package/dist/themes/overrides/InputBase.d.ts.map +0 -1
  445. package/dist/themes/overrides/InputLabel.d.ts +0 -22
  446. package/dist/themes/overrides/InputLabel.d.ts.map +0 -1
  447. package/dist/themes/overrides/LinearProgress.d.ts +0 -14
  448. package/dist/themes/overrides/LinearProgress.d.ts.map +0 -1
  449. package/dist/themes/overrides/Link.d.ts +0 -8
  450. package/dist/themes/overrides/Link.d.ts.map +0 -1
  451. package/dist/themes/overrides/ListItemButton.d.ts +0 -15
  452. package/dist/themes/overrides/ListItemButton.d.ts.map +0 -1
  453. package/dist/themes/overrides/ListItemIcon.d.ts +0 -11
  454. package/dist/themes/overrides/ListItemIcon.d.ts.map +0 -1
  455. package/dist/themes/overrides/ListItemText.d.ts +0 -12
  456. package/dist/themes/overrides/ListItemText.d.ts.map +0 -1
  457. package/dist/themes/overrides/LoadingButton.d.ts +0 -14
  458. package/dist/themes/overrides/LoadingButton.d.ts.map +0 -1
  459. package/dist/themes/overrides/OutlinedInput.d.ts +0 -96
  460. package/dist/themes/overrides/OutlinedInput.d.ts.map +0 -1
  461. package/dist/themes/overrides/Pagination.d.ts +0 -8
  462. package/dist/themes/overrides/Pagination.d.ts.map +0 -1
  463. package/dist/themes/overrides/PaginationItem.d.ts +0 -951
  464. package/dist/themes/overrides/PaginationItem.d.ts.map +0 -1
  465. package/dist/themes/overrides/Popover.d.ts +0 -10
  466. package/dist/themes/overrides/Popover.d.ts.map +0 -1
  467. package/dist/themes/overrides/Radio.d.ts +0 -123
  468. package/dist/themes/overrides/Radio.d.ts.map +0 -1
  469. package/dist/themes/overrides/Slider.d.ts +0 -66
  470. package/dist/themes/overrides/Slider.d.ts.map +0 -1
  471. package/dist/themes/overrides/Switch.d.ts +0 -91
  472. package/dist/themes/overrides/Switch.d.ts.map +0 -1
  473. package/dist/themes/overrides/Tab.d.ts +0 -21
  474. package/dist/themes/overrides/Tab.d.ts.map +0 -1
  475. package/dist/themes/overrides/TableBody.d.ts +0 -22
  476. package/dist/themes/overrides/TableBody.d.ts.map +0 -1
  477. package/dist/themes/overrides/TableCell.d.ts +0 -48
  478. package/dist/themes/overrides/TableCell.d.ts.map +0 -1
  479. package/dist/themes/overrides/TableFooter.d.ts +0 -12
  480. package/dist/themes/overrides/TableFooter.d.ts.map +0 -1
  481. package/dist/themes/overrides/TableHead.d.ts +0 -12
  482. package/dist/themes/overrides/TableHead.d.ts.map +0 -1
  483. package/dist/themes/overrides/TablePagination.d.ts +0 -13
  484. package/dist/themes/overrides/TablePagination.d.ts.map +0 -1
  485. package/dist/themes/overrides/TableRow.d.ts +0 -22
  486. package/dist/themes/overrides/TableRow.d.ts.map +0 -1
  487. package/dist/themes/overrides/Tabs.d.ts +0 -10
  488. package/dist/themes/overrides/Tabs.d.ts.map +0 -1
  489. package/dist/themes/overrides/ToggleButton.d.ts +0 -17
  490. package/dist/themes/overrides/ToggleButton.d.ts.map +0 -1
  491. package/dist/themes/overrides/Tooltip.d.ts +0 -10
  492. package/dist/themes/overrides/Tooltip.d.ts.map +0 -1
  493. package/dist/themes/overrides/TreeItem.d.ts +0 -15
  494. package/dist/themes/overrides/TreeItem.d.ts.map +0 -1
  495. package/dist/themes/overrides/Typography.d.ts +0 -10
  496. package/dist/themes/overrides/Typography.d.ts.map +0 -1
  497. package/dist/themes/overrides/index.d.ts +0 -2
  498. package/dist/themes/overrides/index.d.ts.map +0 -1
  499. package/dist/themes/palette.d.ts +0 -3
  500. package/dist/themes/palette.d.ts.map +0 -1
  501. package/dist/themes/shadows.d.ts +0 -21
  502. package/dist/themes/shadows.d.ts.map +0 -1
  503. package/dist/themes/theme/default.d.ts +0 -90
  504. package/dist/themes/theme/default.d.ts.map +0 -1
  505. package/dist/themes/theme/index.d.ts +0 -91
  506. package/dist/themes/theme/index.d.ts.map +0 -1
  507. package/dist/themes/theme/theme1.d.ts +0 -84
  508. package/dist/themes/theme/theme1.d.ts.map +0 -1
  509. package/dist/themes/theme/theme2.d.ts +0 -84
  510. package/dist/themes/theme/theme2.d.ts.map +0 -1
  511. package/dist/themes/theme/theme3.d.ts +0 -84
  512. package/dist/themes/theme/theme3.d.ts.map +0 -1
  513. package/dist/themes/theme/theme4.d.ts +0 -84
  514. package/dist/themes/theme/theme4.d.ts.map +0 -1
  515. package/dist/themes/theme/theme5.d.ts +0 -84
  516. package/dist/themes/theme/theme5.d.ts.map +0 -1
  517. package/dist/themes/theme/theme6.d.ts +0 -84
  518. package/dist/themes/theme/theme6.d.ts.map +0 -1
  519. package/dist/themes/theme/theme7.d.ts +0 -84
  520. package/dist/themes/theme/theme7.d.ts.map +0 -1
  521. package/dist/themes/theme/theme8.d.ts +0 -84
  522. package/dist/themes/theme/theme8.d.ts.map +0 -1
  523. package/dist/themes/typography.d.ts +0 -69
  524. package/dist/themes/typography.d.ts.map +0 -1
  525. package/dist/types.d.ts +0 -58
  526. package/dist/types.d.ts.map +0 -1
  527. package/dist/utils/index.d.ts +0 -3
  528. package/dist/utils/index.d.ts.map +0 -1
  529. package/dist/utils/lang.d.ts +0 -2
  530. package/dist/utils/lang.d.ts.map +0 -1
  531. package/dist/utils/time.d.ts +0 -4
  532. package/dist/utils/time.d.ts.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applica-software-guru/react-admin",
3
- "version": "1.3.143",
3
+ "version": "1.3.145",
4
4
  "private": false,
5
5
  "repository": {
6
6
  "type": "git",
@@ -12,11 +12,12 @@ type IFormProps = IProviderProps &
12
12
  spacing?: number;
13
13
  tabsDisposition: Disposition;
14
14
  contentDisposition: Disposition;
15
+ errorCount: boolean;
15
16
  };
16
17
 
17
18
  function Form(props: IFormProps) {
18
19
  const { tabsDisposition, contentDisposition, spacing = 2 } = props,
19
- providerProps = _.pick(props, ['syncWithLocation']),
20
+ providerProps = _.pick(props, ['syncWithLocation', 'errorCount']),
20
21
  baseFormProps = _.omit(props, ['tabsDisposition', 'contentDisposition', 'syncWithLocation']),
21
22
  { top: sidebarTop, bottom: sidebarBottom } = useSidebarChildren(props),
22
23
  contentChildren = useBaseItemChildren(props);
@@ -1,6 +1,17 @@
1
1
  import _ from 'lodash';
2
2
  import { Avatar } from '../../@extended';
3
- import { Card, Collapse, List, ListItem, ListItemProps, ListItemIcon, ListItemText, ListItemButton, ListItemAvatar } from '@mui/material';
3
+ import {
4
+ Card,
5
+ Collapse,
6
+ List,
7
+ ListItem,
8
+ ListItemProps,
9
+ ListItemIcon,
10
+ ListItemText,
11
+ ListItemButton,
12
+ ListItemAvatar,
13
+ Badge
14
+ } from '@mui/material';
4
15
  import { useSetActiveItem, useSyncWithLocation } from './Provider';
5
16
  import { IItem } from './types';
6
17
  import { useCallback, useEffect, useMemo, useState } from 'react';
@@ -44,7 +55,7 @@ function NavMenu() {
44
55
  function NavMenuItem(props: INavMenuItemProps) {
45
56
  const translate = useTranslate() ?? _.identity,
46
57
  navMenuItemProps = useNavMenuItem(props),
47
- { selected, label, icon, onClick: _onClick, badge, items, isGroup, level } = navMenuItemProps,
58
+ { selected, label, icon, onClick: _onClick, badge, items, isGroup, level, errors = 0 } = navMenuItemProps,
48
59
  { spacing } = useThemeConfig(),
49
60
  [open, setOpen] = useState(selected),
50
61
  onClick = useCallback(
@@ -68,7 +79,18 @@ function NavMenuItem(props: INavMenuItemProps) {
68
79
  <ListItem {...listItemProps} disablePadding>
69
80
  <ListItemButton selected={selected && !isGroup} onClick={onClick} sx={{ pl: spacing * level }}>
70
81
  {hasIcon && <ListItemIcon>{icon}</ListItemIcon>}
71
- <ListItemText inset={!hasIcon} primary={translate(label)} />
82
+ <ListItemText
83
+ inset={!hasIcon}
84
+ primary={
85
+ errors === 0 ? (
86
+ translate(label)
87
+ ) : (
88
+ <Badge variant="dot" color="error" sx={{ '& > .MuiBadge-badge': { transform: 'scale(1) translate(125%, 0)' } }}>
89
+ {translate(label)}
90
+ </Badge>
91
+ )
92
+ }
93
+ />
72
94
  {badge && (
73
95
  <ListItemAvatar>
74
96
  <Avatar type="filled" size="xs" color={badge.color ?? 'default'}>
@@ -10,16 +10,19 @@ enum ActionType {
10
10
  SET_SYNC_WITH_LOCATION = 'setSyncWithLocation',
11
11
  SET_ACTIVE_ITEM = 'setActiveItem',
12
12
  ADD_ITEM = 'addItem',
13
- REMOVE_ITEM = 'removeItem'
13
+ REMOVE_ITEM = 'removeItem',
14
+ SET_ERROR_COUNT = 'setErrorCount'
14
15
  }
15
16
 
16
17
  type IProviderProps = React.PropsWithChildren<{
17
18
  syncWithLocation?: boolean;
18
19
  rootMatchString?: string;
20
+ errorCount?: boolean;
19
21
  }>;
20
22
  type IState = {
21
23
  formRootPath?: string;
22
24
  syncWithLocation: boolean;
25
+ errorCount: boolean;
23
26
  items: Array<IItem>;
24
27
  activeItem?: string;
25
28
  };
@@ -32,6 +35,10 @@ type IAction =
32
35
  type: ActionType.SET_SYNC_WITH_LOCATION;
33
36
  payload: boolean;
34
37
  }
38
+ | {
39
+ type: ActionType.SET_ERROR_COUNT;
40
+ payload: boolean;
41
+ }
35
42
  | {
36
43
  type: ActionType.SET_ACTIVE_ITEM;
37
44
  payload?: string;
@@ -58,6 +65,8 @@ function reducer(state: IState, action: IAction): IState {
58
65
  return _.extend(newState, { formRootPath: payload });
59
66
  case ActionType.SET_SYNC_WITH_LOCATION:
60
67
  return _.extend(newState, { syncWithLocation: payload });
68
+ case ActionType.SET_ERROR_COUNT:
69
+ return _.extend(newState, { errorCount: payload });
61
70
  case ActionType.SET_ACTIVE_ITEM:
62
71
  return _.includes(getItemsIds(state.items), payload) ? _.extend(newState, { activeItem: payload }) : newState;
63
72
  case ActionType.ADD_ITEM: {
@@ -91,6 +100,7 @@ function reducer(state: IState, action: IAction): IState {
91
100
 
92
101
  const DefaultState: IState = {
93
102
  syncWithLocation: true,
103
+ errorCount: true,
94
104
  items: [],
95
105
  activeItem: undefined
96
106
  };
@@ -99,6 +109,7 @@ const Context = createContext<IContext | undefined>(undefined);
99
109
 
100
110
  function Provider(props: IProviderProps) {
101
111
  const syncWithLocation = Boolean(props.syncWithLocation ?? true),
112
+ errorCount = Boolean(props.errorCount ?? true),
102
113
  { rootMatchString } = props,
103
114
  { pathname } = useLocation(),
104
115
  [state, dispatch] = useReducer(reducer, _.cloneDeep(DefaultState)),
@@ -140,6 +151,13 @@ function Provider(props: IProviderProps) {
140
151
  });
141
152
  }, [syncWithLocation, dispatch]);
142
153
 
154
+ useEffect(() => {
155
+ dispatch({
156
+ type: ActionType.SET_ERROR_COUNT,
157
+ payload: Boolean(errorCount)
158
+ });
159
+ }, [errorCount, dispatch]);
160
+
143
161
  useEffect(() => {
144
162
  if (syncWithLocation && formRootPath !== undefined) {
145
163
  let locationItem = pathname.replace(formRootPath, '').replace(new RegExp(/^\/?/), '');
@@ -201,6 +219,11 @@ function useSyncWithLocation(): boolean {
201
219
  return state.syncWithLocation;
202
220
  }
203
221
 
222
+ function useErrorCount(): boolean {
223
+ const state = useFormState();
224
+ return state.errorCount;
225
+ }
226
+
204
227
  function useSetActiveItem(): (activeItem: string) => void {
205
228
  const dispatch = useFormDispatch(),
206
229
  setActiveItem = useCallback(
@@ -246,5 +269,15 @@ function useRemoveItem(): (item: string | IItem) => void {
246
269
  return removeItem;
247
270
  }
248
271
 
249
- export { Provider, useItems, useSyncWithLocation, useFormRootPath, useActiveItem, useSetActiveItem, useAddItem, useRemoveItem };
272
+ export {
273
+ Provider,
274
+ useItems,
275
+ useSyncWithLocation,
276
+ useFormRootPath,
277
+ useActiveItem,
278
+ useSetActiveItem,
279
+ useAddItem,
280
+ useRemoveItem,
281
+ useErrorCount
282
+ };
250
283
  export type { IProviderProps };
@@ -1,22 +1,53 @@
1
1
  import _ from 'lodash';
2
2
  import { Box } from '@mui/material';
3
- import React, { Children, cloneElement, isValidElement, useEffect, useMemo } from 'react';
4
- import { useAddItem, useRemoveItem } from './Provider';
3
+ import React, { Children, ReactElement, ReactNode, cloneElement, isValidElement, useEffect, useMemo } from 'react';
4
+ import { useAddItem, useRemoveItem, useErrorCount } from './Provider';
5
5
  import { Optional } from 'src/types';
6
6
  import { IItem } from './types';
7
7
  import { useIsActive } from './hooks';
8
8
  import { getId } from './utils';
9
+ import { useFormState } from 'react-hook-form';
9
10
 
10
- type IBaseItemProps = React.PropsWithChildren<Optional<IItem, 'id' | 'index'>>;
11
+ type IBaseItemProps = React.PropsWithChildren<Optional<IItem, 'id' | 'index'> & { sources: Array<string> }>;
11
12
  type ITabProps = IBaseItemProps;
12
13
  type IGroupProps = IBaseItemProps;
13
14
 
15
+ function walkChildren(children: ReactNode = [], callback: (el: ReactElement) => void) {
16
+ const _children = _.isArray(children) ? children : [children],
17
+ validChildren = _.filter(_children, (child) => isValidElement(child));
18
+ _.each(validChildren, (child) => {
19
+ callback(child);
20
+ walkChildren(child?.props?.children ?? [], callback);
21
+ });
22
+ }
23
+
14
24
  function BaseItem(props: IBaseItemProps) {
15
- const { label, icon, badge, index = 0 } = props,
25
+ const { errors } = useFormState(),
26
+ countErrors = useErrorCount(),
27
+ { label, icon, badge, index = 0, children } = props,
16
28
  id = getId(props),
17
29
  addItem = useAddItem(),
18
30
  removeItem = useRemoveItem(),
19
- visible = useIsActive(id);
31
+ visible = useIsActive(id),
32
+ sources: Array<string> = [];
33
+
34
+ if (countErrors) {
35
+ if (props.sources !== undefined) {
36
+ sources.push(...props.sources);
37
+ } else {
38
+ walkChildren(children, (el) => {
39
+ if (el?.props?.source !== undefined) {
40
+ sources.push(el.props.source);
41
+ }
42
+ });
43
+ }
44
+ }
45
+
46
+ const errorsCount = _.chain(sources)
47
+ .uniq()
48
+ .map((s) => _.get(errors, s))
49
+ .reject((s) => s === undefined)
50
+ .value().length;
20
51
 
21
52
  useEffect(() => {
22
53
  addItem({
@@ -24,12 +55,13 @@ function BaseItem(props: IBaseItemProps) {
24
55
  index: index,
25
56
  label: label,
26
57
  icon: icon,
27
- badge: badge
58
+ badge: badge,
59
+ errors: errorsCount
28
60
  });
29
61
  return () => {
30
62
  removeItem(id);
31
63
  };
32
- }, [addItem, removeItem, label, icon, id, badge, index]);
64
+ }, [addItem, removeItem, label, icon, id, badge, index, errorsCount]);
33
65
 
34
66
  /* All tabs are rendered (not only the one in focus), to allow validation
35
67
  on tabs not in focus. The tabs receive a `hidden` property, which they'll
@@ -6,6 +6,7 @@ import {
6
6
  useActiveItem,
7
7
  useItems,
8
8
  useSyncWithLocation,
9
+ useErrorCount,
9
10
  useSetActiveItem,
10
11
  useAddItem,
11
12
  useRemoveItem,
@@ -21,6 +22,7 @@ type IForm = typeof Form & {
21
22
  Provider: typeof Provider;
22
23
  useItems: typeof useItems;
23
24
  useSyncWithLocation: typeof useSyncWithLocation;
25
+ useErrorCount: typeof useErrorCount;
24
26
  useFormRootPath: typeof useFormRootPath;
25
27
  useActiveItem: typeof useActiveItem;
26
28
  useSetActiveItem: typeof useSetActiveItem;
@@ -44,6 +46,7 @@ DefaultForm.Content = Content;
44
46
  DefaultForm.Provider = Provider;
45
47
  DefaultForm.useItems = useItems;
46
48
  DefaultForm.useSyncWithLocation = useSyncWithLocation;
49
+ DefaultForm.useErrorCount = useErrorCount;
47
50
  DefaultForm.useFormRootPath = useFormRootPath;
48
51
  DefaultForm.useActiveItem = useActiveItem;
49
52
  DefaultForm.useSetActiveItem = useSetActiveItem;
@@ -15,6 +15,7 @@ type IItem = {
15
15
  content: string | number;
16
16
  color?: 'default' | 'error' | 'info' | 'primary' | 'secondary' | 'success' | 'warning';
17
17
  };
18
+ errors?: number;
18
19
  };
19
20
 
20
21
  export type { Disposition, IItem };
@@ -0,0 +1,141 @@
1
+ import * as React from 'react';
2
+ import { Children, ReactNode, cloneElement, isValidElement, useCallback } from 'react';
3
+ import PropTypes from 'prop-types';
4
+ import { styled, lighten } from '@mui/material/styles';
5
+ import clsx from 'clsx';
6
+ import Toolbar from '@mui/material/Toolbar';
7
+ import Typography from '@mui/material/Typography';
8
+
9
+ import IconButton from '@mui/material/IconButton';
10
+ import CloseIcon from '@mui/icons-material/Close';
11
+ import { useTranslate, sanitizeListRestProps, useListContext, Identifier } from 'ra-core';
12
+ import { TopToolbar } from 'react-admin';
13
+
14
+ const BulkActionsToolbar = (props: BulkActionsToolbarProps) => {
15
+ const { label = 'ra.action.bulk_actions', children, className, ...rest } = props;
16
+ const { filterValues, resource, selectedIds = [], onUnselectItems } = useListContext(props);
17
+
18
+ const translate = useTranslate();
19
+
20
+ const handleUnselectAllClick = useCallback(() => {
21
+ onUnselectItems();
22
+ }, [onUnselectItems]);
23
+
24
+ return (
25
+ <Root className={className}>
26
+ <Toolbar
27
+ data-test="bulk-actions-toolbar"
28
+ className={clsx(BulkActionsToolbarClasses.toolbar, {
29
+ [BulkActionsToolbarClasses.collapsed]: selectedIds.length === 0
30
+ })}
31
+ {...sanitizeListRestProps(rest)}
32
+ >
33
+ <div className={BulkActionsToolbarClasses.title}>
34
+ <IconButton
35
+ className={BulkActionsToolbarClasses.icon}
36
+ aria-label={translate('ra.action.unselect')}
37
+ title={translate('ra.action.unselect')}
38
+ onClick={handleUnselectAllClick}
39
+ size="small"
40
+ >
41
+ <CloseIcon fontSize="small" />
42
+ </IconButton>
43
+ <Typography color="inherit" variant="subtitle1">
44
+ {translate(label, {
45
+ _: label,
46
+ // eslint-disable-next-line camelcase
47
+ smart_count: selectedIds.length
48
+ })}
49
+ </Typography>
50
+ </div>
51
+ <TopToolbar className={BulkActionsToolbarClasses.topToolbar}>
52
+ {Children.map(children, (child) =>
53
+ isValidElement<any>(child)
54
+ ? cloneElement(child, {
55
+ filterValues,
56
+ resource,
57
+ selectedIds
58
+ })
59
+ : null
60
+ )}
61
+ </TopToolbar>
62
+ </Toolbar>
63
+ </Root>
64
+ );
65
+ };
66
+
67
+ BulkActionsToolbar.propTypes = {
68
+ children: PropTypes.node,
69
+ label: PropTypes.string
70
+ };
71
+
72
+ export interface BulkActionsToolbarProps {
73
+ children?: ReactNode;
74
+ label?: string;
75
+ selectedIds?: Identifier[];
76
+ className?: string;
77
+ }
78
+
79
+ const PREFIX = 'RaBulkActionsToolbar';
80
+
81
+ export const BulkActionsToolbarClasses = {
82
+ toolbar: `${PREFIX}-toolbar`,
83
+ topToolbar: `${PREFIX}-topToolbar`,
84
+ buttons: `${PREFIX}-buttons`,
85
+ collapsed: `${PREFIX}-collapsed`,
86
+ title: `${PREFIX}-title`,
87
+ icon: `${PREFIX}-icon`
88
+ };
89
+
90
+ const Root = styled('div', {
91
+ name: PREFIX,
92
+ overridesResolver: (props, styles) => styles.root
93
+ })(({ theme }) => ({
94
+ position: 'relative',
95
+ [`& .${BulkActionsToolbarClasses.toolbar}`]: {
96
+ position: 'absolute',
97
+ left: 0,
98
+ right: 0,
99
+ zIndex: 3,
100
+ color: theme.palette.mode === 'light' ? theme.palette.primary.main : theme.palette.text.primary,
101
+ justifyContent: 'space-between',
102
+ backgroundColor: theme.palette.mode === 'light' ? lighten(theme.palette.primary.light, 0.8) : theme.palette.primary.dark,
103
+ minHeight: theme.spacing(6),
104
+ height: theme.spacing(6),
105
+ transform: `translateY(-${theme.spacing(6)})`,
106
+ transition: `${theme.transitions.create('height')}, ${theme.transitions.create('min-height')}, ${theme.transitions.create(
107
+ 'transform'
108
+ )}`,
109
+ borderTopLeftRadius: theme.shape.borderRadius,
110
+ borderTopRightRadius: theme.shape.borderRadius
111
+ },
112
+
113
+ [`& .${BulkActionsToolbarClasses.topToolbar}`]: {
114
+ paddingBottom: theme.spacing(1),
115
+ minHeight: 'auto',
116
+ [theme.breakpoints.down('sm')]: {
117
+ backgroundColor: 'transparent'
118
+ }
119
+ },
120
+
121
+ [`& .${BulkActionsToolbarClasses.buttons}`]: {},
122
+
123
+ [`& .${BulkActionsToolbarClasses.collapsed}`]: {
124
+ minHeight: 0,
125
+ height: 0,
126
+ transform: `translateY(0)`,
127
+ overflowY: 'hidden'
128
+ },
129
+
130
+ [`& .${BulkActionsToolbarClasses.title}`]: {
131
+ display: 'flex',
132
+ flex: '0 0 auto'
133
+ },
134
+
135
+ [`& .${BulkActionsToolbarClasses.icon}`]: {
136
+ marginLeft: '-0.5em',
137
+ marginRight: '0.5em'
138
+ }
139
+ }));
140
+
141
+ export default BulkActionsToolbar;
@@ -0,0 +1,100 @@
1
+ import * as React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { useListContext, Button } from 'react-admin';
4
+ import { Box, Fab, Fade, List, ListItem, Popover, Theme, useMediaQuery } from '@mui/material';
5
+ import CloseIcon from '@mui/icons-material/Close';
6
+ const noSpaceOutside = {
7
+ p: 0,
8
+ m: 0
9
+ };
10
+ const moreSpaceInside = {
11
+ p: 2,
12
+ m: 0,
13
+ borderRadius: 0,
14
+ width: '100%'
15
+ };
16
+
17
+ const BulkFloatingActionsToolbar = (props: BulkFloatingActionsToolbarProps) => {
18
+ const { children } = props;
19
+ const [anchorEl, setAnchorEl] = React.useState<HTMLButtonElement | null>(null);
20
+
21
+ const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {
22
+ setAnchorEl(event.currentTarget);
23
+ };
24
+
25
+ const handleClose = () => {
26
+ setAnchorEl(null);
27
+ };
28
+ const isSmall = useMediaQuery((theme: Theme) => theme.breakpoints.down('md'));
29
+ const open = Boolean(anchorEl);
30
+ const id = open ? 'simple-popover' : undefined;
31
+ const { filterValues, resource, selectedIds = [], onUnselectItems } = useListContext(props);
32
+
33
+ const handleUnselectAllClick = React.useCallback(() => {
34
+ onUnselectItems();
35
+ setAnchorEl(null);
36
+ }, [onUnselectItems, setAnchorEl]);
37
+
38
+ return (
39
+ <Fade in={selectedIds !== undefined && selectedIds.length > 0}>
40
+ <Box
41
+ sx={{
42
+ position: 'fixed',
43
+ bottom: '16px',
44
+ right: '16px'
45
+ }}
46
+ >
47
+ <Fab color="primary" aria-label="manage" onClick={handleClick}>
48
+ {selectedIds?.length}
49
+ </Fab>
50
+ <Popover
51
+ id={id}
52
+ open={open}
53
+ anchorEl={anchorEl}
54
+ onClose={handleClose}
55
+ anchorOrigin={{
56
+ vertical: 'top',
57
+ horizontal: isSmall ? 'center' : 'right'
58
+ }}
59
+ transformOrigin={{
60
+ vertical: 'bottom',
61
+ horizontal: isSmall ? 'center' : 'right'
62
+ }}
63
+ disableScrollLock
64
+ elevation={10}
65
+ >
66
+ <List sx={noSpaceOutside}>
67
+ <ListItem sx={noSpaceOutside}>
68
+ <Button onClick={handleUnselectAllClick} sx={moreSpaceInside} label="ra.action.unselect" startIcon={<CloseIcon />}>
69
+ <CloseIcon />
70
+ </Button>
71
+ </ListItem>
72
+ {React.Children.map(children, (child) => (
73
+ <ListItem sx={noSpaceOutside}>
74
+ {React.isValidElement<any>(child)
75
+ ? React.cloneElement(child, {
76
+ filterValues,
77
+ resource,
78
+ selectedIds,
79
+ sx: moreSpaceInside,
80
+ ...(child.props?.popover ? { closePopover: handleClose } : {})
81
+ })
82
+ : null}
83
+ </ListItem>
84
+ ))}
85
+ </List>
86
+ </Popover>
87
+ </Box>
88
+ </Fade>
89
+ );
90
+ };
91
+
92
+ BulkFloatingActionsToolbar.propTypes = {
93
+ children: PropTypes.node
94
+ };
95
+
96
+ export interface BulkFloatingActionsToolbarProps {
97
+ children?: React.ReactNode | React.ReactNode[];
98
+ }
99
+
100
+ export default BulkFloatingActionsToolbar;