@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.
- package/bitbucket-pipelines.yml +2 -0
- package/dist/ApplicaAdmin.d.ts.map +1 -1
- package/dist/components/@extended/AnimateButton.d.ts +1 -1
- package/dist/components/@extended/AnimateButton.d.ts.map +1 -1
- package/dist/components/@extended/Avatar.d.ts.map +1 -1
- package/dist/components/@extended/Breadcrumbs.d.ts.map +1 -1
- package/dist/components/@extended/IconButton.d.ts.map +1 -1
- package/dist/components/@extended/LoadingButton.d.ts.map +1 -1
- package/dist/components/@extended/Tooltip.d.ts.map +1 -1
- package/dist/components/@extended/Transitions.d.ts.map +1 -1
- package/dist/components/@extended/progress/CircularWithLabel.d.ts.map +1 -1
- package/dist/components/@extended/progress/CircularWithPath.d.ts.map +1 -1
- package/dist/components/Layout/Drawer/DrawerContent/Navigation/NavCollapse.d.ts +1 -1
- package/dist/components/Layout/Drawer/DrawerContent/Navigation/NavCollapse.d.ts.map +1 -1
- package/dist/components/Layout/Drawer/DrawerContent/Navigation/NavGroup.d.ts.map +1 -1
- package/dist/components/Layout/Drawer/DrawerContent/Navigation/NavItem.d.ts.map +1 -1
- package/dist/components/Layout/Drawer/DrawerHeader/DrawerHeaderStyled.d.ts.map +1 -1
- package/dist/components/Layout/Drawer/DrawerHeader/index.d.ts.map +1 -1
- package/dist/components/Layout/Drawer/MiniDrawerStyled.d.ts.map +1 -1
- package/dist/components/Layout/Drawer/index.d.ts.map +1 -1
- package/dist/components/Layout/Footer.d.ts.map +1 -1
- package/dist/components/Layout/Header/AppBarStyled.d.ts.map +1 -1
- package/dist/components/Layout/Header/HeaderContent/Notification.d.ts.map +1 -1
- package/dist/components/Layout/Header/HeaderContent/NotificationItem.d.ts.map +1 -1
- package/dist/components/Layout/Header/HeaderContent/Profile.d.ts.map +1 -1
- package/dist/components/Layout/Header/HeaderContent/index.d.ts.map +1 -1
- package/dist/components/Layout/Header/index.d.ts.map +1 -1
- package/dist/components/Layout/index.d.ts.map +1 -1
- package/dist/components/MenuPopover/styles.d.ts.map +1 -1
- package/dist/components/Notification.d.ts.map +1 -1
- package/dist/components/ScrollX.d.ts.map +1 -1
- package/dist/components/ra-buttons/EditInDialogButton.d.ts.map +1 -1
- package/dist/components/ra-fields/CoverField.d.ts.map +1 -1
- package/dist/components/ra-fields/DateAgoField.d.ts.map +1 -1
- package/dist/components/ra-fields/ReadonlyField.d.ts.map +1 -1
- package/dist/components/ra-forms/CardForm.d.ts.map +1 -1
- package/dist/components/ra-forms/LongForm/useFormRootPath.d.ts.map +1 -1
- package/dist/components/ra-forms/TabbedForm.d.ts.map +1 -1
- package/dist/components/ra-inputs/ReferenceManyInput.d.ts.map +1 -1
- package/dist/components/ra-lists/Empty.d.ts.map +1 -1
- package/dist/components/ra-lists/NotificationList/NotificationList.d.ts.map +1 -1
- package/dist/components/ra-lists/NotificationList/button/MarkAsReadedButton.d.ts.map +1 -1
- package/dist/components/ra-lists/NotificationList/field/NotificationField.d.ts.map +1 -1
- package/dist/contexts/MenuConfigContext.d.ts.map +1 -1
- package/dist/contexts/MenuPropTypes.d.ts.map +1 -1
- package/dist/dev/useCliErrorCatcher.d.ts +1 -1
- package/dist/hooks/useMenu.d.ts.map +1 -1
- package/dist/i18n/useI18nCatcher.d.ts +1 -1
- package/dist/i18n/useI18nLanguages.d.ts +1 -1
- package/dist/i18n/useI18nLanguages.d.ts.map +1 -1
- package/dist/i18n/useI18nProvider.d.ts.map +1 -1
- package/dist/react-admin.cjs.js +2 -1
- package/dist/react-admin.cjs.js.map +1 -0
- package/dist/react-admin.es.js +300 -784
- package/dist/react-admin.es.js.map +1 -0
- package/dist/react-admin.umd.js +2 -1
- package/dist/react-admin.umd.js.map +1 -0
- package/dist/themes/overrides/OutlinedInput.d.ts.map +1 -1
- package/dist/themes/palette.d.ts.map +1 -1
- package/dist/themes/theme/theme1.d.ts.map +1 -1
- package/dist/themes/theme/theme2.d.ts.map +1 -1
- package/dist/themes/theme/theme3.d.ts.map +1 -1
- package/dist/themes/theme/theme4.d.ts.map +1 -1
- package/dist/themes/theme/theme5.d.ts.map +1 -1
- package/dist/themes/theme/theme6.d.ts.map +1 -1
- package/dist/themes/theme/theme7.d.ts.map +1 -1
- package/dist/themes/theme/theme8.d.ts.map +1 -1
- package/dist/utils/index.d.ts +2 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/lang.d.ts +1 -1
- package/dist/utils/lang.d.ts.map +1 -1
- package/dist/utils/time.d.ts +2 -1
- package/dist/utils/time.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/Admin.jsx +8 -8
- package/src/AdminContext.jsx +9 -9
- package/src/ApplicaAdmin.jsx +30 -35
- package/src/components/@extended/AnimateButton.jsx +25 -33
- package/src/components/@extended/Avatar.jsx +35 -42
- package/src/components/@extended/Breadcrumbs.jsx +62 -96
- package/src/components/@extended/Dot.jsx +14 -14
- package/src/components/@extended/IconButton.jsx +55 -65
- package/src/components/@extended/LoadingButton.jsx +84 -86
- package/src/components/@extended/Tooltip.jsx +24 -27
- package/src/components/@extended/Transitions.jsx +98 -107
- package/src/components/@extended/index.jsx +10 -10
- package/src/components/@extended/progress/CircularWithLabel.jsx +7 -9
- package/src/components/@extended/progress/CircularWithPath.jsx +9 -18
- package/src/components/@extended/progress/LinearWithIcon.jsx +5 -5
- package/src/components/@extended/progress/LinearWithLabel.jsx +5 -5
- package/src/components/@extended/progress/index.jsx +5 -5
- package/src/components/Layout/Drawer/DrawerContent/Navigation/NavCollapse.jsx +112 -131
- package/src/components/Layout/Drawer/DrawerContent/Navigation/NavGroup.jsx +67 -88
- package/src/components/Layout/Drawer/DrawerContent/Navigation/NavItem.jsx +63 -79
- package/src/components/Layout/Drawer/DrawerContent/Navigation/index.jsx +28 -28
- package/src/components/Layout/Drawer/DrawerContent/index.jsx +7 -7
- package/src/components/Layout/Drawer/DrawerHeader/DrawerHeaderStyled.jsx +13 -15
- package/src/components/Layout/Drawer/DrawerHeader/index.jsx +17 -22
- package/src/components/Layout/Drawer/HorizontalBar.jsx +17 -17
- package/src/components/Layout/Drawer/MiniDrawerStyled.jsx +27 -29
- package/src/components/Layout/Drawer/index.jsx +21 -24
- package/src/components/Layout/Footer.jsx +7 -12
- package/src/components/Layout/Header/AppBarStyled.jsx +26 -28
- package/src/components/Layout/Header/HeaderContent/MobileSection.jsx +27 -27
- package/src/components/Layout/Header/HeaderContent/Notification.jsx +34 -55
- package/src/components/Layout/Header/HeaderContent/NotificationItem.jsx +24 -36
- package/src/components/Layout/Header/HeaderContent/Profile.jsx +48 -73
- package/src/components/Layout/Header/HeaderContent/index.jsx +16 -18
- package/src/components/Layout/Header/index.jsx +25 -43
- package/src/components/Layout/index.jsx +36 -52
- package/src/components/Loadable.jsx +4 -4
- package/src/components/Loader.jsx +7 -7
- package/src/components/Logo.jsx +14 -14
- package/src/components/MainIcon.jsx +6 -6
- package/src/components/MenuPopover/MenuPopover.jsx +15 -15
- package/src/components/MenuPopover/getPosition.jsx +40 -40
- package/src/components/MenuPopover/index.jsx +3 -3
- package/src/components/MenuPopover/styles.jsx +20 -20
- package/src/components/Notification.jsx +7 -7
- package/src/components/ScrollTop.jsx +13 -13
- package/src/components/ScrollX.jsx +4 -4
- package/src/components/SmallIcon.jsx +6 -6
- package/src/components/ra-buttons/EditInDialogButton.jsx +39 -45
- package/src/components/ra-buttons/ImpersonateUserButton.jsx +20 -20
- package/src/components/ra-buttons/index.jsx +4 -4
- package/src/components/ra-fields/ActionsField.jsx +12 -12
- package/src/components/ra-fields/CoverField.jsx +20 -26
- package/src/components/ra-fields/DateAgoField.jsx +17 -20
- package/src/components/ra-fields/DateField.jsx +14 -14
- package/src/components/ra-fields/EmailField.jsx +14 -14
- package/src/components/ra-fields/FileField.jsx +23 -23
- package/src/components/ra-fields/FunctionField.jsx +5 -5
- package/src/components/ra-fields/ImageField.jsx +11 -11
- package/src/components/ra-fields/ReadonlyField.jsx +40 -42
- package/src/components/ra-fields/ReferenceManyField.jsx +21 -21
- package/src/components/ra-fields/SizeField.jsx +15 -15
- package/src/components/ra-fields/TextField.jsx +14 -14
- package/src/components/ra-fields/index.jsx +15 -15
- package/src/components/ra-forms/CardForm.jsx +34 -40
- package/src/components/ra-forms/LongForm/useFormRootPath.ts +8 -13
- package/src/components/ra-forms/TabbedForm.jsx +10 -10
- package/src/components/ra-forms/Toolbar.jsx +15 -15
- package/src/components/ra-forms/index.jsx +9 -9
- package/src/components/ra-inputs/AutocompleteArrayInput.jsx +7 -7
- package/src/components/ra-inputs/AutocompleteInput.jsx +9 -9
- package/src/components/ra-inputs/BooleanInput.jsx +19 -19
- package/src/components/ra-inputs/DateInput.jsx +13 -13
- package/src/components/ra-inputs/FileInput.jsx +33 -33
- package/src/components/ra-inputs/ImageInput.jsx +19 -19
- package/src/components/ra-inputs/NumberInput.jsx +13 -13
- package/src/components/ra-inputs/RecordInput.jsx +39 -39
- package/src/components/ra-inputs/ReferenceArrayInput.jsx +10 -10
- package/src/components/ra-inputs/ReferenceInput.jsx +10 -10
- package/src/components/ra-inputs/ReferenceManyInput.jsx +13 -24
- package/src/components/ra-inputs/SearchInput.jsx +6 -6
- package/src/components/ra-inputs/SelectArrayInput.jsx +19 -19
- package/src/components/ra-inputs/TimeInput.jsx +21 -21
- package/src/components/ra-lists/Empty.jsx +32 -37
- package/src/components/ra-lists/List.jsx +9 -9
- package/src/components/ra-lists/NotificationList/NotificationList.jsx +14 -16
- package/src/components/ra-lists/NotificationList/button/MarkAsReadedButton.jsx +21 -25
- package/src/components/ra-lists/NotificationList/button/MarkAsUnreadedButton.jsx +19 -19
- package/src/components/ra-lists/NotificationList/button/index.jsx +2 -2
- package/src/components/ra-lists/NotificationList/field/NotificationField.jsx +20 -31
- package/src/components/ra-lists/NotificationList/field/index.jsx +1 -1
- package/src/components/ra-lists/NotificationList/index.jsx +2 -2
- package/src/components/ra-lists/index.jsx +5 -5
- package/src/components/third-party/SimpleBar.jsx +10 -10
- package/src/components/third-party/index.jsx +2 -2
- package/src/contexts/MenuConfigContext.jsx +35 -35
- package/src/contexts/MenuPropTypes.jsx +7 -7
- package/src/contexts/index.jsx +5 -5
- package/src/dev/index.jsx +2 -2
- package/src/dev/useCliErrorCatcher.jsx +32 -32
- package/src/hooks/index.jsx +8 -16
- package/src/hooks/useAppConfig.jsx +4 -4
- package/src/hooks/useBreadcrumbs.jsx +37 -37
- package/src/hooks/useLocalStorage.jsx +16 -16
- package/src/hooks/useMenu.jsx +83 -88
- package/src/hooks/useMenuConfig.jsx +4 -4
- package/src/hooks/useResourceTitle.jsx +13 -13
- package/src/hooks/useThemeConfig.jsx +4 -4
- package/src/i18n/createI18nProvider.jsx +7 -7
- package/src/i18n/index.jsx +4 -4
- package/src/i18n/useI18nCatcher.jsx +26 -26
- package/src/i18n/useI18nLanguages.jsx +12 -16
- package/src/i18n/useI18nProvider.jsx +3 -4
- package/src/themes/getColors.jsx +8 -8
- package/src/themes/getShadow.jsx +17 -17
- package/src/themes/index.jsx +29 -29
- package/src/themes/overrides/Accordion.jsx +9 -9
- package/src/themes/overrides/AccordionDetails.jsx +5 -5
- package/src/themes/overrides/AccordionSummary.jsx +11 -11
- package/src/themes/overrides/Alert.jsx +21 -21
- package/src/themes/overrides/AlertTitle.jsx +5 -5
- package/src/themes/overrides/Autocomplete.jsx +9 -9
- package/src/themes/overrides/Badge.jsx +12 -12
- package/src/themes/overrides/Button.jsx +62 -62
- package/src/themes/overrides/ButtonBase.jsx +4 -4
- package/src/themes/overrides/ButtonGroup.jsx +4 -4
- package/src/themes/overrides/CardContent.jsx +6 -6
- package/src/themes/overrides/Checkbox.jsx +31 -31
- package/src/themes/overrides/Chip.jsx +22 -22
- package/src/themes/overrides/Dialog.jsx +7 -7
- package/src/themes/overrides/DialogContentText.jsx +5 -5
- package/src/themes/overrides/DialogTitle.jsx +5 -5
- package/src/themes/overrides/Fab.jsx +21 -21
- package/src/themes/overrides/IconButton.jsx +8 -8
- package/src/themes/overrides/InputBase.jsx +3 -3
- package/src/themes/overrides/InputLabel.jsx +8 -8
- package/src/themes/overrides/LinearProgress.jsx +6 -6
- package/src/themes/overrides/Link.jsx +4 -4
- package/src/themes/overrides/ListItemButton.jsx +7 -7
- package/src/themes/overrides/ListItemIcon.jsx +5 -5
- package/src/themes/overrides/LoadingButton.jsx +6 -6
- package/src/themes/overrides/OutlinedInput.jsx +20 -21
- package/src/themes/overrides/Pagination.jsx +4 -4
- package/src/themes/overrides/PaginationItem.jsx +55 -55
- package/src/themes/overrides/Popover.jsx +5 -5
- package/src/themes/overrides/Radio.jsx +30 -30
- package/src/themes/overrides/Slider.jsx +20 -20
- package/src/themes/overrides/Switch.jsx +26 -26
- package/src/themes/overrides/Tab.jsx +7 -7
- package/src/themes/overrides/TableBody.jsx +11 -11
- package/src/themes/overrides/TableCell.jsx +12 -12
- package/src/themes/overrides/TableFooter.jsx +5 -5
- package/src/themes/overrides/TableHead.jsx +5 -5
- package/src/themes/overrides/TablePagination.jsx +6 -6
- package/src/themes/overrides/TableRow.jsx +10 -10
- package/src/themes/overrides/Tabs.jsx +5 -5
- package/src/themes/overrides/ToggleButton.jsx +7 -7
- package/src/themes/overrides/Tooltip.jsx +5 -5
- package/src/themes/overrides/TreeItem.jsx +7 -7
- package/src/themes/overrides/Typography.jsx +5 -5
- package/src/themes/overrides/index.jsx +47 -47
- package/src/themes/palette.jsx +22 -34
- package/src/themes/shadows.jsx +4 -4
- package/src/themes/theme/default.jsx +17 -17
- package/src/themes/theme/index.jsx +23 -23
- package/src/themes/theme/theme1.jsx +24 -46
- package/src/themes/theme/theme2.jsx +24 -46
- package/src/themes/theme/theme3.jsx +24 -46
- package/src/themes/theme/theme4.jsx +24 -46
- package/src/themes/theme/theme5.jsx +24 -46
- package/src/themes/theme/theme6.jsx +24 -46
- package/src/themes/theme/theme7.jsx +24 -46
- package/src/themes/theme/theme8.jsx +24 -46
- package/src/themes/typography.jsx +16 -16
- package/src/utils/{lang.js → lang.ts} +4 -4
- package/src/utils/time.ts +14 -0
- package/vite.config.js +11 -10
- package/src/utils/time.js +0 -13
- /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
|
}
|
package/src/hooks/useMenu.jsx
CHANGED
|
@@ -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
|
-
|
|
15
|
-
|
|
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
|
-
|
|
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;
|
package/src/i18n/index.jsx
CHANGED
|
@@ -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
|
-
|
|
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;
|