@applica-software-guru/react-admin 1.0.41 → 1.0.43

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 (253) hide show
  1. package/bitbucket-pipelines.yml +2 -0
  2. package/dist/ApplicaAdmin.d.ts.map +1 -1
  3. package/dist/components/@extended/AnimateButton.d.ts +1 -1
  4. package/dist/components/@extended/AnimateButton.d.ts.map +1 -1
  5. package/dist/components/@extended/Avatar.d.ts.map +1 -1
  6. package/dist/components/@extended/Breadcrumbs.d.ts.map +1 -1
  7. package/dist/components/@extended/IconButton.d.ts.map +1 -1
  8. package/dist/components/@extended/LoadingButton.d.ts.map +1 -1
  9. package/dist/components/@extended/Tooltip.d.ts.map +1 -1
  10. package/dist/components/@extended/Transitions.d.ts.map +1 -1
  11. package/dist/components/@extended/progress/CircularWithLabel.d.ts.map +1 -1
  12. package/dist/components/@extended/progress/CircularWithPath.d.ts.map +1 -1
  13. package/dist/components/Layout/Drawer/DrawerContent/Navigation/NavCollapse.d.ts +1 -1
  14. package/dist/components/Layout/Drawer/DrawerContent/Navigation/NavCollapse.d.ts.map +1 -1
  15. package/dist/components/Layout/Drawer/DrawerContent/Navigation/NavGroup.d.ts.map +1 -1
  16. package/dist/components/Layout/Drawer/DrawerContent/Navigation/NavItem.d.ts.map +1 -1
  17. package/dist/components/Layout/Drawer/DrawerHeader/DrawerHeaderStyled.d.ts.map +1 -1
  18. package/dist/components/Layout/Drawer/DrawerHeader/index.d.ts.map +1 -1
  19. package/dist/components/Layout/Drawer/MiniDrawerStyled.d.ts.map +1 -1
  20. package/dist/components/Layout/Drawer/index.d.ts.map +1 -1
  21. package/dist/components/Layout/Footer.d.ts.map +1 -1
  22. package/dist/components/Layout/Header/AppBarStyled.d.ts.map +1 -1
  23. package/dist/components/Layout/Header/HeaderContent/Notification.d.ts.map +1 -1
  24. package/dist/components/Layout/Header/HeaderContent/NotificationItem.d.ts.map +1 -1
  25. package/dist/components/Layout/Header/HeaderContent/Profile.d.ts.map +1 -1
  26. package/dist/components/Layout/Header/HeaderContent/index.d.ts.map +1 -1
  27. package/dist/components/Layout/Header/index.d.ts.map +1 -1
  28. package/dist/components/Layout/index.d.ts.map +1 -1
  29. package/dist/components/MenuPopover/styles.d.ts.map +1 -1
  30. package/dist/components/Notification.d.ts.map +1 -1
  31. package/dist/components/ScrollX.d.ts.map +1 -1
  32. package/dist/components/ra-buttons/EditInDialogButton.d.ts.map +1 -1
  33. package/dist/components/ra-fields/CoverField.d.ts.map +1 -1
  34. package/dist/components/ra-fields/DateAgoField.d.ts.map +1 -1
  35. package/dist/components/ra-fields/ReadonlyField.d.ts.map +1 -1
  36. package/dist/components/ra-forms/CardForm.d.ts.map +1 -1
  37. package/dist/components/ra-forms/LongForm/useFormRootPath.d.ts.map +1 -1
  38. package/dist/components/ra-forms/TabbedForm.d.ts.map +1 -1
  39. package/dist/components/ra-inputs/ReferenceManyInput.d.ts.map +1 -1
  40. package/dist/components/ra-lists/Empty.d.ts.map +1 -1
  41. package/dist/components/ra-lists/NotificationList/NotificationList.d.ts.map +1 -1
  42. package/dist/components/ra-lists/NotificationList/button/MarkAsReadedButton.d.ts.map +1 -1
  43. package/dist/components/ra-lists/NotificationList/field/NotificationField.d.ts.map +1 -1
  44. package/dist/contexts/MenuConfigContext.d.ts.map +1 -1
  45. package/dist/contexts/MenuPropTypes.d.ts.map +1 -1
  46. package/dist/dev/useCliErrorCatcher.d.ts +1 -1
  47. package/dist/hooks/useMenu.d.ts.map +1 -1
  48. package/dist/i18n/useI18nCatcher.d.ts +1 -1
  49. package/dist/i18n/useI18nLanguages.d.ts +1 -1
  50. package/dist/i18n/useI18nLanguages.d.ts.map +1 -1
  51. package/dist/i18n/useI18nProvider.d.ts.map +1 -1
  52. package/dist/react-admin.cjs.js +2 -1
  53. package/dist/react-admin.cjs.js.map +1 -0
  54. package/dist/react-admin.es.js +300 -784
  55. package/dist/react-admin.es.js.map +1 -0
  56. package/dist/react-admin.umd.js +2 -1
  57. package/dist/react-admin.umd.js.map +1 -0
  58. package/dist/themes/overrides/OutlinedInput.d.ts.map +1 -1
  59. package/dist/themes/palette.d.ts.map +1 -1
  60. package/dist/themes/theme/theme1.d.ts.map +1 -1
  61. package/dist/themes/theme/theme2.d.ts.map +1 -1
  62. package/dist/themes/theme/theme3.d.ts.map +1 -1
  63. package/dist/themes/theme/theme4.d.ts.map +1 -1
  64. package/dist/themes/theme/theme5.d.ts.map +1 -1
  65. package/dist/themes/theme/theme6.d.ts.map +1 -1
  66. package/dist/themes/theme/theme7.d.ts.map +1 -1
  67. package/dist/themes/theme/theme8.d.ts.map +1 -1
  68. package/dist/utils/index.d.ts +2 -2
  69. package/dist/utils/index.d.ts.map +1 -1
  70. package/dist/utils/lang.d.ts +1 -1
  71. package/dist/utils/lang.d.ts.map +1 -1
  72. package/dist/utils/time.d.ts +2 -1
  73. package/dist/utils/time.d.ts.map +1 -1
  74. package/package.json +2 -2
  75. package/src/Admin.jsx +8 -8
  76. package/src/AdminContext.jsx +9 -9
  77. package/src/ApplicaAdmin.jsx +30 -35
  78. package/src/components/@extended/AnimateButton.jsx +25 -33
  79. package/src/components/@extended/Avatar.jsx +35 -42
  80. package/src/components/@extended/Breadcrumbs.jsx +62 -96
  81. package/src/components/@extended/Dot.jsx +14 -14
  82. package/src/components/@extended/IconButton.jsx +55 -65
  83. package/src/components/@extended/LoadingButton.jsx +84 -86
  84. package/src/components/@extended/Tooltip.jsx +24 -27
  85. package/src/components/@extended/Transitions.jsx +98 -107
  86. package/src/components/@extended/index.jsx +10 -10
  87. package/src/components/@extended/progress/CircularWithLabel.jsx +7 -9
  88. package/src/components/@extended/progress/CircularWithPath.jsx +9 -18
  89. package/src/components/@extended/progress/LinearWithIcon.jsx +5 -5
  90. package/src/components/@extended/progress/LinearWithLabel.jsx +5 -5
  91. package/src/components/@extended/progress/index.jsx +5 -5
  92. package/src/components/Layout/Drawer/DrawerContent/Navigation/NavCollapse.jsx +112 -131
  93. package/src/components/Layout/Drawer/DrawerContent/Navigation/NavGroup.jsx +67 -88
  94. package/src/components/Layout/Drawer/DrawerContent/Navigation/NavItem.jsx +63 -79
  95. package/src/components/Layout/Drawer/DrawerContent/Navigation/index.jsx +28 -28
  96. package/src/components/Layout/Drawer/DrawerContent/index.jsx +7 -7
  97. package/src/components/Layout/Drawer/DrawerHeader/DrawerHeaderStyled.jsx +13 -15
  98. package/src/components/Layout/Drawer/DrawerHeader/index.jsx +17 -22
  99. package/src/components/Layout/Drawer/HorizontalBar.jsx +17 -17
  100. package/src/components/Layout/Drawer/MiniDrawerStyled.jsx +27 -29
  101. package/src/components/Layout/Drawer/index.jsx +21 -24
  102. package/src/components/Layout/Footer.jsx +7 -12
  103. package/src/components/Layout/Header/AppBarStyled.jsx +26 -28
  104. package/src/components/Layout/Header/HeaderContent/MobileSection.jsx +27 -27
  105. package/src/components/Layout/Header/HeaderContent/Notification.jsx +34 -55
  106. package/src/components/Layout/Header/HeaderContent/NotificationItem.jsx +24 -36
  107. package/src/components/Layout/Header/HeaderContent/Profile.jsx +48 -73
  108. package/src/components/Layout/Header/HeaderContent/index.jsx +16 -18
  109. package/src/components/Layout/Header/index.jsx +25 -43
  110. package/src/components/Layout/index.jsx +36 -52
  111. package/src/components/Loadable.jsx +4 -4
  112. package/src/components/Loader.jsx +7 -7
  113. package/src/components/Logo.jsx +14 -14
  114. package/src/components/MainIcon.jsx +6 -6
  115. package/src/components/MenuPopover/MenuPopover.jsx +15 -15
  116. package/src/components/MenuPopover/getPosition.jsx +40 -40
  117. package/src/components/MenuPopover/index.jsx +3 -3
  118. package/src/components/MenuPopover/styles.jsx +20 -20
  119. package/src/components/Notification.jsx +7 -7
  120. package/src/components/ScrollTop.jsx +13 -13
  121. package/src/components/ScrollX.jsx +4 -4
  122. package/src/components/SmallIcon.jsx +6 -6
  123. package/src/components/ra-buttons/EditInDialogButton.jsx +39 -45
  124. package/src/components/ra-buttons/ImpersonateUserButton.jsx +20 -20
  125. package/src/components/ra-buttons/index.jsx +4 -4
  126. package/src/components/ra-fields/ActionsField.jsx +12 -12
  127. package/src/components/ra-fields/CoverField.jsx +20 -26
  128. package/src/components/ra-fields/DateAgoField.jsx +17 -20
  129. package/src/components/ra-fields/DateField.jsx +14 -14
  130. package/src/components/ra-fields/EmailField.jsx +14 -14
  131. package/src/components/ra-fields/FileField.jsx +23 -23
  132. package/src/components/ra-fields/FunctionField.jsx +5 -5
  133. package/src/components/ra-fields/ImageField.jsx +11 -11
  134. package/src/components/ra-fields/ReadonlyField.jsx +40 -42
  135. package/src/components/ra-fields/ReferenceManyField.jsx +21 -21
  136. package/src/components/ra-fields/SizeField.jsx +15 -15
  137. package/src/components/ra-fields/TextField.jsx +14 -14
  138. package/src/components/ra-fields/index.jsx +15 -15
  139. package/src/components/ra-forms/CardForm.jsx +34 -40
  140. package/src/components/ra-forms/LongForm/useFormRootPath.ts +8 -13
  141. package/src/components/ra-forms/TabbedForm.jsx +10 -10
  142. package/src/components/ra-forms/Toolbar.jsx +15 -15
  143. package/src/components/ra-forms/index.jsx +9 -9
  144. package/src/components/ra-inputs/AutocompleteArrayInput.jsx +7 -7
  145. package/src/components/ra-inputs/AutocompleteInput.jsx +9 -9
  146. package/src/components/ra-inputs/BooleanInput.jsx +19 -19
  147. package/src/components/ra-inputs/DateInput.jsx +13 -13
  148. package/src/components/ra-inputs/FileInput.jsx +33 -33
  149. package/src/components/ra-inputs/ImageInput.jsx +19 -19
  150. package/src/components/ra-inputs/NumberInput.jsx +13 -13
  151. package/src/components/ra-inputs/RecordInput.jsx +39 -39
  152. package/src/components/ra-inputs/ReferenceArrayInput.jsx +10 -10
  153. package/src/components/ra-inputs/ReferenceInput.jsx +10 -10
  154. package/src/components/ra-inputs/ReferenceManyInput.jsx +13 -24
  155. package/src/components/ra-inputs/SearchInput.jsx +6 -6
  156. package/src/components/ra-inputs/SelectArrayInput.jsx +19 -19
  157. package/src/components/ra-inputs/TimeInput.jsx +21 -21
  158. package/src/components/ra-lists/Empty.jsx +32 -37
  159. package/src/components/ra-lists/List.jsx +9 -9
  160. package/src/components/ra-lists/NotificationList/NotificationList.jsx +14 -16
  161. package/src/components/ra-lists/NotificationList/button/MarkAsReadedButton.jsx +21 -25
  162. package/src/components/ra-lists/NotificationList/button/MarkAsUnreadedButton.jsx +19 -19
  163. package/src/components/ra-lists/NotificationList/button/index.jsx +2 -2
  164. package/src/components/ra-lists/NotificationList/field/NotificationField.jsx +20 -31
  165. package/src/components/ra-lists/NotificationList/field/index.jsx +1 -1
  166. package/src/components/ra-lists/NotificationList/index.jsx +2 -2
  167. package/src/components/ra-lists/index.jsx +5 -5
  168. package/src/components/third-party/SimpleBar.jsx +10 -10
  169. package/src/components/third-party/index.jsx +2 -2
  170. package/src/contexts/MenuConfigContext.jsx +35 -35
  171. package/src/contexts/MenuPropTypes.jsx +7 -7
  172. package/src/contexts/index.jsx +5 -5
  173. package/src/dev/index.jsx +2 -2
  174. package/src/dev/useCliErrorCatcher.jsx +32 -32
  175. package/src/hooks/index.jsx +8 -16
  176. package/src/hooks/useAppConfig.jsx +4 -4
  177. package/src/hooks/useBreadcrumbs.jsx +37 -37
  178. package/src/hooks/useLocalStorage.jsx +16 -16
  179. package/src/hooks/useMenu.jsx +83 -88
  180. package/src/hooks/useMenuConfig.jsx +4 -4
  181. package/src/hooks/useResourceTitle.jsx +13 -13
  182. package/src/hooks/useThemeConfig.jsx +4 -4
  183. package/src/i18n/createI18nProvider.jsx +7 -7
  184. package/src/i18n/index.jsx +4 -4
  185. package/src/i18n/useI18nCatcher.jsx +26 -26
  186. package/src/i18n/useI18nLanguages.jsx +12 -16
  187. package/src/i18n/useI18nProvider.jsx +3 -4
  188. package/src/themes/getColors.jsx +8 -8
  189. package/src/themes/getShadow.jsx +17 -17
  190. package/src/themes/index.jsx +29 -29
  191. package/src/themes/overrides/Accordion.jsx +9 -9
  192. package/src/themes/overrides/AccordionDetails.jsx +5 -5
  193. package/src/themes/overrides/AccordionSummary.jsx +11 -11
  194. package/src/themes/overrides/Alert.jsx +21 -21
  195. package/src/themes/overrides/AlertTitle.jsx +5 -5
  196. package/src/themes/overrides/Autocomplete.jsx +9 -9
  197. package/src/themes/overrides/Badge.jsx +12 -12
  198. package/src/themes/overrides/Button.jsx +62 -62
  199. package/src/themes/overrides/ButtonBase.jsx +4 -4
  200. package/src/themes/overrides/ButtonGroup.jsx +4 -4
  201. package/src/themes/overrides/CardContent.jsx +6 -6
  202. package/src/themes/overrides/Checkbox.jsx +31 -31
  203. package/src/themes/overrides/Chip.jsx +22 -22
  204. package/src/themes/overrides/Dialog.jsx +7 -7
  205. package/src/themes/overrides/DialogContentText.jsx +5 -5
  206. package/src/themes/overrides/DialogTitle.jsx +5 -5
  207. package/src/themes/overrides/Fab.jsx +21 -21
  208. package/src/themes/overrides/IconButton.jsx +8 -8
  209. package/src/themes/overrides/InputBase.jsx +3 -3
  210. package/src/themes/overrides/InputLabel.jsx +8 -8
  211. package/src/themes/overrides/LinearProgress.jsx +6 -6
  212. package/src/themes/overrides/Link.jsx +4 -4
  213. package/src/themes/overrides/ListItemButton.jsx +7 -7
  214. package/src/themes/overrides/ListItemIcon.jsx +5 -5
  215. package/src/themes/overrides/LoadingButton.jsx +6 -6
  216. package/src/themes/overrides/OutlinedInput.jsx +20 -21
  217. package/src/themes/overrides/Pagination.jsx +4 -4
  218. package/src/themes/overrides/PaginationItem.jsx +55 -55
  219. package/src/themes/overrides/Popover.jsx +5 -5
  220. package/src/themes/overrides/Radio.jsx +30 -30
  221. package/src/themes/overrides/Slider.jsx +20 -20
  222. package/src/themes/overrides/Switch.jsx +26 -26
  223. package/src/themes/overrides/Tab.jsx +7 -7
  224. package/src/themes/overrides/TableBody.jsx +11 -11
  225. package/src/themes/overrides/TableCell.jsx +12 -12
  226. package/src/themes/overrides/TableFooter.jsx +5 -5
  227. package/src/themes/overrides/TableHead.jsx +5 -5
  228. package/src/themes/overrides/TablePagination.jsx +6 -6
  229. package/src/themes/overrides/TableRow.jsx +10 -10
  230. package/src/themes/overrides/Tabs.jsx +5 -5
  231. package/src/themes/overrides/ToggleButton.jsx +7 -7
  232. package/src/themes/overrides/Tooltip.jsx +5 -5
  233. package/src/themes/overrides/TreeItem.jsx +7 -7
  234. package/src/themes/overrides/Typography.jsx +5 -5
  235. package/src/themes/overrides/index.jsx +47 -47
  236. package/src/themes/palette.jsx +22 -34
  237. package/src/themes/shadows.jsx +4 -4
  238. package/src/themes/theme/default.jsx +17 -17
  239. package/src/themes/theme/index.jsx +23 -23
  240. package/src/themes/theme/theme1.jsx +24 -46
  241. package/src/themes/theme/theme2.jsx +24 -46
  242. package/src/themes/theme/theme3.jsx +24 -46
  243. package/src/themes/theme/theme4.jsx +24 -46
  244. package/src/themes/theme/theme5.jsx +24 -46
  245. package/src/themes/theme/theme6.jsx +24 -46
  246. package/src/themes/theme/theme7.jsx +24 -46
  247. package/src/themes/theme/theme8.jsx +24 -46
  248. package/src/themes/typography.jsx +16 -16
  249. package/src/utils/{lang.js → lang.ts} +4 -4
  250. package/src/utils/time.ts +14 -0
  251. package/vite.config.js +11 -10
  252. package/src/utils/time.js +0 -13
  253. /package/src/utils/{index.js → index.ts} +0 -0
