wcz-layout 5.10.1 → 5.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/components/Layout.d.ts +1 -0
- package/dist/src/components/Layout.js +2 -1
- package/dist/src/components/Layout.js.map +1 -1
- package/dist/src/components/LayoutSnackbar.d.ts +0 -1
- package/dist/src/components/LayoutSnackbar.js +12 -2
- package/dist/src/components/LayoutSnackbar.js.map +1 -1
- package/dist/src/components/TypographyWithIcon.d.ts +0 -1
- package/dist/src/contexts/LayoutContext.d.ts +1 -0
- package/dist/src/contexts/LayoutContext.js +1 -1
- package/dist/src/contexts/LayoutContext.js.map +1 -1
- package/dist/src/models/KeycloakExtendedConfig.js.map +1 -1
- package/dist/src/models/LeftDrawerItem.d.ts +0 -1
- package/dist/src/utils/Fetches.js +5 -1
- package/dist/src/utils/Fetches.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/components/Layout.tsx +3 -1
- package/src/components/LayoutSnackbar.tsx +13 -2
- package/src/contexts/LayoutContext.tsx +2 -1
- package/src/models/KeycloakExtendedConfig.ts +11 -11
- package/src/utils/Fetches.ts +4 -1
- package/dist/src/components/Button.d.ts +0 -3
- package/dist/src/components/Button.js +0 -9
- package/dist/src/components/Button.js.map +0 -1
- package/dist/src/next/Fetches.d.ts +0 -5
- package/dist/src/next/Fetches.js +0 -61
- package/dist/src/next/Fetches.js.map +0 -1
- package/dist/src/utils/Translations.d.ts +0 -40
- package/dist/src/utils/Translations.js +0 -41
- package/dist/src/utils/Translations.js.map +0 -1
|
@@ -47,7 +47,7 @@ const AppBar = styled(MuiAppBar, {
|
|
|
47
47
|
}),
|
|
48
48
|
}));
|
|
49
49
|
export default function Layout(props) {
|
|
50
|
-
const { primaryColor, secondaryColor, title, appVersion, leftDrawerItems, user, initialized, children } = props;
|
|
50
|
+
const { primaryColor, secondaryColor, backgroundColor, title, appVersion, leftDrawerItems, user, initialized, children } = props;
|
|
51
51
|
const prefersDarkMode = useMediaQuery("(prefers-color-scheme: dark)");
|
|
52
52
|
const [mode, setMode] = useState(storedMode);
|
|
53
53
|
const [leftDrawerOpen, setLeftDrawerOpen] = useState(false);
|
|
@@ -63,6 +63,7 @@ export default function Layout(props) {
|
|
|
63
63
|
mode: palleteMode,
|
|
64
64
|
primary: { main: primaryColor },
|
|
65
65
|
secondary: { main: secondaryColor },
|
|
66
|
+
background: (backgroundColor && palleteMode === "light") ? { default: backgroundColor, paper: backgroundColor } : {}
|
|
66
67
|
},
|
|
67
68
|
components: {
|
|
68
69
|
MuiCssBaseline: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Layout.js","sourceRoot":"","sources":["../../../src/components/Layout.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Menu, Warning } from \"@mui/icons-material\";\r\nimport { Box, Button, Chip, CssBaseline, IconButton, LinearProgress, AppBar as MuiAppBar, AppBarProps as MuiAppBarProps, PaletteMode, Theme, Toolbar, Typography, useMediaQuery } from \"@mui/material\";\r\nimport { csCZ, enUS } from \"@mui/material/locale\";\r\nimport { ThemeProvider, createTheme, styled } from \"@mui/material/styles\";\r\nimport { useIsFetching, useIsMutating } from \"@tanstack/react-query\";\r\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useLocation } from \"react-router-dom\";\r\nimport { LeftDrawerItem } from \"../models/LeftDrawerItem\";\r\nimport { ExtendedUser } from \"../models/User\";\r\nimport { isDevelopment } from \"../utils/Helpers\";\r\nimport { persistStorage } from \"../utils/PersistStorage\";\r\nimport { hasRole } from \"../utils/UserService\";\r\nimport { Dialog } from \"./Dialog\";\r\nimport { TypographyWithIcon } from \"./TypographyWithIcon\";\r\nimport CenteredBox from \"./common/CenteredBox\";\r\nimport AccountMenu from \"./layout/AccountMenu\";\r\nimport LeftDrawer from \"./layout/LeftDrawer\";\r\nimport { grey } from \"@mui/material/colors\";\r\n\r\n//Mode\r\nconst storedMode = persistStorage.get(\"mode\") as PaletteMode ?? \"system\";\r\n\r\n//Drawer\r\nconst drawerWidth = 240;\r\nconst DrawerHeader = styled(\"div\")(({ theme }) => ({\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"flex-end\",\r\n padding: theme.spacing(0, 1),\r\n // necessary for content to be below app bar\r\n ...theme.mixins.toolbar,\r\n}));\r\n\r\n//AppBar\r\ninterface AppBarProps extends MuiAppBarProps {\r\n open?: boolean;\r\n}\r\n\r\nconst AppBar = styled(MuiAppBar, {\r\n shouldForwardProp: (prop) => prop !== \"open\",\r\n})<AppBarProps>(({ theme, open }) => ({\r\n zIndex: theme.zIndex.drawer + 1,\r\n transition: theme.transitions.create([\"width\", \"margin\"], {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen,\r\n }),\r\n ...(open && {\r\n marginLeft: drawerWidth,\r\n width: `calc(100% - ${drawerWidth}px)`,\r\n transition: theme.transitions.create([\"width\", \"margin\"], {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.enteringScreen,\r\n }),\r\n }),\r\n}));\r\n\r\n//Layout\r\ninterface LayoutProps {\r\n title: string,\r\n appVersion: string,\r\n leftDrawerItems: LeftDrawerItem[],\r\n primaryColor: string,\r\n secondaryColor: string,\r\n children: React.ReactNode,\r\n user: ExtendedUser,\r\n initialized: boolean\r\n}\r\n\r\nexport default function Layout(props: LayoutProps) {\r\n const { primaryColor, secondaryColor, title, appVersion, leftDrawerItems, user, initialized, children } = props;\r\n const prefersDarkMode: boolean = useMediaQuery(\"(prefers-color-scheme: dark)\");\r\n const [mode, setMode] = useState<PaletteMode | \"system\">(storedMode);\r\n const [leftDrawerOpen, setLeftDrawerOpen] = useState<boolean>(false);\r\n const [authorized, setAuthorized] = useState<boolean>(true);\r\n const [developmentDialogOpen, setDevelopmentDialogOpen] = useState<boolean>(false);\r\n const isFetching = !!useIsFetching();\r\n const isMutating = !!useIsMutating();\r\n const location = useLocation();\r\n const { t, i18n } = useTranslation();\r\n\r\n const palleteMode = useMemo(() => mode === \"system\" ? prefersDarkMode ? \"dark\" : \"light\" : mode, [mode, prefersDarkMode]);\r\n\r\n const theme: Theme = createTheme({\r\n palette: {\r\n mode: palleteMode,\r\n primary: { main: primaryColor },\r\n secondary: { main: secondaryColor },\r\n },\r\n components: {\r\n MuiCssBaseline: {\r\n styleOverrides: {\r\n body: {\r\n \"&::-webkit-scrollbar, & *::-webkit-scrollbar\": {\r\n width: \"0.7em\",\r\n height: \"0.7em\",\r\n },\r\n \"&::-webkit-scrollbar-track, & *::-webkit-scrollbar-track\": {\r\n backgroundColor: palleteMode === \"dark\" ? grey[900] : grey[200],\r\n borderRadius: \"5px\",\r\n },\r\n \"&::-webkit-scrollbar-thumb, & *::-webkit-scrollbar-thumb\": {\r\n backgroundColor: palleteMode === \"dark\" ? grey[800] : grey[400],\r\n borderRadius: \"10px\",\r\n },\r\n \"&::-webkit-scrollbar-thumb:hover, & *::-webkit-scrollbar-thumb:hover\": {\r\n backgroundColor: palleteMode === \"dark\" ? grey[700] : grey[500],\r\n },\r\n \"&::-webkit-scrollbar-corner, & *::-webkit-scrollbar-corner\": {\r\n backgroundColor: \"transparent\",\r\n },\r\n },\r\n },\r\n },\r\n },\r\n }, i18n.language === \"cs\" ? csCZ : enUS);\r\n\r\n useEffect(() => handleUnauthorized(), [location.pathname, initialized, leftDrawerItems]);\r\n\r\n const handleUnauthorized = () => {\r\n const activePage: LeftDrawerItem | undefined = leftDrawerItems.find(i => i.path === location.pathname);\r\n if (activePage?.hidden)\r\n return setAuthorized(false);\r\n\r\n return setAuthorized(true);\r\n };\r\n\r\n useEffect(() => {\r\n if (user.loggedIn && !hasRole([\"wcz-developers\"]) && isDevelopment)\r\n toggleDevelopmentDialogOpen();\r\n }, [user.loggedIn]);\r\n\r\n const toggleDevelopmentDialogOpen = useCallback(() => setDevelopmentDialogOpen(!developmentDialogOpen), [developmentDialogOpen]);\r\n\r\n const developmentDialog = (\r\n <Dialog\r\n open={developmentDialogOpen}\r\n onClose={toggleDevelopmentDialogOpen}\r\n title={<TypographyWithIcon variant=\"h6\" startIcon={<Warning />}>{t(\"Layout.DevelopmentDialogTitle\")}</TypographyWithIcon>}\r\n color=\"warning\"\r\n disableAutoClose\r\n actions={[<Button key=\"close\" color=\"warning\" onClick={toggleDevelopmentDialogOpen}>{t(\"Close\")}</Button>]}\r\n >\r\n {t(\"Layout.DevelopmentDialogContent\")}\r\n </Dialog>\r\n );\r\n\r\n const toggleDrawerOpen = useCallback(() => setLeftDrawerOpen(!leftDrawerOpen), [leftDrawerOpen]);\r\n\r\n return (\r\n <ThemeProvider theme={theme}>\r\n <Box sx={{ display: \"flex\", position: \"sticky\" }}>\r\n <CssBaseline />\r\n <AppBar position=\"fixed\" open={leftDrawerOpen}>\r\n <Toolbar>\r\n <IconButton color=\"inherit\" onClick={toggleDrawerOpen} edge=\"start\" sx={{ marginRight: 2, ...(leftDrawerOpen && { display: \"none\" }) }} >\r\n <Menu />\r\n </IconButton>\r\n\r\n <Typography variant=\"h6\" noWrap component=\"div\" sx={{ flexGrow: 1 }}>{title}</Typography>\r\n\r\n {isDevelopment && <Chip variant=\"outlined\" sx={theme => ({ mr: 1.5, color: theme.palette.primary.contrastText })} label=\"Development\" />}\r\n\r\n <AccountMenu mode={mode} setMode={setMode} user={user} />\r\n </Toolbar>\r\n </AppBar>\r\n\r\n <LeftDrawer appVersion={appVersion} items={leftDrawerItems} drawerOpen={leftDrawerOpen} setDrawerOpen={setLeftDrawerOpen} />\r\n\r\n <Box component=\"main\" sx={{ flex: 1, overflow: \"auto\" }}>\r\n <DrawerHeader />\r\n {authorized ? children : <CenteredBox label={t(\"Layout.Unauthorized\")!} />}\r\n </Box>\r\n </Box>\r\n\r\n {developmentDialog}\r\n {(isFetching || isMutating) && <LinearProgress sx={{ position: \"fixed\", top: { xs: 56, sm: 64 }, left: 0, right: 0 }} />}\r\n </ThemeProvider>\r\n );\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"Layout.js","sourceRoot":"","sources":["../../../src/components/Layout.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Menu, Warning } from \"@mui/icons-material\";\r\nimport { Box, Button, Chip, CssBaseline, IconButton, LinearProgress, AppBar as MuiAppBar, AppBarProps as MuiAppBarProps, PaletteMode, Theme, Toolbar, Typography, useMediaQuery } from \"@mui/material\";\r\nimport { csCZ, enUS } from \"@mui/material/locale\";\r\nimport { ThemeProvider, createTheme, styled } from \"@mui/material/styles\";\r\nimport { useIsFetching, useIsMutating } from \"@tanstack/react-query\";\r\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useLocation } from \"react-router-dom\";\r\nimport { LeftDrawerItem } from \"../models/LeftDrawerItem\";\r\nimport { ExtendedUser } from \"../models/User\";\r\nimport { isDevelopment } from \"../utils/Helpers\";\r\nimport { persistStorage } from \"../utils/PersistStorage\";\r\nimport { hasRole } from \"../utils/UserService\";\r\nimport { Dialog } from \"./Dialog\";\r\nimport { TypographyWithIcon } from \"./TypographyWithIcon\";\r\nimport CenteredBox from \"./common/CenteredBox\";\r\nimport AccountMenu from \"./layout/AccountMenu\";\r\nimport LeftDrawer from \"./layout/LeftDrawer\";\r\nimport { grey } from \"@mui/material/colors\";\r\n\r\n//Mode\r\nconst storedMode = persistStorage.get(\"mode\") as PaletteMode ?? \"system\";\r\n\r\n//Drawer\r\nconst drawerWidth = 240;\r\nconst DrawerHeader = styled(\"div\")(({ theme }) => ({\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"flex-end\",\r\n padding: theme.spacing(0, 1),\r\n // necessary for content to be below app bar\r\n ...theme.mixins.toolbar,\r\n}));\r\n\r\n//AppBar\r\ninterface AppBarProps extends MuiAppBarProps {\r\n open?: boolean;\r\n}\r\n\r\nconst AppBar = styled(MuiAppBar, {\r\n shouldForwardProp: (prop) => prop !== \"open\",\r\n})<AppBarProps>(({ theme, open }) => ({\r\n zIndex: theme.zIndex.drawer + 1,\r\n transition: theme.transitions.create([\"width\", \"margin\"], {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen,\r\n }),\r\n ...(open && {\r\n marginLeft: drawerWidth,\r\n width: `calc(100% - ${drawerWidth}px)`,\r\n transition: theme.transitions.create([\"width\", \"margin\"], {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.enteringScreen,\r\n }),\r\n }),\r\n}));\r\n\r\n//Layout\r\ninterface LayoutProps {\r\n title: string,\r\n appVersion: string,\r\n leftDrawerItems: LeftDrawerItem[],\r\n primaryColor: string,\r\n secondaryColor: string,\r\n backgroundColor?: string,\r\n children: React.ReactNode,\r\n user: ExtendedUser,\r\n initialized: boolean\r\n}\r\n\r\nexport default function Layout(props: LayoutProps) {\r\n const { primaryColor, secondaryColor, backgroundColor, title, appVersion, leftDrawerItems, user, initialized, children } = props;\r\n const prefersDarkMode: boolean = useMediaQuery(\"(prefers-color-scheme: dark)\");\r\n const [mode, setMode] = useState<PaletteMode | \"system\">(storedMode);\r\n const [leftDrawerOpen, setLeftDrawerOpen] = useState<boolean>(false);\r\n const [authorized, setAuthorized] = useState<boolean>(true);\r\n const [developmentDialogOpen, setDevelopmentDialogOpen] = useState<boolean>(false);\r\n const isFetching = !!useIsFetching();\r\n const isMutating = !!useIsMutating();\r\n const location = useLocation();\r\n const { t, i18n } = useTranslation();\r\n\r\n const palleteMode = useMemo(() => mode === \"system\" ? prefersDarkMode ? \"dark\" : \"light\" : mode, [mode, prefersDarkMode]);\r\n\r\n const theme: Theme = createTheme({\r\n palette: {\r\n mode: palleteMode,\r\n primary: { main: primaryColor },\r\n secondary: { main: secondaryColor },\r\n background: (backgroundColor && palleteMode === \"light\") ? { default: backgroundColor, paper: backgroundColor } : {}\r\n },\r\n components: {\r\n MuiCssBaseline: {\r\n styleOverrides: {\r\n body: {\r\n \"&::-webkit-scrollbar, & *::-webkit-scrollbar\": {\r\n width: \"0.7em\",\r\n height: \"0.7em\",\r\n },\r\n \"&::-webkit-scrollbar-track, & *::-webkit-scrollbar-track\": {\r\n backgroundColor: palleteMode === \"dark\" ? grey[900] : grey[200],\r\n borderRadius: \"5px\",\r\n },\r\n \"&::-webkit-scrollbar-thumb, & *::-webkit-scrollbar-thumb\": {\r\n backgroundColor: palleteMode === \"dark\" ? grey[800] : grey[400],\r\n borderRadius: \"10px\",\r\n },\r\n \"&::-webkit-scrollbar-thumb:hover, & *::-webkit-scrollbar-thumb:hover\": {\r\n backgroundColor: palleteMode === \"dark\" ? grey[700] : grey[500],\r\n },\r\n \"&::-webkit-scrollbar-corner, & *::-webkit-scrollbar-corner\": {\r\n backgroundColor: \"transparent\",\r\n },\r\n },\r\n },\r\n },\r\n },\r\n }, i18n.language === \"cs\" ? csCZ : enUS);\r\n\r\n useEffect(() => handleUnauthorized(), [location.pathname, initialized, leftDrawerItems]);\r\n\r\n const handleUnauthorized = () => {\r\n const activePage: LeftDrawerItem | undefined = leftDrawerItems.find(i => i.path === location.pathname);\r\n if (activePage?.hidden)\r\n return setAuthorized(false);\r\n\r\n return setAuthorized(true);\r\n };\r\n\r\n useEffect(() => {\r\n if (user.loggedIn && !hasRole([\"wcz-developers\"]) && isDevelopment)\r\n toggleDevelopmentDialogOpen();\r\n }, [user.loggedIn]);\r\n\r\n const toggleDevelopmentDialogOpen = useCallback(() => setDevelopmentDialogOpen(!developmentDialogOpen), [developmentDialogOpen]);\r\n\r\n const developmentDialog = (\r\n <Dialog\r\n open={developmentDialogOpen}\r\n onClose={toggleDevelopmentDialogOpen}\r\n title={<TypographyWithIcon variant=\"h6\" startIcon={<Warning />}>{t(\"Layout.DevelopmentDialogTitle\")}</TypographyWithIcon>}\r\n color=\"warning\"\r\n disableAutoClose\r\n actions={[<Button key=\"close\" color=\"warning\" onClick={toggleDevelopmentDialogOpen}>{t(\"Close\")}</Button>]}\r\n >\r\n {t(\"Layout.DevelopmentDialogContent\")}\r\n </Dialog>\r\n );\r\n\r\n const toggleDrawerOpen = useCallback(() => setLeftDrawerOpen(!leftDrawerOpen), [leftDrawerOpen]);\r\n\r\n return (\r\n <ThemeProvider theme={theme}>\r\n <Box sx={{ display: \"flex\", position: \"sticky\" }}>\r\n <CssBaseline />\r\n <AppBar position=\"fixed\" open={leftDrawerOpen}>\r\n <Toolbar>\r\n <IconButton color=\"inherit\" onClick={toggleDrawerOpen} edge=\"start\" sx={{ marginRight: 2, ...(leftDrawerOpen && { display: \"none\" }) }} >\r\n <Menu />\r\n </IconButton>\r\n\r\n <Typography variant=\"h6\" noWrap component=\"div\" sx={{ flexGrow: 1 }}>{title}</Typography>\r\n\r\n {isDevelopment && <Chip variant=\"outlined\" sx={theme => ({ mr: 1.5, color: theme.palette.primary.contrastText })} label=\"Development\" />}\r\n\r\n <AccountMenu mode={mode} setMode={setMode} user={user} />\r\n </Toolbar>\r\n </AppBar>\r\n\r\n <LeftDrawer appVersion={appVersion} items={leftDrawerItems} drawerOpen={leftDrawerOpen} setDrawerOpen={setLeftDrawerOpen} />\r\n\r\n <Box component=\"main\" sx={{ flex: 1, overflow: \"auto\" }}>\r\n <DrawerHeader />\r\n {authorized ? children : <CenteredBox label={t(\"Layout.Unauthorized\")!} />}\r\n </Box>\r\n </Box>\r\n\r\n {developmentDialog}\r\n {(isFetching || isMutating) && <LinearProgress sx={{ position: \"fixed\", top: { xs: 56, sm: 64 }, left: 0, right: 0 }} />}\r\n </ThemeProvider>\r\n );\r\n}\r\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Alert, AlertTitle, Snackbar } from "@mui/material";
|
|
3
|
-
import { Fragment, useCallback, useContext } from "react";
|
|
3
|
+
import { Fragment, useCallback, useContext, useMemo } from "react";
|
|
4
4
|
import { SnackbarContext } from "../contexts/SnackbarContext";
|
|
5
5
|
export const LayoutSnackbar = () => {
|
|
6
6
|
const { snackbar, setSnackbar } = useContext(SnackbarContext);
|
|
@@ -9,7 +9,17 @@ export const LayoutSnackbar = () => {
|
|
|
9
9
|
return;
|
|
10
10
|
setSnackbar({ ...snackbar, message: "" });
|
|
11
11
|
}, [snackbar]);
|
|
12
|
-
|
|
12
|
+
const autoHideDuration = useMemo(() => {
|
|
13
|
+
if ((snackbar === null || snackbar === void 0 ? void 0 : snackbar.autoHideDuration) === undefined) {
|
|
14
|
+
if ((snackbar === null || snackbar === void 0 ? void 0 : snackbar.severity) === "error")
|
|
15
|
+
return 15000;
|
|
16
|
+
if ((snackbar === null || snackbar === void 0 ? void 0 : snackbar.severity) === "warning")
|
|
17
|
+
return 10000;
|
|
18
|
+
return 5000;
|
|
19
|
+
}
|
|
20
|
+
return snackbar.autoHideDuration;
|
|
21
|
+
}, [snackbar]);
|
|
22
|
+
return (_jsx(Snackbar, { open: !!(snackbar === null || snackbar === void 0 ? void 0 : snackbar.message), autoHideDuration: autoHideDuration, onClose: handleOnSnackbarClose, children: _jsx(Alert, { onClose: handleOnSnackbarClose, severity: snackbar === null || snackbar === void 0 ? void 0 : snackbar.severity, sx: { width: "100%" }, variant: "filled", children: (snackbar === null || snackbar === void 0 ? void 0 : snackbar.description) ?
|
|
13
23
|
_jsxs(Fragment, { children: [_jsx(AlertTitle, { children: snackbar === null || snackbar === void 0 ? void 0 : snackbar.message }), snackbar.description] })
|
|
14
24
|
:
|
|
15
25
|
snackbar === null || snackbar === void 0 ? void 0 : snackbar.message }) }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LayoutSnackbar.js","sourceRoot":"","sources":["../../../src/components/LayoutSnackbar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAkB,WAAW,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"LayoutSnackbar.js","sourceRoot":"","sources":["../../../src/components/LayoutSnackbar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAkB,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,CAAC,MAAM,cAAc,GAAa,GAAG,EAAE;IACzC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAE9D,MAAM,qBAAqB,GAAG,WAAW,CAAC,CAAC,MAA+B,EAAE,MAAe,EAAE,EAAE;QAC3F,IAAI,MAAM,KAAK,WAAW;YAAE,OAAO;QACnC,WAAW,CAAC,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IAC9C,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,EAAE;QAClC,IAAI,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,gBAAgB,MAAK,SAAS,EAAE,CAAC;YAC3C,IAAI,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,MAAK,OAAO;gBAC9B,OAAO,KAAK,CAAC;YACjB,IAAI,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,MAAK,SAAS;gBAChC,OAAO,KAAK,CAAC;YACjB,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,QAAQ,CAAC,gBAAgB,CAAC;IACrC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,OAAO,CACH,KAAC,QAAQ,IAAC,IAAI,EAAE,CAAC,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO,CAAA,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,EAAE,qBAAqB,YACnG,KAAC,KAAK,IAAC,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAC,QAAQ,YACvG,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,WAAW,EAAC,CAAC;gBACpB,MAAC,QAAQ,eACL,KAAC,UAAU,cAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO,GAAc,EAC3C,QAAQ,CAAC,WAAW,IACd;gBACX,CAAC;oBACD,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO,GAEjB,GACD,CACd,CAAC;AACN,CAAC,CAAC","sourcesContent":["import { Alert, AlertTitle, Snackbar } from \"@mui/material\";\r\nimport { Fragment, SyntheticEvent, useCallback, useContext, useMemo } from \"react\";\r\nimport { SnackbarContext } from \"../contexts/SnackbarContext\";\r\n\r\nexport const LayoutSnackbar: React.FC = () => {\r\n const { snackbar, setSnackbar } = useContext(SnackbarContext);\r\n\r\n const handleOnSnackbarClose = useCallback((_event?: SyntheticEvent | Event, reason?: string) => {\r\n if (reason === \"clickaway\") return;\r\n setSnackbar({ ...snackbar, message: \"\" });\r\n }, [snackbar]);\r\n\r\n const autoHideDuration = useMemo(() => {\r\n if (snackbar?.autoHideDuration === undefined) {\r\n if (snackbar?.severity === \"error\")\r\n return 15000;\r\n if (snackbar?.severity === \"warning\")\r\n return 10000;\r\n return 5000;\r\n }\r\n return snackbar.autoHideDuration;\r\n }, [snackbar]);\r\n\r\n return (\r\n <Snackbar open={!!snackbar?.message} autoHideDuration={autoHideDuration} onClose={handleOnSnackbarClose}>\r\n <Alert onClose={handleOnSnackbarClose} severity={snackbar?.severity} sx={{ width: \"100%\" }} variant=\"filled\">\r\n {snackbar?.description ?\r\n <Fragment>\r\n <AlertTitle>{snackbar?.message}</AlertTitle>\r\n {snackbar.description}\r\n </Fragment>\r\n :\r\n snackbar?.message\r\n }\r\n </Alert>\r\n </Snackbar>\r\n );\r\n};"]}
|
|
@@ -23,6 +23,7 @@ interface LayoutProviderProps {
|
|
|
23
23
|
leftDrawerItems: LeftDrawerItem[];
|
|
24
24
|
primaryColor: string;
|
|
25
25
|
secondaryColor: string;
|
|
26
|
+
backgroundColor?: string;
|
|
26
27
|
children: ReactNode;
|
|
27
28
|
}
|
|
28
29
|
export declare function LayoutProvider(props: LayoutProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -63,6 +63,6 @@ export function LayoutProvider(props) {
|
|
|
63
63
|
setTitle(newTitle);
|
|
64
64
|
}, []);
|
|
65
65
|
const providerValue = useMemo(() => ({ changeTitle: changeTitle, snackbar: setSnackbar, user: user, t: t, i18n: i18n }), [changeTitle, setSnackbar, user, t, i18n]);
|
|
66
|
-
return (_jsx(QueryClientProvider, { client: queryClient, children: _jsx(LayoutContext.Provider, { value: providerValue, children: _jsx(Layout, { title: title, appVersion: props.appVersion, primaryColor: props.primaryColor, secondaryColor: props.secondaryColor, leftDrawerItems: props.leftDrawerItems, user: user, initialized: initialized, children: _jsxs(SnackbarProvider, { snackbar: snackbar, setSnackbar: setSnackbar, children: [initialized ? props.children : _jsx(CenteredBox, { circularProgress: true }), _jsx(LayoutSnackbar, {})] }) }) }) }));
|
|
66
|
+
return (_jsx(QueryClientProvider, { client: queryClient, children: _jsx(LayoutContext.Provider, { value: providerValue, children: _jsx(Layout, { title: title, appVersion: props.appVersion, primaryColor: props.primaryColor, secondaryColor: props.secondaryColor, backgroundColor: props.backgroundColor, leftDrawerItems: props.leftDrawerItems, user: user, initialized: initialized, children: _jsxs(SnackbarProvider, { snackbar: snackbar, setSnackbar: setSnackbar, children: [initialized ? props.children : _jsx(CenteredBox, { circularProgress: true }), _jsx(LayoutSnackbar, {})] }) }) }) }));
|
|
67
67
|
}
|
|
68
68
|
//# sourceMappingURL=LayoutContext.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LayoutContext.js","sourceRoot":"","sources":["../../../src/contexts/LayoutContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,OAA4B,MAAM,SAAS,CAAC;AACnD,OAAO,gBAAgB,MAAM,kCAAkC,CAAC;AAChE,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AACtD,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAa,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,WAAW,MAAM,kCAAkC,CAAC;AAC3D,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAK9D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAUrD,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC,EAA4B,CAAC,CAAC;AAEzE,MAAM;AACN,YAAY,EAAE,CAAC;AAEf,aAAa;AACb,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;AAEzF,cAAc;AACd,OAAO;KACF,GAAG,CAAC,gBAAgB,CAAC;KACrB,GAAG,CAAC,gBAAgB,CAAC;KACrB,GAAG,CAAC,kBAAkB,CAAC;KACvB,IAAI,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;AAEjC,MAAM,CAAC,aAAa,GAAG,qBAAqB,CAAC;AAS7C,MAAM,CAAC,EAAE,CAAC,UAAU,GAAG;IACnB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,CAAC;IAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AACrC,CAAC,CAAC;AAEF,MAAM,CAAC,EAAE,CAAC,cAAc,GAAG;IACvB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,CAAC;IAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAC3C,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"LayoutContext.js","sourceRoot":"","sources":["../../../src/contexts/LayoutContext.tsx"],"names":[],"mappings":"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","sourcesContent":["import { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\r\nimport i18next, { i18n, TFunction } from \"i18next\";\r\nimport LanguageDetector from \"i18next-browser-languagedetector\";\r\nimport I18NextHttpBackend from \"i18next-http-backend\";\r\nimport moment from \"moment\";\r\nimport { createContext, ReactNode, useCallback, useEffect, useMemo, useState } from \"react\";\r\nimport { initReactI18next, useTranslation } from \"react-i18next\";\r\nimport CenteredBox from \"../components/common/CenteredBox\";\r\nimport Layout from \"../components/Layout\";\r\nimport { LayoutSnackbar } from \"../components/LayoutSnackbar\";\r\nimport KeycloakExtendedConfig from \"../models/KeycloakExtendedConfig\";\r\nimport { LeftDrawerItem } from \"../models/LeftDrawerItem\";\r\nimport SnackbarModel from \"../models/SnackbarModel\";\r\nimport { User } from \"../models/User\";\r\nimport { persistStorage } from \"../utils/PersistStorage\";\r\nimport { initKeycloak } from \"../utils/UserService\";\r\nimport { useUser } from \"../utils/UseUser\";\r\nimport { SnackbarProvider } from \"./SnackbarContext\";\r\n\r\ninterface LayoutContextInterface {\r\n changeTitle: (title: string) => void,\r\n snackbar: (snackbar: SnackbarModel) => void,\r\n user: User,\r\n t: TFunction<\"translation\", undefined>,\r\n i18n: i18n\r\n}\r\n\r\nexport const LayoutContext = createContext({} as LayoutContextInterface);\r\n\r\n//User\r\ninitKeycloak();\r\n\r\n//QueryClient\r\nconst queryClient = new QueryClient({ defaultOptions: { queries: { enabled: false } } });\r\n\r\n//Localization\r\ni18next\r\n .use(initReactI18next)\r\n .use(LanguageDetector)\r\n .use(I18NextHttpBackend)\r\n .init({ fallbackLng: \"en\" });\r\n\r\nmoment.defaultFormat = \"YYYY-MM-DDTHH:mm:ss\";\r\n\r\ndeclare module \"moment\" {\r\n interface Moment {\r\n formatDate(): string;\r\n formatDateTime(): string;\r\n }\r\n}\r\n\r\nmoment.fn.formatDate = function (): string {\r\n if (!this.isValid()) return \"\";\r\n return this.format(\"YYYY-MM-DD\");\r\n};\r\n\r\nmoment.fn.formatDateTime = function (): string {\r\n if (!this.isValid()) return \"\";\r\n return this.format(\"YYYY-MM-DD HH:mm\");\r\n};\r\n\r\ninterface LayoutProviderProps {\r\n title: string,\r\n appVersion: string,\r\n leftDrawerItems: LeftDrawerItem[],\r\n primaryColor: string,\r\n secondaryColor: string,\r\n backgroundColor?: string,\r\n children: ReactNode\r\n}\r\n\r\nexport function LayoutProvider(props: LayoutProviderProps) {\r\n const [title, setTitle] = useState<string>(props.title);\r\n const [snackbar, setSnackbar] = useState<SnackbarModel>({} as SnackbarModel);\r\n const [initialized, setInitialized] = useState<boolean>(false);\r\n const { t, i18n } = useTranslation();\r\n const user = useUser();\r\n\r\n useEffect(() => setQueryClientDefaultOptions(), [user.loggedIn]);\r\n\r\n const setQueryClientDefaultOptions = () => {\r\n const storedKeycloak: KeycloakExtendedConfig | null = persistStorage.getObject<KeycloakExtendedConfig>(\"keycloak\");\r\n const enabled = storedKeycloak ? (storedKeycloak.autoLogin && user.loggedIn) || !storedKeycloak.autoLogin : false;\r\n setInitialized(enabled);\r\n\r\n queryClient.setDefaultOptions({\r\n queries: {\r\n enabled: enabled,\r\n refetchOnWindowFocus: false,\r\n onError: message => setSnackbar({ message: String(message), severity: \"error\" }),\r\n retry: 1\r\n },\r\n mutations: {\r\n onError: message => setSnackbar({ message: String(message), severity: \"error\" }),\r\n }\r\n });\r\n };\r\n\r\n const changeTitle = useCallback((newTitle: string) => {\r\n document.title = newTitle;\r\n setTitle(newTitle);\r\n }, []);\r\n\r\n const providerValue: LayoutContextInterface = useMemo(() => ({ changeTitle: changeTitle, snackbar: setSnackbar, user: user, t: t, i18n: i18n }), [changeTitle, setSnackbar, user, t, i18n]);\r\n\r\n return (\r\n <QueryClientProvider client={queryClient}>\r\n <LayoutContext.Provider value={providerValue}>\r\n <Layout title={title} appVersion={props.appVersion} primaryColor={props.primaryColor} secondaryColor={props.secondaryColor} backgroundColor={props.backgroundColor} leftDrawerItems={props.leftDrawerItems} user={user} initialized={initialized}>\r\n <SnackbarProvider snackbar={snackbar} setSnackbar={setSnackbar}>\r\n {initialized ? props.children : <CenteredBox circularProgress />}\r\n <LayoutSnackbar />\r\n </SnackbarProvider>\r\n </Layout>\r\n </LayoutContext.Provider>\r\n </QueryClientProvider>\r\n );\r\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeycloakExtendedConfig.js","sourceRoot":"","sources":["../../../src/models/KeycloakExtendedConfig.ts"],"names":[],"mappings":"","sourcesContent":["export default interface KeycloakExtendedConfig {\n autoLogin?: boolean,\n confidential?: Confidential,\n realm: string,\n \"auth-server-url\": string,\n idpHint?: string\n}\n\nexport interface Confidential {\n client: string,\n secret: string\n}"]}
|
|
1
|
+
{"version":3,"file":"KeycloakExtendedConfig.js","sourceRoot":"","sources":["../../../src/models/KeycloakExtendedConfig.ts"],"names":[],"mappings":"","sourcesContent":["export default interface KeycloakExtendedConfig {\r\n autoLogin?: boolean,\r\n confidential?: Confidential,\r\n realm: string,\r\n \"auth-server-url\": string,\r\n idpHint?: string\r\n}\r\n\r\nexport interface Confidential {\r\n client: string,\r\n secret: string\r\n}"]}
|
|
@@ -18,8 +18,12 @@ export const fetchPost = async (url, data) => {
|
|
|
18
18
|
const response = await fetch(url, initReq);
|
|
19
19
|
if (!response.ok)
|
|
20
20
|
throw await getQueryErrorMessage(response);
|
|
21
|
-
|
|
21
|
+
try {
|
|
22
|
+
return response.json();
|
|
23
|
+
}
|
|
24
|
+
catch (_a) {
|
|
22
25
|
return response;
|
|
26
|
+
}
|
|
23
27
|
return response.json();
|
|
24
28
|
};
|
|
25
29
|
export const fetchPut = async (url, data) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Fetches.js","sourceRoot":"","sources":["../../../src/utils/Fetches.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,GAAW,EAAE,MAA+B,EAAgB,EAAE;IACzF,MAAM,OAAO,GAAgB,MAAM,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAEvE,MAAM,QAAQ,GAAa,MAAM,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ,CAAC,EAAE;QACZ,MAAM,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAE/C,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,GAAW,EAAE,MAA+B,EAAiB,EAAE;IAC9F,MAAM,OAAO,GAAgB,MAAM,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAEvE,MAAM,QAAQ,GAAa,MAAM,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ,CAAC,EAAE;QACZ,MAAM,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAE/C,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,GAAW,EAAE,IAAa,EAAgB,EAAE;IACxE,MAAM,OAAO,GAAgB,MAAM,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAEhE,MAAM,QAAQ,GAAa,MAAM,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ,CAAC,EAAE;QACZ,MAAM,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAE/C,IAAI,IAAI,
|
|
1
|
+
{"version":3,"file":"Fetches.js","sourceRoot":"","sources":["../../../src/utils/Fetches.ts"],"names":[],"mappings":"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","sourcesContent":["import { getToken } from \"./UserService\";\r\n\r\nexport const fetchGet = async (url: string, signal: AbortSignal | undefined): Promise<any> => {\r\n const initReq: RequestInit = await getRequestInit(\"GET\", null, signal);\r\n\r\n const response: Response = await fetch(url, initReq);\r\n if (!response.ok)\r\n throw await getQueryErrorMessage(response);\r\n\r\n return response.json();\r\n};\r\n\r\nexport const fetchFileGet = async (url: string, signal: AbortSignal | undefined): Promise<Blob> => {\r\n const initReq: RequestInit = await getRequestInit(\"GET\", null, signal);\r\n\r\n const response: Response = await fetch(url, initReq);\r\n if (!response.ok)\r\n throw await getQueryErrorMessage(response);\r\n\r\n return response.blob();\r\n};\r\n\r\nexport const fetchPost = async (url: string, data: unknown): Promise<any> => {\r\n const initReq: RequestInit = await getRequestInit(\"POST\", data);\r\n\r\n const response: Response = await fetch(url, initReq);\r\n if (!response.ok)\r\n throw await getQueryErrorMessage(response);\r\n\r\n try {\r\n return response.json();\r\n } catch {\r\n return response;\r\n }\r\n\r\n return response.json();\r\n};\r\n\r\nexport const fetchPut = async (url: string, data: unknown): Promise<Response> => {\r\n const initReq: RequestInit = await getRequestInit(\"PUT\", data);\r\n\r\n const response: Response = await fetch(url, initReq);\r\n if (!response.ok)\r\n throw await getQueryErrorMessage(response);\r\n\r\n return response;\r\n};\r\n\r\nexport const fetchDelete = async (url: string): Promise<Response> => {\r\n const initReq: RequestInit = await getRequestInit(\"DELETE\");\r\n\r\n const response: Response = await fetch(url, initReq);\r\n if (!response.ok)\r\n throw await getQueryErrorMessage(response);\r\n\r\n return response;\r\n};\r\n\r\nconst getRequestInit = async (method: string, data?: unknown, signal?: AbortSignal): Promise<RequestInit> => {\r\n const request: RequestInit = {\r\n method: method,\r\n signal: signal,\r\n credentials: \"include\"\r\n };\r\n\r\n if (data) {\r\n if (data instanceof FormData)\r\n request.body = data;\r\n else\r\n request.body = JSON.stringify(data);\r\n }\r\n\r\n if (data instanceof FormData)\r\n request.headers = {\r\n \"Authorization\": `Bearer ${await getToken()}`\r\n };\r\n else {\r\n request.headers = {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": `Bearer ${await getToken()}`\r\n };\r\n }\r\n\r\n return request;\r\n};\r\n\r\nconst getQueryErrorMessage = async (response: Response): Promise<string> => {\r\n let message: string = `[${response.status}] ${response.statusText}`;\r\n\r\n const detailMessage: string | undefined = await response.json()\r\n .then(data => `[${response.status}] ${data.message}`)\r\n .catch(() => (message));\r\n\r\n if (detailMessage)\r\n message = detailMessage;\r\n\r\n return message;\r\n};"]}
|