wcz-layout 6.6.0 → 6.6.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.js +1 -1
- package/dist/src/components/Layout.js.map +1 -1
- package/dist/src/components/layout/AccountMenu.d.ts +2 -0
- package/dist/src/components/layout/AccountMenu.js +5 -7
- package/dist/src/components/layout/AccountMenu.js.map +1 -1
- package/dist/src/contexts/UserContext.d.ts +2 -0
- package/dist/src/contexts/UserContext.js +2 -0
- package/dist/src/contexts/UserContext.js.map +1 -1
- package/dist/src/hooks/UseUser.d.ts +0 -20
- package/dist/src/hooks/UseUser.js +0 -9
- package/dist/src/hooks/UseUser.js.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/models/User.d.ts +6 -11
- package/dist/src/models/User.js +2 -4
- package/dist/src/models/User.js.map +1 -1
- package/dist/src/utils/Auth.js +2 -0
- package/dist/src/utils/Auth.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/components/Layout.tsx +1 -1
- package/src/components/layout/AccountMenu.tsx +13 -12
- package/src/contexts/UserContext.tsx +4 -0
- package/src/hooks/UseUser.tsx +0 -11
- package/src/index.ts +4 -1
- package/src/models/User.ts +3 -8
- package/src/utils/Auth.ts +3 -1
|
@@ -117,6 +117,6 @@ export const Layout = ({ routes, colors, appVersion, user, notifications, setNot
|
|
|
117
117
|
}, [title]);
|
|
118
118
|
const toggleNavigationDrawer = () => setLeftDrawerOpen(!leftDrawerOpen);
|
|
119
119
|
const hasNavigationRoutes = navigationRoutes.filter(route => route.showInMenu && !route.disabled).length > 1;
|
|
120
|
-
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: toggleNavigationDrawer, edge: "start", sx: { marginRight: 2, ...((leftDrawerOpen || !hasNavigationRoutes) && { display: "none" }) }, children: _jsx(Menu, {}) }), _jsx(Typography, { variant: "h6", noWrap: true, component: "div", sx: { flexGrow: 1 }, children: title }), environment !== "prd" && _jsx(Chip, { sx: theme => ({ mr: 1, bgcolor: "secondary.main", color: theme.palette.primary.contrastText }), label: environment }), _jsx(NotificationMenu, { notifications: notifications, setNotifications: setNotifications }), _jsx(AccountMenu, { mode: mode, setMode: setMode })] }) }), _jsx(NavigationDrawer, { routes: navigationRoutes, appVersion: appVersion, open: leftDrawerOpen, setOpen: setLeftDrawerOpen, hasRoutes: hasNavigationRoutes }), _jsxs(Box, { component: "main", sx: { flex: 1, overflow: "auto" }, children: [_jsx(DrawerHeader, {}), (route.authenticated === false || isAuthenticated) && !route.disabled ? children : _jsx(Unauthorized, {})] })] }), _jsx(DevelopmentBanner, { user: user, hasNavigationRoutes: hasNavigationRoutes }), (isFetching || isMutating) && _jsx(LinearProgress, { sx: { position: "fixed", top: { xs: 56, sm: 64 }, left: 0, right: 0 } })] }));
|
|
120
|
+
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: toggleNavigationDrawer, edge: "start", sx: { marginRight: 2, ...((leftDrawerOpen || !hasNavigationRoutes) && { display: "none" }) }, children: _jsx(Menu, {}) }), _jsx(Typography, { variant: "h6", noWrap: true, component: "div", sx: { flexGrow: 1 }, children: title }), environment !== "prd" && _jsx(Chip, { sx: theme => ({ mr: 1, bgcolor: "secondary.main", color: theme.palette.primary.contrastText }), label: environment }), _jsx(NotificationMenu, { notifications: notifications, setNotifications: setNotifications }), _jsx(AccountMenu, { mode: mode, setMode: setMode, user: user })] }) }), _jsx(NavigationDrawer, { routes: navigationRoutes, appVersion: appVersion, open: leftDrawerOpen, setOpen: setLeftDrawerOpen, hasRoutes: hasNavigationRoutes }), _jsxs(Box, { component: "main", sx: { flex: 1, overflow: "auto" }, children: [_jsx(DrawerHeader, {}), (route.authenticated === false || isAuthenticated) && !route.disabled ? children : _jsx(Unauthorized, {})] })] }), _jsx(DevelopmentBanner, { user: user, hasNavigationRoutes: hasNavigationRoutes }), (isFetching || isMutating) && _jsx(LinearProgress, { sx: { position: "fixed", top: { xs: 56, sm: 64 }, left: 0, right: 0 } })] }));
|
|
121
121
|
};
|
|
122
122
|
//# 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 { Box, Chip, CssBaseline, IconButton, LinearProgress, AppBar as MuiAppBar, AppBarProps as MuiAppBarProps, Theme, Toolbar, Typography, useMediaQuery } from \"@mui/material\";\r\nimport { grey } from \"@mui/material/colors\";\r\nimport { csCZ, enUS } from \"@mui/material/locale\";\r\nimport { ThemeProvider, createTheme, styled } from \"@mui/material/styles\";\r\nimport { csCZ as dataGridCsCz, enUS as dataGridEnUs } from \"@mui/x-data-grid-premium/locales\";\r\nimport { csCZ as datePickersCsCz, enUS as datePickersEnUs } from \"@mui/x-date-pickers-pro/locales\";\r\nimport { useIsFetching, useIsMutating } from \"@tanstack/react-query\";\r\nimport React, { Dispatch, SetStateAction, useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { matchPath, useLocation } from \"react-router-dom\";\r\nimport { LayoutPaletteColorOptions } from \"../models/LayoutPaletteColorOptions\";\r\nimport { LayoutRoute } from \"../models/LayoutRoute\";\r\nimport Notification from \"../models/Notification\";\r\nimport { User } from \"../models/User\";\r\nimport { environment } from \"../utils/Helpers\";\r\nimport { AccountMenu } from \"./layout/AccountMenu\";\r\nimport { DevelopmentBanner } from \"./layout/DevelopmentBanner\";\r\nimport { NavigationDrawer } from \"./layout/NavigationDrawer\";\r\nimport { NotificationMenu } from \"./layout/NotificationMenu\";\r\nimport { Unauthorized } from \"./layout/Unauthorized\";\r\nimport useLocalStorageState from \"use-local-storage-state\";\r\nimport { useIsAuthenticated, useMsal } from \"@azure/msal-react\";\r\nimport { InteractionStatus } from \"@azure/msal-browser\";\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\nconst getAllRoutesWithPath = (routes: LayoutRoute[]): LayoutRoute[] => {\r\n let result: LayoutRoute[] = [];\r\n for (const route of routes) {\r\n if (route.path) {\r\n result.push(route);\r\n }\r\n if (route.children) {\r\n result = result.concat(getAllRoutesWithPath(route.children));\r\n }\r\n }\r\n return result;\r\n};\r\n\r\ninterface LayoutProps {\r\n routes: LayoutRoute[];\r\n appVersion: string;\r\n colors: LayoutPaletteColorOptions;\r\n children: React.ReactNode;\r\n user: User;\r\n notifications: Notification[] | undefined;\r\n setNotifications: Dispatch<SetStateAction<Notification[] | undefined>>;\r\n}\r\n\r\nexport const Layout: React.FC<LayoutProps> = ({ routes, colors, appVersion, user, notifications, setNotifications, children }) => {\r\n const prefersDarkMode: boolean = useMediaQuery(\"(prefers-color-scheme: dark)\");\r\n const [mode, setMode] = useLocalStorageState<\"light\" | \"dark\" | \"system\">(\"mui-mode\", { defaultValue: \"system\" });\r\n const [leftDrawerOpen, setLeftDrawerOpen] = useState<boolean>(false);\r\n const { i18n } = useTranslation();\r\n const isFetching = !!useIsFetching();\r\n const isMutating = !!useIsMutating();\r\n const location = useLocation();\r\n const navigationRoutes = getAllRoutesWithPath(routes);\r\n const route = navigationRoutes.find(r => matchPath(r.path!, location.pathname))!;\r\n const { instance, inProgress } = useMsal();\r\n const isAuthenticated = useIsAuthenticated();\r\n\r\n useEffect(() => {\r\n if (route.authenticated !== false && !isAuthenticated && inProgress === InteractionStatus.None)\r\n instance.loginRedirect({ scopes: [], redirectUri: \"/\" });\r\n }, [route, isAuthenticated, inProgress]);\r\n\r\n const resolvedMode = mode === \"system\" ? (prefersDarkMode ? \"dark\" : \"light\") : mode;\r\n\r\n const theme: Theme = createTheme({\r\n palette: {\r\n mode: resolvedMode,\r\n primary: { main: (colors.primary as any)?.[resolvedMode] || (colors.primary as any)?.main, },\r\n secondary: { main: (colors.secondary as any)?.[resolvedMode] || (colors.secondary as any)?.main, },\r\n background: resolvedMode === \"light\" && colors.background ? { default: colors.background.default, paper: colors.background.paper, } : {},\r\n },\r\n components: {\r\n MuiCssBaseline: {\r\n styleOverrides: (theme) => ({\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: theme.palette.mode === \"dark\" ? grey[900] : grey[200],\r\n borderRadius: \"5px\",\r\n },\r\n \"&::-webkit-scrollbar-thumb, & *::-webkit-scrollbar-thumb\": {\r\n backgroundColor: theme.palette.mode === \"dark\" ? grey[800] : grey[400],\r\n borderRadius: \"10px\",\r\n },\r\n \"&::-webkit-scrollbar-thumb:hover, & *::-webkit-scrollbar-thumb:hover\": {\r\n backgroundColor: theme.palette.mode === \"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 },\r\n i18n.language === \"cs\" ? datePickersCsCz : datePickersEnUs,\r\n i18n.language === \"cs\" ? dataGridCsCz : dataGridEnUs,\r\n i18n.language === \"cs\" ? csCZ : enUS\r\n );\r\n\r\n const title = route.pageTitle ?? route.title;\r\n\r\n useEffect(() => {\r\n if (title) document.title = title;\r\n }, [title]);\r\n\r\n const toggleNavigationDrawer = () => setLeftDrawerOpen(!leftDrawerOpen);\r\n\r\n const hasNavigationRoutes: boolean = navigationRoutes.filter(route => route.showInMenu && !route.disabled).length > 1;\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={toggleNavigationDrawer} edge=\"start\" sx={{ marginRight: 2, ...((leftDrawerOpen || !hasNavigationRoutes) && { 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 {environment !== \"prd\" && <Chip sx={theme => ({ mr: 1, bgcolor: \"secondary.main\", color: theme.palette.primary.contrastText })} label={environment} />}\r\n\r\n <NotificationMenu notifications={notifications} setNotifications={setNotifications} />\r\n <AccountMenu mode={mode} setMode={setMode} />\r\n </Toolbar>\r\n </AppBar>\r\n\r\n <NavigationDrawer routes={navigationRoutes} appVersion={appVersion} open={leftDrawerOpen} setOpen={setLeftDrawerOpen} hasRoutes={hasNavigationRoutes} />\r\n\r\n <Box component=\"main\" sx={{ flex: 1, overflow: \"auto\" }}>\r\n <DrawerHeader />\r\n {(route.authenticated === false || isAuthenticated) && !route.disabled ? children : <Unauthorized />}\r\n </Box>\r\n </Box>\r\n\r\n <DevelopmentBanner user={user} hasNavigationRoutes={hasNavigationRoutes} />\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 } from \"@mui/icons-material\";\r\nimport { Box, Chip, CssBaseline, IconButton, LinearProgress, AppBar as MuiAppBar, AppBarProps as MuiAppBarProps, Theme, Toolbar, Typography, useMediaQuery } from \"@mui/material\";\r\nimport { grey } from \"@mui/material/colors\";\r\nimport { csCZ, enUS } from \"@mui/material/locale\";\r\nimport { ThemeProvider, createTheme, styled } from \"@mui/material/styles\";\r\nimport { csCZ as dataGridCsCz, enUS as dataGridEnUs } from \"@mui/x-data-grid-premium/locales\";\r\nimport { csCZ as datePickersCsCz, enUS as datePickersEnUs } from \"@mui/x-date-pickers-pro/locales\";\r\nimport { useIsFetching, useIsMutating } from \"@tanstack/react-query\";\r\nimport React, { Dispatch, SetStateAction, useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { matchPath, useLocation } from \"react-router-dom\";\r\nimport { LayoutPaletteColorOptions } from \"../models/LayoutPaletteColorOptions\";\r\nimport { LayoutRoute } from \"../models/LayoutRoute\";\r\nimport Notification from \"../models/Notification\";\r\nimport { User } from \"../models/User\";\r\nimport { environment } from \"../utils/Helpers\";\r\nimport { AccountMenu } from \"./layout/AccountMenu\";\r\nimport { DevelopmentBanner } from \"./layout/DevelopmentBanner\";\r\nimport { NavigationDrawer } from \"./layout/NavigationDrawer\";\r\nimport { NotificationMenu } from \"./layout/NotificationMenu\";\r\nimport { Unauthorized } from \"./layout/Unauthorized\";\r\nimport useLocalStorageState from \"use-local-storage-state\";\r\nimport { useIsAuthenticated, useMsal } from \"@azure/msal-react\";\r\nimport { InteractionStatus } from \"@azure/msal-browser\";\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\nconst getAllRoutesWithPath = (routes: LayoutRoute[]): LayoutRoute[] => {\r\n let result: LayoutRoute[] = [];\r\n for (const route of routes) {\r\n if (route.path) {\r\n result.push(route);\r\n }\r\n if (route.children) {\r\n result = result.concat(getAllRoutesWithPath(route.children));\r\n }\r\n }\r\n return result;\r\n};\r\n\r\ninterface LayoutProps {\r\n routes: LayoutRoute[];\r\n appVersion: string;\r\n colors: LayoutPaletteColorOptions;\r\n children: React.ReactNode;\r\n user: User;\r\n notifications: Notification[] | undefined;\r\n setNotifications: Dispatch<SetStateAction<Notification[] | undefined>>;\r\n}\r\n\r\nexport const Layout: React.FC<LayoutProps> = ({ routes, colors, appVersion, user, notifications, setNotifications, children }) => {\r\n const prefersDarkMode: boolean = useMediaQuery(\"(prefers-color-scheme: dark)\");\r\n const [mode, setMode] = useLocalStorageState<\"light\" | \"dark\" | \"system\">(\"mui-mode\", { defaultValue: \"system\" });\r\n const [leftDrawerOpen, setLeftDrawerOpen] = useState<boolean>(false);\r\n const { i18n } = useTranslation();\r\n const isFetching = !!useIsFetching();\r\n const isMutating = !!useIsMutating();\r\n const location = useLocation();\r\n const navigationRoutes = getAllRoutesWithPath(routes);\r\n const route = navigationRoutes.find(r => matchPath(r.path!, location.pathname))!;\r\n const { instance, inProgress } = useMsal();\r\n const isAuthenticated = useIsAuthenticated();\r\n\r\n useEffect(() => {\r\n if (route.authenticated !== false && !isAuthenticated && inProgress === InteractionStatus.None)\r\n instance.loginRedirect({ scopes: [], redirectUri: \"/\" });\r\n }, [route, isAuthenticated, inProgress]);\r\n\r\n const resolvedMode = mode === \"system\" ? (prefersDarkMode ? \"dark\" : \"light\") : mode;\r\n\r\n const theme: Theme = createTheme({\r\n palette: {\r\n mode: resolvedMode,\r\n primary: { main: (colors.primary as any)?.[resolvedMode] || (colors.primary as any)?.main, },\r\n secondary: { main: (colors.secondary as any)?.[resolvedMode] || (colors.secondary as any)?.main, },\r\n background: resolvedMode === \"light\" && colors.background ? { default: colors.background.default, paper: colors.background.paper, } : {},\r\n },\r\n components: {\r\n MuiCssBaseline: {\r\n styleOverrides: (theme) => ({\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: theme.palette.mode === \"dark\" ? grey[900] : grey[200],\r\n borderRadius: \"5px\",\r\n },\r\n \"&::-webkit-scrollbar-thumb, & *::-webkit-scrollbar-thumb\": {\r\n backgroundColor: theme.palette.mode === \"dark\" ? grey[800] : grey[400],\r\n borderRadius: \"10px\",\r\n },\r\n \"&::-webkit-scrollbar-thumb:hover, & *::-webkit-scrollbar-thumb:hover\": {\r\n backgroundColor: theme.palette.mode === \"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 },\r\n i18n.language === \"cs\" ? datePickersCsCz : datePickersEnUs,\r\n i18n.language === \"cs\" ? dataGridCsCz : dataGridEnUs,\r\n i18n.language === \"cs\" ? csCZ : enUS\r\n );\r\n\r\n const title = route.pageTitle ?? route.title;\r\n\r\n useEffect(() => {\r\n if (title) document.title = title;\r\n }, [title]);\r\n\r\n const toggleNavigationDrawer = () => setLeftDrawerOpen(!leftDrawerOpen);\r\n\r\n const hasNavigationRoutes: boolean = navigationRoutes.filter(route => route.showInMenu && !route.disabled).length > 1;\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={toggleNavigationDrawer} edge=\"start\" sx={{ marginRight: 2, ...((leftDrawerOpen || !hasNavigationRoutes) && { 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 {environment !== \"prd\" && <Chip sx={theme => ({ mr: 1, bgcolor: \"secondary.main\", color: theme.palette.primary.contrastText })} label={environment} />}\r\n\r\n <NotificationMenu notifications={notifications} setNotifications={setNotifications} />\r\n <AccountMenu mode={mode} setMode={setMode} user={user}/>\r\n </Toolbar>\r\n </AppBar>\r\n\r\n <NavigationDrawer routes={navigationRoutes} appVersion={appVersion} open={leftDrawerOpen} setOpen={setLeftDrawerOpen} hasRoutes={hasNavigationRoutes} />\r\n\r\n <Box component=\"main\" sx={{ flex: 1, overflow: \"auto\" }}>\r\n <DrawerHeader />\r\n {(route.authenticated === false || isAuthenticated) && !route.disabled ? children : <Unauthorized />}\r\n </Box>\r\n </Box>\r\n\r\n <DevelopmentBanner user={user} hasNavigationRoutes={hasNavigationRoutes} />\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,7 +1,9 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
+
import { User } from "../../models/User";
|
|
2
3
|
interface AccountMenuProps {
|
|
3
4
|
mode: "light" | "dark" | "system";
|
|
4
5
|
setMode: (mode: "light" | "dark" | "system") => void;
|
|
6
|
+
user: User;
|
|
5
7
|
}
|
|
6
8
|
export declare const AccountMenu: React.FC<AccountMenuProps>;
|
|
7
9
|
export {};
|
|
@@ -2,21 +2,19 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { useIsAuthenticated, useMsal } from "@azure/msal-react";
|
|
3
3
|
import { AccountCircle, ArrowBack, Brightness4, ChevronRight, DarkMode, LightMode, Login, Logout, SettingsBrightness, Translate } from "@mui/icons-material";
|
|
4
4
|
import { Avatar, Box, IconButton, List, ListItem, ListItemButton, ListItemIcon, ListItemText, ListSubheader, Menu } from "@mui/material";
|
|
5
|
-
import { useQuery
|
|
5
|
+
import { useQuery } from "@tanstack/react-query";
|
|
6
6
|
import { Fragment, useState } from "react";
|
|
7
7
|
import { useTranslation } from "react-i18next";
|
|
8
8
|
import { graphQueries } from "../../hooks/UseUser";
|
|
9
9
|
const drawerWidth = 240;
|
|
10
|
-
export const AccountMenu = ({ mode, setMode }) => {
|
|
10
|
+
export const AccountMenu = ({ mode, setMode, user }) => {
|
|
11
11
|
const [anchorEl, setAnchorEl] = useState(null);
|
|
12
12
|
const [tab, setTab] = useState("settings");
|
|
13
13
|
const open = Boolean(anchorEl);
|
|
14
14
|
const { t, i18n } = useTranslation();
|
|
15
15
|
const { instance } = useMsal();
|
|
16
16
|
const isAuthenticated = useIsAuthenticated();
|
|
17
|
-
const queryClient = useQueryClient();
|
|
18
17
|
const { data: userPhoto } = useQuery({ ...graphQueries.sessionUserPhoto(), enabled: isAuthenticated });
|
|
19
|
-
const { data: userDetail } = useQuery({ ...graphQueries.sessionUserDetail(), enabled: open && isAuthenticated });
|
|
20
18
|
const changeLanguage = (newLanguage) => () => {
|
|
21
19
|
i18n.changeLanguage(newLanguage)
|
|
22
20
|
.finally(() => closeMenu());
|
|
@@ -35,11 +33,11 @@ export const AccountMenu = ({ mode, setMode }) => {
|
|
|
35
33
|
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, {})] })] }));
|
|
36
34
|
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") })] })] }));
|
|
37
35
|
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" }) })] }));
|
|
38
|
-
return (_jsxs(Fragment, { children: [_jsx(IconButton, { size: "small", edge: "end", onClick: openMenu,
|
|
36
|
+
return (_jsxs(Fragment, { children: [_jsx(IconButton, { size: "small", edge: "end", onClick: openMenu, children: userPhoto ?
|
|
39
37
|
_jsx(Avatar, { src: userPhoto, sx: { width: { xs: 32, sm: 40 }, height: { xs: 32, sm: 40 } } })
|
|
40
38
|
:
|
|
41
|
-
_jsx(AccountCircle, { sx: { width: { xs: 32, sm: 40 }, height: { xs: 32, sm: 40 } } }) }), _jsx(Menu, { anchorEl: anchorEl, open: open, onClose: closeMenu, children: _jsxs(Box, { sx: { width: drawerWidth }, children: [_jsx(List, { disablePadding: true, children:
|
|
42
|
-
_jsxs(Fragment, { children: [_jsx(ListItem, { children: _jsx(ListItemText, { primary:
|
|
39
|
+
_jsx(AccountCircle, { sx: { width: { xs: 32, sm: 40 }, height: { xs: 32, sm: 40 } } }) }), _jsx(Menu, { anchorEl: anchorEl, open: open, onClose: closeMenu, children: _jsxs(Box, { sx: { width: drawerWidth }, children: [_jsx(List, { disablePadding: true, children: isAuthenticated ?
|
|
40
|
+
_jsxs(Fragment, { children: [_jsx(ListItem, { children: _jsx(ListItemText, { primary: user.name, secondary: _jsxs("span", { children: [user.employeeId && _jsx("span", { children: user.employeeId }), user.employeeId && _jsx("br", {}), user.department && _jsx("span", { children: user.department })] }) }) }), _jsxs(ListItemButton, { onClick: logout, children: [_jsx(ListItemIcon, { children: _jsx(Logout, { color: "error" }) }), _jsx(ListItemText, { primary: t("Layout.Logout") })] })] })
|
|
43
41
|
:
|
|
44
42
|
_jsxs(ListItemButton, { onClick: login, children: [_jsx(ListItemIcon, { children: _jsx(Login, { color: "success" }) }), _jsx(ListItemText, { primary: t("Layout.LogIn") })] }) }), tab === "settings" && settings, tab === "theme" && theme, tab === "language" && language] }) })] }));
|
|
45
43
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountMenu.js","sourceRoot":"","sources":["../../../../src/components/layout/AccountMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useIsAuthenticated, useMsal } from \"@azure/msal-react\";\r\nimport { 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 } from \"@mui/material\";\r\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\";\r\nimport React, { Fragment, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { graphQueries } from \"../../hooks/UseUser\";\r\n\r\nconst drawerWidth = 240;\r\ntype TabType = \"settings\" | \"theme\" | \"language\";\r\n\r\ninterface AccountMenuProps {\r\n mode: \"light\" | \"dark\" | \"system\";\r\n setMode: (mode: \"light\" | \"dark\" | \"system\") => void;\r\n}\r\n\r\nexport const AccountMenu: React.FC<AccountMenuProps> = ({ mode, setMode }) => {\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 { t, i18n } = useTranslation();\r\n const { instance } = useMsal();\r\n const isAuthenticated = useIsAuthenticated();\r\n const queryClient = useQueryClient();\r\n\r\n const { data: userPhoto } = useQuery({ ...graphQueries.sessionUserPhoto(), enabled: isAuthenticated });\r\n const { data: userDetail } = useQuery({ ...graphQueries.sessionUserDetail(), enabled: open && isAuthenticated });\r\n\r\n const changeLanguage = (newLanguage: \"en\" | \"cs\") => () => {\r\n i18n.changeLanguage(newLanguage)\r\n .finally(() => closeMenu());\r\n };\r\n\r\n const changeMode = (newMode: \"light\" | \"dark\" | \"system\") => () => {\r\n setMode(newMode);\r\n closeMenu();\r\n };\r\n\r\n const openMenu = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => setAnchorEl(e.currentTarget);\r\n const closeMenu = () => { setAnchorEl(null); setTimeout(() => setTab(\"settings\"), 300); };\r\n\r\n const login = () => instance.loginRedirect();\r\n const logout = () => instance.logoutRedirect({\r\n postLogoutRedirectUri: \"/\",\r\n });\r\n\r\n const changeTab = (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\r\n size=\"small\"\r\n edge=\"end\"\r\n onClick={openMenu}\r\n onMouseEnter={() => queryClient.prefetchQuery(graphQueries.sessionUserDetail())}\r\n >\r\n {userPhoto ?\r\n <Avatar src={userPhoto} sx={{ width: { xs: 32, sm: 40 }, height: { xs: 32, sm: 40 } }} />\r\n :\r\n <AccountCircle sx={{ width: { xs: 32, sm: 40 }, height: { xs: 32, sm: 40 } }} />\r\n }\r\n </IconButton>\r\n\r\n <Menu anchorEl={anchorEl} open={open} onClose={closeMenu}>\r\n <Box sx={{ width: drawerWidth }}>\r\n <List disablePadding>\r\n {userDetail ?\r\n <Fragment>\r\n <ListItem>\r\n <ListItemText primary={userDetail.displayName.split(\"/\")[0]} secondary={userDetail.jobTitle} />\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 { useIsAuthenticated, useMsal } from \"@azure/msal-react\";\r\nimport { 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 } from \"@mui/material\";\r\nimport { useQuery } from \"@tanstack/react-query\";\r\nimport React, { Fragment, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { graphQueries } from \"../../hooks/UseUser\";\r\nimport { User } from \"../../models/User\";\r\n\r\nconst drawerWidth = 240;\r\ntype TabType = \"settings\" | \"theme\" | \"language\";\r\n\r\ninterface AccountMenuProps {\r\n mode: \"light\" | \"dark\" | \"system\";\r\n setMode: (mode: \"light\" | \"dark\" | \"system\") => void;\r\n user: User;\r\n}\r\n\r\nexport const AccountMenu: React.FC<AccountMenuProps> = ({ mode, setMode, user }) => {\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 { t, i18n } = useTranslation();\r\n const { instance } = useMsal();\r\n const isAuthenticated = useIsAuthenticated();\r\n\r\n const { data: userPhoto } = useQuery({ ...graphQueries.sessionUserPhoto(), enabled: isAuthenticated });\r\n\r\n const changeLanguage = (newLanguage: \"en\" | \"cs\") => () => {\r\n i18n.changeLanguage(newLanguage)\r\n .finally(() => closeMenu());\r\n };\r\n\r\n const changeMode = (newMode: \"light\" | \"dark\" | \"system\") => () => {\r\n setMode(newMode);\r\n closeMenu();\r\n };\r\n\r\n const openMenu = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => setAnchorEl(e.currentTarget);\r\n const closeMenu = () => { setAnchorEl(null); setTimeout(() => setTab(\"settings\"), 300); };\r\n\r\n const login = () => instance.loginRedirect();\r\n const logout = () => instance.logoutRedirect({\r\n postLogoutRedirectUri: \"/\",\r\n });\r\n\r\n const changeTab = (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 size=\"small\" edge=\"end\" onClick={openMenu}>\r\n {userPhoto ?\r\n <Avatar src={userPhoto} sx={{ width: { xs: 32, sm: 40 }, height: { xs: 32, sm: 40 } }} />\r\n :\r\n <AccountCircle sx={{ width: { xs: 32, sm: 40 }, height: { xs: 32, sm: 40 } }} />\r\n }\r\n </IconButton>\r\n\r\n <Menu anchorEl={anchorEl} open={open} onClose={closeMenu}>\r\n <Box sx={{ width: drawerWidth }}>\r\n <List disablePadding>\r\n {isAuthenticated ?\r\n <Fragment>\r\n <ListItem>\r\n <ListItemText primary={user.name} secondary={\r\n <span>\r\n {user.employeeId && <span>{user.employeeId}</span>}\r\n {user.employeeId && <br />}\r\n {user.department && <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};"]}
|
|
@@ -23,6 +23,8 @@ export const UserProvider = ({ children, setUser }) => {
|
|
|
23
23
|
name: idTokenPayload.name.split("/")[0],
|
|
24
24
|
email: idTokenPayload.mail,
|
|
25
25
|
groups: (_a = idTokenPayload.groups) !== null && _a !== void 0 ? _a : [],
|
|
26
|
+
department: idTokenPayload.department || "",
|
|
27
|
+
employeeId: idTokenPayload.employeeId || "",
|
|
26
28
|
});
|
|
27
29
|
}
|
|
28
30
|
}, [account === null || account === void 0 ? void 0 : account.idToken]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserContext.js","sourceRoot":"","sources":["../../../src/contexts/UserContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAA4B,SAAS,EAAE,MAAM,OAAO,CAAC;AAE3E,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,MAAM,CAAC,MAAM,uBAAuB,GAAG,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"UserContext.js","sourceRoot":"","sources":["../../../src/contexts/UserContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAA4B,SAAS,EAAE,MAAM,OAAO,CAAC;AAE3E,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,MAAM,CAAC,MAAM,uBAAuB,GAAG,iBAAiB,CAAC;AAezD,MAAM,UAAU,SAAS,CAAI,KAAa;IACtC,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACnF,MAAM,OAAO,GAAG,kBAAkB,CAC9B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;SACjB,KAAK,CAAC,EAAE,CAAC;SACT,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SACjE,IAAI,CAAC,EAAE,CAAC,CAChB,CAAC;IACF,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAM,CAAC;AACpC,CAAC;AAOD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAqB,EAAE,EAAE;IACrE,MAAM,OAAO,GAAG,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAEvC,SAAS,CAAC,GAAG,EAAE;;QACX,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,EAAE,CAAC;YACnB,MAAM,cAAc,GAAG,SAAS,CAA0B,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3E,OAAO,CAAC;gBACJ,EAAE,EAAE,cAAc,CAAC,GAAG;gBACtB,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACvC,KAAK,EAAE,cAAc,CAAC,IAAI;gBAC1B,MAAM,EAAE,MAAA,cAAc,CAAC,MAAM,mCAAI,EAAE;gBACnC,UAAU,EAAE,cAAc,CAAC,UAAU,IAAI,EAAE;gBAC3C,UAAU,EAAE,cAAc,CAAC,UAAU,IAAI,EAAE;aAC9C,CAAC,CAAC;QACP,CAAC;IACL,CAAC,EAAE,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,CAAC,CAAC,CAAC;IAEvB,OAAO,CACH,KAAC,WAAW,CAAC,QAAQ,IAAC,KAAK,EAAE,IAAI,YAC5B,QAAQ,GACU,CAC1B,CAAC;AACN,CAAC,CAAC;AAIF,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC","sourcesContent":["import { createContext, Dispatch, SetStateAction, useEffect } from \"react\";\r\nimport { User } from \"../models/User\";\r\nimport { pca } from \"../utils/Auth\";\r\n\r\nexport const USER_DATA_FETCHED_EVENT = \"userDataFetched\";\r\n\r\nexport interface UserDataFetchedEvent {\r\n user: Partial<User>;\r\n}\r\n\r\nexport interface MicrosoftIdTokenPayload {\r\n sub: string;\r\n name: string;\r\n mail: string;\r\n department?: string;\r\n employeeId?: string;\r\n groups?: Array<string>;\r\n}\r\n\r\nexport function decodeJwt<T>(token: string): T {\r\n const base64Payload = token.split(\".\")[1];\r\n const base64 = base64Payload.replace(/-/g, \"+\").replace(/_/g, \"/\");\r\n const padding = base64.length % 4 === 0 ? \"\" : \"=\".repeat(4 - (base64.length % 4));\r\n const payload = decodeURIComponent(\r\n atob(base64 + padding)\r\n .split(\"\")\r\n .map((c) => \"%\" + (\"00\" + c.charCodeAt(0).toString(16)).slice(-2))\r\n .join(\"\")\r\n );\r\n return JSON.parse(payload) as T;\r\n}\r\n\r\nexport interface UserProviderProps {\r\n setUser: Dispatch<SetStateAction<User>>;\r\n children?: React.ReactNode;\r\n}\r\n\r\nexport const UserProvider = ({ children, setUser }: UserProviderProps) => {\r\n const account = pca.getActiveAccount();\r\n\r\n useEffect(() => {\r\n if (account?.idToken) {\r\n const idTokenPayload = decodeJwt<MicrosoftIdTokenPayload>(account.idToken);\r\n setUser({\r\n id: idTokenPayload.sub,\r\n name: idTokenPayload.name.split(\"/\")[0],\r\n email: idTokenPayload.mail,\r\n groups: idTokenPayload.groups ?? [],\r\n department: idTokenPayload.department || \"\",\r\n employeeId: idTokenPayload.employeeId || \"\",\r\n });\r\n }\r\n }, [account?.idToken]);\r\n\r\n return (\r\n <UserContext.Provider value={null}>\r\n {children}\r\n </UserContext.Provider>\r\n );\r\n};\r\n\r\nexport interface UserContextValue { }\r\n\r\nexport const UserContext = createContext(null);"]}
|
|
@@ -1,24 +1,4 @@
|
|
|
1
1
|
export declare const graphQueries: {
|
|
2
|
-
sessionUserDetail: () => import("@tanstack/react-query").OmitKeyof<import("@tanstack/react-query").UseQueryOptions<{
|
|
3
|
-
displayName: string;
|
|
4
|
-
jobTitle: string;
|
|
5
|
-
}, Error, {
|
|
6
|
-
displayName: string;
|
|
7
|
-
jobTitle: string;
|
|
8
|
-
}, string[]>, "queryFn"> & {
|
|
9
|
-
queryFn?: import("@tanstack/react-query").QueryFunction<{
|
|
10
|
-
displayName: string;
|
|
11
|
-
jobTitle: string;
|
|
12
|
-
}, string[], never> | undefined;
|
|
13
|
-
} & {
|
|
14
|
-
queryKey: string[] & {
|
|
15
|
-
[dataTagSymbol]: {
|
|
16
|
-
displayName: string;
|
|
17
|
-
jobTitle: string;
|
|
18
|
-
};
|
|
19
|
-
[dataTagErrorSymbol]: Error;
|
|
20
|
-
};
|
|
21
|
-
};
|
|
22
2
|
sessionUserPhoto: () => import("@tanstack/react-query").OmitKeyof<import("@tanstack/react-query").UseQueryOptions<Blob, Error, string, string[]>, "queryFn"> & {
|
|
23
3
|
queryFn?: import("@tanstack/react-query").QueryFunction<Blob, string[], never> | undefined;
|
|
24
4
|
} & {
|
|
@@ -10,15 +10,6 @@ api.interceptors.request.use(async (config) => {
|
|
|
10
10
|
return config;
|
|
11
11
|
});
|
|
12
12
|
export const graphQueries = {
|
|
13
|
-
sessionUserDetail: () => queryOptions({
|
|
14
|
-
queryKey: [QUERY_KEY, "me"],
|
|
15
|
-
queryFn: async () => await api.request({
|
|
16
|
-
method: "GET",
|
|
17
|
-
url: "/me?$select=displayName,jobTitle",
|
|
18
|
-
}).then(response => response.data),
|
|
19
|
-
staleTime: Infinity,
|
|
20
|
-
gcTime: Infinity,
|
|
21
|
-
}),
|
|
22
13
|
sessionUserPhoto: () => queryOptions({
|
|
23
14
|
queryKey: [QUERY_KEY, "me", "photo"],
|
|
24
15
|
queryFn: async () => await api.request({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UseUser.js","sourceRoot":"","sources":["../../../src/hooks/UseUser.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"UseUser.js","sourceRoot":"","sources":["../../../src/hooks/UseUser.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,SAAS,GAAG,MAAM,CAAC;AAEzB,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;IACrB,OAAO,EAAE,mCAAmC;CAC/C,CAAC,CAAC;AAEH,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;IAC1C,MAAM,CAAC,OAAO,CAAC,aAAa,GAAG,UAAU,MAAM,cAAc,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;IAC/E,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG;IACxB,gBAAgB,EAAE,GAAG,EAAE,CACnB,YAAY,CAAC;QACT,QAAQ,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC;QACpC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,OAAO,CAAO;YACzC,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,kBAAkB;YACvB,YAAY,EAAE,MAAM;SACvB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;QAClC,SAAS,EAAE,QAAQ;QACnB,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;KAC5C,CAAC;CACT,CAAC","sourcesContent":["import { queryOptions } from \"@tanstack/react-query\";\r\nimport axios from \"axios\";\r\nimport { getAccessToken } from \"../utils/Auth\";\r\n\r\nconst QUERY_KEY = \"user\";\r\n\r\nconst api = axios.create({\r\n baseURL: \"https://graph.microsoft.com/v1.0/\",\r\n});\r\n\r\napi.interceptors.request.use(async (config) => {\r\n config.headers.Authorization = `Bearer ${await getAccessToken([\"User.Read\"])}`;\r\n return config;\r\n});\r\n\r\nexport const graphQueries = {\r\n sessionUserPhoto: () =>\r\n queryOptions({\r\n queryKey: [QUERY_KEY, \"me\", \"photo\"],\r\n queryFn: async () => await api.request<Blob>({\r\n method: \"GET\",\r\n url: \"/me/photo/$value\",\r\n responseType: \"blob\",\r\n }).then(response => response.data),\r\n staleTime: Infinity,\r\n gcTime: Infinity,\r\n select: data => URL.createObjectURL(data),\r\n }),\r\n};"]}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -16,3 +16,5 @@ export * from './utils/Helpers';
|
|
|
16
16
|
export * from './utils/Fetches';
|
|
17
17
|
export { getAccessToken, hasRole } from './utils/Auth';
|
|
18
18
|
export { default as useLocalStorageState } from 'use-local-storage-state';
|
|
19
|
+
export { pca } from "./utils/Auth";
|
|
20
|
+
export { AuthenticationResult, EventMessage, EventType } from "@azure/msal-browser";
|
package/dist/src/index.js
CHANGED
|
@@ -10,4 +10,6 @@ export * from './utils/Helpers';
|
|
|
10
10
|
export * from './utils/Fetches';
|
|
11
11
|
export { getAccessToken, hasRole } from './utils/Auth';
|
|
12
12
|
export { default as useLocalStorageState } from 'use-local-storage-state';
|
|
13
|
+
export { pca } from "./utils/Auth";
|
|
14
|
+
export { EventType } from "@azure/msal-browser";
|
|
13
15
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAEhE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,WAAW,EAAoB,MAAM,mCAAmC,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAElF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAmB,MAAM,0BAA0B,CAAC;AAErG,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AASnG,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvD,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAC","sourcesContent":["export { TypographyWithIcon } from './components/layout/TypographyWithIcon';\r\nexport { LayoutDialog } from './components/layout/LayoutDialog';\r\n\r\nexport { TableContainer } from './components/dataGrid/TableContainer';\r\nexport { GridToolbar, GridToolbarProps } from './components/dataGrid/GridToolbar';\r\nexport { ChipInputCell } from './components/dataGrid/ChipInputCell';\r\nexport { EditableColumnHeader } from './components/dataGrid/EditableColumnHeader';\r\n\r\nexport { LayoutContext, LayoutProvider, useLayout, GetRoutesParams } from './contexts/LayoutContext';\r\n\r\nexport { useFieldContext, useFormContext, useLayoutForm, withLayoutForm } from './hooks/FormHooks';\r\n\r\nexport { User } from './models/User';\r\nexport { Error } from './models/Error';\r\nexport { PeoplesoftEmployee } from './models/PeoplesoftEmployee';\r\nexport { PeoplesoftDepartment } from './models/PeoplesoftDepartment';\r\nexport { LayoutPaletteColorOptions } from './models/LayoutPaletteColorOptions';\r\nexport { LayoutRoute } from './models/LayoutRoute';\r\n\r\nexport * from './utils/Helpers';\r\nexport * from './utils/Fetches';\r\nexport { getAccessToken, hasRole } from './utils/Auth';\r\n\r\nexport { default as useLocalStorageState } from 'use-local-storage-state';"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAEhE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,WAAW,EAAoB,MAAM,mCAAmC,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAElF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAmB,MAAM,0BAA0B,CAAC;AAErG,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AASnG,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvD,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE1E,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAsC,SAAS,EAAE,MAAM,qBAAqB,CAAC","sourcesContent":["export { TypographyWithIcon } from './components/layout/TypographyWithIcon';\r\nexport { LayoutDialog } from './components/layout/LayoutDialog';\r\n\r\nexport { TableContainer } from './components/dataGrid/TableContainer';\r\nexport { GridToolbar, GridToolbarProps } from './components/dataGrid/GridToolbar';\r\nexport { ChipInputCell } from './components/dataGrid/ChipInputCell';\r\nexport { EditableColumnHeader } from './components/dataGrid/EditableColumnHeader';\r\n\r\nexport { LayoutContext, LayoutProvider, useLayout, GetRoutesParams } from './contexts/LayoutContext';\r\n\r\nexport { useFieldContext, useFormContext, useLayoutForm, withLayoutForm } from './hooks/FormHooks';\r\n\r\nexport { User } from './models/User';\r\nexport { Error } from './models/Error';\r\nexport { PeoplesoftEmployee } from './models/PeoplesoftEmployee';\r\nexport { PeoplesoftDepartment } from './models/PeoplesoftDepartment';\r\nexport { LayoutPaletteColorOptions } from './models/LayoutPaletteColorOptions';\r\nexport { LayoutRoute } from './models/LayoutRoute';\r\n\r\nexport * from './utils/Helpers';\r\nexport * from './utils/Fetches';\r\nexport { getAccessToken, hasRole } from './utils/Auth';\r\n\r\nexport { default as useLocalStorageState } from 'use-local-storage-state';\r\n\r\nexport { pca } from \"./utils/Auth\";\r\nexport { AuthenticationResult, EventMessage, EventType } from \"@azure/msal-browser\";"]}
|
|
@@ -3,27 +3,22 @@ export declare const UserSchema: z.ZodObject<{
|
|
|
3
3
|
id: z.ZodString;
|
|
4
4
|
name: z.ZodString;
|
|
5
5
|
email: z.ZodString;
|
|
6
|
+
department: z.ZodString;
|
|
7
|
+
employeeId: z.ZodString;
|
|
6
8
|
groups: z.ZodArray<z.ZodString, "many">;
|
|
7
9
|
}, "strip", z.ZodTypeAny, {
|
|
8
10
|
id: string;
|
|
9
11
|
email: string;
|
|
10
12
|
name: string;
|
|
13
|
+
department: string;
|
|
14
|
+
employeeId: string;
|
|
11
15
|
groups: string[];
|
|
12
16
|
}, {
|
|
13
17
|
id: string;
|
|
14
18
|
email: string;
|
|
15
19
|
name: string;
|
|
20
|
+
department: string;
|
|
21
|
+
employeeId: string;
|
|
16
22
|
groups: string[];
|
|
17
23
|
}>;
|
|
18
24
|
export type User = z.infer<typeof UserSchema>;
|
|
19
|
-
export declare const GraphUserSchema: z.ZodObject<{
|
|
20
|
-
displayName: z.ZodString;
|
|
21
|
-
jobTitle: z.ZodString;
|
|
22
|
-
}, "strip", z.ZodTypeAny, {
|
|
23
|
-
displayName: string;
|
|
24
|
-
jobTitle: string;
|
|
25
|
-
}, {
|
|
26
|
-
displayName: string;
|
|
27
|
-
jobTitle: string;
|
|
28
|
-
}>;
|
|
29
|
-
export type GraphUser = z.infer<typeof GraphUserSchema>;
|
package/dist/src/models/User.js
CHANGED
|
@@ -3,10 +3,8 @@ export const UserSchema = z.object({
|
|
|
3
3
|
id: z.string(),
|
|
4
4
|
name: z.string(),
|
|
5
5
|
email: z.string().email(),
|
|
6
|
+
department: z.string(),
|
|
7
|
+
employeeId: z.string(),
|
|
6
8
|
groups: z.array(z.string()),
|
|
7
9
|
});
|
|
8
|
-
export const GraphUserSchema = z.object({
|
|
9
|
-
displayName: z.string(),
|
|
10
|
-
jobTitle: z.string(),
|
|
11
|
-
});
|
|
12
10
|
//# sourceMappingURL=User.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"User.js","sourceRoot":"","sources":["../../../src/models/User.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE;IACzB,
|
|
1
|
+
{"version":3,"file":"User.js","sourceRoot":"","sources":["../../../src/models/User.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE;IACzB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;CAC9B,CAAC,CAAC","sourcesContent":["import * as z from \"zod\";\r\n\r\nexport const UserSchema = z.object({\r\n id: z.string(),\r\n name: z.string(),\r\n email: z.string().email(),\r\n department: z.string(),\r\n employeeId: z.string(),\r\n groups: z.array(z.string()),\r\n});\r\n\r\nexport type User = z.infer<typeof UserSchema>;"]}
|
package/dist/src/utils/Auth.js
CHANGED
|
@@ -3,6 +3,8 @@ const msalConfig = {
|
|
|
3
3
|
auth: {
|
|
4
4
|
clientId: process.env.REACT_APP_MICROSOFT_CLIENT_ID,
|
|
5
5
|
authority: `https://login.microsoftonline.com/${process.env.REACT_APP_MICROSOFT_TENANT_ID}`,
|
|
6
|
+
redirectUri: window.location.origin + "/",
|
|
7
|
+
navigateToLoginRequestUrl: false,
|
|
6
8
|
},
|
|
7
9
|
};
|
|
8
10
|
export const pca = new PublicClientApplication(msalConfig);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Auth.js","sourceRoot":"","sources":["../../../src/utils/Auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAIhF,MAAM,UAAU,GAAkB;IAC9B,IAAI,EAAE;QACF,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,6BAA8B;QACpD,SAAS,EAAE,qCAAqC,OAAO,CAAC,GAAG,CAAC,6BAA8B,EAAE;
|
|
1
|
+
{"version":3,"file":"Auth.js","sourceRoot":"","sources":["../../../src/utils/Auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAIhF,MAAM,UAAU,GAAkB;IAC9B,IAAI,EAAE;QACF,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,6BAA8B;QACpD,SAAS,EAAE,qCAAqC,OAAO,CAAC,GAAG,CAAC,6BAA8B,EAAE;QAC5F,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;QACzC,yBAAyB,EAAE,KAAK;KACnC;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,uBAAuB,CAAC,UAAU,CAAC,CAAC;AAE3D,MAAM,OAAO,sBAAuB,SAAQ,gBAAgB;IAGxD,YAAY,QAA0B;QAClC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,GAAW,EAAE,OAA0B;QAC1D,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC7D,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ;AAED,MAAM,UAAU,GAAG,GAAG,EAAE;IACpB,MAAM,OAAO,GAAG,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACvC,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACxE,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,MAAgB,EAAmB,EAAE;IACtE,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,IAAI,CAAC;QACD,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,GAAG,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1E,OAAO,WAAW,CAAC;IACvB,CAAC;IAAC,WAAM,CAAC;QACL,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,GAAG,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QACzE,OAAO,WAAW,CAAC;IACvB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAU,EAAE,KAAe,EAAW,EAAE;IAC5D,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1D,CAAC,CAAC","sourcesContent":["import type { Configuration, NavigationOptions } from \"@azure/msal-browser\";\r\nimport { NavigationClient, PublicClientApplication } from \"@azure/msal-browser\";\r\nimport { NavigateFunction } from \"react-router-dom\";\r\nimport { User } from \"../models/User\";\r\n\r\nconst msalConfig: Configuration = {\r\n auth: {\r\n clientId: process.env.REACT_APP_MICROSOFT_CLIENT_ID!,\r\n authority: `https://login.microsoftonline.com/${process.env.REACT_APP_MICROSOFT_TENANT_ID!}`,\r\n redirectUri: window.location.origin + \"/\",\r\n navigateToLoginRequestUrl: false,\r\n },\r\n};\r\n\r\nexport const pca = new PublicClientApplication(msalConfig);\r\n\r\nexport class CustomNavigationClient extends NavigationClient {\r\n private navigate: NavigateFunction;\r\n\r\n constructor(navigate: NavigateFunction) {\r\n super();\r\n this.navigate = navigate;\r\n }\r\n\r\n async navigateInternal(url: string, options: NavigationOptions) {\r\n const relativePath = url.replace(window.location.origin, \"\");\r\n if (options.noHistory) {\r\n this.navigate(relativePath, { replace: true });\r\n } else {\r\n this.navigate(relativePath);\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n\r\nconst getAccount = () => {\r\n const account = pca.getActiveAccount();\r\n if (!account) throw new Error(\"No active account. User not signed in.\");\r\n return account;\r\n};\r\n\r\nexport const getAccessToken = async (scopes: string[]): Promise<string> => {\r\n const account = getAccount();\r\n\r\n try {\r\n const { accessToken } = await pca.acquireTokenSilent({ scopes, account });\r\n return accessToken;\r\n } catch {\r\n const { accessToken } = await pca.acquireTokenPopup({ scopes, account });\r\n return accessToken;\r\n }\r\n};\r\n\r\nexport const hasRole = (user: User, roles: string[]): boolean => {\r\n if (!user.groups || user.groups.length === 0) return false;\r\n return roles.some(role => user.groups.includes(role));\r\n};\r\n"]}
|