@@ -1,40 +1,40 @@
1
- import { cloneDeep } from 'lodash'
2
- import { useLocation } from 'react-router-dom'
3
- import { useMemo } from 'react'
4
- import useMenu from './useMenu'
5
- import { useTranslate } from 'react-admin'
1
+ import { cloneDeep } from 'lodash';
2
+ import { useLocation } from 'react-router-dom';
3
+ import { useMemo } from 'react';
4
+ import useMenu from './useMenu';
5
+ import { useTranslate } from 'react-admin';
6
6
 
7
7
  const useBreadcrumbs = () => {
8
- const translate = useTranslate()
9
- const { isLoading, menu: _menu, findInMenu } = useMenu()
10
- const { pathname } = useLocation()
8
+ const translate = useTranslate();
9
+ const { isLoading, menu: _menu, findInMenu } = useMenu();
10
+ const { pathname } = useLocation();
11
11
 
12
12
  return useMemo(() => {
13
- const pathArgs = pathname.split('/').filter((x) => x)
14
- let menu = cloneDeep(_menu)
15
- let id = pathname
16
- let menuItem = findInMenu(menu, pathname)
13
+ const pathArgs = pathname.split('/').filter((x) => x);
14
+ let menu = cloneDeep(_menu);
15
+ let id = pathname;
16
+ let menuItem = findInMenu(menu, pathname);
17
17
  if (!menuItem) {
18
- menuItem = findInMenu(menu, pathArgs[pathArgs.length - 1])
19
- id = menuItem ? menuItem.id : id
18
+ menuItem = findInMenu(menu, pathArgs[pathArgs.length - 1]);
19
+ id = menuItem ? menuItem.id : id;
20
20
  }
21
21
  if (!menuItem) {
22
22
  for (let i = pathArgs.length; i >= 0; i--) {
23
- let path = pathArgs.slice(0, i).join('/')
24
- menuItem = findInMenu(menu, path)
23
+ let path = pathArgs.slice(0, i).join('/');
24
+ menuItem = findInMenu(menu, path);
25
25
  if (menuItem) {
26
- id = menuItem.id
27
- break
26
+ id = menuItem.id;
27
+ break;
28
28
  }
29
29
  }
30
30
  }
31
31
 
32
- const urlParts = menuItem?.url?.split('/')
32
+ const urlParts = menuItem?.url?.split('/');
33
33
  if (pathArgs.length >= urlParts?.length) {
34
- const data = pathArgs[pathArgs.length - 1]
34
+ const data = pathArgs[pathArgs.length - 1];
35
35
  if (menuItem) {
36
- const context = data === 'create' || pathname === menuItem.url ? 'create' : 'edit'
37
- const title = `resources.${id}.breadcrumbs.${context}`
36
+ const context = data === 'create' || pathname === menuItem.url ? 'create' : 'edit';
37
+ const title = `resources.${id}.breadcrumbs.${context}`;
38
38
  const child = {
39
39
  id: `${id}-${context}`,
40
40
  type: 'item',
@@ -42,27 +42,27 @@ const useBreadcrumbs = () => {
42
42
  url: pathname,
43
43
  breadcrumbs: true,
44
44
  parent: menuItem
45
- }
46
- menuItem.type = 'collapse'
47
- menuItem.breadcrumbs = true
48
- menuItem.children = menuItem.children || []
49
- menuItem.children.push(child)
50
- menuItem = child
45
+ };
46
+ menuItem.type = 'collapse';
47
+ menuItem.breadcrumbs = true;
48
+ menuItem.children = menuItem.children || [];
49
+ menuItem.children.push(child);
50
+ menuItem = child;
51
51
  }
52
52
  }
53
53
 
54
- let breadcrumbs = []
54
+ let breadcrumbs = [];
55
55
  if (menuItem) {
56
- let current = { ...menuItem, last: true }
56
+ let current = { ...menuItem, last: true };
57
57
  while (current) {
58
- breadcrumbs.push(current)
59
- current = current.parent
58
+ breadcrumbs.push(current);
59
+ current = current.parent;
60
60
  }
61
- breadcrumbs = breadcrumbs.reverse()
61
+ breadcrumbs = breadcrumbs.reverse();
62
62
  }
63
63
 
64
- return { isLoading, navigation: { items: menu }, breadcrumbs }
65
- }, [isLoading, pathname, _menu, findInMenu, translate])
66
- }
64
+ return { isLoading, navigation: { items: menu }, breadcrumbs };
65
+ }, [isLoading, pathname, _menu, findInMenu, translate]);
66
+ };
67
67
 
