wcz-layout 5.2.0 → 5.2.1

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.
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "wcz-layout",
3
+ "license": "MIT",
4
+ "author": "Dalibor Homola",
5
+ "version": "0.1.8",
6
+ "main": "dist/src/index.js",
7
+ "module": "dist/src/index.js",
8
+ "exports": {
9
+ ".": "./dist/src/index.js"
10
+ },
11
+ "scripts": {
12
+ "npm-install": "npm install",
13
+ "npm-update": "npm update",
14
+ "analyze": "cem analyze --litelement",
15
+ "start": "tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wds\"",
16
+ "build": "tsc && npm run analyze -- --exclude dist",
17
+ "prepublish": "tsc && npm run analyze -- --exclude dist",
18
+ "publish": "npm publish"
19
+ },
20
+ "dependencies": {
21
+ "guid-ts": "^1.1.2",
22
+ "i18next": "^22.0.6",
23
+ "i18next-browser-languagedetector": "^7.0.1",
24
+ "i18next-http-backend": "^2.0.1",
25
+ "keycloak-js": "^19.0.2",
26
+ "react-i18next": "^12.0.0"
27
+ },
28
+ "devDependencies": {
29
+ "@custom-elements-manifest/analyzer": "^0.4.17",
30
+ "@web/dev-server": "^0.1.28",
31
+ "concurrently": "^5.3.0",
32
+ "lit": "^2.0.2",
33
+ "react": "18.2.0",
34
+ "react-dom": "18.2.0",
35
+ "tslib": "^2.3.1",
36
+ "typescript": "^4.8.4"
37
+ },
38
+ "peerDependencies": {
39
+ "@emotion/react": "11.x",
40
+ "@emotion/styled": "11.x",
41
+ "@mui/icons-material": "5.x",
42
+ "@mui/material": "5.x",
43
+ "@tanstack/react-query": "4.x",
44
+ "moment": "2.x",
45
+ "react-router-dom": "6.x"
46
+ },
47
+ "customElements": "custom-elements.json",
48
+ "keycloak": {}
49
+ }
@@ -5,7 +5,7 @@ import { AppBar as MuiAppBar, Box, Chip, CssBaseline, IconButton, LinearProgress
5
5
  import { csCZ, enUS } from '@mui/material/locale';
6
6
  import { createTheme, styled, ThemeProvider } from '@mui/material/styles';
7
7
  import { useIsFetching, useIsMutating } from '@tanstack/react-query';
8
- import { Fragment, useCallback, useEffect, useState } from 'react';
8
+ import { useCallback, useEffect, useState } from 'react';
9
9
  import { useTranslation } from 'react-i18next';
10
10
  import { useLocation } from 'react-router-dom';
11
11
  import { isDevelopment } from '../utils/Helpers';
@@ -67,7 +67,6 @@ export default function Layout(props) {
67
67
  return setAuthorized(true);
68
68
  };
69
69
  const toggleDrawerOpen = useCallback(() => setLeftDrawerOpen(!leftDrawerOpen), [leftDrawerOpen]);
70
- return (_jsxs(ThemeProvider, { theme: theme, children: [_jsxs(Box, { sx: { display: 'flex', position: "sticky" }, children: [_jsx(CssBaseline, {}), _jsx(AppBar, { position: "fixed", open: leftDrawerOpen, children: _jsxs(Toolbar, { children: [_jsx(IconButton, { color: "inherit", onClick: toggleDrawerOpen, edge: "start", sx: { marginRight: 2, ...(leftDrawerOpen && { display: 'none' }) }, children: _jsx(Menu, {}) }), _jsx(Typography, { variant: "h6", noWrap: true, component: "div", sx: { flexGrow: 1 }, children: title }), isDevelopment &&
71
- _jsx(Chip, { color: "secondary", sx: { mr: 1.5 }, label: _jsxs(Fragment, { children: [_jsx(Typography, { sx: { display: { xs: 'none', sm: 'block' } }, children: "Development" }), _jsx(Typography, { sx: { display: { xs: 'block', sm: 'none' } }, children: "QAS" })] }) }), _jsx(AccountMenu, { mode: mode, setMode: setMode, user: user })] }) }), _jsx(LeftDrawer, { appVersion: appVersion, items: leftDrawerItems, drawerOpen: leftDrawerOpen, setDrawerOpen: setLeftDrawerOpen }), _jsxs(Box, { component: "main", sx: { flexGrow: 1 }, children: [_jsx(DrawerHeader, {}), authorized ? children : _jsx(CenteredBox, { label: t("Layout.Unauthorized") })] })] }), (isFetching || isMutating) && _jsx(LinearProgress, { sx: { position: 'fixed', bottom: 0, left: 0, right: 0 } })] }));
70
+ return (_jsxs(ThemeProvider, { theme: theme, children: [_jsxs(Box, { sx: { display: 'flex', position: "sticky" }, children: [_jsx(CssBaseline, {}), _jsx(AppBar, { position: "fixed", open: leftDrawerOpen, children: _jsxs(Toolbar, { children: [_jsx(IconButton, { color: "inherit", "aria-label": "menu", name: "menu", onClick: toggleDrawerOpen, edge: "start", sx: { marginRight: 2, ...(leftDrawerOpen && { display: 'none' }) }, children: _jsx(Menu, {}) }), _jsx(Typography, { variant: "h6", noWrap: true, component: "div", sx: { flexGrow: 1 }, children: title }), isDevelopment && _jsx(Chip, { color: "secondary", sx: { mr: 1.5 }, label: "Development" }), _jsx(AccountMenu, { mode: mode, setMode: setMode, user: user })] }) }), _jsx(LeftDrawer, { appVersion: appVersion, items: leftDrawerItems, drawerOpen: leftDrawerOpen, setDrawerOpen: setLeftDrawerOpen }), _jsxs(Box, { component: "main", sx: { flexGrow: 1 }, children: [_jsx(DrawerHeader, {}), authorized ? children : _jsx(CenteredBox, { label: t("Layout.Unauthorized") })] })] }), (isFetching || isMutating) && _jsx(LinearProgress, { sx: { position: 'fixed', bottom: 0, left: 0, right: 0 } })] }));
72
71
  }
