wcz-test 6.9.2 → 6.9.4
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/DialogsHooks-Bi8dZoyu.js +338 -0
- package/dist/DialogsHooks-Bi8dZoyu.js.map +1 -0
- package/dist/{RouterListItemButton-Cx7rXEfm.js → RouterListItemButton-CHS7rofI.js} +4 -4
- package/dist/{RouterListItemButton-Cx7rXEfm.js.map → RouterListItemButton-CHS7rofI.js.map} +1 -1
- package/dist/auth-client-B6cIXYDV.js +1417 -0
- package/dist/auth-client-B6cIXYDV.js.map +1 -0
- package/dist/client.d.ts +725 -0
- package/dist/client.js +1 -1
- package/dist/components.d.ts +134 -0
- package/dist/components.js +65 -66
- package/dist/components.js.map +1 -1
- package/dist/error-BhAKg8LX-X0sdNXNa.js +195 -0
- package/dist/error-BhAKg8LX-X0sdNXNa.js.map +1 -0
- package/dist/hooks.d.ts +192 -0
- package/dist/hooks.js +31 -31
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +74 -0
- package/dist/index.js +83 -84
- package/dist/index.js.map +1 -1
- package/dist/models.d.ts +476 -0
- package/dist/queries.d.ts +1956 -0
- package/dist/server-mxQ3s5dx-CC81W42s.js +644 -0
- package/dist/server-mxQ3s5dx-CC81W42s.js.map +1 -0
- package/dist/server.d.ts +41 -0
- package/dist/server.js +8659 -7
- package/dist/server.js.map +1 -1
- package/dist/utils.d.ts +11 -0
- package/dist/vite.d.ts +5 -0
- package/package.json +29 -29
- package/dist/DialogsHooks-BlUsVlfv.js +0 -39
- package/dist/DialogsHooks-BlUsVlfv.js.map +0 -1
- package/dist/auth-client-o9U0_qmf.js +0 -79
- package/dist/auth-client-o9U0_qmf.js.map +0 -1
- package/dist/components/core/AppTitle.d.ts +0 -2
- package/dist/components/core/Fullscreen.d.ts +0 -3
- package/dist/components/core/Layout.d.ts +0 -8
- package/dist/components/core/ToolbarAccount.d.ts +0 -2
- package/dist/components/core/TypographyWithIcon.d.ts +0 -7
- package/dist/components/core/navigation/NavigationList.d.ts +0 -22
- package/dist/components/core/navigation/NavigationListItem.d.ts +0 -16
- package/dist/components/core/navigation/NavigationRail.d.ts +0 -12
- package/dist/components/data-grid/ChipInputCell.d.ts +0 -9
- package/dist/components/data-grid/EditableColumnHeader.d.ts +0 -2
- package/dist/components/file/Dropzone.d.ts +0 -8
- package/dist/components/file/FileViewer.d.ts +0 -20
- package/dist/components/file/fileViewer/FileViewerGrid.d.ts +0 -17
- package/dist/components/file/fileViewer/FileViewerList.d.ts +0 -12
- package/dist/components/file/fileViewer/ImageViewer.d.ts +0 -6
- package/dist/components/file/fileViewer/common/ActionsMenu.d.ts +0 -15
- package/dist/components/form/FormAutocomplete.d.ts +0 -7
- package/dist/components/form/FormCheckbox.d.ts +0 -7
- package/dist/components/form/FormDatePicker.d.ts +0 -8
- package/dist/components/form/FormDateRangePicker.d.ts +0 -8
- package/dist/components/form/FormDateTimePicker.d.ts +0 -8
- package/dist/components/form/FormDateTimeRangePicker.d.ts +0 -8
- package/dist/components/form/FormNumberField.d.ts +0 -9
- package/dist/components/form/FormRadioGroup.d.ts +0 -13
- package/dist/components/form/FormSlider.d.ts +0 -7
- package/dist/components/form/FormSubmitButton.d.ts +0 -4
- package/dist/components/form/FormSwitch.d.ts +0 -7
- package/dist/components/form/FormTextField.d.ts +0 -7
- package/dist/components/form/FormTimePicker.d.ts +0 -8
- package/dist/components/form/FormTimeRangePicker.d.ts +0 -8
- package/dist/components/router/RouterButton.d.ts +0 -6
- package/dist/components/router/RouterError.d.ts +0 -7
- package/dist/components/router/RouterGridActionsCellItem.d.ts +0 -6
- package/dist/components/router/RouterIconButton.d.ts +0 -6
- package/dist/components/router/RouterLink.d.ts +0 -6
- package/dist/components/router/RouterListItemButton.d.ts +0 -6
- package/dist/components/router/RouterNotFound.d.ts +0 -1
- package/dist/components/router/RouterTab.d.ts +0 -6
- package/dist/contexts/DialogsContext.d.ts +0 -6
- package/dist/contexts/FileContext.d.ts +0 -13
- package/dist/env.d.ts +0 -10
- package/dist/exports/client.d.ts +0 -5
- package/dist/exports/components.d.ts +0 -14
- package/dist/exports/hooks.d.ts +0 -4
- package/dist/exports/index.d.ts +0 -3
- package/dist/exports/models.d.ts +0 -25
- package/dist/exports/queries.d.ts +0 -4
- package/dist/exports/server.d.ts +0 -3
- package/dist/exports/utils.d.ts +0 -3
- package/dist/exports/vite.d.ts +0 -1
- package/dist/hooks/DialogsHooks.d.ts +0 -42
- package/dist/hooks/FormHooks.d.ts +0 -52
- package/dist/hooks/ThemeHook.d.ts +0 -4
- package/dist/lib/auth/auth-client.d.ts +0 -688
- package/dist/lib/auth/auth.d.ts +0 -24
- package/dist/lib/db/index.d.ts +0 -4
- package/dist/lib/db/schemas/auth.d.ts +0 -606
- package/dist/lib/utils.d.ts +0 -50
- package/dist/lib/vite-plugin.d.ts +0 -2
- package/dist/models/Navigation.d.ts +0 -18
- package/dist/models/User.d.ts +0 -8
- package/dist/models/approval/Approval.d.ts +0 -177
- package/dist/models/approval/ApprovalEmployee.d.ts +0 -7
- package/dist/models/approval/ApprovalFlow.d.ts +0 -49
- package/dist/models/approval/ApprovalFlowStep.d.ts +0 -29
- package/dist/models/approval/ApprovalRequestType.d.ts +0 -5
- package/dist/models/approval/ApprovalStatus.d.ts +0 -9
- package/dist/models/approval/ApprovalStepResult.d.ts +0 -11
- package/dist/models/approval/StepApprovalOrder.d.ts +0 -6
- package/dist/models/email/Email.d.ts +0 -13
- package/dist/models/email/EmailAttachment.d.ts +0 -6
- package/dist/models/file/FileActions.d.ts +0 -6
- package/dist/models/file/FileMeta.d.ts +0 -15
- package/dist/models/peoplesoft/Department.d.ts +0 -58
- package/dist/models/peoplesoft/Employee.d.ts +0 -46
- package/dist/models/peoplesoft/EmployeeCategoryGroup.d.ts +0 -6
- package/dist/models/peoplesoft/EmployeeStatus.d.ts +0 -6
- package/dist/providers/DialogsProvider.d.ts +0 -6
- package/dist/providers/LayoutProvider.d.ts +0 -11
- package/dist/queries/Approval.d.ts +0 -585
- package/dist/queries/ApprovalHooks.d.ts +0 -315
- package/dist/queries/FileHooks.d.ts +0 -151
- package/dist/queries/PeopleSoftHooks.d.ts +0 -537
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/providers/DialogsProvider.tsx","../src/components/core/AppTitle.tsx","../src/components/core/navigation/NavigationListItem.tsx","../src/components/core/navigation/NavigationList.tsx","../src/components/core/navigation/NavigationRail.tsx","../src/components/core/ToolbarAccount.tsx","../src/components/core/Layout.tsx","../src/providers/LayoutProvider.tsx"],"sourcesContent":["import useEventCallback from \"@mui/utils/useEventCallback\";\r\nimport { useId, useRef, useState } from \"react\";\r\nimport { DialogsContext } from \"../contexts/DialogsContext\";\r\nimport type { DialogComponent, OpenDialog, OpenDialogOptions } from \"../hooks/DialogsHooks\";\r\n\r\ninterface DialogStackEntry<TPayload, TResult> {\r\n key: string;\r\n open: boolean;\r\n promise: Promise<TResult>;\r\n Component: DialogComponent<TPayload, TResult>;\r\n payload: TPayload;\r\n onClose: (result: TResult) => Promise<void>;\r\n resolve: (result: TResult) => void;\r\n}\r\n\r\nexport interface DialogProviderProps {\r\n children?: React.ReactNode;\r\n unmountAfter?: number;\r\n}\r\n\r\nfunction DialogsProvider({ children, unmountAfter = 1000 }: Readonly<DialogProviderProps>) {\r\n const [stack, setStack] = useState<Array<DialogStackEntry<any, any>>>([]);\r\n const keyPrefix = useId();\r\n const nextId = useRef(0);\r\n const dialogMetadata = useRef(new WeakMap<Promise<any>, DialogStackEntry<any, any>>());\r\n\r\n const requestDialog = useEventCallback<OpenDialog>(function open<TPayload, TResult>(\r\n Component: DialogComponent<TPayload, TResult>,\r\n payload: TPayload,\r\n options: OpenDialogOptions<TResult> = {},\r\n ) {\r\n const { onClose = async () => { } } = options;\r\n\r\n let resolve: (result: TResult) => void;\r\n const promise = new Promise<TResult>((resolveImpl) => {\r\n resolve = resolveImpl;\r\n });\r\n\r\n const key = `${keyPrefix}-${nextId.current}`;\r\n nextId.current += 1;\r\n\r\n const newEntry: DialogStackEntry<TPayload, TResult> = {\r\n key,\r\n open: true,\r\n promise,\r\n Component,\r\n payload,\r\n onClose,\r\n resolve: resolve!,\r\n };\r\n\r\n dialogMetadata.current.set(promise, newEntry);\r\n\r\n setStack((previousStack) => [...previousStack, newEntry]);\r\n\r\n return promise;\r\n });\r\n\r\n const removeDialogFromStack = (dialog: Promise<any>) => {\r\n setStack((previousStack) => previousStack.filter((entry) => entry.promise !== dialog));\r\n dialogMetadata.current.delete(dialog);\r\n };\r\n\r\n const closeDialogUi = useEventCallback(function closeDialogUi<TResult>(dialog: Promise<TResult>) {\r\n setStack((previousStack) =>\r\n previousStack.map((entry) => (entry.promise === dialog ? { ...entry, open: false } : entry)),\r\n );\r\n\r\n setTimeout(() => removeDialogFromStack(dialog), unmountAfter);\r\n });\r\n\r\n const closeDialog = useEventCallback(async function closeDialog<TResult>(\r\n dialog: Promise<TResult>,\r\n result: TResult,\r\n ) {\r\n const entryToClose = dialogMetadata.current.get(dialog);\r\n if (!entryToClose) {\r\n throw new Error(\"Dialog not found in stack\");\r\n }\r\n\r\n try {\r\n await entryToClose.onClose(result);\r\n } finally {\r\n entryToClose.resolve(result);\r\n closeDialogUi(dialog);\r\n }\r\n\r\n return dialog;\r\n });\r\n\r\n return (\r\n <DialogsContext.Provider value={{ open: requestDialog, close: closeDialog }}>\r\n {children}\r\n {stack.map(({ key, open, Component, payload, promise }) => (\r\n <Component\r\n key={key}\r\n payload={payload}\r\n open={open}\r\n onClose={async (result) => {\r\n await closeDialog(promise, result);\r\n }}\r\n />\r\n ))}\r\n </DialogsContext.Provider>\r\n );\r\n}\r\n\r\nexport { DialogsProvider };\r\n\r\n","import { Chip, Stack, Typography } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport { clientEnv } from \"~/env\";\r\n\r\nexport const AppTitle: FC = () => {\r\n return (\r\n <Stack direction=\"row\" alignItems=\"center\" spacing={2} flexGrow={1}>\r\n <img src=\"/favicon-32x32.png\" alt=\"app-logo\" loading=\"lazy\" />\r\n <Typography variant=\"h6\">{clientEnv.VITE_APP_TITLE}</Typography>\r\n {import.meta.env.DEV && <Chip size=\"small\" label=\"TEST\" color=\"info\" />}\r\n </Stack>\r\n );\r\n};\r\n","import ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\r\nimport { Collapse } from \"@mui/material\";\r\nimport Avatar from \"@mui/material/Avatar\";\r\nimport Box from \"@mui/material/Box\";\r\nimport ListItem from \"@mui/material/ListItem\";\r\nimport ListItemButton from \"@mui/material/ListItemButton\";\r\nimport ListItemIcon from \"@mui/material/ListItemIcon\";\r\nimport ListItemText from \"@mui/material/ListItemText\";\r\nimport Paper from \"@mui/material/Paper\";\r\nimport Popper from \"@mui/material/Popper\";\r\nimport { styled } from \"@mui/material/styles\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport { Fragment, useState } from \"react\";\r\nimport { MINI_WIDTH } from \"./NavigationRail\";\r\nimport type { NavigationItem, NavigationPageItem } from \"~/models/Navigation\";\r\nimport type { FC, ReactNode } from \"react\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\nimport { RouterListItemButton } from \"~/components/router/RouterListItemButton\";\r\n\r\nconst ICON_SIZE = 34;\r\n\r\nconst StyledNavButton = styled(ListItemButton)(({ theme }) => ({\r\n borderRadius: 8,\r\n \"&.Mui-selected\": {\r\n \"& .MuiListItemIcon-root, & .MuiTypography-root, & .MuiSvgIcon-root\": {\r\n color: (theme.vars ?? theme).palette.primary.dark,\r\n },\r\n \"& .MuiAvatar-root\": {\r\n backgroundColor: (theme.vars ?? theme).palette.primary.dark,\r\n },\r\n \"& .MuiTouchRipple-child\": {\r\n backgroundColor: (theme.vars ?? theme).palette.primary.dark,\r\n },\r\n },\r\n \"& .MuiSvgIcon-root\": {\r\n color: (theme.vars ?? theme).palette.action.active,\r\n },\r\n \"& .MuiAvatar-root\": {\r\n backgroundColor: (theme.vars ?? theme).palette.action.active,\r\n },\r\n}));\r\n\r\nconst StyledRouterButton = styled(RouterListItemButton)(({ theme }) => ({\r\n borderRadius: 8,\r\n \"&.Mui-selected\": {\r\n \"& .MuiListItemIcon-root, & .MuiTypography-root, & .MuiSvgIcon-root\": {\r\n color: (theme.vars ?? theme).palette.primary.dark,\r\n },\r\n \"& .MuiAvatar-root\": {\r\n backgroundColor: (theme.vars ?? theme).palette.primary.dark,\r\n },\r\n \"& .MuiTouchRipple-child\": {\r\n backgroundColor: (theme.vars ?? theme).palette.primary.dark,\r\n },\r\n },\r\n \"& .MuiSvgIcon-root\": {\r\n color: (theme.vars ?? theme).palette.action.active,\r\n },\r\n \"& .MuiAvatar-root\": {\r\n backgroundColor: (theme.vars ?? theme).palette.action.active,\r\n },\r\n}));\r\n\r\nconst IconOrAvatar: FC<{ item: NavigationPageItem; collapsed?: boolean }> = ({ item, collapsed }) => {\r\n if (item.icon || collapsed) {\r\n return (\r\n <Box sx={collapsed ? { position: \"absolute\", left: \"50%\", top: \"calc(50% - 6px)\", transform: \"translate(-50%, -50%)\" } : {}}>\r\n <ListItemIcon sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", minWidth: ICON_SIZE }}>\r\n {item.icon ?? null}\r\n {!item.icon && collapsed ? (\r\n <Avatar sx={{ width: ICON_SIZE - 7, height: ICON_SIZE - 7, fontSize: 12 }}>{item.title}</Avatar>\r\n ) : null}\r\n </ListItemIcon>\r\n {collapsed ? (\r\n <Typography\r\n variant=\"caption\"\r\n sx={{\r\n position: \"absolute\",\r\n bottom: -18,\r\n left: \"50%\",\r\n transform: \"translateX(-50%)\",\r\n fontSize: 10,\r\n fontWeight: 500,\r\n textAlign: \"center\",\r\n whiteSpace: \"nowrap\",\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n maxWidth: MINI_WIDTH - 28,\r\n }}\r\n >\r\n {item.title}\r\n </Typography>\r\n ) : null}\r\n </Box>\r\n );\r\n }\r\n return null;\r\n};\r\n\r\ninterface MiniPopoverProps {\r\n open: boolean;\r\n anchorEl: HTMLElement | null;\r\n children?: ReactNode;\r\n}\r\n\r\nconst MiniPopover: FC<MiniPopoverProps> = ({ open, anchorEl, children }) => (\r\n <Popper\r\n open={open}\r\n anchorEl={anchorEl}\r\n placement=\"right-start\"\r\n modifiers={[\r\n { name: \"offset\", options: { offset: [6, 0] } },\r\n { name: \"preventOverflow\", options: { padding: 8 } },\r\n { name: \"flip\", options: { fallbackPlacements: [\"right-end\", \"left-start\"] } },\r\n ]}\r\n >\r\n <Paper\r\n sx={{\r\n pt: 0.5,\r\n pb: 0.5,\r\n maxHeight: \"min(calc(100vh - 100px), 560px)\",\r\n overflowY: \"auto\",\r\n overscrollBehavior: \"contain\",\r\n }}\r\n >\r\n {children}\r\n </Paper>\r\n </Popper>\r\n);\r\n\r\ninterface NavigationListItemProps {\r\n item: NavigationPageItem;\r\n isOpen?: boolean;\r\n selected?: boolean;\r\n disabled?: boolean;\r\n collapsed?: boolean;\r\n isSidebarFullyExpanded?: boolean;\r\n isSidebarFullyCollapsed?: boolean;\r\n onClick?: (item: NavigationPageItem) => void;\r\n renderNested?: (sub: Array<NavigationItem>) => ReactNode;\r\n onClose?: () => void;\r\n}\r\n\r\nexport const NavigationListItem: FC<NavigationListItemProps> = ({ item, isOpen, selected, disabled, collapsed, isSidebarFullyExpanded = true, isSidebarFullyCollapsed, onClick, renderNested, onClose }) => {\r\n const [hoveredPopoverItem, setHoveredPopoverItem] = useState<string | null>(null);\r\n const [anchorElement, setAnchorElement] = useState<HTMLElement | null>(null);\r\n\r\n const chevronSx: SxProps<Theme> = () => {\r\n if (collapsed && isSidebarFullyCollapsed && item.children) {\r\n return {\r\n fontSize: 18,\r\n position: \"absolute\",\r\n top: \"41.5%\",\r\n right: \"2px\",\r\n transform: \"translateY(-50%) rotate(-90deg)\",\r\n };\r\n }\r\n if (!collapsed && isSidebarFullyExpanded && item.children) {\r\n return {\r\n ml: 0.5,\r\n transform: `rotate(${isOpen ? 0 : -90}deg)`,\r\n };\r\n }\r\n return { display: \"none\" };\r\n };\r\n\r\n const shouldJustExpand = item.children && !collapsed;\r\n\r\n const buttonProps = {\r\n selected,\r\n disabled,\r\n sx: { px: 1.4, height: collapsed ? 60 : 48 }\r\n };\r\n\r\n const buttonContent = (\r\n <>\r\n <IconOrAvatar item={item} collapsed={collapsed} />\r\n {!collapsed && (\r\n <ListItemText\r\n primary={item.title}\r\n slotProps={{ primary: { noWrap: true, title: item.title } }}\r\n sx={{ ml: 1.2, flex: 1, minWidth: 0, \"& .MuiTypography-root\": { whiteSpace: \"nowrap\", overflow: \"hidden\", textOverflow: \"ellipsis\" } }}\r\n />\r\n )}\r\n {item.children ? <ExpandMoreIcon sx={chevronSx} /> : null}\r\n </>\r\n );\r\n\r\n const listItem = (\r\n <ListItem\r\n {...(item.children && collapsed\r\n ? {\r\n onMouseEnter: (event: React.MouseEvent<HTMLElement>) => {\r\n setAnchorElement(event.currentTarget);\r\n setHoveredPopoverItem(item.title);\r\n },\r\n onMouseLeave: () => {\r\n setHoveredPopoverItem(null);\r\n },\r\n }\r\n : {})}\r\n sx={{ py: 0, px: 1, overflowX: \"hidden\" }}\r\n >\r\n {shouldJustExpand ? (\r\n <StyledNavButton {...buttonProps} onClick={() => onClick?.(item)}>\r\n {buttonContent}\r\n </StyledNavButton>\r\n ) : (\r\n <StyledRouterButton\r\n {...buttonProps}\r\n to={item.to}\r\n href={item.href}\r\n params={item.params as any}\r\n search={item.search as any}\r\n onClick={onClose}\r\n >\r\n {buttonContent}\r\n </StyledRouterButton>\r\n )}\r\n\r\n {item.children && collapsed ? (\r\n <MiniPopover open={item.title === hoveredPopoverItem} anchorEl={anchorElement}>\r\n {renderNested?.(item.children)}\r\n </MiniPopover>\r\n ) : null}\r\n </ListItem>\r\n );\r\n\r\n return (\r\n <Fragment key={item.to}>\r\n {listItem}\r\n {item.children && !collapsed ? (\r\n <Collapse in={isOpen} timeout=\"auto\" unmountOnExit>\r\n {renderNested?.(item.children)}\r\n </Collapse>\r\n ) : null}\r\n </Fragment>\r\n );\r\n};\r\n","import Divider from \"@mui/material/Divider\";\r\nimport List from \"@mui/material/List\";\r\nimport ListSubheader from \"@mui/material/ListSubheader\";\r\nimport { Fragment, useEffect, useState } from \"react\";\r\nimport { NavigationListItem } from \"./NavigationListItem\";\r\nimport { EXPANDED_WIDTH, MINI_WIDTH } from \"./NavigationRail\";\r\nimport type { FC, ReactNode } from \"react\";\r\nimport type { Navigation, NavigationDivider, NavigationHeader, NavigationItem, NavigationPageItem } from \"~/models/Navigation\";\r\n\r\nexport const isPageItem = (item: NavigationItem): item is NavigationPageItem => !(\"kind\" in item);\r\nexport const isDivider = (item: NavigationItem): item is NavigationDivider => \"kind\" in item && item.kind === \"divider\";\r\nexport const isHeader = (item: NavigationItem): item is NavigationHeader => \"kind\" in item && item.kind === \"header\";\r\n\r\ninterface NavigationListProps {\r\n subNavigation: Navigation;\r\n depth?: number;\r\n collapsed?: boolean;\r\n isPopover?: boolean;\r\n isSidebarFullyExpanded?: boolean;\r\n isSidebarFullyCollapsed?: boolean;\r\n expandedWidth: number | string;\r\n renderItem?: (item: NavigationPageItem, context: { collapsed: boolean }) => ReactNode;\r\n activePath?: string | null;\r\n onNavigate: (item: NavigationPageItem) => void;\r\n onClose?: () => void;\r\n}\r\n\r\nexport const NavigationList: FC<NavigationListProps> = ({ subNavigation, depth = 0, collapsed, isPopover, isSidebarFullyExpanded = true, isSidebarFullyCollapsed, expandedWidth, renderItem, activePath, onNavigate, onClose }) => {\r\n const [openKeys, setOpenKeys] = useState<Array<string>>([]);\r\n\r\n useEffect(() => {\r\n if (collapsed) setOpenKeys([]);\r\n }, [collapsed]);\r\n\r\n const toggleKey = (key: string) =>\r\n setOpenKeys((previous) => (previous.includes(key) ? previous.filter((k) => k !== key) : [...previous, key]));\r\n\r\n const renderNested = (children: Array<NavigationItem>) => <NavigationList\r\n subNavigation={children}\r\n depth={depth + 1}\r\n isPopover={collapsed}\r\n expandedWidth={expandedWidth}\r\n activePath={activePath}\r\n onNavigate={onNavigate}\r\n onClose={onClose}\r\n />;\r\n\r\n const filteredNavigation = subNavigation.filter(nav => !nav.hidden);\r\n\r\n return (\r\n <List\r\n sx={{\r\n padding: 0,\r\n mt: isPopover && depth === 1 ? 0.5 : 0,\r\n mb: depth === 0 && !isPopover ? 4 : 0.5,\r\n pl: (isPopover ? 1 : 2) * (isPopover ? depth - 1 : depth),\r\n minWidth: isPopover && depth === 1 ? EXPANDED_WIDTH : \"auto\",\r\n width: collapsed ? MINI_WIDTH : \"auto\",\r\n }}\r\n >\r\n {filteredNavigation.map((navItem, index) => {\r\n if (isHeader(navItem)) {\r\n return (\r\n <ListSubheader\r\n key={`subheader-${depth}-${index}`}\r\n sx={{\r\n fontSize: 12,\r\n fontWeight: \"700\",\r\n height: collapsed ? 0 : 40,\r\n px: 2,\r\n minWidth: expandedWidth,\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n zIndex: 2,\r\n bgcolor: \"transparent\",\r\n position: \"static\"\r\n }}\r\n >\r\n {navItem.title}\r\n </ListSubheader>\r\n );\r\n }\r\n\r\n if (isDivider(navItem)) {\r\n const nextItem = filteredNavigation[index + 1];\r\n return (\r\n <li key={`divider-${depth}-${index}`}>\r\n <Divider sx={{ mx: 1, mt: 1, mb: isHeader(nextItem) && !collapsed ? 0 : 1 }} />\r\n </li>\r\n );\r\n }\r\n\r\n if (!isPageItem(navItem)) return null;\r\n\r\n const key = `item-${depth}-${index}`;\r\n const uniqueItemKey = `${depth}-${index}-${navItem.title}`;\r\n\r\n if (renderItem) return <Fragment key={key}>{renderItem(navItem, { collapsed: !!collapsed })}</Fragment>;\r\n\r\n return <NavigationListItem\r\n key={key}\r\n item={navItem}\r\n isOpen={openKeys.includes(uniqueItemKey)}\r\n selected={activePath === navItem.to}\r\n collapsed={collapsed}\r\n isSidebarFullyExpanded={isSidebarFullyExpanded}\r\n isSidebarFullyCollapsed={isSidebarFullyCollapsed}\r\n onClick={navItem.children && !collapsed ? () => toggleKey(uniqueItemKey) : undefined}\r\n renderNested={renderNested}\r\n onClose={onClose}\r\n />;\r\n })}\r\n </List>\r\n );\r\n};","import { useMediaQuery } from \"@mui/material\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Drawer from \"@mui/material/Drawer\";\r\nimport { useTheme } from \"@mui/material/styles\";\r\nimport { useNavigate, useRouterState } from \"@tanstack/react-router\";\r\nimport { NavigationList, isHeader } from \"./NavigationList\";\r\nimport type { FC } from \"react\";\r\nimport type { Navigation } from \"~/models/Navigation\";\r\n\r\nexport const MINI_WIDTH = 84;\r\nexport const EXPANDED_WIDTH = 320;\r\nexport const TOOLBAR_HEIGHT = 64;\r\n\r\ninterface NavigationRailProps {\r\n navigation: Navigation;\r\n expanded: boolean;\r\n setExpanded: (open: boolean) => void;\r\n}\r\n\r\nexport const NavigationRail: FC<NavigationRailProps> = ({ navigation, expanded, setExpanded }) => {\r\n const navigate = useNavigate();\r\n const routerState = useRouterState();\r\n const theme = useTheme();\r\n const showPermanent = useMediaQuery(theme.breakpoints.up(\"sm\"));\r\n\r\n const drawerContent = (collapsed: boolean) => (\r\n <Box\r\n component=\"nav\"\r\n sx={{\r\n height: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"space-between\",\r\n overflow: \"auto\",\r\n scrollbarGutter: collapsed ? \"stable\" : \"auto\",\r\n overflowX: \"hidden\",\r\n pt: navigation[0] && isHeader(navigation[0]) && !collapsed ? 0 : 2,\r\n }}\r\n >\r\n <NavigationList\r\n subNavigation={navigation}\r\n collapsed={collapsed}\r\n isSidebarFullyExpanded={expanded}\r\n isSidebarFullyCollapsed={!expanded}\r\n expandedWidth={EXPANDED_WIDTH}\r\n activePath={routerState.location.pathname}\r\n onNavigate={navigate}\r\n onClose={!showPermanent ? () => setExpanded(false) : undefined}\r\n />\r\n </Box>\r\n );\r\n\r\n if (showPermanent)\r\n return (\r\n <Drawer\r\n variant=\"permanent\"\r\n sx={{\r\n width: expanded ? EXPANDED_WIDTH : MINI_WIDTH,\r\n [\"& .MuiDrawer-paper\"]: {\r\n position: \"absolute\",\r\n top: `${TOOLBAR_HEIGHT}px`,\r\n height: `calc(100% - ${TOOLBAR_HEIGHT}px)`,\r\n width: expanded ? EXPANDED_WIDTH : MINI_WIDTH,\r\n borderTop: \"1px solid\",\r\n borderColor: theme.vars?.palette.divider,\r\n },\r\n }}\r\n >\r\n {drawerContent(!expanded)}\r\n </Drawer>\r\n );\r\n\r\n return (\r\n <Drawer open={expanded} onClose={() => setExpanded(false)}>\r\n {drawerContent(!expanded)}\r\n </Drawer>\r\n );\r\n};\r\n","import AccountCircle from \"@mui/icons-material/AccountCircle\";\r\nimport ArrowBack from \"@mui/icons-material/ArrowBack\";\r\nimport Brightness4 from \"@mui/icons-material/Brightness4\";\r\nimport ChevronRight from \"@mui/icons-material/ChevronRight\";\r\nimport DarkMode from \"@mui/icons-material/DarkMode\";\r\nimport LightMode from \"@mui/icons-material/LightMode\";\r\nimport Login from \"@mui/icons-material/Login\";\r\nimport Logout from \"@mui/icons-material/Logout\";\r\nimport SettingsBrightness from \"@mui/icons-material/SettingsBrightness\";\r\nimport Translate from \"@mui/icons-material/Translate\";\r\nimport { Avatar, Box, IconButton, List, ListItem, ListItemButton, ListItemIcon, ListItemText, ListSubheader, Menu, Typography, useColorScheme } from \"@mui/material\";\r\nimport { Fragment, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport Done from \"@mui/icons-material/Done\";\r\nimport type { FC } from \"react\";\r\nimport type { User } from \"~/models/User\";\r\nimport { authClient } from \"~/lib/auth/auth-client\";\r\nimport { useDialogs } from \"~/hooks/DialogsHooks\";\r\n\r\ntype TabType = \"settings\" | \"theme\" | \"language\";\r\n\r\nconst capitalize = (value: string | undefined) => value && value.charAt(0).toUpperCase() + value.slice(1);\r\n\r\nexport const ToolbarAccount: FC = () => {\r\n const [anchorElement, setAnchorElement] = useState<HTMLElement>();\r\n const [tab, setTab] = useState<TabType>(\"settings\");\r\n const open = Boolean(anchorElement);\r\n const { t, i18n } = useTranslation();\r\n const { mode, setMode } = useColorScheme();\r\n const { data: session } = authClient.useSession();\r\n const { alert } = useDialogs();\r\n\r\n const supportedLanguages = (Array.isArray(i18n.options.supportedLngs) ? i18n.options.supportedLngs : []).filter(lng => lng !== \"cimode\");\r\n const languageDisplayNames = new Intl.DisplayNames([i18n.language], { type: \"language\" });\r\n\r\n const colorModes: Array<{ mode: \"light\" | \"dark\" | \"system\"; icon: typeof LightMode; label: string }> = [\r\n { mode: \"light\", icon: LightMode, label: t(\"Layout.Light\") },\r\n { mode: \"dark\", icon: DarkMode, label: t(\"Layout.Dark\") },\r\n { mode: \"system\", icon: SettingsBrightness, label: t(\"Layout.System\") },\r\n ];\r\n\r\n const user = {\r\n name: \"Dalibor Homola\",\r\n employeeId: \"C2503017\",\r\n department: \"IT\",\r\n } as User;\r\n\r\n const usernameInitials = () => {\r\n if (!user.name) return \"\";\r\n const splittedName: Array<string> = user.name.split(\" \");\r\n return `${splittedName[0][0]}${splittedName.length > 1 ? splittedName[1][0] : \"\"}`;\r\n };\r\n\r\n const openMenu = (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => setAnchorElement(event.currentTarget);\r\n const closeMenu = () => { setAnchorElement(undefined); setTimeout(() => setTab(\"settings\"), 300); };\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={colorModes.find((m) => m.mode === mode)?.label} />\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={capitalize(languageDisplayNames.of(i18n.language))} />\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 {colorModes.map(({ mode: modeValue, icon: Icon, label }) => (\r\n <ListItemButton\r\n key={modeValue}\r\n onClick={() => {\r\n setMode(modeValue);\r\n closeMenu();\r\n }}\r\n selected={mode === modeValue}\r\n >\r\n <ListItemIcon>\r\n <Icon />\r\n </ListItemIcon>\r\n <ListItemText primary={label} />\r\n </ListItemButton>\r\n ))}\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 {supportedLanguages.map((languageCode) =>\r\n <ListItemButton\r\n key={languageCode}\r\n onClick={() => i18n.changeLanguage(languageCode).finally(() => closeMenu())}\r\n selected={i18n.resolvedLanguage === languageCode}\r\n >\r\n <ListItemIcon>\r\n {i18n.resolvedLanguage === languageCode && <Done />}\r\n </ListItemIcon>\r\n <ListItemText primary={capitalize(languageDisplayNames.of(languageCode))} />\r\n </ListItemButton>\r\n )}\r\n </List>\r\n );\r\n\r\n return (\r\n <Fragment>\r\n <IconButton size=\"small\" edge=\"end\" onClick={openMenu}>\r\n {user.name ?\r\n <Avatar sx={{ width: { xs: 32, sm: 40 }, height: { xs: 32, sm: 40 }, bgcolor: \"primary.main\" }}>\r\n <Typography variant=\"subtitle2\" sx={{ fontWeight: \"bold\", lineHeight: 0 }}>\r\n {usernameInitials()}\r\n </Typography>\r\n </Avatar>\r\n :\r\n <AccountCircle fontSize=\"large\" />\r\n }\r\n </IconButton>\r\n\r\n <Menu anchorEl={anchorElement} open={open} onClose={closeMenu}>\r\n <Box sx={{ width: 240 }}>\r\n <List>\r\n {session ?\r\n <Fragment>\r\n <ListItem>\r\n <ListItemText primary={user.name} secondary={\r\n <span>\r\n <span>{user.employeeId}</span>\r\n <br />\r\n <span>{user.department}</span>\r\n </span>\r\n } />\r\n </ListItem>\r\n\r\n <ListItemButton\r\n onClick={() =>\r\n authClient.signOut({}, {\r\n onSuccess: () => closeMenu(),\r\n onError: ({ error }) => alert(error.message)\r\n })\r\n }\r\n >\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\r\n onClick={() =>\r\n authClient.signIn.social({ provider: \"microsoft\" }, {\r\n onSuccess: () => closeMenu(),\r\n onError: ({ error }) => alert(error.message)\r\n })\r\n }\r\n >\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};\r\n","import Menu from \"@mui/icons-material/Menu\";\r\nimport MenuOpen from \"@mui/icons-material/MenuOpen\";\r\nimport { AppBar, Box, CssBaseline, IconButton, InitColorSchemeScript, LinearProgress, Toolbar } from \"@mui/material\";\r\nimport { styled } from \"@mui/material/styles\";\r\nimport { useIsFetching, useIsMutating } from \"@tanstack/react-query\";\r\nimport { Fragment, useState } from \"react\";\r\nimport { createIsomorphicFn } from \"@tanstack/react-start\";\r\nimport { getCookie } from \"@tanstack/react-start/server\";\r\nimport { AppTitle } from \"./AppTitle\";\r\nimport { NavigationRail } from \"./navigation/NavigationRail\";\r\nimport { ToolbarAccount } from \"./ToolbarAccount\";\r\nimport type { FC, ReactNode } from \"react\";\r\nimport type { Navigation } from \"~/models/Navigation\";\r\n\r\nconst YEAR_IN_SECONDS = 60 * 60 * 24 * 365;\r\n\r\nconst getNavigationOpenStatus = createIsomorphicFn()\r\n .server(() => {\r\n const cookie = getCookie(\"navigationOpen\");\r\n return cookie === \"true\";\r\n })\r\n .client(() => {\r\n const cookie = document.cookie\r\n .split(\"; \")\r\n .find(row => row.startsWith(\"navigationOpen=\"));\r\n return cookie ? cookie.split(\"=\")[1] === \"true\" : false;\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 ...theme.mixins.toolbar,\r\n}));\r\n\r\ninterface LayoutProps {\r\n navigation: Navigation | undefined;\r\n children: ReactNode;\r\n}\r\n\r\nexport const Layout: FC<LayoutProps> = (props) => {\r\n const [navigationOpen, setNavigationOpen] = useState(getNavigationOpenStatus);\r\n const isFetching = !!useIsFetching();\r\n const isMutating = !!useIsMutating();\r\n\r\n return (\r\n <Fragment>\r\n <InitColorSchemeScript />\r\n <CssBaseline />\r\n\r\n <Box sx={{ display: \"flex\", height: \"100dvh\", maxHeight: \"100dvh\", overflow: \"hidden\", width: \"100%\" }}>\r\n <AppBar\r\n color=\"transparent\"\r\n position=\"fixed\"\r\n sx={theme => ({\r\n borderBottom: \"1px solid\",\r\n borderColor: theme.vars?.palette.divider,\r\n boxShadow: \"none\",\r\n })}>\r\n <Toolbar>\r\n {props.navigation &&\r\n <IconButton\r\n onClick={() => {\r\n setNavigationOpen(previous => {\r\n const newValue = !previous;\r\n document.cookie = `navigationOpen=${newValue}; max-age=${YEAR_IN_SECONDS}; path=/`;\r\n return newValue;\r\n });\r\n }}\r\n sx={{ marginRight: 2 }}\r\n >\r\n {navigationOpen ? <MenuOpen /> : <Menu />}\r\n </IconButton>\r\n }\r\n\r\n <AppTitle />\r\n\r\n <ToolbarAccount />\r\n </Toolbar>\r\n </AppBar>\r\n\r\n {props.navigation &&\r\n <NavigationRail\r\n navigation={props.navigation}\r\n expanded={navigationOpen}\r\n setExpanded={newValue => {\r\n setNavigationOpen(newValue);\r\n document.cookie = `navigationOpen=${newValue}; max-age=${YEAR_IN_SECONDS}; path=/`;\r\n }}\r\n />\r\n }\r\n\r\n <Box component=\"main\" sx={{ flexGrow: 1, display: \"flex\", flexDirection: \"column\", minWidth: 0, height: \"100%\", overflow: \"hidden\" }}>\r\n <DrawerHeader />\r\n <Box sx={{ flex: 1, overflow: \"auto\", position: \"relative\" }}>\r\n {props.children}\r\n </Box>\r\n </Box>\r\n </Box>\r\n\r\n {(isFetching || isMutating) && <LinearProgress sx={{ position: \"fixed\", top: { xs: 56, sm: 64 }, left: 0, right: 0 }} />}\r\n </Fragment>\r\n );\r\n};\r\n","import { ThemeProvider } from \"@mui/material\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers\";\r\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\r\nimport { createServerFn } from \"@tanstack/react-start\";\r\nimport { getCookie } from \"@tanstack/react-start/server\";\r\nimport dayjs from \"dayjs\";\r\nimport i18n from \"i18next\";\r\nimport LanguageDetector from \"i18next-browser-languagedetector\";\r\nimport { useEffect, useEffectEvent } from \"react\";\r\nimport { initReactI18next } from \"react-i18next\";\r\nimport { resources } from \"virtual:wcz-layout\";\r\nimport z from \"zod\";\r\nimport { DialogsProvider } from \"./DialogsProvider\";\r\nimport type { CssVarsThemeOptions } from \"@mui/material\";\r\nimport type { Navigation } from \"~/models/Navigation\";\r\nimport type { FC, ReactNode } from \"react\";\r\nimport { useGetTheme } from \"~/hooks/ThemeHook\";\r\nimport { Layout } from \"~/components/core/Layout\";\r\n\r\nconst YEAR_IN_MINUTES = 60 * 24 * 365;\r\n\r\ni18n\r\n .use(LanguageDetector)\r\n .use(initReactI18next)\r\n .init({\r\n resources,\r\n fallbackLng: \"en\",\r\n supportedLngs: Object.keys(resources),\r\n detection: {\r\n caches: [\"cookie\"],\r\n cookieMinutes: YEAR_IN_MINUTES,\r\n },\r\n interpolation: { escapeValue: false },\r\n });\r\n\r\ninterface ProvidersProps {\r\n navigation?: Navigation;\r\n theme?: Pick<CssVarsThemeOptions, \"colorSchemes\" | \"components\">;\r\n children: ReactNode;\r\n}\r\n\r\nexport const LayoutProvider: FC<ProvidersProps> = ({ navigation, theme, children }) => {\r\n const createdTheme = useGetTheme(theme);\r\n\r\n const languageChangedHandler = useEffectEvent(() => {\r\n z.config(z.core.locales[i18n.language as keyof typeof z.core.locales]());\r\n dayjs.locale(i18n.language);\r\n });\r\n\r\n useEffect(() => {\r\n languageChangedHandler();\r\n\r\n i18n.on(\"languageChanged\", languageChangedHandler);\r\n return () => { i18n.off(\"languageChanged\", languageChangedHandler); };\r\n }, []);\r\n\r\n return (\r\n <ThemeProvider theme={createdTheme}>\r\n <LocalizationProvider key={i18n.language} dateAdapter={AdapterDayjs} adapterLocale={i18n.language}>\r\n <DialogsProvider>\r\n <Layout navigation={navigation}>\r\n {children}\r\n </Layout>\r\n </DialogsProvider>\r\n </LocalizationProvider>\r\n </ThemeProvider>\r\n );\r\n};\r\n\r\nexport const setSSRLanguage = createServerFn().handler(async () => {\r\n const language = getCookie(i18n.services.languageDetector.options.lookupCookie) || \"en\";\r\n dayjs.locale(language);\r\n z.config(z.core.locales[language as keyof typeof z.core.locales]());\r\n await i18n.changeLanguage(language);\r\n});\r\n"],"names":["closeDialogUi","closeDialog","Typography","Fragment","i18n","List","ListSubheader","ListItemButton","ListItemIcon","ListItemText","Avatar","Box","ListItem","Menu","z"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/providers/DialogsProvider.tsx","../src/components/core/AppTitle.tsx","../src/components/core/navigation/NavigationListItem.tsx","../src/components/core/navigation/NavigationList.tsx","../src/components/core/navigation/NavigationRail.tsx","../src/components/core/ToolbarAccount.tsx","../src/components/core/Layout.tsx","../src/providers/LayoutProvider.tsx"],"sourcesContent":["import useEventCallback from \"@mui/utils/useEventCallback\";\r\nimport { useId, useRef, useState } from \"react\";\r\nimport { DialogsContext } from \"../contexts/DialogsContext\";\r\nimport type { DialogComponent, OpenDialog, OpenDialogOptions } from \"../hooks/DialogsHooks\";\r\n\r\ninterface DialogStackEntry<TPayload, TResult> {\r\n key: string;\r\n open: boolean;\r\n promise: Promise<TResult>;\r\n Component: DialogComponent<TPayload, TResult>;\r\n payload: TPayload;\r\n onClose: (result: TResult) => Promise<void>;\r\n resolve: (result: TResult) => void;\r\n}\r\n\r\nexport interface DialogProviderProps {\r\n children?: React.ReactNode;\r\n unmountAfter?: number;\r\n}\r\n\r\nfunction DialogsProvider({ children, unmountAfter = 1000 }: Readonly<DialogProviderProps>) {\r\n const [stack, setStack] = useState<Array<DialogStackEntry<any, any>>>([]);\r\n const keyPrefix = useId();\r\n const nextId = useRef(0);\r\n const dialogMetadata = useRef(new WeakMap<Promise<any>, DialogStackEntry<any, any>>());\r\n\r\n const requestDialog = useEventCallback<OpenDialog>(function open<TPayload, TResult>(\r\n Component: DialogComponent<TPayload, TResult>,\r\n payload: TPayload,\r\n options: OpenDialogOptions<TResult> = {},\r\n ) {\r\n const { onClose = async () => { } } = options;\r\n\r\n let resolve: (result: TResult) => void;\r\n const promise = new Promise<TResult>((resolveImpl) => {\r\n resolve = resolveImpl;\r\n });\r\n\r\n const key = `${keyPrefix}-${nextId.current}`;\r\n nextId.current += 1;\r\n\r\n const newEntry: DialogStackEntry<TPayload, TResult> = {\r\n key,\r\n open: true,\r\n promise,\r\n Component,\r\n payload,\r\n onClose,\r\n resolve: resolve!,\r\n };\r\n\r\n dialogMetadata.current.set(promise, newEntry);\r\n\r\n setStack((previousStack) => [...previousStack, newEntry]);\r\n\r\n return promise;\r\n });\r\n\r\n const removeDialogFromStack = (dialog: Promise<any>) => {\r\n setStack((previousStack) => previousStack.filter((entry) => entry.promise !== dialog));\r\n dialogMetadata.current.delete(dialog);\r\n };\r\n\r\n const closeDialogUi = useEventCallback(function closeDialogUi<TResult>(dialog: Promise<TResult>) {\r\n setStack((previousStack) =>\r\n previousStack.map((entry) => (entry.promise === dialog ? { ...entry, open: false } : entry)),\r\n );\r\n\r\n setTimeout(() => removeDialogFromStack(dialog), unmountAfter);\r\n });\r\n\r\n const closeDialog = useEventCallback(async function closeDialog<TResult>(\r\n dialog: Promise<TResult>,\r\n result: TResult,\r\n ) {\r\n const entryToClose = dialogMetadata.current.get(dialog);\r\n if (!entryToClose) {\r\n throw new Error(\"Dialog not found in stack\");\r\n }\r\n\r\n try {\r\n await entryToClose.onClose(result);\r\n } finally {\r\n entryToClose.resolve(result);\r\n closeDialogUi(dialog);\r\n }\r\n\r\n return dialog;\r\n });\r\n\r\n return (\r\n <DialogsContext.Provider value={{ open: requestDialog, close: closeDialog }}>\r\n {children}\r\n {stack.map(({ key, open, Component, payload, promise }) => (\r\n <Component\r\n key={key}\r\n payload={payload}\r\n open={open}\r\n onClose={async (result) => {\r\n await closeDialog(promise, result);\r\n }}\r\n />\r\n ))}\r\n </DialogsContext.Provider>\r\n );\r\n}\r\n\r\nexport { DialogsProvider };\r\n\r\n","import { Chip, Stack, Typography } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport { clientEnv } from \"~/env\";\r\n\r\nexport const AppTitle: FC = () => {\r\n return (\r\n <Stack direction=\"row\" alignItems=\"center\" spacing={2} flexGrow={1}>\r\n <img src=\"/favicon-32x32.png\" alt=\"app-logo\" loading=\"lazy\" />\r\n <Typography variant=\"h6\">{clientEnv.VITE_APP_TITLE}</Typography>\r\n {import.meta.env.DEV && <Chip size=\"small\" label=\"TEST\" color=\"info\" />}\r\n </Stack>\r\n );\r\n};\r\n","import ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\r\nimport { Collapse } from \"@mui/material\";\r\nimport Avatar from \"@mui/material/Avatar\";\r\nimport Box from \"@mui/material/Box\";\r\nimport ListItem from \"@mui/material/ListItem\";\r\nimport ListItemButton from \"@mui/material/ListItemButton\";\r\nimport ListItemIcon from \"@mui/material/ListItemIcon\";\r\nimport ListItemText from \"@mui/material/ListItemText\";\r\nimport Paper from \"@mui/material/Paper\";\r\nimport Popper from \"@mui/material/Popper\";\r\nimport { styled } from \"@mui/material/styles\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport { Fragment, useState } from \"react\";\r\nimport { MINI_WIDTH } from \"./NavigationRail\";\r\nimport type { NavigationItem, NavigationPageItem } from \"~/models/Navigation\";\r\nimport type { FC, ReactNode } from \"react\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\nimport { RouterListItemButton } from \"~/components/router/RouterListItemButton\";\r\n\r\nconst ICON_SIZE = 34;\r\n\r\nconst StyledNavButton = styled(ListItemButton)(({ theme }) => ({\r\n borderRadius: 8,\r\n \"&.Mui-selected\": {\r\n \"& .MuiListItemIcon-root, & .MuiTypography-root, & .MuiSvgIcon-root\": {\r\n color: (theme.vars ?? theme).palette.primary.dark,\r\n },\r\n \"& .MuiAvatar-root\": {\r\n backgroundColor: (theme.vars ?? theme).palette.primary.dark,\r\n },\r\n \"& .MuiTouchRipple-child\": {\r\n backgroundColor: (theme.vars ?? theme).palette.primary.dark,\r\n },\r\n },\r\n \"& .MuiSvgIcon-root\": {\r\n color: (theme.vars ?? theme).palette.action.active,\r\n },\r\n \"& .MuiAvatar-root\": {\r\n backgroundColor: (theme.vars ?? theme).palette.action.active,\r\n },\r\n}));\r\n\r\nconst StyledRouterButton = styled(RouterListItemButton)(({ theme }) => ({\r\n borderRadius: 8,\r\n \"&.Mui-selected\": {\r\n \"& .MuiListItemIcon-root, & .MuiTypography-root, & .MuiSvgIcon-root\": {\r\n color: (theme.vars ?? theme).palette.primary.dark,\r\n },\r\n \"& .MuiAvatar-root\": {\r\n backgroundColor: (theme.vars ?? theme).palette.primary.dark,\r\n },\r\n \"& .MuiTouchRipple-child\": {\r\n backgroundColor: (theme.vars ?? theme).palette.primary.dark,\r\n },\r\n },\r\n \"& .MuiSvgIcon-root\": {\r\n color: (theme.vars ?? theme).palette.action.active,\r\n },\r\n \"& .MuiAvatar-root\": {\r\n backgroundColor: (theme.vars ?? theme).palette.action.active,\r\n },\r\n}));\r\n\r\nconst IconOrAvatar: FC<{ item: NavigationPageItem; collapsed?: boolean }> = ({ item, collapsed }) => {\r\n if (item.icon || collapsed) {\r\n return (\r\n <Box sx={collapsed ? { position: \"absolute\", left: \"50%\", top: \"calc(50% - 6px)\", transform: \"translate(-50%, -50%)\" } : {}}>\r\n <ListItemIcon sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", minWidth: ICON_SIZE }}>\r\n {item.icon ?? null}\r\n {!item.icon && collapsed ? (\r\n <Avatar sx={{ width: ICON_SIZE - 7, height: ICON_SIZE - 7, fontSize: 12 }}>{item.title}</Avatar>\r\n ) : null}\r\n </ListItemIcon>\r\n {collapsed ? (\r\n <Typography\r\n variant=\"caption\"\r\n sx={{\r\n position: \"absolute\",\r\n bottom: -18,\r\n left: \"50%\",\r\n transform: \"translateX(-50%)\",\r\n fontSize: 10,\r\n fontWeight: 500,\r\n textAlign: \"center\",\r\n whiteSpace: \"nowrap\",\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n maxWidth: MINI_WIDTH - 28,\r\n }}\r\n >\r\n {item.title}\r\n </Typography>\r\n ) : null}\r\n </Box>\r\n );\r\n }\r\n return null;\r\n};\r\n\r\ninterface MiniPopoverProps {\r\n open: boolean;\r\n anchorEl: HTMLElement | null;\r\n children?: ReactNode;\r\n}\r\n\r\nconst MiniPopover: FC<MiniPopoverProps> = ({ open, anchorEl, children }) => (\r\n <Popper\r\n open={open}\r\n anchorEl={anchorEl}\r\n placement=\"right-start\"\r\n modifiers={[\r\n { name: \"offset\", options: { offset: [6, 0] } },\r\n { name: \"preventOverflow\", options: { padding: 8 } },\r\n { name: \"flip\", options: { fallbackPlacements: [\"right-end\", \"left-start\"] } },\r\n ]}\r\n >\r\n <Paper\r\n sx={{\r\n pt: 0.5,\r\n pb: 0.5,\r\n maxHeight: \"min(calc(100vh - 100px), 560px)\",\r\n overflowY: \"auto\",\r\n overscrollBehavior: \"contain\",\r\n }}\r\n >\r\n {children}\r\n </Paper>\r\n </Popper>\r\n);\r\n\r\ninterface NavigationListItemProps {\r\n item: NavigationPageItem;\r\n isOpen?: boolean;\r\n selected?: boolean;\r\n disabled?: boolean;\r\n collapsed?: boolean;\r\n isSidebarFullyExpanded?: boolean;\r\n isSidebarFullyCollapsed?: boolean;\r\n onClick?: (item: NavigationPageItem) => void;\r\n renderNested?: (sub: Array<NavigationItem>) => ReactNode;\r\n onClose?: () => void;\r\n}\r\n\r\nexport const NavigationListItem: FC<NavigationListItemProps> = ({ item, isOpen, selected, disabled, collapsed, isSidebarFullyExpanded = true, isSidebarFullyCollapsed, onClick, renderNested, onClose }) => {\r\n const [hoveredPopoverItem, setHoveredPopoverItem] = useState<string | null>(null);\r\n const [anchorElement, setAnchorElement] = useState<HTMLElement | null>(null);\r\n\r\n const chevronSx: SxProps<Theme> = () => {\r\n if (collapsed && isSidebarFullyCollapsed && item.children) {\r\n return {\r\n fontSize: 18,\r\n position: \"absolute\",\r\n top: \"41.5%\",\r\n right: \"2px\",\r\n transform: \"translateY(-50%) rotate(-90deg)\",\r\n };\r\n }\r\n if (!collapsed && isSidebarFullyExpanded && item.children) {\r\n return {\r\n ml: 0.5,\r\n transform: `rotate(${isOpen ? 0 : -90}deg)`,\r\n };\r\n }\r\n return { display: \"none\" };\r\n };\r\n\r\n const shouldJustExpand = item.children && !collapsed;\r\n\r\n const buttonProps = {\r\n selected,\r\n disabled,\r\n sx: { px: 1.4, height: collapsed ? 60 : 48 }\r\n };\r\n\r\n const buttonContent = (\r\n <>\r\n <IconOrAvatar item={item} collapsed={collapsed} />\r\n {!collapsed && (\r\n <ListItemText\r\n primary={item.title}\r\n slotProps={{ primary: { noWrap: true, title: item.title } }}\r\n sx={{ ml: 1.2, flex: 1, minWidth: 0, \"& .MuiTypography-root\": { whiteSpace: \"nowrap\", overflow: \"hidden\", textOverflow: \"ellipsis\" } }}\r\n />\r\n )}\r\n {item.children ? <ExpandMoreIcon sx={chevronSx} /> : null}\r\n </>\r\n );\r\n\r\n const listItem = (\r\n <ListItem\r\n {...(item.children && collapsed\r\n ? {\r\n onMouseEnter: (event: React.MouseEvent<HTMLElement>) => {\r\n setAnchorElement(event.currentTarget);\r\n setHoveredPopoverItem(item.title);\r\n },\r\n onMouseLeave: () => {\r\n setHoveredPopoverItem(null);\r\n },\r\n }\r\n : {})}\r\n sx={{ py: 0, px: 1, overflowX: \"hidden\" }}\r\n >\r\n {shouldJustExpand ? (\r\n <StyledNavButton {...buttonProps} onClick={() => onClick?.(item)}>\r\n {buttonContent}\r\n </StyledNavButton>\r\n ) : (\r\n <StyledRouterButton\r\n {...buttonProps}\r\n to={item.to}\r\n href={item.href}\r\n params={item.params as any}\r\n search={item.search as any}\r\n onClick={onClose}\r\n >\r\n {buttonContent}\r\n </StyledRouterButton>\r\n )}\r\n\r\n {item.children && collapsed ? (\r\n <MiniPopover open={item.title === hoveredPopoverItem} anchorEl={anchorElement}>\r\n {renderNested?.(item.children)}\r\n </MiniPopover>\r\n ) : null}\r\n </ListItem>\r\n );\r\n\r\n return (\r\n <Fragment key={item.to}>\r\n {listItem}\r\n {item.children && !collapsed ? (\r\n <Collapse in={isOpen} timeout=\"auto\" unmountOnExit>\r\n {renderNested?.(item.children)}\r\n </Collapse>\r\n ) : null}\r\n </Fragment>\r\n );\r\n};\r\n","import Divider from \"@mui/material/Divider\";\r\nimport List from \"@mui/material/List\";\r\nimport ListSubheader from \"@mui/material/ListSubheader\";\r\nimport { Fragment, useEffect, useState } from \"react\";\r\nimport { NavigationListItem } from \"./NavigationListItem\";\r\nimport { EXPANDED_WIDTH, MINI_WIDTH } from \"./NavigationRail\";\r\nimport type { FC, ReactNode } from \"react\";\r\nimport type { Navigation, NavigationDivider, NavigationHeader, NavigationItem, NavigationPageItem } from \"~/models/Navigation\";\r\n\r\nexport const isPageItem = (item: NavigationItem): item is NavigationPageItem => !(\"kind\" in item);\r\nexport const isDivider = (item: NavigationItem): item is NavigationDivider => \"kind\" in item && item.kind === \"divider\";\r\nexport const isHeader = (item: NavigationItem): item is NavigationHeader => \"kind\" in item && item.kind === \"header\";\r\n\r\ninterface NavigationListProps {\r\n subNavigation: Navigation;\r\n depth?: number;\r\n collapsed?: boolean;\r\n isPopover?: boolean;\r\n isSidebarFullyExpanded?: boolean;\r\n isSidebarFullyCollapsed?: boolean;\r\n expandedWidth: number | string;\r\n renderItem?: (item: NavigationPageItem, context: { collapsed: boolean }) => ReactNode;\r\n activePath?: string | null;\r\n onNavigate: (item: NavigationPageItem) => void;\r\n onClose?: () => void;\r\n}\r\n\r\nexport const NavigationList: FC<NavigationListProps> = ({ subNavigation, depth = 0, collapsed, isPopover, isSidebarFullyExpanded = true, isSidebarFullyCollapsed, expandedWidth, renderItem, activePath, onNavigate, onClose }) => {\r\n const [openKeys, setOpenKeys] = useState<Array<string>>([]);\r\n\r\n useEffect(() => {\r\n if (collapsed) setOpenKeys([]);\r\n }, [collapsed]);\r\n\r\n const toggleKey = (key: string) =>\r\n setOpenKeys((previous) => (previous.includes(key) ? previous.filter((k) => k !== key) : [...previous, key]));\r\n\r\n const renderNested = (children: Array<NavigationItem>) => <NavigationList\r\n subNavigation={children}\r\n depth={depth + 1}\r\n isPopover={collapsed}\r\n expandedWidth={expandedWidth}\r\n activePath={activePath}\r\n onNavigate={onNavigate}\r\n onClose={onClose}\r\n />;\r\n\r\n const filteredNavigation = subNavigation.filter(nav => !nav.hidden);\r\n\r\n return (\r\n <List\r\n sx={{\r\n padding: 0,\r\n mt: isPopover && depth === 1 ? 0.5 : 0,\r\n mb: depth === 0 && !isPopover ? 4 : 0.5,\r\n pl: (isPopover ? 1 : 2) * (isPopover ? depth - 1 : depth),\r\n minWidth: isPopover && depth === 1 ? EXPANDED_WIDTH : \"auto\",\r\n width: collapsed ? MINI_WIDTH : \"auto\",\r\n }}\r\n >\r\n {filteredNavigation.map((navItem, index) => {\r\n if (isHeader(navItem)) {\r\n return (\r\n <ListSubheader\r\n key={`subheader-${depth}-${index}`}\r\n sx={{\r\n fontSize: 12,\r\n fontWeight: \"700\",\r\n height: collapsed ? 0 : 40,\r\n px: 2,\r\n minWidth: expandedWidth,\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n zIndex: 2,\r\n bgcolor: \"transparent\",\r\n position: \"static\"\r\n }}\r\n >\r\n {navItem.title}\r\n </ListSubheader>\r\n );\r\n }\r\n\r\n if (isDivider(navItem)) {\r\n const nextItem = filteredNavigation[index + 1];\r\n return (\r\n <li key={`divider-${depth}-${index}`}>\r\n <Divider sx={{ mx: 1, mt: 1, mb: isHeader(nextItem) && !collapsed ? 0 : 1 }} />\r\n </li>\r\n );\r\n }\r\n\r\n if (!isPageItem(navItem)) return null;\r\n\r\n const key = `item-${depth}-${index}`;\r\n const uniqueItemKey = `${depth}-${index}-${navItem.title}`;\r\n\r\n if (renderItem) return <Fragment key={key}>{renderItem(navItem, { collapsed: !!collapsed })}</Fragment>;\r\n\r\n return <NavigationListItem\r\n key={key}\r\n item={navItem}\r\n isOpen={openKeys.includes(uniqueItemKey)}\r\n selected={activePath === navItem.to}\r\n collapsed={collapsed}\r\n isSidebarFullyExpanded={isSidebarFullyExpanded}\r\n isSidebarFullyCollapsed={isSidebarFullyCollapsed}\r\n onClick={navItem.children && !collapsed ? () => toggleKey(uniqueItemKey) : undefined}\r\n renderNested={renderNested}\r\n onClose={onClose}\r\n />;\r\n })}\r\n </List>\r\n );\r\n};","import { useMediaQuery } from \"@mui/material\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Drawer from \"@mui/material/Drawer\";\r\nimport { useTheme } from \"@mui/material/styles\";\r\nimport { useNavigate, useRouterState } from \"@tanstack/react-router\";\r\nimport { NavigationList, isHeader } from \"./NavigationList\";\r\nimport type { FC } from \"react\";\r\nimport type { Navigation } from \"~/models/Navigation\";\r\n\r\nexport const MINI_WIDTH = 84;\r\nexport const EXPANDED_WIDTH = 320;\r\nexport const TOOLBAR_HEIGHT = 64;\r\n\r\ninterface NavigationRailProps {\r\n navigation: Navigation;\r\n expanded: boolean;\r\n setExpanded: (open: boolean) => void;\r\n}\r\n\r\nexport const NavigationRail: FC<NavigationRailProps> = ({ navigation, expanded, setExpanded }) => {\r\n const navigate = useNavigate();\r\n const routerState = useRouterState();\r\n const theme = useTheme();\r\n const showPermanent = useMediaQuery(theme.breakpoints.up(\"sm\"));\r\n\r\n const drawerContent = (collapsed: boolean) => (\r\n <Box\r\n component=\"nav\"\r\n sx={{\r\n height: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"space-between\",\r\n overflow: \"auto\",\r\n scrollbarGutter: collapsed ? \"stable\" : \"auto\",\r\n overflowX: \"hidden\",\r\n pt: navigation[0] && isHeader(navigation[0]) && !collapsed ? 0 : 2,\r\n }}\r\n >\r\n <NavigationList\r\n subNavigation={navigation}\r\n collapsed={collapsed}\r\n isSidebarFullyExpanded={expanded}\r\n isSidebarFullyCollapsed={!expanded}\r\n expandedWidth={EXPANDED_WIDTH}\r\n activePath={routerState.location.pathname}\r\n onNavigate={navigate}\r\n onClose={!showPermanent ? () => setExpanded(false) : undefined}\r\n />\r\n </Box>\r\n );\r\n\r\n if (showPermanent)\r\n return (\r\n <Drawer\r\n variant=\"permanent\"\r\n sx={{\r\n width: expanded ? EXPANDED_WIDTH : MINI_WIDTH,\r\n [\"& .MuiDrawer-paper\"]: {\r\n position: \"absolute\",\r\n top: `${TOOLBAR_HEIGHT}px`,\r\n height: `calc(100% - ${TOOLBAR_HEIGHT}px)`,\r\n width: expanded ? EXPANDED_WIDTH : MINI_WIDTH,\r\n borderTop: \"1px solid\",\r\n borderColor: theme.vars?.palette.divider,\r\n },\r\n }}\r\n >\r\n {drawerContent(!expanded)}\r\n </Drawer>\r\n );\r\n\r\n return (\r\n <Drawer open={expanded} onClose={() => setExpanded(false)}>\r\n {drawerContent(!expanded)}\r\n </Drawer>\r\n );\r\n};\r\n","import AccountCircle from \"@mui/icons-material/AccountCircle\";\r\nimport ArrowBack from \"@mui/icons-material/ArrowBack\";\r\nimport Brightness4 from \"@mui/icons-material/Brightness4\";\r\nimport ChevronRight from \"@mui/icons-material/ChevronRight\";\r\nimport DarkMode from \"@mui/icons-material/DarkMode\";\r\nimport LightMode from \"@mui/icons-material/LightMode\";\r\nimport Login from \"@mui/icons-material/Login\";\r\nimport Logout from \"@mui/icons-material/Logout\";\r\nimport SettingsBrightness from \"@mui/icons-material/SettingsBrightness\";\r\nimport Translate from \"@mui/icons-material/Translate\";\r\nimport { Avatar, Box, IconButton, List, ListItem, ListItemButton, ListItemIcon, ListItemText, ListSubheader, Menu, Typography, useColorScheme } from \"@mui/material\";\r\nimport { Fragment, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport Done from \"@mui/icons-material/Done\";\r\nimport type { FC } from \"react\";\r\nimport type { User } from \"~/models/User\";\r\nimport { authClient } from \"~/lib/auth/auth-client\";\r\nimport { useDialogs } from \"~/hooks/DialogsHooks\";\r\n\r\ntype TabType = \"settings\" | \"theme\" | \"language\";\r\n\r\nconst capitalize = (value: string | undefined) => value && value.charAt(0).toUpperCase() + value.slice(1);\r\n\r\nexport const ToolbarAccount: FC = () => {\r\n const [anchorElement, setAnchorElement] = useState<HTMLElement>();\r\n const [tab, setTab] = useState<TabType>(\"settings\");\r\n const open = Boolean(anchorElement);\r\n const { t, i18n } = useTranslation();\r\n const { mode, setMode } = useColorScheme();\r\n const { data: session } = authClient.useSession();\r\n const { alert } = useDialogs();\r\n\r\n const supportedLanguages = (Array.isArray(i18n.options.supportedLngs) ? i18n.options.supportedLngs : []).filter(lng => lng !== \"cimode\");\r\n const languageDisplayNames = new Intl.DisplayNames([i18n.language], { type: \"language\" });\r\n\r\n const colorModes: Array<{ mode: \"light\" | \"dark\" | \"system\"; icon: typeof LightMode; label: string }> = [\r\n { mode: \"light\", icon: LightMode, label: t(\"Layout.Light\") },\r\n { mode: \"dark\", icon: DarkMode, label: t(\"Layout.Dark\") },\r\n { mode: \"system\", icon: SettingsBrightness, label: t(\"Layout.System\") },\r\n ];\r\n\r\n const user = {\r\n name: \"Dalibor Homola\",\r\n employeeId: \"C2503017\",\r\n department: \"IT\",\r\n } as User;\r\n\r\n const usernameInitials = () => {\r\n if (!user.name) return \"\";\r\n const splittedName: Array<string> = user.name.split(\" \");\r\n return `${splittedName[0][0]}${splittedName.length > 1 ? splittedName[1][0] : \"\"}`;\r\n };\r\n\r\n const openMenu = (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => setAnchorElement(event.currentTarget);\r\n const closeMenu = () => { setAnchorElement(undefined); setTimeout(() => setTab(\"settings\"), 300); };\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={colorModes.find((m) => m.mode === mode)?.label} />\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={capitalize(languageDisplayNames.of(i18n.language))} />\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 {colorModes.map(({ mode: modeValue, icon: Icon, label }) => (\r\n <ListItemButton\r\n key={modeValue}\r\n onClick={() => {\r\n setMode(modeValue);\r\n closeMenu();\r\n }}\r\n selected={mode === modeValue}\r\n >\r\n <ListItemIcon>\r\n <Icon />\r\n </ListItemIcon>\r\n <ListItemText primary={label} />\r\n </ListItemButton>\r\n ))}\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 {supportedLanguages.map((languageCode) =>\r\n <ListItemButton\r\n key={languageCode}\r\n onClick={() => i18n.changeLanguage(languageCode).finally(() => closeMenu())}\r\n selected={i18n.resolvedLanguage === languageCode}\r\n >\r\n <ListItemIcon>\r\n {i18n.resolvedLanguage === languageCode && <Done />}\r\n </ListItemIcon>\r\n <ListItemText primary={capitalize(languageDisplayNames.of(languageCode))} />\r\n </ListItemButton>\r\n )}\r\n </List>\r\n );\r\n\r\n return (\r\n <Fragment>\r\n <IconButton size=\"small\" edge=\"end\" onClick={openMenu}>\r\n {user.name ?\r\n <Avatar sx={{ width: { xs: 32, sm: 40 }, height: { xs: 32, sm: 40 }, bgcolor: \"primary.main\" }}>\r\n <Typography variant=\"subtitle2\" sx={{ fontWeight: \"bold\", lineHeight: 0 }}>\r\n {usernameInitials()}\r\n </Typography>\r\n </Avatar>\r\n :\r\n <AccountCircle fontSize=\"large\" />\r\n }\r\n </IconButton>\r\n\r\n <Menu anchorEl={anchorElement} open={open} onClose={closeMenu}>\r\n <Box sx={{ width: 240 }}>\r\n <List>\r\n {session ?\r\n <Fragment>\r\n <ListItem>\r\n <ListItemText primary={user.name} secondary={\r\n <span>\r\n <span>{user.employeeId}</span>\r\n <br />\r\n <span>{user.department}</span>\r\n </span>\r\n } />\r\n </ListItem>\r\n\r\n <ListItemButton\r\n onClick={() =>\r\n authClient.signOut({}, {\r\n onSuccess: () => closeMenu(),\r\n onError: ({ error }) => alert(error.message)\r\n })\r\n }\r\n >\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\r\n onClick={() =>\r\n authClient.signIn.social({ provider: \"microsoft\" }, {\r\n onSuccess: () => closeMenu(),\r\n onError: ({ error }) => alert(error.message)\r\n })\r\n }\r\n >\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};\r\n","import Menu from \"@mui/icons-material/Menu\";\r\nimport MenuOpen from \"@mui/icons-material/MenuOpen\";\r\nimport { AppBar, Box, CssBaseline, IconButton, InitColorSchemeScript, LinearProgress, Toolbar } from \"@mui/material\";\r\nimport { styled } from \"@mui/material/styles\";\r\nimport { useIsFetching, useIsMutating } from \"@tanstack/react-query\";\r\nimport { Fragment, useState } from \"react\";\r\nimport { createIsomorphicFn } from \"@tanstack/react-start\";\r\nimport { getCookie } from \"@tanstack/react-start/server\";\r\nimport { AppTitle } from \"./AppTitle\";\r\nimport { NavigationRail } from \"./navigation/NavigationRail\";\r\nimport { ToolbarAccount } from \"./ToolbarAccount\";\r\nimport type { FC, ReactNode } from \"react\";\r\nimport type { Navigation } from \"~/models/Navigation\";\r\n\r\nconst YEAR_IN_SECONDS = 60 * 60 * 24 * 365;\r\n\r\nconst getNavigationOpenStatus = createIsomorphicFn()\r\n .server(() => {\r\n const cookie = getCookie(\"navigationOpen\");\r\n return cookie === \"true\";\r\n })\r\n .client(() => {\r\n const cookie = document.cookie\r\n .split(\"; \")\r\n .find(row => row.startsWith(\"navigationOpen=\"));\r\n return cookie ? cookie.split(\"=\")[1] === \"true\" : false;\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 ...theme.mixins.toolbar,\r\n}));\r\n\r\ninterface LayoutProps {\r\n navigation: Navigation | undefined;\r\n children: ReactNode;\r\n}\r\n\r\nexport const Layout: FC<LayoutProps> = (props) => {\r\n const [navigationOpen, setNavigationOpen] = useState(getNavigationOpenStatus);\r\n const isFetching = !!useIsFetching();\r\n const isMutating = !!useIsMutating();\r\n\r\n return (\r\n <Fragment>\r\n <InitColorSchemeScript />\r\n <CssBaseline />\r\n\r\n <Box sx={{ display: \"flex\", height: \"100dvh\", maxHeight: \"100dvh\", overflow: \"hidden\", width: \"100%\" }}>\r\n <AppBar\r\n color=\"transparent\"\r\n position=\"fixed\"\r\n sx={theme => ({\r\n borderBottom: \"1px solid\",\r\n borderColor: theme.vars?.palette.divider,\r\n boxShadow: \"none\",\r\n })}>\r\n <Toolbar>\r\n {props.navigation &&\r\n <IconButton\r\n onClick={() => {\r\n setNavigationOpen(previous => {\r\n const newValue = !previous;\r\n document.cookie = `navigationOpen=${newValue}; max-age=${YEAR_IN_SECONDS}; path=/`;\r\n return newValue;\r\n });\r\n }}\r\n sx={{ marginRight: 2 }}\r\n >\r\n {navigationOpen ? <MenuOpen /> : <Menu />}\r\n </IconButton>\r\n }\r\n\r\n <AppTitle />\r\n\r\n <ToolbarAccount />\r\n </Toolbar>\r\n </AppBar>\r\n\r\n {props.navigation &&\r\n <NavigationRail\r\n navigation={props.navigation}\r\n expanded={navigationOpen}\r\n setExpanded={newValue => {\r\n setNavigationOpen(newValue);\r\n document.cookie = `navigationOpen=${newValue}; max-age=${YEAR_IN_SECONDS}; path=/`;\r\n }}\r\n />\r\n }\r\n\r\n <Box component=\"main\" sx={{ flexGrow: 1, display: \"flex\", flexDirection: \"column\", minWidth: 0, height: \"100%\", overflow: \"hidden\" }}>\r\n <DrawerHeader />\r\n <Box sx={{ flex: 1, overflow: \"auto\", position: \"relative\" }}>\r\n {props.children}\r\n </Box>\r\n </Box>\r\n </Box>\r\n\r\n {(isFetching || isMutating) && <LinearProgress sx={{ position: \"fixed\", top: { xs: 56, sm: 64 }, left: 0, right: 0 }} />}\r\n </Fragment>\r\n );\r\n};\r\n","import { ThemeProvider } from \"@mui/material\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers\";\r\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\r\nimport { createServerFn } from \"@tanstack/react-start\";\r\nimport { getCookie } from \"@tanstack/react-start/server\";\r\nimport dayjs from \"dayjs\";\r\nimport i18n from \"i18next\";\r\nimport LanguageDetector from \"i18next-browser-languagedetector\";\r\nimport { useEffect, useEffectEvent } from \"react\";\r\nimport { initReactI18next } from \"react-i18next\";\r\nimport { resources } from \"virtual:wcz-layout\";\r\nimport z from \"zod\";\r\nimport { DialogsProvider } from \"./DialogsProvider\";\r\nimport type { CssVarsThemeOptions } from \"@mui/material\";\r\nimport type { Navigation } from \"~/models/Navigation\";\r\nimport type { FC, ReactNode } from \"react\";\r\nimport { useGetTheme } from \"~/hooks/ThemeHook\";\r\nimport { Layout } from \"~/components/core/Layout\";\r\n\r\nconst YEAR_IN_MINUTES = 60 * 24 * 365;\r\n\r\ni18n\r\n .use(LanguageDetector)\r\n .use(initReactI18next)\r\n .init({\r\n resources,\r\n fallbackLng: \"en\",\r\n supportedLngs: Object.keys(resources),\r\n detection: {\r\n caches: [\"cookie\"],\r\n cookieMinutes: YEAR_IN_MINUTES,\r\n },\r\n interpolation: { escapeValue: false },\r\n });\r\n\r\ninterface ProvidersProps {\r\n navigation?: Navigation;\r\n theme?: Pick<CssVarsThemeOptions, \"colorSchemes\" | \"components\">;\r\n children: ReactNode;\r\n}\r\n\r\nexport const LayoutProvider: FC<ProvidersProps> = ({ navigation, theme, children }) => {\r\n const createdTheme = useGetTheme(theme);\r\n\r\n const languageChangedHandler = useEffectEvent(() => {\r\n z.config(z.core.locales[i18n.language as keyof typeof z.core.locales]());\r\n dayjs.locale(i18n.language);\r\n });\r\n\r\n useEffect(() => {\r\n languageChangedHandler();\r\n\r\n i18n.on(\"languageChanged\", languageChangedHandler);\r\n return () => { i18n.off(\"languageChanged\", languageChangedHandler); };\r\n }, []);\r\n\r\n return (\r\n <ThemeProvider theme={createdTheme}>\r\n <LocalizationProvider key={i18n.language} dateAdapter={AdapterDayjs} adapterLocale={i18n.language}>\r\n <DialogsProvider>\r\n <Layout navigation={navigation}>\r\n {children}\r\n </Layout>\r\n </DialogsProvider>\r\n </LocalizationProvider>\r\n </ThemeProvider>\r\n );\r\n};\r\n\r\nexport const setSSRLanguage = createServerFn().handler(async () => {\r\n const language = getCookie(i18n.services.languageDetector.options.lookupCookie) || \"en\";\r\n dayjs.locale(language);\r\n z.config(z.core.locales[language as keyof typeof z.core.locales]());\r\n await i18n.changeLanguage(language);\r\n});\r\n"],"names":["closeDialogUi","closeDialog","jsxs","jsx","Typography","Fragment","i18n","List","ListSubheader","ListItemButton","ListItemIcon","ListItemText","Avatar","Box","ListItem","Menu","z"],"mappings":"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"}
|