68
- export default useBreadcrumbs
68
+ export default useBreadcrumbs;
@@ -1,31 +1,31 @@
1
- import { useEffect, useState } from 'react'
1
+ import { useEffect, useState } from 'react';
2
2
 
3
3
  export default function useLocalStorage(key, defaultValue) {
4
4
  const [value, setValue] = useState(() => {
5
- const storedValue = typeof window !== 'undefined' ? localStorage.getItem(key) : null
6
- return storedValue === null ? defaultValue : JSON.parse(storedValue)
7
- })
5
+ const storedValue = typeof window !== 'undefined' ? localStorage.getItem(key) : null;
6
+ return storedValue === null ? defaultValue : JSON.parse(storedValue);
7
+ });
8
8
 
9
9
  useEffect(() => {
10
10
  const listener = (e) => {
11
11
  if (typeof window !== 'undefined' && e.storageArea === localStorage && e.key === key) {
12
- setValue(e.newValue ? JSON.parse(e.newValue) : e.newValue)
12
+ setValue(e.newValue ? JSON.parse(e.newValue) : e.newValue);
13
13
  }
14
- }
15
- window.addEventListener('storage', listener)
14
+ };
15
+ window.addEventListener('storage', listener);
16
16
 
17
17
  return () => {
18
- window.removeEventListener('storage', listener)
19
- }
20
- }, [key, defaultValue])
18
+ window.removeEventListener('storage', listener);
19
+ };
20
+ }, [key, defaultValue]);
21
21
 
