wcz-test 3.4.4 → 3.4.6
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/index.d.ts +2 -34
- package/dist/src/components/core/AppTitle.d.ts +3 -0
- package/dist/src/components/core/Layout.d.ts +10 -0
- package/dist/src/components/core/Markdown.d.ts +6 -0
- package/dist/src/components/core/PageHeader.d.ts +9 -0
- package/dist/src/components/core/TableContainer.d.ts +3 -0
- package/dist/src/components/core/ToolbarAccount.d.ts +2 -0
- package/dist/src/components/core/TypographyWithIcon.d.ts +7 -0
- package/dist/src/components/core/navigation/NavigationList.d.ts +21 -0
- package/dist/src/components/core/navigation/NavigationListItem.d.ts +15 -0
- package/dist/src/components/core/navigation/NavigationRail.d.ts +12 -0
- package/dist/src/components/data-grid/ChipInputCell.d.ts +9 -0
- package/dist/src/components/data-grid/EditableColumnHeader.d.ts +2 -0
- package/dist/src/components/file/Dropzone.d.ts +8 -0
- package/dist/src/components/file/FileViewer.d.ts +21 -0
- package/dist/src/components/file/fileViewer/FileViewerGrid.d.ts +17 -0
- package/dist/src/components/file/fileViewer/FileViewerList.d.ts +12 -0
- package/dist/src/components/file/fileViewer/ImageViewer.d.ts +6 -0
- package/dist/src/components/file/fileViewer/common/ActionsMenu.d.ts +15 -0
- package/dist/src/components/form/FormAutocomplete.d.ts +7 -0
- package/dist/src/components/form/FormCheckbox.d.ts +7 -0
- package/dist/src/components/form/FormDatePicker.d.ts +8 -0
- package/dist/src/components/form/FormDateTimePicker.d.ts +8 -0
- package/dist/src/components/form/FormNumberField.d.ts +9 -0
- package/dist/src/components/form/FormRadioGroup.d.ts +13 -0
- package/dist/src/components/form/FormSlider.d.ts +7 -0
- package/dist/src/components/form/FormSubmitButton.d.ts +4 -0
- package/dist/src/components/form/FormSwitch.d.ts +7 -0
- package/dist/src/components/form/FormTextField.d.ts +7 -0
- package/dist/src/components/router/RouterButton.d.ts +6 -0
- package/dist/src/components/router/RouterError.d.ts +7 -0
- package/dist/src/components/router/RouterGridActionsCellItem.d.ts +6 -0
- package/dist/src/components/router/RouterIconButton.d.ts +6 -0
- package/dist/src/components/router/RouterLink.d.ts +6 -0
- package/dist/src/components/router/RouterListItemButton.d.ts +6 -0
- package/dist/src/components/router/RouterNotFound.d.ts +1 -0
- package/dist/src/components/router/RouterTab.d.ts +6 -0
- package/dist/src/contexts/DialogsContext.d.ts +6 -0
- package/dist/src/contexts/FileContext.d.ts +13 -0
- package/dist/src/contexts/LayoutContext.d.ts +11 -0
- package/dist/src/hooks/DialogsHooks.d.ts +42 -0
- package/dist/src/hooks/FileHooks.d.ts +27 -0
- package/dist/src/hooks/FormHooks.d.ts +40 -0
- package/dist/src/hooks/PeopleSoftHooks.d.ts +23 -0
- package/dist/src/hooks/ThemeHook.d.ts +2 -0
- package/dist/src/index.d.ts +35 -0
- package/dist/src/models/KeycloakSettings.d.ts +8 -0
- package/dist/src/models/Navigation.d.ts +18 -0
- package/dist/src/models/NavigationParams.d.ts +6 -0
- package/dist/src/models/User.d.ts +8 -0
- package/dist/src/models/email/Email.d.ts +9 -0
- package/dist/src/models/email/EmailAttachment.d.ts +4 -0
- package/dist/src/models/file/FileActions.d.ts +4 -0
- package/dist/src/models/file/FileMeta.d.ts +11 -0
- package/dist/src/models/peoplesoft/Department.d.ts +14 -0
- package/dist/src/models/peoplesoft/Employee.d.ts +38 -0
- package/dist/src/models/peoplesoft/EmployeeCategoryGroup.d.ts +5 -0
- package/dist/src/models/peoplesoft/EmployeeStatus.d.ts +5 -0
- package/dist/src/providers/DialogsProvider.d.ts +6 -0
- package/dist/src/providers/LayoutProvider.d.ts +11 -0
- package/dist/src/routes/__root.d.ts +6 -0
- package/dist/src/utils/ClientUtils.d.ts +46 -0
- package/dist/src/utils/FormUtils.d.ts +7 -0
- package/dist/src/utils/i18n.d.ts +1 -0
- package/dist/vite.config.d.ts +2 -0
- package/package.json +14 -12
- package/dist/index.js +0 -1015
- package/dist/index.js.map +0 -1
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/core/TypographyWithIcon.tsx","../src/components/core/PageHeader.tsx","../src/components/core/TableContainer.tsx","../src/components/file/Dropzone.tsx","../src/components/file/FileViewer.tsx","../src/components/file/fileViewer/FileViewerGrid.tsx","../src/components/file/fileViewer/common/ActionsMenu.tsx","../src/components/file/fileViewer/FileViewerList.tsx","../src/components/file/fileViewer/ImageViewer.tsx","../src/components/data-grid/ChipInputCell.tsx","../src/components/data-grid/EditableColumnHeader.tsx","../src/components/router/RouterButton.tsx","../src/components/router/RouterGridActionsCellItem.tsx","../src/components/router/RouterIconButton.tsx","../src/components/router/RouterLink.tsx","../src/components/router/RouterTab.tsx","../src/components/router/RouterListItemButton.tsx","../src/components/router/RouterNotFound.tsx","../src/components/router/RouterError.tsx","../src/providers/LayoutProvider.tsx","../src/providers/DialogsProvider.tsx","../src/contexts/DialogsContext.ts","../src/index.ts","../src/utils/ClientUtils.ts","../src/hooks/FormHooks.ts","../src/hooks/DialogsHooks.tsx","../src/hooks/FileHooks.ts"],"sourcesContent":["import { Stack, SxProps, Theme, Typography, TypographyProps } from \"@mui/material\";\r\n\r\nconst stackSxProps = [\r\n \"margin\", \"marginTop\", \"marginRight\", \"marginBottom\", \"marginLeft\", \"m\", \"mt\", \"mr\", \"mb\", \"ml\", \"mx\", \"my\",\r\n \"padding\", \"paddingTop\", \"paddingRight\", \"paddingBottom\", \"paddingLeft\", \"p\", \"pt\", \"pr\", \"pb\", \"pl\", \"px\", \"py\",\r\n \"flexGrow\", \"flexShrink\", \"flexBasis\", \"flexDirection\", \"alignItems\", \"justifyContent\",\r\n \"position\", \"zIndex\", \"top\", \"right\", \"bottom\", \"left\",\r\n \"gridGap\", \"gridColumnGap\", \"gridRowGap\", \"gridColumn\", \"gridRow\", \"gridAutoFlow\",\r\n \"gap\", \"columnGap\", \"rowGap\"\r\n];\r\n\r\ninterface TypographyWithIconProps extends TypographyProps {\r\n startIcon?: React.ReactNode;\r\n endIcon?: React.ReactNode;\r\n}\r\n\r\nexport const TypographyWithIcon: React.FC<TypographyWithIconProps> = ({ startIcon, endIcon, children, sx, gutterBottom, ...props }) => {\r\n const sxCopy = { ...sx };\r\n\r\n const stackStyles: SxProps<Theme> = {};\r\n if (sxCopy) {\r\n for (const current of stackSxProps) {\r\n if ((sxCopy as any)[current]) {\r\n (stackStyles as any)[current] = (sxCopy as any)[current];\r\n delete (sxCopy as any)[current];\r\n }\r\n }\r\n }\r\n\r\n return (\r\n <Stack direction=\"row\" alignItems=\"center\" gap={1} sx={stackStyles} mb={gutterBottom ? 0.7 : undefined}>\r\n {startIcon}\r\n <Typography {...props} sx={sxCopy}>{children}</Typography>\r\n {endIcon}\r\n </Stack>\r\n );\r\n};","import { CardHeader, SxProps, Theme, Typography } from \"@mui/material\";\r\nimport { FC, ReactNode } from \"react\";\r\n\r\ninterface PageHeaderProps {\r\n title: string;\r\n action?: ReactNode;\r\n sx?: SxProps<Theme>;\r\n}\r\n\r\nexport const PageHeader: FC<PageHeaderProps> = ({ title, action, sx }) => {\r\n return <CardHeader title={<Typography variant=\"h4\" fontWeight={600}>{title}</Typography>} action={action} sx={{ px: 0, ...sx }} />;\r\n};","import { Box, BoxProps } from \"@mui/material\";\r\nimport { FC, useEffect, useRef, useState } from \"react\";\r\n\r\nexport const TableContainer: FC<BoxProps> = ({ children, sx, ...props }) => {\r\n const reference = useRef<HTMLDivElement | null>(null);\r\n const [height, setHeight] = useState<number>();\r\n\r\n useEffect(() => {\r\n const element = reference.current;\r\n if (!element) return;\r\n\r\n const recompute = () => {\r\n if (!reference.current) return;\r\n const top = Math.ceil(reference.current.getBoundingClientRect().top);\r\n const avail = Math.max(0, window.innerHeight - top);\r\n setHeight(avail);\r\n };\r\n\r\n recompute();\r\n\r\n window.addEventListener(\"resize\", recompute);\r\n\r\n const ro = new ResizeObserver(recompute);\r\n ro.observe(document.documentElement);\r\n ro.observe(document.body);\r\n ro.observe(element);\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", recompute);\r\n ro.disconnect();\r\n };\r\n }, []);\r\n\r\n return (\r\n <Box\r\n ref={reference}\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n minHeight: 0,\r\n width: \"100%\",\r\n ...sx,\r\n }}\r\n height={height}\r\n {...props}\r\n >\r\n <Box sx={theme => ({\r\n flex: 1,\r\n minHeight: 0,\r\n height: \"100%\",\r\n \"& .MuiDataGrid-cell--editing\": {\r\n \"& .MuiInputBase-root\": {\r\n height: \"100%\",\r\n },\r\n },\r\n \"& .MuiDataGrid-columnHeaderTitle\": {\r\n fontWeight: 600,\r\n },\r\n \"& .Mui-error\": {\r\n backgroundColor: theme.palette.error.main,\r\n color: theme.palette.error.contrastText,\r\n },\r\n \"& .MuiDataGrid-booleanCell[data-value='true']\": {\r\n color: `${theme.palette.success.main} !important`,\r\n },\r\n \"& .MuiDataGrid-booleanCell[data-value='false']\": {\r\n color: `${theme.palette.error.main} !important`,\r\n },\r\n })}>\r\n {children}\r\n </Box>\r\n </Box>\r\n );\r\n}","import CloudUpload from \"@mui/icons-material/CloudUpload\";\r\nimport { Paper, SxProps, Theme, Typography, useTheme } from \"@mui/material\";\r\nimport { CSSProperties, FC } from \"react\";\r\nimport { DropzoneOptions, useDropzone } from \"react-dropzone\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst baseStyle: CSSProperties = {\r\n flex: 1,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n padding: \"20px\",\r\n borderWidth: 2,\r\n borderRadius: 2,\r\n borderStyle: \"dashed\",\r\n outline: \"none\",\r\n transition: \"border .24s ease-in-out\",\r\n cursor: \"pointer\",\r\n};\r\n\r\ninterface DropzoneProps extends DropzoneOptions {\r\n sx?: SxProps<Theme>;\r\n}\r\n\r\nexport const Dropzone: FC<DropzoneProps> = ({ sx, ...props }) => {\r\n const { getRootProps, getInputProps, isFocused, isDragAccept, isDragReject, } = useDropzone(props);\r\n const { t } = useTranslation();\r\n const theme = useTheme();\r\n\r\n const style = {\r\n ...baseStyle,\r\n ...(isFocused ? { borderColor: theme.palette.primary.main } : {}),\r\n ...(isDragAccept ? { borderColor: theme.palette.success.main } : {}),\r\n ...(isDragReject ? { borderColor: theme.palette.error.main } : {})\r\n };\r\n\r\n return (\r\n <Paper variant=\"outlined\" {...getRootProps({ style })} sx={sx}>\r\n <input {...getInputProps()} style={{ display: \"none\" }} />\r\n <CloudUpload />\r\n <Typography>{t(\"Layout.File.DragSomeFilesHereOrClickToSelectThem\")}</Typography>\r\n </Paper>\r\n );\r\n};","import { ComponentType, FC, ReactNode, useState } from \"react\";\r\nimport { FileContext } from \"~/contexts/FileContext\";\r\nimport { useGetFileMetas } from \"~/hooks/FileHooks\";\r\nimport { FileMeta } from \"~/models/file/FileMeta\";\r\nimport { FileActions } from \"~/models/file/FileActions\";\r\nimport { FileViewerGrid, FileViewerGridProps } from \"./fileViewer/FileViewerGrid\";\r\nimport { FileViewerList, FileViewerListProps } from \"./fileViewer/FileViewerList\";\r\nimport { ImageViewer } from \"./fileViewer/ImageViewer\";\r\n\r\ninterface FileViewerComponent {\r\n Grid: ComponentType<FileViewerGridProps>;\r\n List: ComponentType<FileViewerListProps>;\r\n}\r\n\r\ninterface FileViewerProps {\r\n /** Insert your record ID (can be multiple splitted by comma) */\r\n subId: string | undefined | null;\r\n onDelete?: (params: { remainingFileMetas: FileMeta[]; deletedFileMeta: FileMeta }) => void;\r\n actions?: FileActions;\r\n children: (component: FileViewerComponent) => ReactNode;\r\n}\r\n\r\nexport const FileViewer: FC<FileViewerProps> = ({ subId, onDelete, actions, children }) => {\r\n const { data: fileMetas = [] } = useGetFileMetas(subId, { enabled: !!subId });\r\n const [imageId, setImageId] = useState<string>(\"\");\r\n\r\n const components: FileViewerComponent = { Grid: FileViewerGrid, List: FileViewerList };\r\n\r\n if (fileMetas.length === 0) return null;\r\n\r\n return (\r\n <FileContext.Provider value={{ fileMetas, onDelete, actions, setImageId }}>\r\n {children(components)}\r\n <ImageViewer metaId={imageId} />\r\n </FileContext.Provider>\r\n );\r\n};","import MoreVert from \"@mui/icons-material/MoreVert\";\r\nimport { Box, IconButton, ImageListItem, ImageListItemBar, Stack, SxProps, Theme, Tooltip } from \"@mui/material\";\r\nimport { grey } from \"@mui/material/colors\";\r\nimport React, { Fragment, useEffect, useState } from \"react\";\r\nimport { useFile } from \"~/contexts/FileContext\";\r\nimport { useDownloadFile, useGetFileThumbnail, useOpenFile } from \"~/hooks/FileHooks\";\r\nimport { FileMeta } from \"~/models/file/FileMeta\";\r\nimport { ActionsMenu } from \"./common/ActionsMenu\";\r\n\r\nconst IMAGE_SIZE: number = 150;\r\n\r\ntype FileViewerGridItemBar = \"hidden\" | \"always\" | \"onMouseEnter\";\r\n\r\nexport interface FileViewerGridProps {\r\n size?: number;\r\n itemBar?: FileViewerGridItemBar;\r\n sx?: SxProps<Theme>;\r\n}\r\n\r\nexport const FileViewerGrid: React.FC<FileViewerGridProps> = ({ sx, size, itemBar }) => {\r\n const { fileMetas } = useFile();\r\n\r\n return (\r\n <Stack direction=\"row\" spacing={1} sx={{ overflow: \"auto\", ...sx }}>\r\n {fileMetas.map(fileMeta => (\r\n <GridFileViewerItem\r\n key={fileMeta.id}\r\n meta={fileMeta}\r\n size={size}\r\n itemBar={itemBar}\r\n />\r\n ))}\r\n </Stack>\r\n );\r\n};\r\n\r\ninterface GridFileViewerItemProps {\r\n meta: FileMeta;\r\n size?: number;\r\n itemBar?: FileViewerGridItemBar;\r\n}\r\n\r\nexport const GridFileViewerItem: React.FC<GridFileViewerItemProps> = ({ meta, size, itemBar }) => {\r\n const { setImageId, actions } = useFile();\r\n const [showItemBar, setShowItemBar] = useState<boolean>(itemBar === \"always\");\r\n const [menu, setMenu] = useState<{ mouseX: number; mouseY: number; } | null>(null);\r\n\r\n useEffect(() => {\r\n setShowItemBar(itemBar === \"always\");\r\n }, [itemBar]);\r\n\r\n const { data: source } = useGetFileThumbnail(meta);\r\n\r\n const handleOnMouseEnter = () => setShowItemBar(true);\r\n const handleOnMouseLeave = () => itemBar !== \"always\" && setShowItemBar(false);\r\n\r\n const openMenu = (event: React.MouseEvent) => {\r\n setMenu(menu === null ? { mouseX: event.clientX, mouseY: event.clientY, } : null);\r\n setTimeout(() => setShowItemBar(true));\r\n };\r\n\r\n const { mutate: openFile } = useOpenFile();\r\n const { mutate: download } = useDownloadFile();\r\n\r\n const onClick = () => {\r\n switch (meta.mediaType) {\r\n case \"image\": { return setImageId(meta.id); }\r\n case \"application\": { return openFile(meta); }\r\n case \"video\": { return openFile(meta); }\r\n default: { return download(meta); }\r\n }\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <ImageListItem sx={{ width: size ?? IMAGE_SIZE, height: size ?? IMAGE_SIZE }} onMouseEnter={handleOnMouseEnter} onMouseLeave={handleOnMouseLeave}>\r\n <Box\r\n component=\"img\"\r\n src={source}\r\n loading=\"lazy\"\r\n alt={\"thumbnail-\" + meta.id}\r\n onClick={onClick}\r\n sx={{ cursor: \"pointer\", objectFit: \"contain\", width: size ?? IMAGE_SIZE, height: size ?? IMAGE_SIZE }}\r\n />\r\n {(itemBar !== \"hidden\" && showItemBar) &&\r\n <ImageListItemBar\r\n title={\r\n <Tooltip title={meta.fileName}>\r\n <Box>\r\n {meta.fileName}\r\n </Box>\r\n </Tooltip>\r\n }\r\n actionIcon={\r\n (actions?.download !== false || actions?.delete !== false) &&\r\n <IconButton sx={{ color: grey[100] }} onClick={openMenu}>\r\n <MoreVert />\r\n </IconButton>\r\n }\r\n />\r\n }\r\n </ImageListItem>\r\n\r\n {(actions?.download !== false || actions?.delete !== false) && <ActionsMenu meta={meta} menu={menu} setMenu={setMenu} />}\r\n </Fragment>\r\n );\r\n};","import Delete from \"@mui/icons-material/Delete\";\r\nimport FileDownload from \"@mui/icons-material/FileDownload\";\r\nimport { List, ListItemButton, ListItemIcon, ListItemText, Menu } from \"@mui/material\";\r\nimport { FC } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useFile } from \"~/contexts/FileContext\";\r\nimport { useDialogs } from \"~/hooks/DialogsHooks\";\r\nimport { useDeleteFile, useDownloadFile } from \"~/hooks/FileHooks\";\r\nimport { FileMeta } from \"~/models/file/FileMeta\";\r\n\r\ninterface ActionsMenuProps {\r\n meta: FileMeta;\r\n menu: { mouseX: number; mouseY: number } | null;\r\n setMenu: (menu: { mouseX: number; mouseY: number } | null) => void;\r\n}\r\n\r\nexport const ActionsMenu: FC<ActionsMenuProps> = ({ meta, menu, setMenu }) => {\r\n const { t } = useTranslation();\r\n const { fileMetas, onDelete, actions } = useFile();\r\n const { confirm } = useDialogs();\r\n\r\n const handleMenuClose = () => { setMenu(null); };\r\n\r\n const { mutate: download, isPending: isDownloading } = useDownloadFile();\r\n const { mutate: deleteFile, isPending: isDeleting } = useDeleteFile();\r\n\r\n const handleOnDownload = () => {\r\n handleMenuClose();\r\n download(meta);\r\n };\r\n\r\n const handleOnDelete = async () => {\r\n if (!await confirm(t(\"Layout.File.AreYouSureYouWantToDelete\", { fileName: meta.fileName })))\r\n return;\r\n\r\n deleteFile(meta);\r\n handleMenuClose();\r\n\r\n if (onDelete) {\r\n const remainingFileMetas: FileMeta[] = fileMetas.filter(m => m.id !== meta.id);\r\n onDelete({ remainingFileMetas, deletedFileMeta: meta });\r\n }\r\n };\r\n\r\n return (\r\n <Menu open={menu !== null} onClose={handleMenuClose} anchorReference=\"anchorPosition\" variant=\"menu\"\r\n anchorPosition={menu === null ? undefined : { top: menu.mouseY, left: menu.mouseX }}>\r\n <List disablePadding>\r\n {actions?.download !== false &&\r\n <ListItemButton onClick={handleOnDownload} disabled={isDownloading}>\r\n <ListItemIcon>\r\n <FileDownload />\r\n </ListItemIcon>\r\n <ListItemText>{t(\"Layout.File.Download\")}</ListItemText>\r\n </ListItemButton>\r\n }\r\n {actions?.delete !== false &&\r\n <ListItemButton onClick={handleOnDelete} disabled={isDeleting}>\r\n <ListItemIcon>\r\n <Delete />\r\n </ListItemIcon>\r\n <ListItemText>{t(\"Layout.File.Delete\")}</ListItemText>\r\n </ListItemButton>\r\n }\r\n </List>\r\n </Menu>\r\n );\r\n};","import AttachFile from \"@mui/icons-material/AttachFile\";\r\nimport Image from \"@mui/icons-material/Image\";\r\nimport MoreVert from \"@mui/icons-material/MoreVert\";\r\nimport SmartDisplay from \"@mui/icons-material/SmartDisplay\";\r\nimport { IconButton, List, ListItemButton, ListItemIcon, ListItemText, SxProps, Theme } from \"@mui/material\";\r\nimport { FC, Fragment, useState } from \"react\";\r\nimport { useFile } from \"~/contexts/FileContext\";\r\nimport { useDownloadFile, useOpenFile } from \"~/hooks/FileHooks\";\r\nimport { FileMeta } from \"~/models/file/FileMeta\";\r\nimport { ActionsMenu } from \"./common/ActionsMenu\";\r\n\r\nexport interface FileViewerListProps {\r\n sx?: SxProps<Theme>;\r\n}\r\n\r\nexport const FileViewerList: FC<FileViewerListProps> = ({ sx }) => {\r\n const { fileMetas } = useFile();\r\n\r\n return (\r\n <List dense sx={sx}>\r\n {fileMetas.map(fileMeta =>\r\n <ListFileViewerItem\r\n key={fileMeta.id}\r\n meta={fileMeta}\r\n />\r\n )}\r\n </List>\r\n );\r\n};\r\n\r\ninterface ListFileViewerItemProps {\r\n meta: FileMeta;\r\n}\r\n\r\nexport const ListFileViewerItem: React.FC<ListFileViewerItemProps> = ({ meta }) => {\r\n const { setImageId, actions } = useFile();\r\n const [menu, setMenu] = useState<{ mouseX: number; mouseY: number; } | null>(null);\r\n\r\n const openMenu = (event: React.MouseEvent) => {\r\n event.stopPropagation();\r\n setMenu(menu === null ? { mouseX: event.clientX, mouseY: event.clientY, } : null);\r\n };\r\n\r\n const { mutate: openFile } = useOpenFile();\r\n const { mutate: download } = useDownloadFile();\r\n\r\n const onClick = () => {\r\n switch (meta.mediaType) {\r\n case \"image\": { return setImageId(meta.id); }\r\n case \"application\": { return openFile(meta); }\r\n case \"video\": { return openFile(meta); }\r\n default: { return download(meta); }\r\n }\r\n };\r\n\r\n const icon = () => {\r\n switch (meta.mediaType) {\r\n case \"image\": {\r\n return <Image />;\r\n }\r\n case \"video\": {\r\n return <SmartDisplay />;\r\n }\r\n default: {\r\n return <AttachFile />;\r\n }\r\n }\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <ListItemButton key={meta.id} onClick={onClick}>\r\n <ListItemIcon>\r\n {icon()}\r\n </ListItemIcon>\r\n <ListItemText primary={`${meta.fileName}.${meta.fileExtension}`} />\r\n {(actions?.download !== false || actions?.delete !== false) &&\r\n <IconButton edge=\"end\" onClick={openMenu}>\r\n <MoreVert />\r\n </IconButton>\r\n }\r\n </ListItemButton>\r\n\r\n {(actions?.download !== false || actions?.delete !== false) && <ActionsMenu meta={meta} menu={menu} setMenu={setMenu} />}\r\n </Fragment>\r\n );\r\n};","import Close from \"@mui/icons-material/Close\";\r\nimport { Box, Dialog, Fab } from \"@mui/material\";\r\nimport React, { useEffect } from \"react\";\r\nimport { useFile } from \"~/contexts/FileContext\";\r\nimport { useGetFile } from \"~/hooks/FileHooks\";\r\nimport { FileMeta } from \"~/models/file/FileMeta\";\r\n\r\ninterface ImageViewerProps {\r\n metaId: string;\r\n}\r\n\r\nexport const ImageViewer: React.FC<ImageViewerProps> = ({ metaId }) => {\r\n const { fileMetas, setImageId } = useFile();\r\n\r\n const meta = fileMetas.find(m => m.id === metaId)!;\r\n\r\n const { data: source } = useGetFile(meta);\r\n\r\n useEffect(() => {\r\n if (globalThis.window !== undefined && metaId)\r\n globalThis.addEventListener(\"keydown\", handleOnKeydown);\r\n\r\n return () => { globalThis.removeEventListener(\"keydown\", handleOnKeydown); };\r\n }, [metaId]);\r\n\r\n const handleOnKeydown = (event: KeyboardEvent) => {\r\n const images: FileMeta[] = fileMetas.filter(m => m.mediaType === \"image\");\r\n const imageIndex: number = images.findIndex(m => m.id === metaId);\r\n\r\n switch (event.key) {\r\n case \"ArrowLeft\": {\r\n return handleOnArrowLeft(images, imageIndex);\r\n }\r\n case \"ArrowRight\": {\r\n return handleOnArrowRight(images, imageIndex);\r\n }\r\n case \"Backspace\":\r\n case \"Escape\": {\r\n event.preventDefault();\r\n return onClose();\r\n }\r\n }\r\n };\r\n\r\n const handleOnArrowLeft = (images: FileMeta[], index: number) => {\r\n if (index > 0) {\r\n const previousFile: FileMeta = images[index - 1];\r\n setImageId(previousFile.id);\r\n }\r\n };\r\n\r\n const handleOnArrowRight = (images: FileMeta[], index: number) => {\r\n if (index < images.length - 1) {\r\n const nextFile: FileMeta = images[index + 1];\r\n setImageId(nextFile.id);\r\n }\r\n };\r\n\r\n const onClose = () => setImageId(\"\");\r\n\r\n if (!metaId) return null;\r\n\r\n return (\r\n <Dialog open onClose={onClose} maxWidth=\"xl\">\r\n <Box component=\"img\" src={source} alt={metaId} sx={{ maxWidth: \"100vw\", maxHeight: { xs: \"calc(100vh - 56px)\", sm: \"calc(100vh - 64px)\" } }} />\r\n\r\n <Fab size=\"medium\" onClick={onClose} sx={{ position: \"fixed\", top: 8, right: 8 }}>\r\n <Close />\r\n </Fab>\r\n </Dialog>\r\n );\r\n};","import { Chip, ChipProps, Stack } from \"@mui/material\";\r\nimport { GridRenderCellParams, GridValidRowModel } from \"@mui/x-data-grid-premium\";\r\n\r\nconst isArray = (value: any) => Array.isArray(value);\r\n\r\ninterface ChipInputCellProps<T extends GridValidRowModel> {\r\n params: GridRenderCellParams<T>;\r\n slotProps?: ChipProps;\r\n getLabel?: (object: T) => string | number;\r\n}\r\n\r\nexport const ChipInputCell = <T extends GridValidRowModel>({ params, slotProps, getLabel }: ChipInputCellProps<T>) => {\r\n if (!params.value) return null;\r\n\r\n const getLabelValue = (value: any) => {\r\n if (getLabel) return getLabel(value);\r\n return value;\r\n };\r\n\r\n if (isArray(params.value))\r\n return (\r\n <Stack direction=\"row\" alignItems=\"center\" gap={1} sx={{ overflowX: \"auto\", height: \"100%\", width: params.colDef.computedWidth }}>\r\n {params.value.map((value: any, index) =>\r\n <Chip key={`${index + 1}-chip-input-cell`} label={getLabelValue(value)} {...slotProps} />\r\n )}\r\n </Stack>\r\n );\r\n\r\n return <Chip label={getLabelValue(params.value)} {...slotProps} />;\r\n};","import Edit from \"@mui/icons-material/Edit\";\r\nimport { GridColumnHeaderParams, GridValidRowModel } from \"@mui/x-data-grid-premium\";\r\nimport { TypographyWithIcon } from \"../core/TypographyWithIcon\";\r\n\r\nexport const EditableColumnHeader = <T extends GridValidRowModel>({ colDef }: GridColumnHeaderParams<T>) => {\r\n return <TypographyWithIcon endIcon={<Edit color=\"disabled\" fontSize=\"small\" />} variant=\"body2\" className=\"MuiDataGrid-columnHeaderTitle\">{colDef.headerName}</TypographyWithIcon>;\r\n};","import { Button, ButtonProps } from \"@mui/material\";\r\nimport type { LinkComponent } from \"@tanstack/react-router\";\r\nimport { createLink } from \"@tanstack/react-router\";\r\nimport React from \"react\";\r\n\r\nconst Component = React.forwardRef<HTMLAnchorElement, ButtonProps<\"a\">>(function ButtonComponent(props, reference) {\r\n return <Button ref={reference} component=\"a\" {...props} />\r\n});\r\n\r\nconst CreatedComponent = createLink(Component);\r\n\r\nexport const RouterButton: LinkComponent<typeof Component> = (props) => {\r\n return <CreatedComponent {...props} />\r\n};","import { GridActionsCellItem, GridActionsCellItemProps } from \"@mui/x-data-grid-premium\";\r\nimport type { LinkComponent } from \"@tanstack/react-router\";\r\nimport { createLink } from \"@tanstack/react-router\";\r\nimport React from \"react\";\r\n\r\nconst Component = React.forwardRef<HTMLButtonElement, GridActionsCellItemProps>(\r\n function GridActionsCellItemComponent(props, reference) {\r\n return <GridActionsCellItem ref={reference} component=\"a\" {...props} />\r\n }\r\n) as React.ForwardRefExoticComponent<GridActionsCellItemProps & React.RefAttributes<HTMLButtonElement>>;\r\n\r\nconst CreatedComponent = createLink(Component);\r\n\r\nexport const RouterGridActionsCellItem: LinkComponent<typeof Component> = (props) => {\r\n return <CreatedComponent {...props} />\r\n};","import { IconButton, IconButtonProps } from \"@mui/material\";\r\nimport type { LinkComponent } from \"@tanstack/react-router\";\r\nimport { createLink } from \"@tanstack/react-router\";\r\nimport React from \"react\";\r\n\r\nconst Component = React.forwardRef<HTMLAnchorElement, IconButtonProps<\"a\">>(function IconButtonComponent(props, reference) {\r\n return <IconButton ref={reference} component=\"a\" {...props} />\r\n});\r\n\r\nconst CreatedComponent = createLink(Component);\r\n\r\nexport const RouterIconButton: LinkComponent<typeof Component> = (props) => {\r\n return <CreatedComponent {...props} />\r\n};","import { Link, LinkProps } from \"@mui/material\";\r\nimport type { LinkComponent } from \"@tanstack/react-router\";\r\nimport { createLink } from \"@tanstack/react-router\";\r\nimport React from \"react\";\r\n\r\nconst Component = React.forwardRef<HTMLAnchorElement, LinkProps>(function LinkComponent(props, reference) {\r\n return <Link ref={reference} {...props} />\r\n});\r\n\r\nconst CreatedComponent = createLink(Component);\r\n\r\nexport const RouterLink: LinkComponent<typeof Component> = (props) => {\r\n return <CreatedComponent {...props} />\r\n};","import { Tab, TabProps } from \"@mui/material\";\r\nimport type { LinkComponent } from \"@tanstack/react-router\";\r\nimport { createLink } from \"@tanstack/react-router\";\r\nimport React from \"react\";\r\n\r\nconst Component = React.forwardRef<HTMLAnchorElement, TabProps<\"a\">>(function TabComponent(props, reference) {\r\n return <Tab ref={reference} component=\"a\" {...props} />\r\n});\r\n\r\nconst CreatedComponent = createLink(Component);\r\n\r\nexport const RouterTab: LinkComponent<typeof Component> = (props) => {\r\n return <CreatedComponent {...props} />\r\n};","import { ListItemButton, ListItemButtonProps } from \"@mui/material\";\r\nimport type { LinkComponent } from \"@tanstack/react-router\";\r\nimport { createLink } from \"@tanstack/react-router\";\r\nimport React from \"react\";\r\n\r\nconst Component = React.forwardRef<HTMLAnchorElement, ListItemButtonProps<\"a\">>(function ButtonComponent(props, reference) {\r\n return <ListItemButton ref={reference} component=\"a\" {...props} />\r\n});\r\n\r\nconst CreatedComponent = createLink(Component);\r\n\r\nexport const RouterListItemButton: LinkComponent<typeof Component> = (props) => {\r\n return <CreatedComponent {...props} />\r\n};\r\n","import { Box, Divider, Typography } from \"@mui/material\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nexport function RouterNotFound() {\r\n const { t } = useTranslation();\r\n\r\n return (\r\n <Box height=\"100vh\" display=\"flex\" flexDirection=\"column\" alignItems=\"center\" justifyContent=\"center\" textAlign=\"center\" px={2} >\r\n <Box display=\"flex\" alignItems=\"center\" mb={4}>\r\n <Typography variant=\"h3\" component=\"span\" fontWeight={500} sx={{ lineHeight: 1 }}>404</Typography>\r\n <Divider orientation=\"vertical\" flexItem sx={{ mx: 3 }} />\r\n <Typography variant=\"h5\" component=\"span\">{t(\"Layout.ThisPageCouldNotBeFound\")}</Typography>\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n","import { Box, Divider, Typography } from \"@mui/material\";\r\nimport type { ErrorComponentProps } from \"@tanstack/react-router\";\r\nimport { FC } from \"react\";\r\n\r\ninterface RouterErrorProps {\r\n error: ErrorComponentProps[\"error\"];\r\n}\r\n\r\nexport const RouterError: FC<RouterErrorProps> = ({ error }) => {\r\n\r\n return (\r\n <Box height=\"100vh\" display=\"flex\" flexDirection=\"column\" alignItems=\"center\" justifyContent=\"center\" textAlign=\"center\" px={2} >\r\n <Box display=\"flex\" alignItems=\"center\" mb={4}>\r\n <Typography variant=\"h3\" component=\"span\" fontWeight={500} sx={{ lineHeight: 1 }}>{error.name || \"500\"}</Typography>\r\n <Divider orientation=\"vertical\" flexItem sx={{ mx: 3 }} />\r\n <Typography variant=\"h5\" component=\"span\">{error.message}</Typography>\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n","import { CssVarsThemeOptions } from \"@mui/material\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers\";\r\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\r\nimport { FC, ReactNode, useEffect, useState } from \"react\";\r\nimport { I18nextProvider, useTranslation } from \"react-i18next\";\r\nimport * as z from \"zod\";\r\nimport { cs, en } from \"zod/locales\";\r\nimport { Layout } from \"~/components/core/Layout\";\r\nimport { LayoutContext } from \"~/contexts/LayoutContext\";\r\nimport { User } from \"~/models/User\";\r\nimport i18n from \"~/utils/i18n\";\r\nimport { DialogsProvider } from \"./DialogsProvider\";\r\nimport { NavigationParams } from \"~/models/NavigationParams\";\r\nimport { Navigation } from \"~/models/Navigation\";\r\n\r\ninterface ProvidersProps {\r\n getNavigation?: (parameters: NavigationParams) => Navigation;\r\n theme?: Pick<CssVarsThemeOptions, \"colorSchemes\" | \"components\">;\r\n children: ReactNode;\r\n}\r\n\r\nexport const LayoutProvider: FC<ProvidersProps> = (props) => {\r\n const [user, setUser] = useState<User>({ employeeId: \"\", name: \"Unknown\", department: \"\", company: \"\", category: \"\" });\r\n const { t } = useTranslation();\r\n\r\n const navigation = props.getNavigation?.({ user, t })\r\n\r\n useEffect(() => { z.config(i18n.resolvedLanguage === \"cs\" ? cs() : en()) }, []);\r\n\r\n return (\r\n <I18nextProvider i18n={i18n}>\r\n <LocalizationProvider dateAdapter={AdapterDayjs} adapterLocale={i18n.resolvedLanguage}>\r\n <LayoutContext.Provider value={{ user: { get: user, set: setUser } }}>\r\n <Layout navigation={navigation} theme={props.theme}>¨\r\n <DialogsProvider>\r\n {props.children}\r\n </DialogsProvider>\r\n </Layout>\r\n </LayoutContext.Provider>\r\n </LocalizationProvider>\r\n </I18nextProvider>\r\n )\r\n}\r\n","import useEventCallback from \"@mui/utils/useEventCallback\";\r\nimport { useCallback, useId, useMemo, useRef, useState } from \"react\";\r\nimport { DialogsContext, type DialogsContextValue } from \"../contexts/DialogsContext\";\r\nimport type { DialogComponent, OpenDialog, OpenDialogOptions } from \"../hooks/DialogsHooks\";\r\n\r\ninterface DialogStackEntry<P, R> {\r\n key: string;\r\n open: boolean;\r\n promise: Promise<R>;\r\n Component: DialogComponent<P, R>;\r\n payload: P;\r\n onClose: (result: R) => Promise<void>;\r\n resolve: (result: R) => 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<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<P, R>(\r\n Component: DialogComponent<P, R>,\r\n payload: P,\r\n options: OpenDialogOptions<R> = {},\r\n ) {\r\n const { onClose = async () => { } } = options;\r\n\r\n let resolve: (result: R) => void;\r\n const promise = new Promise<R>((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<P, R> = {\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 = useCallback((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<R>(dialog: Promise<R>) {\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<R>(\r\n dialog: Promise<R>,\r\n result: R,\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 const contextValue = useMemo<DialogsContextValue>(() => ({ open: requestDialog, close: closeDialog }), [requestDialog, closeDialog]);\r\n\r\n return (\r\n <DialogsContext.Provider value={contextValue}>\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","import { createContext } from \"react\";\r\nimport type { CloseDialog, OpenDialog } from \"../hooks/DialogsHooks\";\r\n\r\nexport interface DialogsContextValue {\r\n open: OpenDialog;\r\n close: CloseDialog;\r\n}\r\n\r\nexport const DialogsContext = createContext<DialogsContextValue>({} as DialogsContextValue);","/* Components */\r\nexport { TypographyWithIcon } from \"./components/core/TypographyWithIcon\";\r\nexport { PageHeader } from \"./components/core/PageHeader\";\r\nexport { TableContainer } from \"./components/core/TableContainer\";\r\nexport { Dropzone } from \"./components/file/Dropzone\";\r\nexport { FileViewer } from \"./components/file/FileViewer\";\r\nexport { ChipInputCell } from \"./components/data-grid/ChipInputCell\";\r\nexport { EditableColumnHeader } from \"./components/data-grid/EditableColumnHeader\";\r\nexport { RouterButton } from \"./components/router/RouterButton\";\r\nexport { RouterGridActionsCellItem } from \"./components/router/RouterGridActionsCellItem\";\r\nexport { RouterIconButton } from \"./components/router/RouterIconButton\";\r\nexport { RouterLink } from \"./components/router/RouterLink\";\r\nexport { RouterTab } from \"./components/router/RouterTab\";\r\nexport { RouterListItemButton } from \"./components/router/RouterListItemButton\";\r\nexport { RouterNotFound } from \"./components/router/RouterNotFound\";\r\nexport { RouterError } from \"./components/router/RouterError\";\r\n\r\n/* Providers */\r\nexport { LayoutProvider } from \"./providers/LayoutProvider\";\r\n\r\n/* Utils */\r\nexport { uuidv7 } from \"uuidv7\";\r\nexport { Platform, rootRouteHead, wczApiClient } from \"./utils/ClientUtils\";\r\n\r\n/* Hooks */\r\nexport { useFieldContext, useFormContext, useLayoutForm, withLayoutForm } from \"./hooks/FormHooks\";\r\nexport { useDialogs } from \"./hooks/DialogsHooks\";\r\nexport { default as useLocalStorageState } from \"use-local-storage-state\";\r\nexport { useTranslation } from \"react-i18next\";\r\nexport { t } from \"i18next\";\r\nexport * from \"./hooks/FileHooks\";\r\n\r\n/* Models */\r\nexport type { DialogProps } from \"./hooks/DialogsHooks\";\r\nexport type { NavigationParams } from \"./models/NavigationParams\";\r\nexport type { Navigation } from \"./models/Navigation\";\r\nexport type { User } from \"./models/User\";\r\nexport type { FileMeta } from \"./models/file/FileMeta\";\r\nexport type { Email } from \"./models/email/Email\";\r\nexport type { EmailAttachment } from \"./models/email/EmailAttachment\";\r\nexport type { Employee } from \"./models/peoplesoft/Employee\";\r\nexport type { Department } from \"./models/peoplesoft/Department\";\r\nexport type { EmployeeCategoryGroup } from \"./models/peoplesoft/EmployeeCategoryGroup\";\r\nexport type { EmployeeStatus } from \"./models/peoplesoft/EmployeeStatus\";","import axios from \"axios\";\r\n\r\nexport class Platform {\r\n static get isAndroid() { return /android/i.test(this.userAgent); }\r\n static get isIOS() { return /iPad|iPhone|iPod/.test(this.userAgent); }\r\n static get isWindows() { return /windows/i.test(this.userAgent); }\r\n static get isMacOS() { return /Macintosh|MacIntel|MacPPC|Mac68K/.test(this.userAgent); }\r\n\r\n private static get userAgent() { return typeof navigator === \"undefined\" ? \"\" : navigator.userAgent; }\r\n}\r\n\r\ninterface RootRouteHeadProps {\r\n title: string;\r\n}\r\n\r\nexport const rootRouteHead = ({ title }: RootRouteHeadProps) => () => ({\r\n meta: [\r\n { charSet: \"utf-8\" },\r\n { name: \"viewport\", content: \"width=device-width, initial-scale=1\" },\r\n { title },\r\n { name: \"og:type\", content: \"website\" },\r\n { name: \"og:title\", content: title },\r\n { name: \"og:image\", content: \"/favicon-32x32.png\" }\r\n ],\r\n links: [\r\n { rel: \"apple-touch-icon\", sizes: \"180x180\", href: \"/apple-touch-icon.png\", },\r\n { rel: \"icon\", type: \"image/png\", sizes: \"32x32\", href: \"/favicon-32x32.png\", },\r\n { rel: \"icon\", type: \"image/png\", sizes: \"16x16\", href: \"/favicon-16x16.png\", },\r\n { rel: \"manifest\", href: \"/site.webmanifest\" },\r\n { rel: \"icon\", href: \"/favicon.ico\" },\r\n ],\r\n});\r\n\r\nexport const wczApiClient = axios.create();","import { createFormHook, createFormHookContexts } from \"@tanstack/react-form\";\r\nimport { FormAutocomplete as Autocomplete } from \"~/components/form/FormAutocomplete\";\r\nimport { FormCheckbox as Checkbox } from \"~/components/form/FormCheckbox\";\r\nimport { FormDatePicker as DatePicker } from \"~/components/form/FormDatePicker\";\r\nimport { FormDateTimePicker as DateTimePicker } from \"~/components/form/FormDateTimePicker\";\r\nimport { FormNumberField as NumberField } from \"~/components/form/FormNumberField\";\r\nimport { FormRadioGroup as RadioGroup } from \"~/components/form/FormRadioGroup\";\r\nimport { FormSlider as Slider } from \"~/components/form/FormSlider\";\r\nimport { FormSubmitButton as SubmitButton } from \"~/components/form/FormSubmitButton\";\r\nimport { FormSwitch as Switch } from \"~/components/form/FormSwitch\";\r\nimport { FormTextField as TextField } from \"~/components/form/FormTextField\";\r\n\r\nexport const { fieldContext, useFieldContext, formContext, useFormContext } = createFormHookContexts();\r\n\r\nexport const { useAppForm: useLayoutForm, withForm: withLayoutForm } =\r\n createFormHook({\r\n fieldComponents: {\r\n TextField,\r\n NumberField,\r\n Autocomplete,\r\n Checkbox,\r\n Switch,\r\n RadioGroup,\r\n Slider,\r\n DatePicker,\r\n DateTimePicker,\r\n },\r\n formComponents: {\r\n SubmitButton,\r\n },\r\n fieldContext,\r\n formContext,\r\n });\r\n","import Button from \"@mui/material/Button\";\r\nimport Dialog from \"@mui/material/Dialog\";\r\nimport DialogActions from \"@mui/material/DialogActions\";\r\nimport DialogContent from \"@mui/material/DialogContent\";\r\nimport DialogTitle from \"@mui/material/DialogTitle\";\r\nimport useEventCallback from \"@mui/utils/useEventCallback\";\r\nimport { ReactNode, useContext, useMemo } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { DialogsContext } from \"../contexts/DialogsContext\";\r\n\r\nexport interface OpenDialogOptions<R> {\r\n onClose?: (result: R) => Promise<void>;\r\n}\r\n\r\nexport interface AlertOptions {\r\n title?: ReactNode;\r\n}\r\n\r\nexport interface ConfirmOptions {\r\n title?: ReactNode;\r\n cancelText?: ReactNode;\r\n}\r\n\r\nexport interface DialogProps<P = undefined, R = void> {\r\n payload: P;\r\n open: boolean;\r\n onClose: (result: R) => Promise<void>;\r\n}\r\n\r\nexport type OpenAlertDialog = (message: ReactNode, options?: AlertOptions) => Promise<void>;\r\n\r\nexport type OpenConfirmDialog = (message: ReactNode, options?: ConfirmOptions) => Promise<boolean>;\r\n\r\nexport type DialogComponent<P, R> = React.ComponentType<DialogProps<P, R>>;\r\n\r\nexport interface OpenDialog {\r\n <P extends undefined, R>(Component: DialogComponent<P, R>, payload?: P, options?: OpenDialogOptions<R>): Promise<R>;\r\n <P, R>(Component: DialogComponent<P, R>, payload: P, options?: OpenDialogOptions<R>): Promise<R>;\r\n}\r\n\r\nexport type CloseDialog = <R>(dialog: Promise<R>, result: R) => Promise<R>;\r\n\r\nexport interface AlertDialogPayload extends AlertOptions {\r\n message: ReactNode;\r\n}\r\n\r\nexport type AlertDialogProps = DialogProps<AlertDialogPayload, void>\r\n\r\nexport function AlertDialog({ open, payload, onClose }: Readonly<AlertDialogProps>) {\r\n const { t } = useTranslation();\r\n\r\n return (\r\n <Dialog maxWidth=\"xs\" fullWidth open={open} onClose={() => onClose()} >\r\n <DialogTitle>{payload.title ?? t(\"Layout.Dialog.Alert\")}</DialogTitle>\r\n <DialogContent>{payload.message}</DialogContent>\r\n <DialogActions>\r\n <Button disabled={!open} onClick={() => onClose()}>\r\n {t(\"Layout.Dialog.Confirm\")}\r\n </Button>\r\n </DialogActions>\r\n </Dialog>\r\n );\r\n}\r\n\r\nexport interface ConfirmDialogPayload extends ConfirmOptions {\r\n message: ReactNode;\r\n}\r\n\r\nexport type ConfirmDialogProps = DialogProps<ConfirmDialogPayload, boolean>\r\n\r\nexport function ConfirmDialog({ open, payload, onClose }: Readonly<ConfirmDialogProps>) {\r\n const { t } = useTranslation();\r\n return (\r\n <Dialog maxWidth=\"xs\" fullWidth open={open} onClose={() => onClose(false)} >\r\n <DialogTitle>{payload.title ?? t(\"Layout.Dialog.Confirm\")}</DialogTitle>\r\n <DialogContent>{payload.message}</DialogContent>\r\n <DialogActions>\r\n <Button autoFocus disabled={!open} onClick={() => onClose(false)}>\r\n {payload.cancelText ?? t(\"Layout.Dialog.Cancel\")}\r\n </Button>\r\n <Button disabled={!open} onClick={() => onClose(true)}>\r\n {t(\"Layout.Dialog.Confirm\")}\r\n </Button>\r\n </DialogActions>\r\n </Dialog>\r\n );\r\n}\r\n\r\ninterface DialogHook {\r\n alert: OpenAlertDialog;\r\n confirm: OpenConfirmDialog;\r\n open: OpenDialog;\r\n close: CloseDialog;\r\n}\r\n\r\nexport function useDialogs(): DialogHook {\r\n const { open, close } = useContext(DialogsContext);\r\n\r\n const alert = useEventCallback<OpenAlertDialog>((message, { ...options } = {}) =>\r\n open(AlertDialog, { ...options, message }),\r\n );\r\n\r\n const confirm = useEventCallback<OpenConfirmDialog>((message, { ...options } = {}) =>\r\n open(ConfirmDialog, { ...options, message }),\r\n );\r\n\r\n return useMemo(() => ({ alert, confirm, open, close }), [alert, close, confirm, open]);\r\n}","import { DefinedInitialDataOptions, useMutation, UseMutationOptions, useQuery, useQueryClient } from \"@tanstack/react-query\";\r\nimport saveAs from \"file-saver\";\r\nimport { useState } from \"react\";\r\nimport { DetailedError, Upload as TusUpload } from \"tus-js-client\";\r\nimport { uuidv7 } from \"uuidv7\";\r\nimport { useAppTitle } from \"~/components/core/AppTitle\";\r\nimport { FileMeta } from \"~/models/file/FileMeta\";\r\nimport { wczApiClient } from \"~/utils/ClientUtils\";\r\n\r\nconst BASE_URL = import.meta.env.VITE_FILE_API_BASE_URL;\r\nconst QUERY_KEY = \"Files\";\r\nconst HOUR = 1000 * 60 * 60;\r\n\r\ntype OptionalId = string | undefined | null;\r\n\r\ntype BaseFileMetaArrayQueryOptions = Omit<DefinedInitialDataOptions<FileMeta[]>, \"queryKey\" | \"queryFn\" | \"staleTime\" | \"gcTime\" | \"refetchOnWindowFocus\" | \"initialData\">;\r\ntype BaseBlobQueryOptions = Omit<DefinedInitialDataOptions<Blob, Error, string>, \"queryKey\" | \"queryFn\" | \"select\" | \"staleTime\" | \"gcTime\" | \"refetchOnWindowFocus\" | \"initialData\">;\r\ntype BaseFileMetaMutationOptions = Omit<UseMutationOptions<FileMeta, Error, FileMeta>, \"mutationFn\" | \"onSettled\">;\r\ntype BaseBlobMutationOptions = Omit<UseMutationOptions<Blob, Error, FileMeta>, \"mutationFn\" | \"onSuccess\">;\r\ntype BaseStringMutationOptions = Omit<UseMutationOptions<string, Error, string>, \"mutationFn\" | \"onSettled\">;\r\n\r\nexport const useGetFileMetas = (subId: OptionalId, options?: BaseFileMetaArrayQueryOptions) => {\r\n const appTitle = useAppTitle();\r\n\r\n return useQuery<FileMeta[]>({\r\n ...options,\r\n queryKey: [QUERY_KEY, \"meta\", subId, appTitle],\r\n queryFn: ({ signal }) => wczApiClient.request({\r\n url: `${BASE_URL}/v1/meta?appName=${appTitle}&subId=${subId}`,\r\n method: \"GET\",\r\n signal,\r\n }),\r\n staleTime: HOUR,\r\n gcTime: HOUR,\r\n refetchOnWindowFocus: false,\r\n });\r\n};\r\n\r\nexport const useGetFileThumbnail = (meta: FileMeta | undefined | null, options?: BaseBlobQueryOptions) => {\r\n const appTitle = useAppTitle();\r\n\r\n return useQuery<Blob, Error, string>({\r\n ...options,\r\n queryKey: [QUERY_KEY, \"thumbnail\", meta?.id, appTitle],\r\n queryFn: ({ signal }) => wczApiClient.request({\r\n url: `${BASE_URL}/v1/thumbnail?appName=${appTitle}&id=${meta?.id}`,\r\n method: \"GET\",\r\n signal,\r\n responseType: \"blob\"\r\n }),\r\n select: data => URL.createObjectURL(data),\r\n staleTime: HOUR,\r\n gcTime: HOUR,\r\n refetchOnWindowFocus: false,\r\n enabled: !!meta?.id && options?.enabled,\r\n });\r\n};\r\n\r\nexport const useGetFile = (meta: FileMeta | undefined | null, options?: BaseBlobQueryOptions) => {\r\n const appTitle = useAppTitle();\r\n\r\n return useQuery<Blob, Error, string>({\r\n ...options,\r\n queryKey: [QUERY_KEY, meta?.id, appTitle],\r\n queryFn: ({ signal }) => wczApiClient.request({\r\n url: `${BASE_URL}/v1?appName=${appTitle}&id=${meta?.id}`,\r\n method: \"GET\",\r\n signal,\r\n responseType: \"blob\"\r\n }),\r\n select: data => URL.createObjectURL(data),\r\n staleTime: HOUR,\r\n gcTime: HOUR,\r\n refetchOnWindowFocus: false,\r\n enabled: !!meta?.id && options?.enabled,\r\n });\r\n};\r\n\r\nexport const useDownloadFile = (options?: BaseBlobMutationOptions) => {\r\n const appTitle = useAppTitle();\r\n\r\n return useMutation<Blob, Error, FileMeta>({\r\n ...options,\r\n mutationFn: meta => wczApiClient.request({\r\n url: `${BASE_URL}/v1/download?appName=${appTitle}&id=${meta.id}`,\r\n method: \"GET\",\r\n responseType: \"blob\"\r\n }),\r\n onSuccess: (data, variables) => saveAs(data, `${variables.fileName}.${variables.fileExtension}`)\r\n });\r\n};\r\n\r\nexport const useOpenFile = (options?: BaseBlobMutationOptions) => {\r\n const appTitle = useAppTitle();\r\n\r\n return useMutation<Blob, Error, FileMeta>({\r\n ...options,\r\n mutationFn: meta => wczApiClient.request({\r\n url: `${BASE_URL}/v1?appName=${appTitle}&id=${meta.id}`,\r\n method: \"GET\",\r\n responseType: \"blob\"\r\n }),\r\n onSuccess: data => { window.open(URL.createObjectURL(data)); }\r\n });\r\n};\r\n\r\nexport const useUpdateFileMeta = (options?: BaseFileMetaMutationOptions) => {\r\n const appTitle = useAppTitle();\r\n const queryClient = useQueryClient();\r\n\r\n return useMutation<FileMeta, Error, FileMeta>({\r\n ...options,\r\n mutationFn: meta => wczApiClient.request({\r\n url: `${BASE_URL}/v1/meta?appName=${appTitle}&id=${meta.id}`,\r\n method: \"PUT\",\r\n data: meta\r\n }),\r\n onSettled: () => queryClient.invalidateQueries({ queryKey: [QUERY_KEY, \"meta\"], exact: false })\r\n });\r\n};\r\n\r\nexport const useDeleteFile = (options?: BaseFileMetaMutationOptions) => {\r\n const appTitle = useAppTitle();\r\n const queryClient = useQueryClient();\r\n\r\n return useMutation<FileMeta, Error, FileMeta>({\r\n ...options,\r\n mutationFn: meta => wczApiClient.request({\r\n url: `${BASE_URL}/v1?appName=${appTitle}&id=${meta.id}`,\r\n method: \"DELETE\"\r\n }),\r\n onSettled: () => queryClient.invalidateQueries({ queryKey: [QUERY_KEY, \"meta\"], exact: false }),\r\n });\r\n};\r\n\r\nexport const useDeleteFiles = (options?: BaseStringMutationOptions) => {\r\n const appTitle = useAppTitle();\r\n const queryClient = useQueryClient();\r\n\r\n return useMutation<string, Error, string>({\r\n ...options,\r\n mutationFn: subId => wczApiClient.request({\r\n url: `${BASE_URL}/v1?appName=${appTitle}&subId=${subId}`,\r\n method: \"DELETE\"\r\n }),\r\n onSettled: () => queryClient.invalidateQueries({ queryKey: [QUERY_KEY, \"meta\"], exact: false })\r\n });\r\n};\r\n\r\ninterface UseUploadFileProps {\r\n subId: OptionalId;\r\n onSuccess?: (meta: Pick<FileMeta, \"id\" | \"appName\" | \"subId\" | \"fileName\">) => void;\r\n onError?: (error: Error | DetailedError) => void;\r\n}\r\n\r\nexport const useUploadFile = ({ subId, onSuccess, onError }: UseUploadFileProps) => {\r\n const appTitle = useAppTitle();\r\n const [progress, setProgress] = useState<number>(0);\r\n const queryClient = useQueryClient();\r\n\r\n const mutate = async (file: File) => {\r\n if (!subId) throw new Error(\"subId is required for file upload\");\r\n if (!appTitle) throw new Error(\"appTitle is required for file upload\");\r\n\r\n const metadata: Pick<FileMeta, \"id\" | \"appName\" | \"subId\" | \"fileName\"> = {\r\n id: uuidv7(),\r\n appName: appTitle,\r\n subId: subId,\r\n fileName: file.name,\r\n }\r\n\r\n const upload = new TusUpload(file, {\r\n endpoint: `${BASE_URL}/v1/upload`,\r\n chunkSize: 1_048_576, // 1 MB\r\n metadata: {\r\n id: metadata.id,\r\n appName: metadata.appName,\r\n subId: metadata.subId,\r\n fileName: metadata.fileName,\r\n fileExtension: file.type\r\n },\r\n //headers: { \"Authorization\": `Bearer ${await getToken()}` }, //TODO: implement token retrieval\r\n onError: (error) => {\r\n setProgress(0);\r\n onError?.(error);\r\n },\r\n onProgress: (bytesUploaded, bytesTotal) => {\r\n setProgress((bytesUploaded / bytesTotal) * 100);\r\n },\r\n onSuccess: () => {\r\n setProgress(0);\r\n queryClient.invalidateQueries({ queryKey: [QUERY_KEY, \"meta\", subId, appTitle], exact: false });\r\n onSuccess?.(metadata);\r\n },\r\n });\r\n\r\n const previousUploads = await upload.findPreviousUploads();\r\n if (previousUploads.length > 0) {\r\n upload.resumeFromPreviousUpload(previousUploads[0]);\r\n }\r\n\r\n upload.start();\r\n };\r\n\r\n return { mutate, progress };\r\n};"],"mappings":"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","names":["Typography","jsx","jsx","Typography","jsx","jsxs","t","useState","Box","Stack","useEffect","useState","useFile","useDownloadFile","useTranslation","jsx","jsxs","t","jsx","jsxs","useFile","Stack","useState","useEffect","useDownloadFile","Box","MoreVert","IconButton","List","ListItemButton","ListItemIcon","ListItemText","Fragment","useState","useFile","useDownloadFile","useOpenFile","jsx","jsxs","useFile","List","useState","useOpenFile","useDownloadFile","Fragment","ListItemButton","ListItemIcon","ListItemText","IconButton","MoreVert","Box","useEffect","useFile","jsx","jsxs","jsx","jsxs","useState","Stack","jsx","jsx","React","jsx","createLink","React","jsx","Component","CreatedComponent","IconButton","createLink","React","jsx","Component","CreatedComponent","createLink","React","jsx","Component","CreatedComponent","createLink","React","jsx","Component","CreatedComponent","ListItemButton","createLink","React","jsx","Component","ButtonComponent","CreatedComponent","Box","Typography","useTranslation","jsx","jsxs","t","Box","Divider","Typography","jsx","jsxs","useEffect","useState","useTranslation","useRef","useState","jsx","jsxs","useState","useRef","Component","closeDialogUi","closeDialog","jsx","jsxs","useState","t","useTranslation","useEffect","uuidv7","Button","Dialog","useEventCallback","useMemo","useTranslation","jsx","jsxs","t","useTranslation","Dialog","Button","useDialogs","useEventCallback","useMemo","default","useTranslation","useState","wczApiClient","useGetFileMetas","useGetFileThumbnail","useGetFile","useDownloadFile","useOpenFile","useDeleteFile"]}
|