73
72
  //# sourceMappingURL=Layout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Layout.js","sourceRoot":"","sources":["../../../src/components/Layout.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Menu } from '@mui/icons-material';\r\nimport { AppBar as MuiAppBar, AppBarProps as MuiAppBarProps, Box, Chip, CssBaseline, IconButton, LinearProgress, PaletteMode, Theme, Toolbar, Typography, useMediaQuery } from '@mui/material';\r\nimport { csCZ, enUS } from '@mui/material/locale';\r\nimport { createTheme, styled, ThemeProvider } from '@mui/material/styles';\r\nimport { useIsFetching, useIsMutating } from '@tanstack/react-query';\r\nimport React, { Fragment, useCallback, useEffect, 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 CenteredBox from './common/CenteredBox';\r\nimport AccountMenu from './layout/AccountMenu';\r\nimport LeftDrawer from './layout/LeftDrawer';\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 isFetching = !!useIsFetching();\r\n const isMutating = !!useIsMutating();\r\n const location = useLocation();\r\n const { t, i18n } = useTranslation();\r\n\r\n const theme: Theme = createTheme({\r\n palette: {\r\n mode: mode === \"system\" ? prefersDarkMode ? 'dark' : 'light' : mode,\r\n primary: { main: primaryColor },\r\n secondary: { main: secondaryColor },\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 && activePage.hidden)\r\n return setAuthorized(false);\r\n\r\n return setAuthorized(true);\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 &&\r\n <Chip color=\"secondary\" sx={{ mr: 1.5 }}\r\n label={\r\n <Fragment>\r\n <Typography sx={{ display: { xs: 'none', sm: 'block' } }}>Development</Typography>\r\n <Typography sx={{ display: { xs: 'block', sm: 'none' } }}>QAS</Typography>\r\n </Fragment>\r\n }\r\n />\r\n }\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={{ flexGrow: 1 }}>\r\n <DrawerHeader />\r\n {authorized ? children : <CenteredBox label={t(\"Layout.Unauthorized\")!} />}\r\n </Box>\r\n </Box>\r\n\r\n {(isFetching || isMutating) && <LinearProgress sx={{ position: 'fixed', bottom: 0, 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 } from '@mui/icons-material';\r\nimport { AppBar as MuiAppBar, AppBarProps as MuiAppBarProps, Box, Chip, CssBaseline, IconButton, LinearProgress, PaletteMode, Theme, Toolbar, Typography, useMediaQuery } from '@mui/material';\r\nimport { csCZ, enUS } from '@mui/material/locale';\r\nimport { createTheme, styled, ThemeProvider } from '@mui/material/styles';\r\nimport { useIsFetching, useIsMutating } from '@tanstack/react-query';\r\nimport React, { useCallback, useEffect, 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 CenteredBox from './common/CenteredBox';\r\nimport AccountMenu from './layout/AccountMenu';\r\nimport LeftDrawer from './layout/LeftDrawer';\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 isFetching = !!useIsFetching();\r\n const isMutating = !!useIsMutating();\r\n const location = useLocation();\r\n const { t, i18n } = useTranslation();\r\n\r\n const theme: Theme = createTheme({\r\n palette: {\r\n mode: mode === \"system\" ? prefersDarkMode ? 'dark' : 'light' : mode,\r\n primary: { main: primaryColor },\r\n secondary: { main: secondaryColor },\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 && activePage.hidden)\r\n return setAuthorized(false);\r\n\r\n return setAuthorized(true);\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\" aria-label=\"menu\" name=\"menu\" 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 color=\"secondary\" sx={{ mr: 1.5 }} 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={{ flexGrow: 1 }}>\r\n <DrawerHeader />\r\n {authorized ? children : <CenteredBox label={t(\"Layout.Unauthorized\")!} />}\r\n </Box>\r\n </Box>\r\n\r\n {(isFetching || isMutating) && <LinearProgress sx={{ position: 'fixed', bottom: 0, left: 0, right: 0 }} />}\r\n </ThemeProvider>\r\n );\r\n}\r\n"]}