22
22
  const setValueInLocalStorage = (newValue) => {
23
23
  setValue((currentValue) => {
24
- const result = typeof newValue === 'function' ? newValue(currentValue) : newValue
25
- if (typeof window !== 'undefined') localStorage.setItem(key, JSON.stringify(result))
26
- return result
27
- })
28
- }
24
+ const result = typeof newValue === 'function' ? newValue(currentValue) : newValue;
25
+ if (typeof window !== 'undefined') localStorage.setItem(key, JSON.stringify(result));
26
+ return result;
27
+ });
28
+ };
29
29
 
30
- return [value, setValueInLocalStorage]
30
+ return [value, setValueInLocalStorage];
31
31
  }
@@ -1,130 +1,125 @@
1
- import { useGetIdentity, usePermissions, useResourceDefinitions, useTranslate } from 'react-admin'
1
+ import { useGetIdentity, usePermissions, useResourceDefinitions, useTranslate } from 'react-admin';
2
2
 
3
- import { AntDesignOutlined } from '@ant-design/icons'
4
- import { cloneDeep } from 'lodash'
5
- import { useMemo } from 'react'
6
- import useMenuConfig from './useMenuConfig'
3
+ import { AntDesignOutlined } from '@ant-design/icons';
4
+ import { cloneDeep } from 'lodash';
5
+ import { useMemo } from 'react';
6
+ import useMenuConfig from './useMenuConfig';
7
7
 
