wcz-test 6.4.11 → 6.4.12
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/components.js +4 -2
- package/dist/components.js.map +1 -1
- package/dist/hooks.d.ts +1 -0
- package/dist/hooks.js +4 -0
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +0 -4
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
package/dist/components.js
CHANGED
|
@@ -142,6 +142,7 @@ import MoreVert from "@mui/icons-material/MoreVert";
|
|
|
142
142
|
import { Box as Box2, IconButton, ImageListItem, ImageListItemBar, Stack as Stack2, Tooltip } from "@mui/material";
|
|
143
143
|
import { grey } from "@mui/material/colors";
|
|
144
144
|
import { Fragment, useEffect as useEffect2, useState as useState2 } from "react";
|
|
145
|
+
import { useInView } from "react-intersection-observer";
|
|
145
146
|
|
|
146
147
|
// src/components/file/fileViewer/common/ActionsMenu.tsx
|
|
147
148
|
import Delete from "@mui/icons-material/Delete";
|
|
@@ -226,10 +227,11 @@ var GridFileViewerItem = ({ meta, size, itemBar }) => {
|
|
|
226
227
|
const { setImageId, actions } = useFile();
|
|
227
228
|
const [showItemBar, setShowItemBar] = useState2(itemBar === "always");
|
|
228
229
|
const [menu, setMenu] = useState2(null);
|
|
230
|
+
const { ref, inView } = useInView();
|
|
229
231
|
useEffect2(() => {
|
|
230
232
|
setShowItemBar(itemBar === "always");
|
|
231
233
|
}, [itemBar]);
|
|
232
|
-
const { data: source } = useGetFileThumbnail({ meta });
|
|
234
|
+
const { data: source } = useGetFileThumbnail({ meta }, { enabled: inView });
|
|
233
235
|
const handleOnMouseEnter = () => setShowItemBar(true);
|
|
234
236
|
const handleOnMouseLeave = () => itemBar !== "always" && setShowItemBar(false);
|
|
235
237
|
const openMenu = (event) => {
|
|
@@ -255,7 +257,7 @@ var GridFileViewerItem = ({ meta, size, itemBar }) => {
|
|
|
255
257
|
}
|
|
256
258
|
};
|
|
257
259
|
return /* @__PURE__ */ jsxs4(Fragment, { children: [
|
|
258
|
-
/* @__PURE__ */ jsxs4(ImageListItem, { sx: { width: size ?? IMAGE_SIZE, height: size ?? IMAGE_SIZE }, onMouseEnter: handleOnMouseEnter, onMouseLeave: handleOnMouseLeave, children: [
|
|
260
|
+
/* @__PURE__ */ jsxs4(ImageListItem, { sx: { width: size ?? IMAGE_SIZE, height: size ?? IMAGE_SIZE }, onMouseEnter: handleOnMouseEnter, onMouseLeave: handleOnMouseLeave, ref, children: [
|
|
259
261
|
/* @__PURE__ */ jsx5(
|
|
260
262
|
Box2,
|
|
261
263
|
{
|
package/dist/components.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/core/TypographyWithIcon.tsx","../src/components/core/Fullscreen.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/contexts/FileContext.ts","../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/RouterNotFound.tsx","../src/components/router/RouterError.tsx"],"sourcesContent":["import { Stack, Typography } from \"@mui/material\";\r\nimport type { SxProps, Theme, TypographyProps } from \"@mui/material\";\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, ...props }) => {\r\n const iconSx: SxProps<Theme> = {\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n flexShrink: 0,\r\n lineHeight: 0,\r\n \"& > svg\": {\r\n display: \"block\",\r\n },\r\n };\r\n\r\n return (\r\n <Typography\r\n component=\"span\"\r\n sx={{\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n verticalAlign: \"middle\",\r\n ...sx,\r\n }}\r\n gap={1}\r\n {...props}\r\n >\r\n {startIcon && (\r\n <Stack component=\"span\" sx={iconSx}>\r\n {startIcon}\r\n </Stack>\r\n )}\r\n <Stack component=\"span\" sx={{ display: \"inline\", lineHeight: \"inherit\" }}>\r\n {children}\r\n </Stack>\r\n {endIcon && (\r\n <Stack component=\"span\" sx={iconSx}>\r\n {endIcon}\r\n </Stack>\r\n )}\r\n </Typography>\r\n );\r\n};","import { Box } from \"@mui/material\";\r\nimport { useEffect, useEffectEvent, useRef, useState } from \"react\";\r\nimport type { BoxProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\n\r\nexport const Fullscreen: FC<BoxProps> = ({ children, sx, ...props }) => {\r\n const reference = useRef<HTMLDivElement | null>(null);\r\n const [height, setHeight] = useState<number>();\r\n\r\n const recompute = useEffectEvent(() => {\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 useEffect(() => {\r\n const element = reference.current;\r\n if (!element) return;\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 overflow: \"auto\",\r\n ...sx,\r\n }}\r\n height={height}\r\n {...props}\r\n >\r\n {children}\r\n </Box>\r\n );\r\n};","import CloudUpload from \"@mui/icons-material/CloudUpload\";\r\nimport { Paper, Typography, useTheme } from \"@mui/material\";\r\nimport { useDropzone } from \"react-dropzone\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport type { SxProps, Theme} from \"@mui/material\";\r\nimport type { CSSProperties, FC } from \"react\";\r\nimport type { DropzoneOptions} from \"react-dropzone\";\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 { useState } from \"react\";\r\nimport { FileViewerGrid } from \"./fileViewer/FileViewerGrid\";\r\nimport { FileViewerList } from \"./fileViewer/FileViewerList\";\r\nimport { ImageViewer } from \"./fileViewer/ImageViewer\";\r\nimport type { FileViewerGridProps } from \"./fileViewer/FileViewerGrid\";\r\nimport type { ComponentType, FC, ReactNode } from \"react\";\r\nimport type { FileMeta } from \"~/models/file/FileMeta\";\r\nimport type { FileActions } from \"~/models/file/FileActions\";\r\nimport type { FileViewerListProps } from \"./fileViewer/FileViewerList\";\r\nimport { FileContext } from \"~/contexts/FileContext\";\r\nimport { useGetFileMetas } from \"~/queries/FileHooks\";\r\n\r\ninterface FileViewerComponent {\r\n Grid: ComponentType<FileViewerGridProps>;\r\n List: ComponentType<FileViewerListProps>;\r\n}\r\n\r\ninterface FileViewerProps {\r\n subId: string;\r\n onDelete?: (params: { remainingFileMetas: Array<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};\r\n","import MoreVert from \"@mui/icons-material/MoreVert\";\r\nimport { Box, IconButton, ImageListItem, ImageListItemBar, Stack, Tooltip } from \"@mui/material\";\r\nimport { grey } from \"@mui/material/colors\";\r\nimport React, { Fragment, useEffect, useState } from \"react\";\r\nimport { ActionsMenu } from \"./common/ActionsMenu\";\r\nimport type { SxProps, Theme } from \"@mui/material\";\r\nimport type { FileMeta } from \"~/models/file/FileMeta\";\r\nimport { useFile } from \"~/contexts/FileContext\";\r\nimport { useDownloadFile, useGetFileThumbnail, useOpenFile } from \"~/queries/FileHooks\";\r\n\r\nconst IMAGE_SIZE = 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};\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 { useTranslation } from \"react-i18next\";\r\nimport type { FC } from \"react\";\r\nimport type { FileMeta } from \"~/models/file/FileMeta\";\r\nimport { useFile } from \"~/contexts/FileContext\";\r\nimport { useDialogs } from \"~/hooks/DialogsHooks\";\r\nimport { useDeleteFile, useDownloadFile } from \"~/queries/FileHooks\";\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: Array<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};\r\n","import { createContext, useContext } from \"react\";\r\nimport type { FileMeta } from \"../models/file/FileMeta\";\r\nimport type { FileActions } from \"~/models/file/FileActions\";\r\n\r\nexport interface FileContextValue {\r\n fileMetas: Array<FileMeta>;\r\n onDelete?: (params: { remainingFileMetas: Array<FileMeta>; deletedFileMeta: FileMeta }) => void;\r\n actions?: FileActions;\r\n setImageId: (imageId: string) => void;\r\n};\r\n\r\nexport const FileContext = createContext<FileContextValue | null>(null);\r\n\r\nexport const useFile = () => {\r\n const context = useContext(FileContext);\r\n if (!context) {\r\n throw new Error(\"FileViewer components must be used within FileViewer\");\r\n }\r\n return context;\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 } from \"@mui/material\";\r\nimport { Fragment, useState } from \"react\";\r\nimport { ActionsMenu } from \"./common/ActionsMenu\";\r\nimport type { FC } from \"react\";\r\nimport type { SxProps, Theme } from \"@mui/material\";\r\nimport type { FileMeta } from \"~/models/file/FileMeta\";\r\nimport { useFile } from \"~/contexts/FileContext\";\r\nimport { useDownloadFile, useOpenFile } from \"~/queries/FileHooks\";\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};\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 type { FileMeta } from \"~/models/file/FileMeta\";\r\nimport { useFile } from \"~/contexts/FileContext\";\r\nimport { useGetFile } from \"~/queries/FileHooks\";\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 (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: Array<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: Array<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: Array<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};\r\n","import { Chip, Stack } from \"@mui/material\";\r\nimport type { ChipProps} from \"@mui/material\";\r\nimport type { 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 { TypographyWithIcon } from \"../core/TypographyWithIcon\";\r\nimport type { GridColumnHeaderParams, GridValidRowModel } from \"@mui/x-data-grid-premium\";\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 } from \"@mui/material\";\r\nimport { createLink } from \"@tanstack/react-router\";\r\nimport React from \"react\";\r\nimport type { ButtonProps } from \"@mui/material\";\r\nimport type { LinkComponent } from \"@tanstack/react-router\";\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 } from \"@mui/x-data-grid-premium\";\r\nimport { createLink } from \"@tanstack/react-router\";\r\nimport React from \"react\";\r\nimport type { GridActionsCellItemProps } from \"@mui/x-data-grid-premium\";\r\nimport type { LinkComponent } from \"@tanstack/react-router\";\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 } from \"@mui/material\";\r\nimport { createLink } from \"@tanstack/react-router\";\r\nimport React from \"react\";\r\nimport type { IconButtonProps } from \"@mui/material\";\r\nimport type { LinkComponent } from \"@tanstack/react-router\";\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 } from \"@mui/material\";\r\nimport { createLink } from \"@tanstack/react-router\";\r\nimport React from \"react\";\r\nimport type { LinkProps } from \"@mui/material\";\r\nimport type { LinkComponent } from \"@tanstack/react-router\";\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 } from \"@mui/material\";\r\nimport { createLink } from \"@tanstack/react-router\";\r\nimport React from \"react\";\r\nimport type { TabProps } from \"@mui/material\";\r\nimport type { LinkComponent } from \"@tanstack/react-router\";\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 { 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 { FC } from \"react\";\r\nimport type { ErrorComponentProps } from \"@tanstack/react-router\";\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"],"mappings":"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","names":["jsx","Typography","jsx","jsxs","useState","Box","Stack","useEffect","useState","useTranslation","jsx","jsxs","useTranslation","jsx","jsxs","Stack","useState","useEffect","Box","MoreVert","IconButton","List","ListItemButton","ListItemIcon","ListItemText","Fragment","useState","jsx","jsxs","List","useState","Fragment","ListItemButton","ListItemIcon","ListItemText","IconButton","MoreVert","Box","useEffect","jsx","jsxs","useEffect","Box","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","Box","Typography","useTranslation","jsx","jsxs","Box","Divider","Typography","jsx","jsxs"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/core/TypographyWithIcon.tsx","../src/components/core/Fullscreen.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/contexts/FileContext.ts","../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/RouterNotFound.tsx","../src/components/router/RouterError.tsx"],"sourcesContent":["import { Stack, Typography } from \"@mui/material\";\r\nimport type { SxProps, Theme, TypographyProps } from \"@mui/material\";\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, ...props }) => {\r\n const iconSx: SxProps<Theme> = {\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n flexShrink: 0,\r\n lineHeight: 0,\r\n \"& > svg\": {\r\n display: \"block\",\r\n },\r\n };\r\n\r\n return (\r\n <Typography\r\n component=\"span\"\r\n sx={{\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n verticalAlign: \"middle\",\r\n ...sx,\r\n }}\r\n gap={1}\r\n {...props}\r\n >\r\n {startIcon && (\r\n <Stack component=\"span\" sx={iconSx}>\r\n {startIcon}\r\n </Stack>\r\n )}\r\n <Stack component=\"span\" sx={{ display: \"inline\", lineHeight: \"inherit\" }}>\r\n {children}\r\n </Stack>\r\n {endIcon && (\r\n <Stack component=\"span\" sx={iconSx}>\r\n {endIcon}\r\n </Stack>\r\n )}\r\n </Typography>\r\n );\r\n};","import { Box } from \"@mui/material\";\r\nimport { useEffect, useEffectEvent, useRef, useState } from \"react\";\r\nimport type { BoxProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\n\r\nexport const Fullscreen: FC<BoxProps> = ({ children, sx, ...props }) => {\r\n const reference = useRef<HTMLDivElement | null>(null);\r\n const [height, setHeight] = useState<number>();\r\n\r\n const recompute = useEffectEvent(() => {\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 useEffect(() => {\r\n const element = reference.current;\r\n if (!element) return;\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 overflow: \"auto\",\r\n ...sx,\r\n }}\r\n height={height}\r\n {...props}\r\n >\r\n {children}\r\n </Box>\r\n );\r\n};","import CloudUpload from \"@mui/icons-material/CloudUpload\";\r\nimport { Paper, Typography, useTheme } from \"@mui/material\";\r\nimport { useDropzone } from \"react-dropzone\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport type { SxProps, Theme} from \"@mui/material\";\r\nimport type { CSSProperties, FC } from \"react\";\r\nimport type { DropzoneOptions} from \"react-dropzone\";\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 { useState } from \"react\";\r\nimport { FileViewerGrid } from \"./fileViewer/FileViewerGrid\";\r\nimport { FileViewerList } from \"./fileViewer/FileViewerList\";\r\nimport { ImageViewer } from \"./fileViewer/ImageViewer\";\r\nimport type { FileViewerGridProps } from \"./fileViewer/FileViewerGrid\";\r\nimport type { ComponentType, FC, ReactNode } from \"react\";\r\nimport type { FileMeta } from \"~/models/file/FileMeta\";\r\nimport type { FileActions } from \"~/models/file/FileActions\";\r\nimport type { FileViewerListProps } from \"./fileViewer/FileViewerList\";\r\nimport { FileContext } from \"~/contexts/FileContext\";\r\nimport { useGetFileMetas } from \"~/queries/FileHooks\";\r\n\r\ninterface FileViewerComponent {\r\n Grid: ComponentType<FileViewerGridProps>;\r\n List: ComponentType<FileViewerListProps>;\r\n}\r\n\r\ninterface FileViewerProps {\r\n subId: string;\r\n onDelete?: (params: { remainingFileMetas: Array<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};\r\n","import MoreVert from \"@mui/icons-material/MoreVert\";\r\nimport { Box, IconButton, ImageListItem, ImageListItemBar, Stack, Tooltip } from \"@mui/material\";\r\nimport { grey } from \"@mui/material/colors\";\r\nimport React, { Fragment, useEffect, useState } from \"react\";\r\nimport { useInView } from \"react-intersection-observer\";\r\nimport { ActionsMenu } from \"./common/ActionsMenu\";\r\nimport type { SxProps, Theme } from \"@mui/material\";\r\nimport type { FileMeta } from \"~/models/file/FileMeta\";\r\nimport { useFile } from \"~/contexts/FileContext\";\r\nimport { useDownloadFile, useGetFileThumbnail, useOpenFile } from \"~/queries/FileHooks\";\r\n\r\nconst IMAGE_SIZE = 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 const { ref, inView } = useInView();\r\n\r\n useEffect(() => {\r\n setShowItemBar(itemBar === \"always\");\r\n }, [itemBar]);\r\n\r\n const { data: source } = useGetFileThumbnail({ meta }, { enabled: inView });\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} ref={ref}>\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};\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 { useTranslation } from \"react-i18next\";\r\nimport type { FC } from \"react\";\r\nimport type { FileMeta } from \"~/models/file/FileMeta\";\r\nimport { useFile } from \"~/contexts/FileContext\";\r\nimport { useDialogs } from \"~/hooks/DialogsHooks\";\r\nimport { useDeleteFile, useDownloadFile } from \"~/queries/FileHooks\";\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: Array<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};\r\n","import { createContext, useContext } from \"react\";\r\nimport type { FileMeta } from \"../models/file/FileMeta\";\r\nimport type { FileActions } from \"~/models/file/FileActions\";\r\n\r\nexport interface FileContextValue {\r\n fileMetas: Array<FileMeta>;\r\n onDelete?: (params: { remainingFileMetas: Array<FileMeta>; deletedFileMeta: FileMeta }) => void;\r\n actions?: FileActions;\r\n setImageId: (imageId: string) => void;\r\n};\r\n\r\nexport const FileContext = createContext<FileContextValue | null>(null);\r\n\r\nexport const useFile = () => {\r\n const context = useContext(FileContext);\r\n if (!context) {\r\n throw new Error(\"FileViewer components must be used within FileViewer\");\r\n }\r\n return context;\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 } from \"@mui/material\";\r\nimport { Fragment, useState } from \"react\";\r\nimport { ActionsMenu } from \"./common/ActionsMenu\";\r\nimport type { FC } from \"react\";\r\nimport type { SxProps, Theme } from \"@mui/material\";\r\nimport type { FileMeta } from \"~/models/file/FileMeta\";\r\nimport { useFile } from \"~/contexts/FileContext\";\r\nimport { useDownloadFile, useOpenFile } from \"~/queries/FileHooks\";\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};\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 type { FileMeta } from \"~/models/file/FileMeta\";\r\nimport { useFile } from \"~/contexts/FileContext\";\r\nimport { useGetFile } from \"~/queries/FileHooks\";\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 (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: Array<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: Array<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: Array<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};\r\n","import { Chip, Stack } from \"@mui/material\";\r\nimport type { ChipProps} from \"@mui/material\";\r\nimport type { 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 { TypographyWithIcon } from \"../core/TypographyWithIcon\";\r\nimport type { GridColumnHeaderParams, GridValidRowModel } from \"@mui/x-data-grid-premium\";\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 } from \"@mui/material\";\r\nimport { createLink } from \"@tanstack/react-router\";\r\nimport React from \"react\";\r\nimport type { ButtonProps } from \"@mui/material\";\r\nimport type { LinkComponent } from \"@tanstack/react-router\";\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 } from \"@mui/x-data-grid-premium\";\r\nimport { createLink } from \"@tanstack/react-router\";\r\nimport React from \"react\";\r\nimport type { GridActionsCellItemProps } from \"@mui/x-data-grid-premium\";\r\nimport type { LinkComponent } from \"@tanstack/react-router\";\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 } from \"@mui/material\";\r\nimport { createLink } from \"@tanstack/react-router\";\r\nimport React from \"react\";\r\nimport type { IconButtonProps } from \"@mui/material\";\r\nimport type { LinkComponent } from \"@tanstack/react-router\";\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 } from \"@mui/material\";\r\nimport { createLink } from \"@tanstack/react-router\";\r\nimport React from \"react\";\r\nimport type { LinkProps } from \"@mui/material\";\r\nimport type { LinkComponent } from \"@tanstack/react-router\";\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 } from \"@mui/material\";\r\nimport { createLink } from \"@tanstack/react-router\";\r\nimport React from \"react\";\r\nimport type { TabProps } from \"@mui/material\";\r\nimport type { LinkComponent } from \"@tanstack/react-router\";\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 { 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 { FC } from \"react\";\r\nimport type { ErrorComponentProps } from \"@tanstack/react-router\";\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"],"mappings":"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","names":["jsx","Typography","jsx","jsxs","useState","Box","Stack","useEffect","useState","useTranslation","jsx","jsxs","useTranslation","jsx","jsxs","Stack","useState","useEffect","Box","MoreVert","IconButton","List","ListItemButton","ListItemIcon","ListItemText","Fragment","useState","jsx","jsxs","List","useState","Fragment","ListItemButton","ListItemIcon","ListItemText","IconButton","MoreVert","Box","useEffect","jsx","jsxs","useEffect","Box","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","Box","Typography","useTranslation","jsx","jsxs","Box","Divider","Typography","jsx","jsxs"]}
|
package/dist/hooks.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ import * as _tanstack_react_form from '@tanstack/react-form';
|
|
|
6
6
|
import * as react from 'react';
|
|
7
7
|
import { ReactNode } from 'react';
|
|
8
8
|
import * as _tanstack_form_core from '@tanstack/form-core';
|
|
9
|
+
export { useInView } from 'react-intersection-observer';
|
|
9
10
|
import 'axios';
|
|
10
11
|
import 'uuidv7';
|
|
11
12
|
import '@t3-oss/env-core';
|
package/dist/hooks.js
CHANGED
|
@@ -294,10 +294,14 @@ var { useAppForm: useLayoutForm, withForm: withLayoutForm } = createFormHook({
|
|
|
294
294
|
fieldContext,
|
|
295
295
|
formContext
|
|
296
296
|
});
|
|
297
|
+
|
|
298
|
+
// src/hooks.ts
|
|
299
|
+
import { useInView } from "react-intersection-observer";
|
|
297
300
|
export {
|
|
298
301
|
useDialogs,
|
|
299
302
|
useFieldContext,
|
|
300
303
|
useFormContext,
|
|
304
|
+
useInView,
|
|
301
305
|
useLayoutForm,
|
|
302
306
|
withLayoutForm
|
|
303
307
|
};
|
package/dist/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/FormHooks.ts","../src/components/form/FormAutocomplete.tsx","../src/components/form/FormCheckbox.tsx","../src/components/form/FormDatePicker.tsx","../src/components/form/FormDateTimePicker.tsx","../src/components/form/FormNumberField.tsx","../src/components/form/FormRadioGroup.tsx","../src/components/form/FormSlider.tsx","../src/components/form/FormSubmitButton.tsx","../src/components/form/FormSwitch.tsx","../src/components/form/FormTextField.tsx"],"sourcesContent":["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 { Autocomplete, TextField } from \"@mui/material\";\r\nimport type { AutocompleteProps, TextFieldProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormAutocompleteProps extends Omit<AutocompleteProps<any, boolean, boolean, boolean>, FormOmittedProps> {\r\n textFieldProps?: Omit<TextFieldProps, FormOmittedProps>;\r\n}\r\n\r\nexport const FormAutocomplete: FC<FormAutocompleteProps> = ({ textFieldProps, ...autocompleteProps }) => {\r\n const field = useFieldContext();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <Autocomplete\r\n value={field.state.value}\r\n onChange={(_, value) => !autocompleteProps.freeSolo && field.handleChange(value)}\r\n onInputChange={(_, value, reason) => reason !== \"reset\" && autocompleteProps.freeSolo && field.handleChange(value)}\r\n onBlur={field.handleBlur}\r\n aria-label={field.name}\r\n {...autocompleteProps}\r\n renderInput={(parameters) =>\r\n <TextField\r\n {...parameters}\r\n name={field.name}\r\n error={isTouched && hasError}\r\n helperText={isTouched && helperText}\r\n {...textFieldProps}\r\n />\r\n }\r\n />\r\n );\r\n};","import { Checkbox, FormControl, FormControlLabel, FormHelperText } from \"@mui/material\";\r\nimport type { CheckboxProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormCheckboxProps extends Omit<CheckboxProps, FormOmittedProps> {\r\n label?: string;\r\n}\r\n\r\nexport const FormCheckbox: FC<FormCheckboxProps> = (props) => {\r\n const field = useFieldContext<boolean | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <FormControl component=\"fieldset\">\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n name={field.name}\r\n checked={Boolean(field.state.value)}\r\n onChange={(event) => field.handleChange(event.target.checked)}\r\n onBlur={field.handleBlur}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n }\r\n label={props.label ?? \"\"}\r\n />\r\n {isTouched && hasError && <FormHelperText error={hasError}>{helperText}</FormHelperText>}\r\n </FormControl>\r\n );\r\n};","import { DatePicker } from \"@mui/x-date-pickers-pro\";\r\nimport dayjs from \"dayjs\";\r\nimport type { TextFieldProps } from \"@mui/material\";\r\nimport type { DatePickerProps } from \"@mui/x-date-pickers-pro\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormDatePickerProps extends Omit<DatePickerProps, FormOmittedProps> {\r\n textFieldProps?: TextFieldProps;\r\n}\r\n\r\nexport const FormDatePicker: FC<FormDatePickerProps> = (props) => {\r\n const field = useFieldContext<string | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <DatePicker\r\n name={field.name}\r\n value={field.state.value ? dayjs(field.state.value) : null}\r\n onChange={(value) => field.handleChange(value ? value.format() : null)}\r\n slotProps={{\r\n textField: {\r\n onBlur: field.handleBlur,\r\n error: isTouched && hasError,\r\n helperText: isTouched && helperText,\r\n ...props.textFieldProps\r\n },\r\n ...props.slotProps\r\n }}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n );\r\n};","import { DateTimePicker } from \"@mui/x-date-pickers-pro\";\r\nimport dayjs from \"dayjs\";\r\nimport type { TextFieldProps } from \"@mui/material\";\r\nimport type { DateTimePickerProps } from \"@mui/x-date-pickers-pro\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormDateTimePickerProps extends Omit<DateTimePickerProps, FormOmittedProps> {\r\n textFieldProps?: TextFieldProps;\r\n}\r\n\r\nexport const FormDateTimePicker: FC<FormDateTimePickerProps> = (props) => {\r\n const field = useFieldContext<string | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <DateTimePicker\r\n name={field.name}\r\n value={field.state.value ? dayjs(field.state.value) : null}\r\n onChange={(value) => field.handleChange(value ? value.format() : null)}\r\n slotProps={{\r\n textField: {\r\n onBlur: field.handleBlur,\r\n error: isTouched && hasError,\r\n helperText: isTouched && helperText,\r\n ...props.textFieldProps,\r\n },\r\n ...props.slotProps\r\n }}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n );\r\n};\r\n","import { TextField } from \"@mui/material\";\r\nimport { NumericFormat } from \"react-number-format\";\r\nimport type { InputAttributes, NumericFormatProps } from \"react-number-format/types/types\";\r\nimport type { FC } from \"react\";\r\nimport type { TextFieldProps } from \"@mui/material\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormNumberFieldProps extends Omit<TextFieldProps, FormOmittedProps> {\r\n\tdefaultValue?: number | null;\r\n\toptions?: Omit<NumericFormatProps<InputAttributes>, \"customInput\" | \"onValueChange\" | keyof InputAttributes>;\r\n}\r\n\r\nexport const FormNumberField: FC<FormNumberFieldProps> = ({ options, ...props }) => {\r\n\tconst field = useFieldContext<number | null | undefined>();\r\n\tconst { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n\treturn (\r\n\t\t<NumericFormat\r\n\t\t\tcustomInput={TextField}\r\n\t\t\tname={field.name}\r\n\t\t\tvalue={field.state.value ?? \"\"}\r\n\t\t\tonValueChange={({ floatValue }) => field.handleChange(floatValue)}\r\n\t\t\tonBlur={field.handleBlur}\r\n\t\t\terror={isTouched && hasError}\r\n\t\t\thelperText={isTouched && helperText}\r\n\t\t\taria-label={field.name}\r\n\t\t\t{...props}\r\n\t\t\t{...options}\r\n\t\t/>\r\n\t);\r\n};\r\n","import { FormControl, FormControlLabel, FormHelperText, FormLabel, Radio, RadioGroup } from \"@mui/material\";\r\nimport type { RadioGroupProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\ninterface Option {\r\n label: string;\r\n value: string | number;\r\n}\r\n\r\nexport interface FormRadioGroupProps extends Omit<RadioGroupProps, FormOmittedProps> {\r\n label?: string;\r\n options: Array<Option>;\r\n}\r\n\r\nexport const FormRadioGroup: FC<FormRadioGroupProps> = ({ label, options, ...props }) => {\r\n const field = useFieldContext<string | number | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <FormControl component=\"fieldset\">\r\n {label && <FormLabel component=\"legend\">{label}</FormLabel>}\r\n <RadioGroup\r\n name={field.name}\r\n value={field.state.value ?? \"\"}\r\n onChange={(event) => field.handleChange(event.target.value)}\r\n onBlur={field.handleBlur}\r\n aria-label={field.name}\r\n {...props}\r\n >\r\n {options.map((option) => (\r\n <FormControlLabel\r\n key={option.value}\r\n value={option.value}\r\n control={<Radio />}\r\n label={option.label}\r\n />\r\n ))}\r\n </RadioGroup>\r\n {isTouched && hasError && <FormHelperText error={hasError}>{helperText}</FormHelperText>}\r\n </FormControl>\r\n );\r\n};\r\n","import { FormControl, FormHelperText, FormLabel, Slider } from \"@mui/material\";\r\nimport type { SliderProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormSliderProps extends Omit<SliderProps, FormOmittedProps> {\r\n label?: string;\r\n}\r\n\r\nexport const FormSlider: FC<FormSliderProps> = ({ label, ...props }) => {\r\n const field = useFieldContext<number | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <FormControl component=\"fieldset\">\r\n {label && <FormLabel>{label}</FormLabel>}\r\n <Slider\r\n name={field.name}\r\n value={field.state.value ?? 0}\r\n onChange={(_, value) => field.handleChange(Array.isArray(value) ? value[0] : value)}\r\n onBlur={field.handleBlur}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n {isTouched && hasError && <FormHelperText error={hasError}>{helperText}</FormHelperText>}\r\n </FormControl>\r\n );\r\n};\r\n","import { Button } from \"@mui/material\";\r\nimport type { ButtonProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport { useFormContext } from \"~/hooks/FormHooks\";\r\n\r\nexport type FormSubmitButtonProps = Omit<ButtonProps, \"loading\" | \"disabled\" | \"onClick\" | \"type\">;\r\n\r\nexport const FormSubmitButton: FC<FormSubmitButtonProps> = (props) => {\r\n const form = useFormContext();\r\n\r\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n form.handleSubmit();\r\n };\r\n\r\n return (\r\n <form.Subscribe selector={(state) => [state.canSubmit, state.isSubmitting]}>\r\n {([canSubmit, isSubmitting]) => (\r\n <Button\r\n loading={isSubmitting}\r\n disabled={!canSubmit}\r\n onClick={handleClick}\r\n type=\"submit\"\r\n aria-label=\"submit\"\r\n {...props}\r\n />\r\n )}\r\n </form.Subscribe>\r\n );\r\n};","import { FormControl, FormControlLabel, FormHelperText, Switch } from \"@mui/material\";\r\nimport type { SwitchProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormSwitchProps extends Omit<SwitchProps, FormOmittedProps> {\r\n label?: string;\r\n}\r\n\r\nexport const FormSwitch: FC<FormSwitchProps> = (props) => {\r\n const field = useFieldContext<boolean | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <FormControl component=\"fieldset\">\r\n <FormControlLabel\r\n control={\r\n <Switch\r\n name={field.name}\r\n checked={Boolean(field.state.value)}\r\n onChange={(event) => field.handleChange(event.target.checked)}\r\n onBlur={field.handleBlur}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n }\r\n label={props.label ?? \"\"}\r\n />\r\n {isTouched && hasError && <FormHelperText error={hasError}>{helperText}</FormHelperText>}\r\n </FormControl>\r\n );\r\n};\r\n","import { TextField } from \"@mui/material\";\r\nimport type { TextFieldProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormTextFieldProps extends Omit<TextFieldProps, FormOmittedProps> {\r\n type?: \"color\" | \"email\" | \"password\" | \"search\" | \"tel\" | \"text\" | \"url\"\r\n}\r\n\r\nexport const FormTextField: FC<FormTextFieldProps> = (props) => {\r\n const field = useFieldContext<string | number | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <TextField\r\n name={field.name}\r\n value={field.state.value ?? \"\"}\r\n onChange={event => field.handleChange(event.target.value)}\r\n onBlur={field.handleBlur}\r\n error={isTouched && hasError}\r\n helperText={isTouched && helperText}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n );\r\n};"],"mappings":"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","names":["jsx","jsx","dayjs","jsx","dayjs","TextField","jsx","TextField","FormControl","FormControlLabel","FormHelperText","jsx","jsxs","FormControl","FormControlLabel","FormHelperText","FormControl","FormHelperText","FormLabel","jsx","jsxs","FormControl","FormLabel","FormHelperText","jsx","FormControl","FormControlLabel","FormHelperText","jsx","jsxs","FormControl","FormControlLabel","FormHelperText","TextField","jsx","TextField"]}
|
|
1
|
+
{"version":3,"sources":["../src/hooks/FormHooks.ts","../src/components/form/FormAutocomplete.tsx","../src/components/form/FormCheckbox.tsx","../src/components/form/FormDatePicker.tsx","../src/components/form/FormDateTimePicker.tsx","../src/components/form/FormNumberField.tsx","../src/components/form/FormRadioGroup.tsx","../src/components/form/FormSlider.tsx","../src/components/form/FormSubmitButton.tsx","../src/components/form/FormSwitch.tsx","../src/components/form/FormTextField.tsx","../src/hooks.ts"],"sourcesContent":["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 { Autocomplete, TextField } from \"@mui/material\";\r\nimport type { AutocompleteProps, TextFieldProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormAutocompleteProps extends Omit<AutocompleteProps<any, boolean, boolean, boolean>, FormOmittedProps> {\r\n textFieldProps?: Omit<TextFieldProps, FormOmittedProps>;\r\n}\r\n\r\nexport const FormAutocomplete: FC<FormAutocompleteProps> = ({ textFieldProps, ...autocompleteProps }) => {\r\n const field = useFieldContext();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <Autocomplete\r\n value={field.state.value}\r\n onChange={(_, value) => !autocompleteProps.freeSolo && field.handleChange(value)}\r\n onInputChange={(_, value, reason) => reason !== \"reset\" && autocompleteProps.freeSolo && field.handleChange(value)}\r\n onBlur={field.handleBlur}\r\n aria-label={field.name}\r\n {...autocompleteProps}\r\n renderInput={(parameters) =>\r\n <TextField\r\n {...parameters}\r\n name={field.name}\r\n error={isTouched && hasError}\r\n helperText={isTouched && helperText}\r\n {...textFieldProps}\r\n />\r\n }\r\n />\r\n );\r\n};","import { Checkbox, FormControl, FormControlLabel, FormHelperText } from \"@mui/material\";\r\nimport type { CheckboxProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormCheckboxProps extends Omit<CheckboxProps, FormOmittedProps> {\r\n label?: string;\r\n}\r\n\r\nexport const FormCheckbox: FC<FormCheckboxProps> = (props) => {\r\n const field = useFieldContext<boolean | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <FormControl component=\"fieldset\">\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n name={field.name}\r\n checked={Boolean(field.state.value)}\r\n onChange={(event) => field.handleChange(event.target.checked)}\r\n onBlur={field.handleBlur}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n }\r\n label={props.label ?? \"\"}\r\n />\r\n {isTouched && hasError && <FormHelperText error={hasError}>{helperText}</FormHelperText>}\r\n </FormControl>\r\n );\r\n};","import { DatePicker } from \"@mui/x-date-pickers-pro\";\r\nimport dayjs from \"dayjs\";\r\nimport type { TextFieldProps } from \"@mui/material\";\r\nimport type { DatePickerProps } from \"@mui/x-date-pickers-pro\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormDatePickerProps extends Omit<DatePickerProps, FormOmittedProps> {\r\n textFieldProps?: TextFieldProps;\r\n}\r\n\r\nexport const FormDatePicker: FC<FormDatePickerProps> = (props) => {\r\n const field = useFieldContext<string | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <DatePicker\r\n name={field.name}\r\n value={field.state.value ? dayjs(field.state.value) : null}\r\n onChange={(value) => field.handleChange(value ? value.format() : null)}\r\n slotProps={{\r\n textField: {\r\n onBlur: field.handleBlur,\r\n error: isTouched && hasError,\r\n helperText: isTouched && helperText,\r\n ...props.textFieldProps\r\n },\r\n ...props.slotProps\r\n }}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n );\r\n};","import { DateTimePicker } from \"@mui/x-date-pickers-pro\";\r\nimport dayjs from \"dayjs\";\r\nimport type { TextFieldProps } from \"@mui/material\";\r\nimport type { DateTimePickerProps } from \"@mui/x-date-pickers-pro\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormDateTimePickerProps extends Omit<DateTimePickerProps, FormOmittedProps> {\r\n textFieldProps?: TextFieldProps;\r\n}\r\n\r\nexport const FormDateTimePicker: FC<FormDateTimePickerProps> = (props) => {\r\n const field = useFieldContext<string | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <DateTimePicker\r\n name={field.name}\r\n value={field.state.value ? dayjs(field.state.value) : null}\r\n onChange={(value) => field.handleChange(value ? value.format() : null)}\r\n slotProps={{\r\n textField: {\r\n onBlur: field.handleBlur,\r\n error: isTouched && hasError,\r\n helperText: isTouched && helperText,\r\n ...props.textFieldProps,\r\n },\r\n ...props.slotProps\r\n }}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n );\r\n};\r\n","import { TextField } from \"@mui/material\";\r\nimport { NumericFormat } from \"react-number-format\";\r\nimport type { InputAttributes, NumericFormatProps } from \"react-number-format/types/types\";\r\nimport type { FC } from \"react\";\r\nimport type { TextFieldProps } from \"@mui/material\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormNumberFieldProps extends Omit<TextFieldProps, FormOmittedProps> {\r\n\tdefaultValue?: number | null;\r\n\toptions?: Omit<NumericFormatProps<InputAttributes>, \"customInput\" | \"onValueChange\" | keyof InputAttributes>;\r\n}\r\n\r\nexport const FormNumberField: FC<FormNumberFieldProps> = ({ options, ...props }) => {\r\n\tconst field = useFieldContext<number | null | undefined>();\r\n\tconst { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n\treturn (\r\n\t\t<NumericFormat\r\n\t\t\tcustomInput={TextField}\r\n\t\t\tname={field.name}\r\n\t\t\tvalue={field.state.value ?? \"\"}\r\n\t\t\tonValueChange={({ floatValue }) => field.handleChange(floatValue)}\r\n\t\t\tonBlur={field.handleBlur}\r\n\t\t\terror={isTouched && hasError}\r\n\t\t\thelperText={isTouched && helperText}\r\n\t\t\taria-label={field.name}\r\n\t\t\t{...props}\r\n\t\t\t{...options}\r\n\t\t/>\r\n\t);\r\n};\r\n","import { FormControl, FormControlLabel, FormHelperText, FormLabel, Radio, RadioGroup } from \"@mui/material\";\r\nimport type { RadioGroupProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\ninterface Option {\r\n label: string;\r\n value: string | number;\r\n}\r\n\r\nexport interface FormRadioGroupProps extends Omit<RadioGroupProps, FormOmittedProps> {\r\n label?: string;\r\n options: Array<Option>;\r\n}\r\n\r\nexport const FormRadioGroup: FC<FormRadioGroupProps> = ({ label, options, ...props }) => {\r\n const field = useFieldContext<string | number | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <FormControl component=\"fieldset\">\r\n {label && <FormLabel component=\"legend\">{label}</FormLabel>}\r\n <RadioGroup\r\n name={field.name}\r\n value={field.state.value ?? \"\"}\r\n onChange={(event) => field.handleChange(event.target.value)}\r\n onBlur={field.handleBlur}\r\n aria-label={field.name}\r\n {...props}\r\n >\r\n {options.map((option) => (\r\n <FormControlLabel\r\n key={option.value}\r\n value={option.value}\r\n control={<Radio />}\r\n label={option.label}\r\n />\r\n ))}\r\n </RadioGroup>\r\n {isTouched && hasError && <FormHelperText error={hasError}>{helperText}</FormHelperText>}\r\n </FormControl>\r\n );\r\n};\r\n","import { FormControl, FormHelperText, FormLabel, Slider } from \"@mui/material\";\r\nimport type { SliderProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormSliderProps extends Omit<SliderProps, FormOmittedProps> {\r\n label?: string;\r\n}\r\n\r\nexport const FormSlider: FC<FormSliderProps> = ({ label, ...props }) => {\r\n const field = useFieldContext<number | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <FormControl component=\"fieldset\">\r\n {label && <FormLabel>{label}</FormLabel>}\r\n <Slider\r\n name={field.name}\r\n value={field.state.value ?? 0}\r\n onChange={(_, value) => field.handleChange(Array.isArray(value) ? value[0] : value)}\r\n onBlur={field.handleBlur}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n {isTouched && hasError && <FormHelperText error={hasError}>{helperText}</FormHelperText>}\r\n </FormControl>\r\n );\r\n};\r\n","import { Button } from \"@mui/material\";\r\nimport type { ButtonProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport { useFormContext } from \"~/hooks/FormHooks\";\r\n\r\nexport type FormSubmitButtonProps = Omit<ButtonProps, \"loading\" | \"disabled\" | \"onClick\" | \"type\">;\r\n\r\nexport const FormSubmitButton: FC<FormSubmitButtonProps> = (props) => {\r\n const form = useFormContext();\r\n\r\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n form.handleSubmit();\r\n };\r\n\r\n return (\r\n <form.Subscribe selector={(state) => [state.canSubmit, state.isSubmitting]}>\r\n {([canSubmit, isSubmitting]) => (\r\n <Button\r\n loading={isSubmitting}\r\n disabled={!canSubmit}\r\n onClick={handleClick}\r\n type=\"submit\"\r\n aria-label=\"submit\"\r\n {...props}\r\n />\r\n )}\r\n </form.Subscribe>\r\n );\r\n};","import { FormControl, FormControlLabel, FormHelperText, Switch } from \"@mui/material\";\r\nimport type { SwitchProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormSwitchProps extends Omit<SwitchProps, FormOmittedProps> {\r\n label?: string;\r\n}\r\n\r\nexport const FormSwitch: FC<FormSwitchProps> = (props) => {\r\n const field = useFieldContext<boolean | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <FormControl component=\"fieldset\">\r\n <FormControlLabel\r\n control={\r\n <Switch\r\n name={field.name}\r\n checked={Boolean(field.state.value)}\r\n onChange={(event) => field.handleChange(event.target.checked)}\r\n onBlur={field.handleBlur}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n }\r\n label={props.label ?? \"\"}\r\n />\r\n {isTouched && hasError && <FormHelperText error={hasError}>{helperText}</FormHelperText>}\r\n </FormControl>\r\n );\r\n};\r\n","import { TextField } from \"@mui/material\";\r\nimport type { TextFieldProps } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport type { FormOmittedProps } from \"~/lib/utils\";\r\nimport { useFieldContext } from \"~/hooks/FormHooks\";\r\nimport { getFieldStatus } from \"~/lib/utils\";\r\n\r\nexport interface FormTextFieldProps extends Omit<TextFieldProps, FormOmittedProps> {\r\n type?: \"color\" | \"email\" | \"password\" | \"search\" | \"tel\" | \"text\" | \"url\"\r\n}\r\n\r\nexport const FormTextField: FC<FormTextFieldProps> = (props) => {\r\n const field = useFieldContext<string | number | null | undefined>();\r\n const { isTouched, hasError, helperText } = getFieldStatus(field);\r\n\r\n return (\r\n <TextField\r\n name={field.name}\r\n value={field.state.value ?? \"\"}\r\n onChange={event => field.handleChange(event.target.value)}\r\n onBlur={field.handleBlur}\r\n error={isTouched && hasError}\r\n helperText={isTouched && helperText}\r\n aria-label={field.name}\r\n {...props}\r\n />\r\n );\r\n};","export { useFieldContext, useFormContext, useLayoutForm, withLayoutForm } from \"./hooks/FormHooks\";\r\nexport { useDialogs } from \"./hooks/DialogsHooks\";\r\nexport type { DialogProps } from \"./hooks/DialogsHooks\";\r\nexport { useInView } from \"react-intersection-observer\";\r\n"],"mappings":"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","names":["jsx","jsx","dayjs","jsx","dayjs","TextField","jsx","TextField","FormControl","FormControlLabel","FormHelperText","jsx","jsxs","FormControl","FormControlLabel","FormHelperText","FormControl","FormHelperText","FormLabel","jsx","jsxs","FormControl","FormLabel","FormHelperText","jsx","FormControl","FormControlLabel","FormHelperText","jsx","jsxs","FormControl","FormControlLabel","FormHelperText","TextField","jsx","TextField"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,9 +2,9 @@ import { LinkOptions } from '@tanstack/react-router';
|
|
|
2
2
|
import { FC, ReactNode } from 'react';
|
|
3
3
|
import { CssVarsThemeOptions } from '@mui/material';
|
|
4
4
|
export { r as rootRouteHead } from './utils-ChipkRJ9.js';
|
|
5
|
-
export { createEnv } from '@t3-oss/env-core';
|
|
6
5
|
import 'axios';
|
|
7
6
|
import 'uuidv7';
|
|
7
|
+
import '@t3-oss/env-core';
|
|
8
8
|
|
|
9
9
|
interface NavigationPageItem extends Partial<Pick<LinkOptions, "to" | "href" | "params" | "search">> {
|
|
10
10
|
title: string;
|
package/dist/index.js
CHANGED
|
@@ -2314,12 +2314,8 @@ var LayoutProvider = ({ navigation, theme, children }) => {
|
|
|
2314
2314
|
}, []);
|
|
2315
2315
|
return /* @__PURE__ */ jsx8(ThemeProvider, { theme: createdTheme, children: /* @__PURE__ */ jsx8(LocalizationProvider, { dateAdapter: AdapterDayjs, adapterLocale: i18n.resolvedLanguage, children: /* @__PURE__ */ jsx8(DialogsProvider, { children: /* @__PURE__ */ jsx8(Layout, { navigation, children }) }) }) });
|
|
2316
2316
|
};
|
|
2317
|
-
|
|
2318
|
-
// src/index.ts
|
|
2319
|
-
import { createEnv } from "@t3-oss/env-core";
|
|
2320
2317
|
export {
|
|
2321
2318
|
LayoutProvider,
|
|
2322
|
-
createEnv,
|
|
2323
2319
|
rootRouteHead
|
|
2324
2320
|
};
|
|
2325
2321
|
/*! Bundled license information:
|