@@ -34,7 +34,7 @@ export default function AccountMenu(props) {
34
34
  const settings = (_jsxs(List, { component: "nav", subheader: _jsx(ListSubheader, { sx: { backgroundColor: 'transparent' }, children: t("Layout.Settings") }), children: [_jsxs(ListItemButton, { onClick: changeTab("theme"), sx: { py: 0.3 }, children: [_jsx(ListItemIcon, { children: _jsx(Brightness4, {}) }), _jsx(ListItemText, { primary: t('Layout.Appearance'), secondary: t(`Layout.${mode.charAt(0).toUpperCase() + mode.slice(1)}`) }), _jsx(ChevronRight, {})] }), _jsxs(ListItemButton, { onClick: changeTab("language"), sx: { py: 0.3 }, children: [_jsx(ListItemIcon, { children: _jsx(Translate, {}) }), _jsx(ListItemText, { primary: t("Layout.Language"), secondary: i18n.resolvedLanguage === "en" ? "English" : "Čeština" }), _jsx(ChevronRight, {})] })] }));
35
35
  const theme = (_jsxs(List, { subheader: _jsxs(ListSubheader, { onClick: changeTab("settings"), sx: { backgroundColor: 'transparent', display: 'flex', alignItems: 'center', px: 1, cursor: 'pointer' }, children: [_jsx(IconButton, { size: "small", sx: { mr: 0.5 }, children: _jsx(ArrowBack, { fontSize: "small" }) }), " ", t("Layout.Appearance")] }), children: [_jsxs(ListItemButton, { onClick: changeMode("light"), disabled: mode === "light", children: [_jsx(ListItemIcon, { children: _jsx(LightMode, {}) }), _jsx(ListItemText, { primary: t('Layout.Light') })] }), _jsxs(ListItemButton, { onClick: changeMode("dark"), disabled: mode === "dark", children: [_jsx(ListItemIcon, { children: _jsx(DarkMode, {}) }), _jsx(ListItemText, { primary: t('Layout.Dark') })] }), _jsxs(ListItemButton, { onClick: changeMode("system"), disabled: mode === "system", children: [_jsx(ListItemIcon, { children: _jsx(SettingsBrightness, {}) }), _jsx(ListItemText, { primary: t('Layout.System') })] })] }));
36
36
  const language = (_jsxs(List, { subheader: _jsxs(ListSubheader, { onClick: changeTab("settings"), sx: { backgroundColor: 'transparent', display: 'flex', alignItems: 'center', px: 1, cursor: 'pointer' }, children: [_jsx(IconButton, { size: "small", sx: { mr: 0.5 }, children: _jsx(ArrowBack, { fontSize: "small" }) }), " ", t("Layout.Language")] }), children: [_jsx(ListItemButton, { onClick: changeLanguage('en'), disabled: i18n.resolvedLanguage === 'en', children: _jsx(ListItemText, { primary: "English" }) }), _jsx(ListItemButton, { onClick: changeLanguage('cs'), disabled: i18n.resolvedLanguage === 'cs', children: _jsx(ListItemText, { primary: "\u010Ce\u0161tina" }) })] }));
37
- return (_jsxs(Fragment, { children: [_jsx(IconButton, { onClick: openMenu, color: "inherit", "aria-label": "open app settings", edge: "end", ref: accountButtonElement, children: user.name ?
37
+ return (_jsxs(Fragment, { children: [_jsx(IconButton, { color: "inherit", "aria-label": "account", name: "account", onClick: openMenu, edge: "end", ref: accountButtonElement, children: user.name ?
38
38
  _jsx(Avatar, { sx: { bgcolor: 'white', color: grey[800], width: 32, height: 32, }, children: _jsx(Typography, { variant: "subtitle2", sx: { fontWeight: 'bold', lineHeight: 0 }, children: getNameInitials() }) })
39
39
  :
40
40
  _jsx(AccountCircle, {}) }), _jsx(Menu, { anchorEl: anchorEl, open: open, onClose: closeMenu, children: _jsxs(Box, { sx: { width: drawerWidth }, role: "presentation", children: [_jsx(List, { "aria-labelledby": "account-menu", children: user.name ?
@@ -1 +1 @@
1
- {"version":3,"file":"AccountMenu.js","sourceRoot":"","sources":["../../../../src/components/layout/AccountMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["import { AccountCircle, ArrowBack, Brightness4, ChevronRight, DarkMode, LightMode, Login, Logout, SettingsBrightness, Translate } from \"@mui/icons-material\";\r\nimport { Avatar, Box, IconButton, List, ListItem, ListItemButton, ListItemIcon, ListItemText, ListSubheader, Menu, PaletteMode, Typography } from \"@mui/material\";\r\nimport { grey } from \"@mui/material/colors\";\r\nimport { Fragment, useCallback, useRef, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { ExtendedUser } from \"../../models/User\";\r\nimport { persistStorage } from \"../../utils/PersistStorage\";\r\n\r\nconst drawerWidth = 240;\r\ntype TabType = 'settings' | 'theme' | 'language';\r\n\r\ninterface AccountMenuProps {\r\n mode: PaletteMode | 'system',\r\n setMode: (mode: PaletteMode | 'system') => void,\r\n user: ExtendedUser\r\n}\r\n\r\nexport default function AccountMenu(props: AccountMenuProps) {\r\n const { mode, setMode, user } = props;\r\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\r\n const [tab, setTab] = useState<TabType>('settings');\r\n const open = Boolean(anchorEl);\r\n const accountButtonElement = useRef<HTMLButtonElement>(null);\r\n const { t, i18n } = useTranslation();\r\n\r\n const changeLanguage = useCallback((newLanguage: 'en' | 'cs') => () => {\r\n i18n.changeLanguage(newLanguage);\r\n closeMenu();\r\n }, []);\r\n\r\n const changeMode = useCallback((newMode: PaletteMode | 'system') => () => {\r\n setMode(newMode);\r\n closeMenu();\r\n persistStorage.set(\"mode\", newMode);\r\n }, []);\r\n\r\n const getNameInitials = (): string => {\r\n const splittedName: string[] = user.name.split(' ');\r\n return `${splittedName[0][0]}${splittedName.length > 1 ? splittedName[1][0] : \"\"}`;\r\n };\r\n\r\n const openMenu = useCallback((e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => setAnchorEl(e.currentTarget), []);\r\n const closeMenu = useCallback(() => { setAnchorEl(null); setTimeout(() => setTab(\"settings\"), 300); }, []);\r\n\r\n const login = useCallback(() => user.login(), []);\r\n const logout = useCallback(() => user.logout(), []);\r\n\r\n const changeTab = useCallback((newTab: TabType) => () => setTab(newTab), []);\r\n\r\n const settings = (\r\n <List component=\"nav\" subheader={<ListSubheader sx={{ backgroundColor: 'transparent' }}>{t(\"Layout.Settings\")}</ListSubheader>}>\r\n <ListItemButton onClick={changeTab(\"theme\")} sx={{ py: 0.3 }}>\r\n <ListItemIcon>\r\n <Brightness4 />\r\n </ListItemIcon>\r\n <ListItemText primary={t('Layout.Appearance')} secondary={t(`Layout.${mode.charAt(0).toUpperCase() + mode.slice(1)}`)} />\r\n <ChevronRight />\r\n </ListItemButton>\r\n\r\n <ListItemButton onClick={changeTab(\"language\")} sx={{ py: 0.3 }}>\r\n <ListItemIcon>\r\n <Translate />\r\n </ListItemIcon>\r\n <ListItemText primary={t(\"Layout.Language\")} secondary={i18n.resolvedLanguage === \"en\" ? \"English\" : \"Čeština\"} />\r\n <ChevronRight />\r\n </ListItemButton>\r\n </List>\r\n );\r\n\r\n const theme = (\r\n <List subheader={\r\n <ListSubheader onClick={changeTab(\"settings\")} sx={{ backgroundColor: 'transparent', display: 'flex', alignItems: 'center', px: 1, cursor: 'pointer' }}>\r\n <IconButton size=\"small\" sx={{ mr: 0.5 }}>\r\n <ArrowBack fontSize=\"small\" />\r\n </IconButton> {t(\"Layout.Appearance\")}\r\n </ListSubheader>\r\n }>\r\n <ListItemButton onClick={changeMode(\"light\")} disabled={mode === \"light\"}>\r\n <ListItemIcon>\r\n <LightMode />\r\n </ListItemIcon>\r\n <ListItemText primary={t('Layout.Light')} />\r\n </ListItemButton>\r\n <ListItemButton onClick={changeMode(\"dark\")} disabled={mode === \"dark\"}>\r\n <ListItemIcon>\r\n <DarkMode />\r\n </ListItemIcon>\r\n <ListItemText primary={t('Layout.Dark')} />\r\n </ListItemButton>\r\n <ListItemButton onClick={changeMode(\"system\")} disabled={mode === \"system\"}>\r\n <ListItemIcon>\r\n <SettingsBrightness />\r\n </ListItemIcon>\r\n <ListItemText primary={t('Layout.System')} />\r\n </ListItemButton>\r\n </List>\r\n );\r\n\r\n const language = (\r\n <List subheader={\r\n <ListSubheader onClick={changeTab(\"settings\")} sx={{ backgroundColor: 'transparent', display: 'flex', alignItems: 'center', px: 1, cursor: 'pointer' }}>\r\n <IconButton size=\"small\" sx={{ mr: 0.5 }}>\r\n <ArrowBack fontSize=\"small\" />\r\n </IconButton> {t(\"Layout.Language\")}\r\n </ListSubheader>\r\n }>\r\n <ListItemButton onClick={changeLanguage('en')} disabled={i18n.resolvedLanguage === 'en'}>\r\n <ListItemText primary=\"English\" />\r\n </ListItemButton>\r\n <ListItemButton onClick={changeLanguage('cs')} disabled={i18n.resolvedLanguage === 'cs'}>\r\n <ListItemText primary=\"Čeština\" />\r\n </ListItemButton>\r\n </List>\r\n );\r\n\r\n return (\r\n <Fragment>\r\n <IconButton onClick={openMenu} color=\"inherit\" aria-label=\"open app settings\" edge=\"end\" ref={accountButtonElement}>\r\n {user.name ?\r\n <Avatar sx={{ bgcolor: 'white', color: grey[800], width: 32, height: 32, }}>\r\n <Typography variant=\"subtitle2\" sx={{ fontWeight: 'bold', lineHeight: 0 }}>\r\n {getNameInitials()}\r\n </Typography>\r\n </Avatar>\r\n :\r\n <AccountCircle />\r\n }\r\n </IconButton>\r\n\r\n <Menu anchorEl={anchorEl} open={open} onClose={closeMenu}>\r\n <Box sx={{ width: drawerWidth }} role=\"presentation\">\r\n <List aria-labelledby=\"account-menu\">\r\n {user.name ?\r\n <Fragment>\r\n <ListItem>\r\n <ListItemText primary={user.name} secondary={\r\n <span>\r\n <span>{user.id}</span>\r\n <br />\r\n <span>{user.department}</span>\r\n </span>\r\n } />\r\n </ListItem>\r\n\r\n <ListItemButton onClick={logout}>\r\n <ListItemIcon><Logout color=\"error\" /></ListItemIcon>\r\n <ListItemText primary={t('Layout.Logout')} />\r\n </ListItemButton>\r\n </Fragment>\r\n :\r\n <ListItemButton onClick={login}>\r\n <ListItemIcon><Login color=\"success\" /></ListItemIcon>\r\n <ListItemText primary={t('Layout.LogIn')} />\r\n </ListItemButton>\r\n }\r\n </List>\r\n\r\n {tab === \"settings\" && settings}\r\n {tab === \"theme\" && theme}\r\n {tab === \"language\" && language}\r\n </Box>\r\n </Menu>\r\n </Fragment>\r\n );\r\n}"]}
1
+ {"version":3,"file":"AccountMenu.js","sourceRoot":"","sources":["../../../../src/components/layout/AccountMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["import { AccountCircle, ArrowBack, Brightness4, ChevronRight, DarkMode, LightMode, Login, Logout, SettingsBrightness, Translate } from \"@mui/icons-material\";\r\nimport { Avatar, Box, IconButton, List, ListItem, ListItemButton, ListItemIcon, ListItemText, ListSubheader, Menu, PaletteMode, Typography } from \"@mui/material\";\r\nimport { grey } from \"@mui/material/colors\";\r\nimport { Fragment, useCallback, useRef, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { ExtendedUser } from \"../../models/User\";\r\nimport { persistStorage } from \"../../utils/PersistStorage\";\r\n\r\nconst drawerWidth = 240;\r\ntype TabType = 'settings' | 'theme' | 'language';\r\n\r\ninterface AccountMenuProps {\r\n mode: PaletteMode | 'system',\r\n setMode: (mode: PaletteMode | 'system') => void,\r\n user: ExtendedUser\r\n}\r\n\r\nexport default function AccountMenu(props: AccountMenuProps) {\r\n const { mode, setMode, user } = props;\r\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\r\n const [tab, setTab] = useState<TabType>('settings');\r\n const open = Boolean(anchorEl);\r\n const accountButtonElement = useRef<HTMLButtonElement>(null);\r\n const { t, i18n } = useTranslation();\r\n\r\n const changeLanguage = useCallback((newLanguage: 'en' | 'cs') => () => {\r\n i18n.changeLanguage(newLanguage);\r\n closeMenu();\r\n }, []);\r\n\r\n const changeMode = useCallback((newMode: PaletteMode | 'system') => () => {\r\n setMode(newMode);\r\n closeMenu();\r\n persistStorage.set(\"mode\", newMode);\r\n }, []);\r\n\r\n const getNameInitials = (): string => {\r\n const splittedName: string[] = user.name.split(' ');\r\n return `${splittedName[0][0]}${splittedName.length > 1 ? splittedName[1][0] : \"\"}`;\r\n };\r\n\r\n const openMenu = useCallback((e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => setAnchorEl(e.currentTarget), []);\r\n const closeMenu = useCallback(() => { setAnchorEl(null); setTimeout(() => setTab(\"settings\"), 300); }, []);\r\n\r\n const login = useCallback(() => user.login(), []);\r\n const logout = useCallback(() => user.logout(), []);\r\n\r\n const changeTab = useCallback((newTab: TabType) => () => setTab(newTab), []);\r\n\r\n const settings = (\r\n <List component=\"nav\" subheader={<ListSubheader sx={{ backgroundColor: 'transparent' }}>{t(\"Layout.Settings\")}</ListSubheader>}>\r\n <ListItemButton onClick={changeTab(\"theme\")} sx={{ py: 0.3 }}>\r\n <ListItemIcon>\r\n <Brightness4 />\r\n </ListItemIcon>\r\n <ListItemText primary={t('Layout.Appearance')} secondary={t(`Layout.${mode.charAt(0).toUpperCase() + mode.slice(1)}`)} />\r\n <ChevronRight />\r\n </ListItemButton>\r\n\r\n <ListItemButton onClick={changeTab(\"language\")} sx={{ py: 0.3 }}>\r\n <ListItemIcon>\r\n <Translate />\r\n </ListItemIcon>\r\n <ListItemText primary={t(\"Layout.Language\")} secondary={i18n.resolvedLanguage === \"en\" ? \"English\" : \"Čeština\"} />\r\n <ChevronRight />\r\n </ListItemButton>\r\n </List>\r\n );\r\n\r\n const theme = (\r\n <List subheader={\r\n <ListSubheader onClick={changeTab(\"settings\")} sx={{ backgroundColor: 'transparent', display: 'flex', alignItems: 'center', px: 1, cursor: 'pointer' }}>\r\n <IconButton size=\"small\" sx={{ mr: 0.5 }}>\r\n <ArrowBack fontSize=\"small\" />\r\n </IconButton> {t(\"Layout.Appearance\")}\r\n </ListSubheader>\r\n }>\r\n <ListItemButton onClick={changeMode(\"light\")} disabled={mode === \"light\"}>\r\n <ListItemIcon>\r\n <LightMode />\r\n </ListItemIcon>\r\n <ListItemText primary={t('Layout.Light')} />\r\n </ListItemButton>\r\n <ListItemButton onClick={changeMode(\"dark\")} disabled={mode === \"dark\"}>\r\n <ListItemIcon>\r\n <DarkMode />\r\n </ListItemIcon>\r\n <ListItemText primary={t('Layout.Dark')} />\r\n </ListItemButton>\r\n <ListItemButton onClick={changeMode(\"system\")} disabled={mode === \"system\"}>\r\n <ListItemIcon>\r\n <SettingsBrightness />\r\n </ListItemIcon>\r\n <ListItemText primary={t('Layout.System')} />\r\n </ListItemButton>\r\n </List>\r\n );\r\n\r\n const language = (\r\n <List subheader={\r\n <ListSubheader onClick={changeTab(\"settings\")} sx={{ backgroundColor: 'transparent', display: 'flex', alignItems: 'center', px: 1, cursor: 'pointer' }}>\r\n <IconButton size=\"small\" sx={{ mr: 0.5 }}>\r\n <ArrowBack fontSize=\"small\" />\r\n </IconButton> {t(\"Layout.Language\")}\r\n </ListSubheader>\r\n }>\r\n <ListItemButton onClick={changeLanguage('en')} disabled={i18n.resolvedLanguage === 'en'}>\r\n <ListItemText primary=\"English\" />\r\n </ListItemButton>\r\n <ListItemButton onClick={changeLanguage('cs')} disabled={i18n.resolvedLanguage === 'cs'}>\r\n <ListItemText primary=\"Čeština\" />\r\n </ListItemButton>\r\n </List>\r\n );\r\n\r\n return (\r\n <Fragment>\r\n <IconButton color=\"inherit\" aria-label=\"account\" name=\"account\" onClick={openMenu} edge=\"end\" ref={accountButtonElement}>\r\n {user.name ?\r\n <Avatar sx={{ bgcolor: 'white', color: grey[800], width: 32, height: 32, }}>\r\n <Typography variant=\"subtitle2\" sx={{ fontWeight: 'bold', lineHeight: 0 }}>\r\n {getNameInitials()}\r\n </Typography>\r\n </Avatar>\r\n :\r\n <AccountCircle />\r\n }\r\n </IconButton>\r\n\r\n <Menu anchorEl={anchorEl} open={open} onClose={closeMenu}>\r\n <Box sx={{ width: drawerWidth }} role=\"presentation\">\r\n <List aria-labelledby=\"account-menu\">\r\n {user.name ?\r\n <Fragment>\r\n <ListItem>\r\n <ListItemText primary={user.name} secondary={\r\n <span>\r\n <span>{user.id}</span>\r\n <br />\r\n <span>{user.department}</span>\r\n </span>\r\n } />\r\n </ListItem>\r\n\r\n <ListItemButton onClick={logout}>\r\n <ListItemIcon><Logout color=\"error\" /></ListItemIcon>\r\n <ListItemText primary={t('Layout.Logout')} />\r\n </ListItemButton>\r\n </Fragment>\r\n :\r\n <ListItemButton onClick={login}>\r\n <ListItemIcon><Login color=\"success\" /></ListItemIcon>\r\n <ListItemText primary={t('Layout.LogIn')} />\r\n </ListItemButton>\r\n }\r\n </List>\r\n\r\n {tab === \"settings\" && settings}\r\n {tab === \"theme\" && theme}\r\n {tab === \"language\" && language}\r\n </Box>\r\n </Menu>\r\n </Fragment>\r\n );\r\n}"]}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { ChevronLeft, ChevronRight } from '@mui/icons-material';
3
- import { Box, Divider, Drawer as MuiDrawer, IconButton, List, ListItem, ListItemIcon, ListItemText, SwipeableDrawer, Typography } from '@mui/material';
3
+ import { Box, Divider, Drawer as MuiDrawer, IconButton, List, ListItem, ListItemButton, ListItemIcon, ListItemText, SwipeableDrawer, Typography } from '@mui/material';
4
4
  import { styled, useTheme } from '@mui/material/styles';
5
5
  import { Fragment, useCallback, useMemo } from 'react';
6
6
  import { useTranslation } from 'react-i18next';
@@ -61,7 +61,7 @@ export default function LeftDrawer(props) {
61
61
  return window.location.reload();
62
62
  setDrawerOpen(false);
63
63
  }, [location.pathname]);
64
- const menuItems = (_jsx(List, { children: items.filter(item => !item.hidden).map(item => _jsxs(ListItem, { button: true, selected: location.pathname === item.path, onClick: handleMenuItemClick(item.path), children: [_jsx(ListItemIcon, { children: item.icon }), _jsx(ListItemText, { primary: t(item.title) })] }, item.path)) }));
64
+ const menuItems = (_jsx(List, { children: items.filter(item => !item.hidden).map(item => _jsx(ListItem, { disablePadding: true, sx: { display: 'block' }, onClick: handleMenuItemClick(item.path), children: _jsxs(ListItemButton, { selected: location.pathname === item.path, children: [_jsx(ListItemIcon, { children: item.icon }), _jsx(ListItemText, { primary: t(item.title) })] }) }, item.path)) }));
65
65
  const hasItems = useMemo(() => (items.filter(item => !item.hidden).length > 1), [items]);
66
66
  return (_jsxs(Fragment, { children: [_jsxs(Drawer, { variant: "permanent", open: drawerOpen, sx: { display: { xs: 'none', sm: hasItems ? 'inherit' : 'none' } }, children: [_jsxs(DrawerHeader, { children: [_jsxs(Typography, { sx: { flexGrow: 1, textAlign: 'center', marginLeft: 3 }, children: [t("Layout.Version"), ": ", appVersion] }), _jsx(IconButton, { onClick: closeDrawer, children: theme.direction === 'rtl' ? _jsx(ChevronRight, {}) : _jsx(ChevronLeft, {}) })] }), _jsx(Divider, {}), menuItems] }), _jsx(SwipeableDrawer, { anchor: "left", open: drawerOpen, onClose: closeDrawer, onOpen: openDrawer, sx: { display: { xs: 'inherit', sm: hasItems ? 'none' : 'inherit' } }, children: _jsxs(Box, { sx: { width: drawerWidth }, role: "presentation", children: [_jsxs(Typography, { sx: { textAlign: 'center', my: 1.5 }, children: [t("Layout.Version"), ": ", appVersion] }), menuItems] }) })] }));
67
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LeftDrawer.js","sourceRoot":"","sources":["../../../../src/components/layout/LeftDrawer.tsx"],"names":[],"mappings":"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","sourcesContent":["import { ChevronLeft, ChevronRight } from '@mui/icons-material';\r\nimport { Box, Divider, Drawer as MuiDrawer, IconButton, List, ListItem, ListItemIcon, ListItemText, SwipeableDrawer, Typography } from '@mui/material';\r\nimport { CSSObject, styled, Theme, useTheme } from '@mui/material/styles';\r\nimport { Fragment, useCallback, useMemo } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useLocation, useNavigate } from 'react-router-dom';\r\nimport { LeftDrawerItem as LeftDrawerItemModel } from '../../models/LeftDrawerItem';\r\n\r\nconst drawerWidth = 240;\r\n\r\nconst openedMixin = (theme: Theme): CSSObject => ({\r\n width: drawerWidth,\r\n transition: theme.transitions.create('width', {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.enteringScreen,\r\n }),\r\n overflowX: 'hidden',\r\n});\r\n\r\nconst closedMixin = (theme: Theme): CSSObject => ({\r\n transition: theme.transitions.create('width', {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen,\r\n }),\r\n overflowX: 'hidden',\r\n width: `calc(${theme.spacing(7)} + 1px)`,\r\n [theme.breakpoints.up('sm')]: {\r\n width: `calc(${theme.spacing(8.4)} + 1px)`,\r\n },\r\n});\r\n\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\nconst Drawer = styled(MuiDrawer, { shouldForwardProp: (prop) => prop !== 'open' })(\r\n ({ theme, open }) => ({\r\n width: drawerWidth,\r\n flexShrink: 0,\r\n whiteSpace: 'nowrap',\r\n boxSizing: 'border-box',\r\n ...(open && {\r\n ...openedMixin(theme),\r\n '& .MuiDrawer-paper': openedMixin(theme),\r\n }),\r\n ...(!open && {\r\n ...closedMixin(theme),\r\n '& .MuiDrawer-paper': closedMixin(theme),\r\n }),\r\n }),\r\n);\r\n\r\ninterface LeftDrawerProps {\r\n appVersion: string,\r\n drawerOpen: boolean,\r\n setDrawerOpen: (drawerOpen: boolean) => void,\r\n items: LeftDrawerItemModel[]\r\n}\r\n\r\nexport default function LeftDrawer(props: LeftDrawerProps) {\r\n const { appVersion, drawerOpen, setDrawerOpen, items } = props;\r\n const theme = useTheme();\r\n const { t } = useTranslation();\r\n const navigate = useNavigate();\r\n const location = useLocation();\r\n\r\n const openDrawer = useCallback(() => setDrawerOpen(true), []);\r\n const closeDrawer = useCallback(() => setDrawerOpen(false), []);\r\n\r\n const handleMenuItemClick = useCallback((path: string) => () => {\r\n navigate(path);\r\n\r\n if (location.pathname === path)\r\n return window.location.reload();\r\n\r\n setDrawerOpen(false);\r\n }, [location.pathname]);\r\n\r\n const menuItems = (\r\n <List>\r\n {items.filter(item => !item.hidden).map(item =>\r\n <ListItem key={item.path} button selected={location.pathname === item.path} onClick={handleMenuItemClick(item.path)}>\r\n <ListItemIcon>\r\n {item.icon}\r\n </ListItemIcon>\r\n <ListItemText primary={t(item.title)} />\r\n </ListItem>\r\n )}\r\n </List>\r\n );\r\n\r\n const hasItems: boolean = useMemo(() => (items.filter(item => !item.hidden).length > 1), [items]);\r\n return (\r\n <Fragment>\r\n <Drawer variant=\"permanent\" open={drawerOpen} sx={{ display: { xs: 'none', sm: hasItems ? 'inherit' : 'none' } }}>\r\n <DrawerHeader>\r\n <Typography sx={{ flexGrow: 1, textAlign: 'center', marginLeft: 3 }}>{t(\"Layout.Version\")}: {appVersion}</Typography>\r\n <IconButton onClick={closeDrawer}>\r\n {theme.direction === 'rtl' ? <ChevronRight /> : <ChevronLeft />}\r\n </IconButton>\r\n </DrawerHeader>\r\n <Divider />\r\n {menuItems}\r\n </Drawer>\r\n\r\n <SwipeableDrawer anchor=\"left\" open={drawerOpen} onClose={closeDrawer} onOpen={openDrawer} sx={{ display: { xs: 'inherit', sm: hasItems ? 'none' : 'inherit' } }}>\r\n <Box sx={{ width: drawerWidth }} role=\"presentation\">\r\n <Typography sx={{ textAlign: 'center', my: 1.5 }}>{t(\"Layout.Version\")}: {appVersion}</Typography>\r\n {menuItems}\r\n </Box>\r\n </SwipeableDrawer>\r\n </Fragment>\r\n );\r\n}\r\n"]}
1
+ {"version":3,"file":"LeftDrawer.js","sourceRoot":"","sources":["../../../../src/components/layout/LeftDrawer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACvK,OAAO,EAAa,MAAM,EAAS,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG5D,MAAM,WAAW,GAAG,GAAG,CAAC;AAExB,MAAM,WAAW,GAAG,CAAC,KAAY,EAAa,EAAE,CAAC,CAAC;IAC9C,KAAK,EAAE,WAAW;IAClB,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE;QAC1C,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK;QACtC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc;KACtD,CAAC;IACF,SAAS,EAAE,QAAQ;CACtB,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,CAAC,KAAY,EAAa,EAAE,CAAC,CAAC;IAC9C,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE;QAC1C,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK;QACtC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa;KACrD,CAAC;IACF,SAAS,EAAE,QAAQ;IACnB,KAAK,EAAE,QAAQ,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;IACxC,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE;QAC1B,KAAK,EAAE,QAAQ,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS;KAC7C;CACJ,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/C,OAAO,EAAE,MAAM;IACf,UAAU,EAAE,QAAQ;IACpB,cAAc,EAAE,UAAU;IAC1B,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5B,4CAA4C;IAC5C,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO;CAC1B,CAAC,CAAC,CAAC;AAEJ,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC,CAC9E,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAClB,KAAK,EAAE,WAAW;IAClB,UAAU,EAAE,CAAC;IACb,UAAU,EAAE,QAAQ;IACpB,SAAS,EAAE,YAAY;IACvB,GAAG,CAAC,IAAI,IAAI;QACR,GAAG,WAAW,CAAC,KAAK,CAAC;QACrB,oBAAoB,EAAE,WAAW,CAAC,KAAK,CAAC;KAC3C,CAAC;IACF,GAAG,CAAC,CAAC,IAAI,IAAI;QACT,GAAG,WAAW,CAAC,KAAK,CAAC;QACrB,oBAAoB,EAAE,WAAW,CAAC,KAAK,CAAC;KAC3C,CAAC;CACL,CAAC,CACL,CAAC;AASF,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,KAAsB;IACrD,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAC/D,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,EAAE,CAAC,EAAE,GAAG,cAAc,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IAEhE,MAAM,mBAAmB,GAAG,WAAW,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,GAAG,EAAE;QAC3D,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEf,IAAI,QAAQ,CAAC,QAAQ,KAAK,IAAI;YAC1B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAEpC,aAAa,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAExB,MAAM,SAAS,GAAG,CACd,KAAC,IAAI,cACA,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAC3C,KAAC,QAAQ,IAAiB,cAAc,QAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,YACtG,MAAC,cAAc,IAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,aACrD,KAAC,YAAY,cACR,IAAI,CAAC,IAAI,GACC,EACf,KAAC,YAAY,IAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAI,IAC3B,IANN,IAAI,CAAC,IAAI,CAOb,CACd,GACE,CACV,CAAC;IAEF,MAAM,QAAQ,GAAY,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAClG,OAAO,CACH,MAAC,QAAQ,eACL,MAAC,MAAM,IAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,aAC5G,MAAC,YAAY,eACT,MAAC,UAAU,IAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,EAAE,aAAG,CAAC,CAAC,gBAAgB,CAAC,QAAI,UAAU,IAAc,EACrH,KAAC,UAAU,IAAC,OAAO,EAAE,WAAW,YAC3B,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,KAAC,YAAY,KAAG,CAAC,CAAC,CAAC,KAAC,WAAW,KAAG,GACtD,IACF,EACf,KAAC,OAAO,KAAG,EACV,SAAS,IACL,EAET,KAAC,eAAe,IAAC,MAAM,EAAC,MAAM,EAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,YAC5J,MAAC,GAAG,IAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,IAAI,EAAC,cAAc,aAChD,MAAC,UAAU,IAAC,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,aAAG,CAAC,CAAC,gBAAgB,CAAC,QAAI,UAAU,IAAc,EACjG,SAAS,IACR,GACQ,IACX,CACd,CAAC;AACN,CAAC","sourcesContent":["import { ChevronLeft, ChevronRight } from '@mui/icons-material';\r\nimport { Box, Divider, Drawer as MuiDrawer, IconButton, List, ListItem, ListItemButton, ListItemIcon, ListItemText, SwipeableDrawer, Typography } from '@mui/material';\r\nimport { CSSObject, styled, Theme, useTheme } from '@mui/material/styles';\r\nimport { Fragment, useCallback, useMemo } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useLocation, useNavigate } from 'react-router-dom';\r\nimport { LeftDrawerItem as LeftDrawerItemModel } from '../../models/LeftDrawerItem';\r\n\r\nconst drawerWidth = 240;\r\n\r\nconst openedMixin = (theme: Theme): CSSObject => ({\r\n width: drawerWidth,\r\n transition: theme.transitions.create('width', {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.enteringScreen,\r\n }),\r\n overflowX: 'hidden',\r\n});\r\n\r\nconst closedMixin = (theme: Theme): CSSObject => ({\r\n transition: theme.transitions.create('width', {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen,\r\n }),\r\n overflowX: 'hidden',\r\n width: `calc(${theme.spacing(7)} + 1px)`,\r\n [theme.breakpoints.up('sm')]: {\r\n width: `calc(${theme.spacing(8.4)} + 1px)`,\r\n },\r\n});\r\n\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\nconst Drawer = styled(MuiDrawer, { shouldForwardProp: (prop) => prop !== 'open' })(\r\n ({ theme, open }) => ({\r\n width: drawerWidth,\r\n flexShrink: 0,\r\n whiteSpace: 'nowrap',\r\n boxSizing: 'border-box',\r\n ...(open && {\r\n ...openedMixin(theme),\r\n '& .MuiDrawer-paper': openedMixin(theme),\r\n }),\r\n ...(!open && {\r\n ...closedMixin(theme),\r\n '& .MuiDrawer-paper': closedMixin(theme),\r\n }),\r\n }),\r\n);\r\n\r\ninterface LeftDrawerProps {\r\n appVersion: string,\r\n drawerOpen: boolean,\r\n setDrawerOpen: (drawerOpen: boolean) => void,\r\n items: LeftDrawerItemModel[]\r\n}\r\n\r\nexport default function LeftDrawer(props: LeftDrawerProps) {\r\n const { appVersion, drawerOpen, setDrawerOpen, items } = props;\r\n const theme = useTheme();\r\n const { t } = useTranslation();\r\n const navigate = useNavigate();\r\n const location = useLocation();\r\n\r\n const openDrawer = useCallback(() => setDrawerOpen(true), []);\r\n const closeDrawer = useCallback(() => setDrawerOpen(false), []);\r\n\r\n const handleMenuItemClick = useCallback((path: string) => () => {\r\n navigate(path);\r\n\r\n if (location.pathname === path)\r\n return window.location.reload();\r\n\r\n setDrawerOpen(false);\r\n }, [location.pathname]);\r\n\r\n const menuItems = (\r\n <List>\r\n {items.filter(item => !item.hidden).map(item =>\r\n <ListItem key={item.path} disablePadding sx={{ display: 'block' }} onClick={handleMenuItemClick(item.path)}>\r\n <ListItemButton selected={location.pathname === item.path} >\r\n <ListItemIcon>\r\n {item.icon}\r\n </ListItemIcon>\r\n <ListItemText primary={t(item.title)} />\r\n </ListItemButton>\r\n </ListItem>\r\n )}\r\n </List>\r\n );\r\n\r\n const hasItems: boolean = useMemo(() => (items.filter(item => !item.hidden).length > 1), [items]);\r\n return (\r\n <Fragment>\r\n <Drawer variant=\"permanent\" open={drawerOpen} sx={{ display: { xs: 'none', sm: hasItems ? 'inherit' : 'none' } }}>\r\n <DrawerHeader>\r\n <Typography sx={{ flexGrow: 1, textAlign: 'center', marginLeft: 3 }}>{t(\"Layout.Version\")}: {appVersion}</Typography>\r\n <IconButton onClick={closeDrawer}>\r\n {theme.direction === 'rtl' ? <ChevronRight /> : <ChevronLeft />}\r\n </IconButton>\r\n </DrawerHeader>\r\n <Divider />\r\n {menuItems}\r\n </Drawer>\r\n\r\n <SwipeableDrawer anchor=\"left\" open={drawerOpen} onClose={closeDrawer} onOpen={openDrawer} sx={{ display: { xs: 'inherit', sm: hasItems ? 'none' : 'inherit' } }}>\r\n <Box sx={{ width: drawerWidth }} role=\"presentation\">\r\n <Typography sx={{ textAlign: 'center', my: 1.5 }}>{t(\"Layout.Version\")}: {appVersion}</Typography>\r\n {menuItems}\r\n </Box>\r\n </SwipeableDrawer>\r\n </Fragment>\r\n );\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"LeftDrawerItem.js","sourceRoot":"","sources":["../../../../../src/components/layout/leftDrawer/LeftDrawerItem.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAErE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAWrD,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,KAA0B;IACzD,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACnE,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,MAAM,aAAa,GAAG,GAAG,EAAE;QACvB,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEd,IAAI,QAAQ,CAAC,QAAQ,KAAK,GAAG;YACzB,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAEpC,aAAa,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,CAAA;IAED,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM;QACxC,OAAO,IAAI,CAAC;IAEhB,OAAO,CACH,MAAC,QAAQ,IAAC,MAAM,QAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,KAAK,GAAG,EAAE,OAAO,EAAE,aAAa,aACxE,KAAC,YAAY,cACR,IAAI,GACM,EACf,KAAC,YAAY,IAAC,OAAO,EAAE,KAAK,GAAI,IACzB,CACd,CAAA;AACL,CAAC","sourcesContent":["import { ListItem, ListItemIcon, ListItemText } from '@mui/material';\r\nimport React from 'react';\r\nimport { useLocation, useNavigate } from 'react-router-dom';\r\nimport { hasRole } from '../../../utils/UserService';\r\n\r\ninterface LeftDrawerItemProps {\r\n title: string,\r\n url: string,\r\n icon: React.ReactNode,\r\n forRole?: string[],\r\n setDrawerOpen: (drawerOpen: boolean) => void,\r\n hidden?: boolean\r\n}\r\n\r\nexport default function DrawerItem(props: LeftDrawerItemProps) {\r\n const { title, url, icon, forRole, setDrawerOpen, hidden } = props;\r\n const navigate = useNavigate();\r\n const location = useLocation();\r\n\r\n const handleOnClick = () => {\r\n navigate(url);\r\n\r\n if (location.pathname === url)\r\n return window.location.reload();\r\n\r\n setDrawerOpen(false);\r\n }\r\n\r\n if ((forRole && !hasRole(forRole)) || hidden)\r\n return null;\r\n\r\n return (\r\n <ListItem button selected={location.pathname === url} onClick={handleOnClick}>\r\n <ListItemIcon>\r\n {icon}\r\n </ListItemIcon>\r\n <ListItemText primary={title} />\r\n </ListItem>\r\n )\r\n}\r\n"]}
1
+ {"version":3,"file":"LeftDrawerItem.js","sourceRoot":"","sources":["../../../../../src/components/layout/leftDrawer/LeftDrawerItem.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAErE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAWrD,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,KAA0B;IACzD,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACnE,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,MAAM,aAAa,GAAG,GAAG,EAAE;QACvB,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEd,IAAI,QAAQ,CAAC,QAAQ,KAAK,GAAG;YACzB,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAEpC,aAAa,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,CAAA;IAED,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM;QACxC,OAAO,IAAI,CAAC;IAEhB,OAAO,CACH,MAAC,QAAQ,IAAC,MAAM,QAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,KAAK,GAAG,EAAE,OAAO,EAAE,aAAa,aACxE,KAAC,YAAY,cACR,IAAI,GACM,EACf,KAAC,YAAY,IAAC,OAAO,EAAE,KAAK,GAAI,IACzB,CACd,CAAA;AACL,CAAC","sourcesContent":["import { ListItem, ListItemIcon, ListItemText } from '@mui/material';\nimport React from 'react';\nimport { useLocation, useNavigate } from 'react-router-dom';\nimport { hasRole } from '../../../utils/UserService';\n\ninterface LeftDrawerItemProps {\n title: string,\n url: string,\n icon: React.ReactNode,\n forRole?: string[],\n setDrawerOpen: (drawerOpen: boolean) => void,\n hidden?: boolean\n}\n\nexport default function DrawerItem(props: LeftDrawerItemProps) {\n const { title, url, icon, forRole, setDrawerOpen, hidden } = props;\n const navigate = useNavigate();\n const location = useLocation();\n\n const handleOnClick = () => {\n navigate(url);\n\n if (location.pathname === url)\n return window.location.reload();\n\n setDrawerOpen(false);\n }\n\n if ((forRole && !hasRole(forRole)) || hidden)\n return null;\n\n return (\n <ListItem button selected={location.pathname === url} onClick={handleOnClick}>\n <ListItemIcon>\n {icon}\n </ListItemIcon>\n <ListItemText primary={title} />\n </ListItem>\n )\n}\n"]}
@@ -1 +1 @@
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}"]}
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 +1 @@
1
- {"version":3,"file":"LeftDrawerItem.js","sourceRoot":"","sources":["../../../src/models/LeftDrawerItem.ts"],"names":[],"mappings":"","sourcesContent":["export interface LeftDrawerItem {\r\n title: string,\r\n path: string,\r\n icon: React.ReactNode,\r\n hidden?: boolean\r\n}\r\n"]}
1
+ {"version":3,"file":"LeftDrawerItem.js","sourceRoot":"","sources":["../../../src/models/LeftDrawerItem.ts"],"names":[],"mappings":"","sourcesContent":["export interface LeftDrawerItem {\n title: string,\n path: string,\n icon: React.ReactNode,\n hidden?: boolean\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SnackbarModel.js","sourceRoot":"","sources":["../../../src/models/SnackbarModel.ts"],"names":[],"mappings":"","sourcesContent":["import { AlertColor } from \"@mui/material\";\r\n\r\nexport default interface SnackbarModel {\r\n message: string,\r\n severity?: AlertColor\r\n}"]}
1
+ {"version":3,"file":"SnackbarModel.js","sourceRoot":"","sources":["../../../src/models/SnackbarModel.ts"],"names":[],"mappings":"","sourcesContent":["import { AlertColor } from \"@mui/material\";\n\nexport default interface SnackbarModel {\n message: string,\n severity?: AlertColor\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"User.js","sourceRoot":"","sources":["../../../src/models/User.ts"],"names":[],"mappings":"","sourcesContent":["import { KeycloakPromise } from \"keycloak-js\";\r\n\r\nexport interface User {\r\n id: string,\r\n name: string,\r\n department: string\r\n}\r\n\r\nexport interface ExtendedUser extends User {\r\n loggedIn: boolean,\r\n login: () => KeycloakPromise<void, void>,\r\n logout: () => KeycloakPromise<void, void> \r\n}"]}
1
+ {"version":3,"file":"User.js","sourceRoot":"","sources":["../../../src/models/User.ts"],"names":[],"mappings":"","sourcesContent":["import { KeycloakPromise } from \"keycloak-js\";\n\nexport interface User {\n id: string,\n name: string,\n department: string\n}\n\nexport interface ExtendedUser extends User {\n loggedIn: boolean,\n login: () => KeycloakPromise<void, void>,\n logout: () => KeycloakPromise<void, void> \n}"]}
@@ -1 +1 @@
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 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 = `Error connecting to server`;\r\n\r\n const detailMessage: string | undefined = await response.json()\r\n .then(data => data.message ?? data.title)\r\n .catch(() => (message));\r\n\r\n if (detailMessage)\r\n message = detailMessage;\r\n\r\n return message;\r\n};"]}
1
+ {"version":3,"file":"Fetches.js","sourceRoot":"","sources":["../../../src/utils/Fetches.ts"],"names":[],"mappings":"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","sourcesContent":["import { getToken } from \"./UserService\";\n\nexport const fetchGet = async (url: string, signal: AbortSignal | undefined): Promise<any> => {\n const initReq: RequestInit = await getRequestInit(\"GET\", null, signal);\n\n const response: Response = await fetch(url, initReq);\n if (!response.ok)\n throw await getQueryErrorMessage(response);\n\n return response.json();\n};\n\nexport const fetchFileGet = async (url: string, signal: AbortSignal | undefined): Promise<Blob> => {\n const initReq: RequestInit = await getRequestInit(\"GET\", null, signal);\n\n const response: Response = await fetch(url, initReq);\n if (!response.ok)\n throw await getQueryErrorMessage(response);\n\n return response.blob();\n};\n\nexport const fetchPost = async (url: string, data: unknown): Promise<any> => {\n const initReq: RequestInit = await getRequestInit(\"POST\", data);\n\n const response: Response = await fetch(url, initReq);\n if (!response.ok)\n throw await getQueryErrorMessage(response);\n\n return response.json();\n};\n\nexport const fetchPut = async (url: string, data: unknown): Promise<Response> => {\n const initReq: RequestInit = await getRequestInit(\"PUT\", data);\n\n const response: Response = await fetch(url, initReq);\n if (!response.ok)\n throw await getQueryErrorMessage(response);\n\n return response;\n};\n\nexport const fetchDelete = async (url: string): Promise<Response> => {\n const initReq: RequestInit = await getRequestInit(\"DELETE\");\n\n const response: Response = await fetch(url, initReq);\n if (!response.ok)\n throw await getQueryErrorMessage(response);\n\n return response;\n};\n\nconst getRequestInit = async (method: string, data?: unknown, signal?: AbortSignal): Promise<RequestInit> => {\n const request: RequestInit = {\n method: method,\n signal: signal,\n credentials: 'include'\n };\n\n if (data) {\n if (data instanceof FormData)\n request.body = data;\n else\n request.body = JSON.stringify(data);\n }\n\n if (data instanceof FormData)\n request.headers = {\n 'Authorization': `Bearer ${await getToken()}`\n };\n else {\n request.headers = {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${await getToken()}`\n };\n }\n\n return request;\n};\n\nconst getQueryErrorMessage = async (response: Response): Promise<string> => {\n let message: string = `Error connecting to server`;\n\n const detailMessage: string | undefined = await response.json()\n .then(data => data.message ?? data.title)\n .catch(() => (message));\n\n if (detailMessage)\n message = detailMessage;\n\n return message;\n};"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Helpers.js","sourceRoot":"","sources":["../../../src/utils/Helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,MAAM,CAAC,MAAM,SAAS,GAAY,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACzE,MAAM,CAAC,MAAM,QAAQ,GAAY,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AAE/E,MAAM,CAAC,MAAM,aAAa,GAAY,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAE1H,MAAM,CAAC,MAAM,OAAO,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC","sourcesContent":["import { Guid } from \"guid-ts\";\r\n\r\nexport const isAndroid: boolean = /(android)/i.test(navigator.userAgent);\r\nexport const isMobile: boolean = /(android|iphone)/i.test(navigator.userAgent);\r\n\r\nexport const isDevelopment: boolean = window.location.href.includes(\".dev\") || window.location.href.includes(\"localhost\");\r\n\r\nexport const newGuid = (): string => Guid.newGuid().toString();\r\n"]}
1
+ {"version":3,"file":"Helpers.js","sourceRoot":"","sources":["../../../src/utils/Helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,MAAM,CAAC,MAAM,SAAS,GAAY,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACzE,MAAM,CAAC,MAAM,QAAQ,GAAY,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AAE/E,MAAM,CAAC,MAAM,aAAa,GAAY,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAE1H,MAAM,CAAC,MAAM,OAAO,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC","sourcesContent":["import { Guid } from \"guid-ts\";\n\nexport const isAndroid: boolean = /(android)/i.test(navigator.userAgent);\nexport const isMobile: boolean = /(android|iphone)/i.test(navigator.userAgent);\n\nexport const isDevelopment: boolean = window.location.href.includes(\".dev\") || window.location.href.includes(\"localhost\");\n\nexport const newGuid = (): string => Guid.newGuid().toString();\n"]}