8
- const RESOURCE_PREFIXES = ['e-', 'entities/']
8
+ const RESOURCE_PREFIXES = ['e-', 'entities/'];
9
9
 
10
10
  const getResourceName = (name) => {
11
- let resourceName = name
11
+ let resourceName = name;
12
12
  RESOURCE_PREFIXES.forEach((prefix) => {
13
- resourceName = resourceName?.startsWith(prefix)
14
- ? resourceName?.substring(prefix.length)
15
- : resourceName
16
- })
17
- return resourceName
18
- }
13
+ resourceName = resourceName?.startsWith(prefix) ? resourceName?.substring(prefix.length) : resourceName;
14
+ });
15
+ return resourceName;
16
+ };
19
17
 
20
- const isInGroup = (group, resource) =>
21
- resource.options?.group === group.id || (!resource.options?.group && group.id === 'admin')
18
+ const isInGroup = (group, resource) => resource.options?.group === group.id || (!resource.options?.group && group.id === 'admin');
22
19
 
23
20
  const hasPermission = (resource, permissions) => {
24
- const name = getResourceName(resource.name)
25
- const hasPermission = permissions?.includes(`${name}:list`)
26
- return hasPermission
27
- }
21
+ const name = getResourceName(resource.name);
22
+ const hasPermission = permissions?.includes(`${name}:list`);
23
+ return hasPermission;
24
+ };
28
25
 
29
26
  const getItem = (menu, id) => {
30
- let item = menu.find((item) => item.id === id)
27
+ let item = menu.find((item) => item.id === id);
31
28
  if (!item) {
32
29
  for (let i = 0; i < menu.length; i++) {
33
- const element = menu[i]
30
+ const element = menu[i];
34
31
  if (element.children) {
35
- item = getItem(element.children, id)
32
+ item = getItem(element.children, id);
36
33
  if (item) {
37
- return item
34
+ return item;
38
35
  }
39
36
  }
40
37
  }
41
38
  }
42
- return item
43
- }
39
+ return item;
40
+ };
44
41
 
45
42
  const getGroup = (groups, resource, permissions) => {
46
43
  let group = groups.find(
47
- (g) =>
48
- ['group', 'collapse'].indexOf(g.type) !== -1 &&
49
- isInGroup(g, resource) /* && hasPermission(resource, permissions)*/
50
- )
44
+ (g) => ['group', 'collapse'].indexOf(g.type) !== -1 && isInGroup(g, resource) /* && hasPermission(resource, permissions)*/
45
+ );
51
46
  if (!group) {
52
47
  for (let i = 0; i < groups.length; i++) {
53
- const element = groups[i]
48
+ const element = groups[i];
54
49
  if (element.children) {
55
- group = getGroup(element.children, resource, permissions)
50
+ group = getGroup(element.children, resource, permissions);
56
51
  if (group) {
57
- return group
52
+ return group;
58
53
  }
59
54
  }
60
55
  }
61
56
  }
62
- return group
63
- }
57
+ return group;
58
+ };
64
59
 
65
60
  const getGroupById = (groups, id) => {
66
- let group = groups.find((g) => g.id === id)
61
+ let group = groups.find((g) => g.id === id);
67
62
  if (!group) {
68
63
  for (let i = 0; i < groups.length; i++) {
69
- const element = groups[i]
64
+ const element = groups[i];
70
65
  if (element.children) {
71
- group = getGroupById(element.children, id)
66
+ group = getGroupById(element.children, id);
72
67
  if (group) {
73
- return group
68
+ return group;
74
69
  }
75
70
  }
76
71
  }
77
72
  }
78
- return group
79
- }
73
+ return group;
74
+ };
80
75
  const filterNotEmpty = (group) => {
81
76
  if (!group) {
82
- return false
77
+ return false;
83
78
  }
84
79
  if (group.type === 'item') {
85
- return true
80
+ return true;
86
81
  }
87
82
  if (group.children) {
88
- group.children = group.children.filter(filterNotEmpty)
83
+ group.children = group.children.filter(filterNotEmpty);
89
84
  }
90
- return group.children && group.children.length > 0
91
- }
85
+ return group.children && group.children.length > 0;
86
+ };
92
87
 
93
88
  const mapParent = (group) => {
94
89
  if (group.children) {
95
90
  group.children.forEach((child) => {
96
- child.parent = group
97
- mapParent(child)
98
- })
91
+ child.parent = group;
92
+ mapParent(child);
93
+ });
99
94
  }
100
- return group
101
- }
95
+ return group;
96
+ };
102
97
 
103
98
  const createNodes = ({ userGroups, resources, permissions, translate }) => {
104
99
  const translateRecursive = (group) => {
105
- group.title = translate(group.title, { _: group.title })
100
+ group.title = translate(group.title, { _: group.title });
106
101
 
107
102
  if (group.children) {
108
- group.children.forEach((child) => translateRecursive(child))
103
+ group.children.forEach((child) => translateRecursive(child));
109
104
  }
110
- return group
111
- }
112
- const resourceNames = Object.keys(resources)
105
+ return group;
106
+ };
107
+ const resourceNames = Object.keys(resources);
113
108
  const removeNotFoundResources = (group, resources) => {
114
109
  if (group.children) {
115
110
  group.children = group.children.filter((child) => {
116
111
  if (child.resource === false) {
117
- return true
112
+ return true;
118
113
  }
119
114
  if (child.type === 'item') {
120
- return resources.includes(child.id)
115
+ return resources.includes(child.id);
121
116
  }
122
- removeNotFoundResources(child, resources)
123
- return child.children && child.children.length > 0
124
- })
117
+ removeNotFoundResources(child, resources);
118
+ return child.children && child.children.length > 0;
119
+ });
125
120
  }
126
- return group
127
- }
121
+ return group;
122
+ };
128
123
 
129
124
  const groupsA = cloneDeep(userGroups)
130
125
  .map((group) => ({
@@ -134,7 +129,7 @@ const createNodes = ({ userGroups, resources, permissions, translate }) => {
134
129
  ...group
135
130
  }))
136
131
  .map(translateRecursive)
137
- .map((group) => removeNotFoundResources(group, resourceNames))
132
+ .map((group) => removeNotFoundResources(group, resourceNames));
138
133
 
139
134
  const groupsB = Object.values(resources)
140
135
  // Detect group of each configured ra resource.
@@ -149,29 +144,29 @@ const createNodes = ({ userGroups, resources, permissions, translate }) => {
149
144
  type: 'group',
150
145
  icon: AntDesignOutlined,
151
146
  children: []
152
- }))
147
+ }));
153
148
 
154
- const groups = [...groupsA, ...groupsB]
149
+ const groups = [...groupsA, ...groupsB];
155
150
 
156
151
  Object.values(resources).forEach((resource) => {
157
152
  if (!resource.hasList) {
158
- return
153
+ return;
159
154
  }
160
155
 
161
- const group = getGroup(groups, resource, permissions)
162
- const exists = group?.children?.some((c) => c.id === resource.name)
156
+ const group = getGroup(groups, resource, permissions);
157
+ const exists = group?.children?.some((c) => c.id === resource.name);
163
158
  if (!hasPermission(resource, permissions)) {
164
159
  if (exists && group?.children?.length > 0) {
165
- group.children = group.children.filter((c) => c.id !== resource.name)
160
+ group.children = group.children.filter((c) => c.id !== resource.name);
166
161
  }
167
- return
162
+ return;
168
163
  }
169
164
  if (group) {
170
165
  if (!group.children) {
171
- group.children = []
166
+ group.children = [];
172
167
  }
173
168
  if (exists) {
174
- return
169
+ return;
175
170
  }
176
171
  // group.children.push({
177
172
  // id: resource.name,
@@ -183,21 +178,21 @@ const createNodes = ({ userGroups, resources, permissions, translate }) => {
183
178
  // icon: resource.options?.icon || exists?.icon || AntDesignOutlined
184
179
  // })
185
180
  }
186
- })
181
+ });
187
182
 
188
- return groups.filter(filterNotEmpty).map(mapParent)
189
- }
183
+ return groups.filter(filterNotEmpty).map(mapParent);
184
+ };
190
185
 
191
186
  const useMenu = () => {
192
- const resources = useResourceDefinitions()
193
- const { isLoading: loadingIdentity, data: identity } = useGetIdentity()
194
- const { permissions } = usePermissions()
195
- const { groups: userGroups } = useMenuConfig()
196
- const translate = useTranslate()
187
+ const resources = useResourceDefinitions();
188
+ const { isLoading: loadingIdentity, data: identity } = useGetIdentity();
189
+ const { permissions } = usePermissions();
190
+ const { groups: userGroups } = useMenuConfig();
191
+ const translate = useTranslate();
197
192
 
198
193
  const menu = useMemo(() => {
199
194
  if (loadingIdentity || !identity || identity === null || identity?.id <= 0) {
200
- return null
195
+ return null;
201
196
  }
202
197
 
203
198
  const groups = createNodes({
@@ -205,19 +200,19 @@ const useMenu = () => {
205
200
  permissions,
206
201
  translate,
207
202
  userGroups
208
- })
203
+ });
209
204
 
210
- return groups
211
- }, [loadingIdentity, identity, resources, permissions, translate, userGroups])
205
+ return groups;
206
+ }, [loadingIdentity, identity, resources, permissions, translate, userGroups]);
212
207
 
213
- const isLoading = useMemo(() => loadingIdentity, [loadingIdentity])
208
+ const isLoading = useMemo(() => loadingIdentity, [loadingIdentity]);
214
209
 
215
210
  return {
216
211
  menu,
217
212
  isLoading,
218
213
  getItem: (id) => (isLoading ? false : getItem(menu, id)),
219
214
  findInMenu: isLoading ? () => undefined : getItem
220
- }
221
- }
215
+ };
216
+ };
222
217
 
223
- export default useMenu
218
+ export default useMenu;
@@ -1,6 +1,6 @@
1
- import { MenuConfigContext } from '../contexts'
2
- import { useContext } from 'react'
1
+ import { MenuConfigContext } from '../contexts';
2
+ import { useContext } from 'react';
3
3
 
4
- const useMenuConfig = () => useContext(MenuConfigContext)
4
+ const useMenuConfig = () => useContext(MenuConfigContext);
5
5
 
6
- export default useMenuConfig
6
+ export default useMenuConfig;
@@ -1,25 +1,25 @@
1
- import { useRecordContext, useResourceContext, useTranslate } from 'react-admin'
1
+ import { useRecordContext, useResourceContext, useTranslate } from 'react-admin';
2
2
 
3
- import { useMemo } from 'react'
3
+ import { useMemo } from 'react';
4
4
 
5
5
  const useResourceTitle = (title) => {
6
- const record = useRecordContext()
7
- const translate = useTranslate()
8
- const resource = useResourceContext()
9
- const mode = record?.id ? 'edit' : 'create'
6
+ const record = useRecordContext();
7
+ const translate = useTranslate();
8
+ const resource = useResourceContext();
9
+ const mode = record?.id ? 'edit' : 'create';
10
10
 
11
11
  const cardTitle = useMemo(() => {
12
- const defaultTitle = `resources.${resource}.title`
12
+ const defaultTitle = `resources.${resource}.title`;
13
13
  return (
14
14
  title ||
15
15
  translate(`resources.${resource}.title.${mode}`, {
16
16
  _: translate(defaultTitle, { _: defaultTitle }),
17
- ...record,
17
+ ...record
18
18
  })
19
- )
20
- }, [mode, record, resource, translate, title])
19
+ );
20
+ }, [mode, record, resource, translate, title]);
21
21
 
22
- return cardTitle
23
- }
22
+ return cardTitle;
23
+ };
24
24
 
25
- export default useResourceTitle
25
+ export default useResourceTitle;
@@ -1,6 +1,6 @@
1
- import { ThemeConfigContext } from '../contexts/ThemeConfigContext'
2
- import { useContext } from 'react'
1
+ import { ThemeConfigContext } from '../contexts/ThemeConfigContext';
2
+ import { useContext } from 'react';
3
3
 
4
- const useThemeConfig = () => useContext(ThemeConfigContext)
4
+ const useThemeConfig = () => useContext(ThemeConfigContext);
5
5
 
6
- export default useThemeConfig
6
+ export default useThemeConfig;
@@ -1,15 +1,15 @@
1
- import { get } from 'lodash'
2
- import polyglotI18nProvider from 'ra-i18n-polyglot'
1
+ import { get } from 'lodash';
2
+ import polyglotI18nProvider from 'ra-i18n-polyglot';
3
3
 
4
4
  const createI18nProvider = ({ languages, defaultLocale, allowMissing = false }) =>
5
5
  polyglotI18nProvider(
6
6
  (locale) => {
7
- const messages = get(languages, locale, {})
8
- return messages
7
+ const messages = get(languages, locale, {});
8
+ return messages;
9
9
  },
10
10
  defaultLocale,
11
11
  [{ locale: defaultLocale }],
12
- { allowMissing },
13
- )
12
+ { allowMissing }
13
+ );
14
14
 
15
- export default createI18nProvider
15
+ export default createI18nProvider;
@@ -1,4 +1,4 @@
1
- export { default as createI18nProvider } from './createI18nProvider'
2
- export { default as useI18nCatcher } from './useI18nCatcher'
3
- export { default as useI18nLanguages } from './useI18nLanguages'
4
- export { default as useI18nProvider } from './useI18nProvider'
1
+ export { default as createI18nProvider } from './createI18nProvider';
2
+ export { default as useI18nCatcher } from './useI18nCatcher';
3
+ export { default as useI18nLanguages } from './useI18nLanguages';
4
+ export { default as useI18nProvider } from './useI18nProvider';
@@ -1,9 +1,9 @@
1
1
  /* eslint-disable no-console */
2
- import * as React from 'react'
2
+ import * as React from 'react';
3
3
 
4
- import { useLocaleState } from 'react-admin'
4
+ import { useLocaleState } from 'react-admin';
5
5
 
6
- const queued = []
6
+ const queued = [];
7
7
 
8
8
  const putMessage = ({ apiUrl, endpoint, locale, message, bodyBuilder }) =>
9
9
  message != null &&
@@ -16,10 +16,10 @@ const putMessage = ({ apiUrl, endpoint, locale, message, bodyBuilder }) =>
16
16
  method: 'PUT',
17
17
  headers: new Headers({
18
18
  Accept: 'application/json',
19
- 'Content-Type': 'application/json',
19
+ 'Content-Type': 'application/json'
20
20
  }),
21
- body: JSON.stringify(bodyBuilder(locale, message)),
22
- })
21
+ body: JSON.stringify(bodyBuilder(locale, message))
22
+ });
23
23
 
24
24
  const useI18nCatcher = ({
25
25
  apiUrl,
@@ -30,42 +30,42 @@ const useI18nCatcher = ({
30
30
  code: locale,
31
31
  message: {
32
32
  code: message,
33
- text: message,
34
- },
35
- }),
33
+ text: message
34
+ }
35
+ })
36
36
  }) => {
37
- const [locale] = useLocaleState()
37
+ const [locale] = useLocaleState();
38
38
  React.useMemo(() => {
39
39
  if (loading) {
40
- return
40
+ return;
41
41
  }
42
42
 
43
43
  if (!enabled) {
44
- return
44
+ return;
45
45
  }
46
46
 
47
- const consoleError = console.error
47
+ const consoleError = console.error;
48
48
 
49
49
  console.error = function (message) {
50
50
  if (typeof message === 'string' && message === '%c%s') {
51
- return
51
+ return;
52
52
  }
53
53
  if (typeof message === 'string' && message.indexOf('Missing translation for key: ') >= 0) {
54
- message = message.replace('Warning: Missing translation for key: ', '')
55
- message = message.split('"').join('').trim()
54
+ message = message.replace('Warning: Missing translation for key: ', '');
55
+ message = message.split('"').join('').trim();
56
56
  if (message === null || message.indexOf(' ') !== -1 || message.indexOf('.') === -1) {
57
- return
57
+ return;
58
58
  }
59
59
 
60
- const lc = localStorage.getItem('locale') || locale
61
- putMessage({ apiUrl, endpoint, locale: lc, message, bodyBuilder })
62
- return
60
+ const lc = localStorage.getItem('locale') || locale;
61
+ putMessage({ apiUrl, endpoint, locale: lc, message, bodyBuilder });
62
+ return;
63
63
  }
64
64
 
65
- consoleError.apply(console, arguments)
66
- }
67
- }, [apiUrl, locale, loading, bodyBuilder, endpoint, enabled])
68
- return true
69
- }
65
+ consoleError.apply(console, arguments);
66
+ };
67
+ }, [apiUrl, locale, loading, bodyBuilder, endpoint, enabled]);
68
+ return true;
69
+ };
70
70
 
71
- export default useI18nCatcher
71
+ export default useI18nCatcher;
@@ -1,22 +1,18 @@
1
1
  /* eslint-disable no-console */
2
- import React from 'react'
3
- window.React = React
4
- const useI18nLanguages = ({
5
- apiUrl,
6
- endpoint = '/languages/load',
7
- mapper = ({ data }) => ({ data }),
8
- }) => {
9
- const [data, setData] = React.useState({ loading: true, languages: null })
2
+ import React from 'react';
3
+ window.React = React;
4
+ const useI18nLanguages = ({ apiUrl, endpoint = '/languages/load', mapper = ({ data }) => ({ data }) }) => {
5
+ const [data, setData] = React.useState({ loading: true, languages: null });
10
6
  React.useEffect(() => {
11
- let headers = new Headers()
12
- headers.append('Accept', 'application/json')
13
- headers.append('Content-Type', 'application/json')
7
+ let headers = new Headers();
8
+ headers.append('Accept', 'application/json');
9
+ headers.append('Content-Type', 'application/json');
14
10
  fetch(`${apiUrl}${endpoint}`, { headers })
15
11
  .then((response) => response.json())
16
- .then((response) => setData({ loading: false, ...mapper(response) }))
17
- }, [apiUrl, endpoint, mapper])
12
+ .then((response) => setData({ loading: false, ...mapper(response) }));
13
+ }, [apiUrl, endpoint, mapper]);
18
14
 
19
- return data
20
- }
15
+ return data;
16
+ };
21
17
 
22
- export default useI18nLanguages
18
+ export default useI18nLanguages;