@webiny/app-admin 5.25.0 → 5.25.1-beta.0
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/components/AppInstaller/AppInstaller.d.ts +5 -0
- package/components/AppInstaller/AppInstaller.js +19 -2
- package/components/AppInstaller/AppInstaller.js.map +1 -1
- package/components/AppInstaller/useInstaller.d.ts +1 -0
- package/components/AppInstaller/useInstaller.js +4 -0
- package/components/AppInstaller/useInstaller.js.map +1 -1
- package/components/FileManager/FileDetails/Tags.d.ts +2 -0
- package/components/FileManager/FileDetails/Tags.js +61 -16
- package/components/FileManager/FileDetails/Tags.js.map +1 -1
- package/components/FileManager/FileDetails.js +8 -2
- package/components/FileManager/FileDetails.js.map +1 -1
- package/components/FileManager/FileManagerContext.d.ts +10 -0
- package/components/FileManager/FileManagerContext.js +33 -3
- package/components/FileManager/FileManagerContext.js.map +1 -1
- package/components/FileManager/FileManagerView.d.ts +3 -0
- package/components/FileManager/FileManagerView.js +3 -1
- package/components/FileManager/FileManagerView.js.map +1 -1
- package/components/FileManager/LeftSidebar.d.ts +1 -0
- package/components/FileManager/LeftSidebar.js +15 -5
- package/components/FileManager/LeftSidebar.js.map +1 -1
- package/components/FileManager/graphql.js +2 -2
- package/components/FileManager/graphql.js.map +1 -1
- package/components/FileManager.d.ts +3 -0
- package/components/FileManager.js +8 -2
- package/components/FileManager.js.map +1 -1
- package/components/SimpleForm/SimpleForm.d.ts +1 -0
- package/components/SimpleForm/SimpleForm.js +1 -1
- package/components/SimpleForm/SimpleForm.js.map +1 -1
- package/components/SplitView/SplitView.d.ts +1 -0
- package/components/SplitView/SplitView.js +1 -1
- package/components/SplitView/SplitView.js.map +1 -1
- package/package.json +19 -19
- package/ui/elements/form/FileManagerElement/styled.d.ts +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["FileDetails.tsx"],"names":["React","useCallback","useMemo","useState","bytes","classNames","css","Drawer","DrawerContent","IconButton","getFileTypePlugin","dayjs","get","set","cloneDeep","Tags","Name","Tooltip","Icon","Typography","useHotkeys","ReactComponent","CopyContentIcon","DeleteIcon","ImageIcon","FileIcon","CalendarIcon","HighlightIcon","useFileManager","useMutation","useSnackbar","useSecurity","ConfirmationDialog","DELETE_FILE","LIST_FILES","LIST_TAGS","i18n","mime","t","ns","fileDetailsSidebar","width","style","wrapper","height","overflowY","header","textAlign","marginBottom","paddingTop","textTransform","color","fontWeight","preview","boxSizing","display","justifyContent","alignItems","position","margin","img","objectFit","maxHeight","maxWidth","transform","backgroundColor","download","list","li","padding","lineHeight","minHeight","marginRight","flex","whiteSpace","overflow","textOverflow","drawerContent","isImage","file","fileType","getType","name","includes","FileDetails","props","uploadFile","validateFiles","filePlugin","actions","hideFileDetails","queryParams","darkImageBackground","setDarkImageBackground","identity","getPermission","fmFilePermission","canDelete","item","own","identityId","id","login","rwd","zIndex","disabled","keys","esc","update","cache","data","readQuery","query","variables","fileManager","listFiles","error","meta","hasMoreItems","cursor","totalItem","filteredList","filter","selectedFile","find","writeQuery","Array","isArray","tags","tagCountMap","forEach","tag","listTagsData","filteredTags","listTags","deleteFile","showSnackbar","renderDeleteImageAction","fileDeleteConfirmationProps","title","message","showConfirmation","fileTypeIcon","type","Boolean","dark","render","navigator","clipboard","writeText","src","map","Component","index","format","size","unitSeparator","createdOn"],"mappings":"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","sourcesContent":["import React, { useCallback, useMemo, useState } from \"react\";\nimport bytes from \"bytes\";\nimport classNames from \"classnames\";\nimport { css } from \"emotion\";\nimport { Drawer, DrawerContent } from \"@webiny/ui/Drawer\";\nimport { IconButton } from \"@webiny/ui/Button\";\nimport getFileTypePlugin from \"./getFileTypePlugin\";\nimport dayjs from \"dayjs\";\nimport get from \"lodash/get\";\nimport set from \"lodash/set\";\nimport cloneDeep from \"lodash/cloneDeep\";\nimport Tags from \"./FileDetails/Tags\";\nimport Name from \"./FileDetails/Name\";\nimport { Tooltip } from \"@webiny/ui/Tooltip\";\nimport { Icon } from \"@webiny/ui/Icon\";\nimport { Typography } from \"@webiny/ui/Typography\";\n/**\n * Package react-hotkeyz has no types.\n */\n// @ts-ignore\nimport { useHotkeys } from \"react-hotkeyz\";\nimport { ReactComponent as CopyContentIcon } from \"./icons/content_copy-black-24px.svg\";\nimport { ReactComponent as DeleteIcon } from \"./icons/delete.svg\";\nimport { ReactComponent as ImageIcon } from \"../../assets/icons/insert_photo-24px.svg\";\nimport { ReactComponent as FileIcon } from \"../../assets/icons/insert_drive_file-24px.svg\";\nimport { ReactComponent as CalendarIcon } from \"../../assets/icons/today-24px.svg\";\nimport { ReactComponent as HighlightIcon } from \"../../assets/icons/highlight-24px.svg\";\nimport { useFileManager } from \"./FileManagerContext\";\nimport { useMutation } from \"@apollo/react-hooks\";\nimport { useSnackbar } from \"~/hooks/useSnackbar\";\nimport { useSecurity } from \"@webiny/app-security\";\nimport { ConfirmationDialog } from \"@webiny/ui/ConfirmationDialog\";\nimport {\n DELETE_FILE,\n DeleteFileMutationResponse,\n DeleteFileMutationVariables,\n LIST_FILES,\n LIST_TAGS,\n ListFilesQueryResponse,\n ListFileTagsQueryResponse\n} from \"./graphql\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport mime from \"mime\";\nimport { FileItem, FileManagerSecurityPermission } from \"./types\";\nimport { FilesRenderChildren } from \"react-butterfiles\";\n\nconst t = i18n.ns(\"app-admin/file-manager/file-details\");\n\nconst fileDetailsSidebar = css({\n \"&.mdc-drawer\": {\n width: 360\n }\n});\n\ndeclare global {\n // eslint-disable-next-line\n namespace JSX {\n interface IntrinsicElements {\n \"li-title\": {\n children?: React.ReactNode;\n };\n\n \"li-content\": {\n children?: React.ReactNode;\n };\n }\n }\n}\n\nconst style: any = {\n wrapper: css({\n height: \"100vh\",\n overflowY: \"auto\"\n }),\n header: css({\n textAlign: \"center\",\n marginBottom: 24,\n paddingTop: 16,\n \"& span\": {\n textTransform: \"capitalize\",\n color: \"var(--mdc-theme-on-surface)\",\n fontWeight: 600\n }\n }),\n preview: css({\n boxSizing: \"border-box\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n position: \"relative\",\n width: \"100%\",\n height: 300,\n margin: \"0 auto 24px\",\n img: {\n objectFit: \"contain\",\n maxHeight: 300,\n maxWidth: 300,\n width: \"100%\",\n position: \"static\",\n transform: \"none\"\n },\n \"&.dark\": {\n backgroundColor: \"var(--mdc-theme-background)\"\n }\n }),\n download: css({\n textAlign: \"center\",\n margin: \"0 auto\",\n width: \"100%\",\n \"& .icon--active\": {\n \"&.mdc-icon-button\": {\n color: \"var(--mdc-theme-text-on-primary)\"\n }\n }\n }),\n list: css({\n textAlign: \"left\",\n color: \"var(--mdc-theme-on-surface)\",\n li: {\n padding: \"12px 16px\",\n lineHeight: \"22px\",\n \"li-title\": {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n minHeight: 48,\n \"& .list-item__title\": {\n fontWeight: 600\n },\n \"& .list-item__icon\": {\n marginRight: 24\n },\n \"& .list-item__content\": {\n flex: \"1 0 200px\"\n }\n },\n \"li-content\": {\n width: \"100%\",\n display: \"block\",\n \"& .list-item__truncate\": {\n display: \"block\",\n width: \"100%\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\"\n }\n }\n }\n }),\n drawerContent: css({\n \"&.mdc-drawer__content\": {\n height: \"auto\",\n overflowY: \"inherit\"\n }\n })\n};\ninterface FileDetailsProps {\n canEdit: (item: any) => boolean;\n file: FileItem;\n uploadFile: (files: FileItem[] | FileItem) => Promise<number | null>;\n validateFiles: FilesRenderChildren[\"validateFiles\"];\n [key: string]: any;\n}\n\nconst isImage = (file: FileItem) => {\n const fileType = mime.getType(file && file.name);\n\n if (fileType && typeof fileType === \"string\") {\n return fileType.includes(\"image\");\n }\n\n return false;\n};\n\nconst FileDetails: React.FC<FileDetailsProps> = props => {\n const { file, uploadFile, validateFiles } = props;\n\n const filePlugin = getFileTypePlugin(file);\n const actions: React.FC[] =\n get(filePlugin, \"fileDetails.actions\") || get(filePlugin, \"actions\") || [];\n\n const { hideFileDetails, queryParams } = useFileManager();\n const [darkImageBackground, setDarkImageBackground] = useState(false);\n\n const { identity, getPermission } = useSecurity();\n const fmFilePermission = useMemo((): FileManagerSecurityPermission | null => {\n return getPermission(\"fm.file\");\n }, [identity]);\n const canDelete = useCallback(\n item => {\n // Bail out early if no access\n if (!fmFilePermission) {\n return false;\n }\n if (fmFilePermission.own) {\n const identityId = identity ? identity.id || identity.login : null;\n if (!identityId) {\n return false;\n }\n return get(item, \"createdBy.id\") === identityId;\n }\n if (typeof fmFilePermission.rwd === \"string\") {\n return fmFilePermission.rwd.includes(\"d\");\n }\n return true;\n },\n [fmFilePermission]\n );\n\n useHotkeys({\n zIndex: 55,\n disabled: !file,\n keys: {\n esc: hideFileDetails\n }\n });\n\n const [deleteFile] = useMutation<DeleteFileMutationResponse, DeleteFileMutationVariables>(\n DELETE_FILE,\n {\n update: cache => {\n // 1. Update files list cache\n let data = cloneDeep(\n cache.readQuery<ListFilesQueryResponse>({\n query: LIST_FILES,\n variables: queryParams\n })\n );\n if (!data) {\n data = {\n fileManager: {\n listFiles: {\n data: [],\n error: null,\n meta: {\n hasMoreItems: false,\n cursor: null,\n totalItem: 0\n }\n }\n }\n };\n }\n const filteredList = data.fileManager.listFiles.data.filter(\n (item: FileItem) => item.id !== file.id\n );\n const selectedFile = data.fileManager.listFiles.data.find(\n (item: FileItem) => item.id === file.id\n );\n\n cache.writeQuery({\n query: LIST_FILES,\n variables: queryParams,\n data: set(data, \"fileManager.listFiles.data\", filteredList)\n });\n // 2. Update \"ListTags\" cache\n if (!selectedFile || Array.isArray(selectedFile.tags) === false) {\n return;\n }\n const tagCountMap: Record<string, number> = {};\n // Prepare \"tag\" count map\n data.fileManager.listFiles.data.forEach((file: FileItem) => {\n if (!Array.isArray(file.tags)) {\n return;\n }\n file.tags.forEach(tag => {\n if (tagCountMap[tag]) {\n tagCountMap[tag] += 1;\n } else {\n tagCountMap[tag] = 1;\n }\n });\n });\n\n // Get tags from cache\n const listTagsData = cloneDeep(\n cache.readQuery<ListFileTagsQueryResponse>({\n query: LIST_TAGS\n })\n );\n // Remove selected file tags from list.\n const filteredTags = (listTagsData?.fileManager?.listTags || []).filter(\n (tag: string) => {\n if (!selectedFile.tags.includes(tag)) {\n return true;\n }\n return tagCountMap[tag] > 1;\n }\n );\n\n // Write it to cache\n cache.writeQuery({\n query: LIST_TAGS,\n data: set(data, \"fileManager.listTags\", filteredTags)\n });\n }\n }\n );\n const { showSnackbar } = useSnackbar();\n\n const renderDeleteImageAction = useCallback(file => {\n if (!canDelete(file)) {\n return null;\n }\n const fileDeleteConfirmationProps = {\n title: t`Delete file`,\n message: file && (\n <span>\n {t`You're about to delete file {name}. Are you sure you want to continue?`({\n name: file.name\n })}\n </span>\n )\n };\n return (\n <ConfirmationDialog\n {...fileDeleteConfirmationProps}\n data-testid={\"fm-delete-file-confirmation-dialog\"}\n style={{ zIndex: 100 }}\n >\n {({ showConfirmation }) => {\n return (\n <Tooltip\n content={\n isImage(file) ? (\n <span>{t`Delete image`}</span>\n ) : (\n <span>{t`Delete file`}</span>\n )\n }\n placement={\"bottom\"}\n >\n <IconButton\n data-testid={\"fm-delete-file-button\"}\n icon={<DeleteIcon style={{ margin: \"0 8px 0 0\" }} />}\n onClick={() =>\n showConfirmation(async () => {\n await deleteFile({\n variables: {\n id: file.id\n }\n });\n showSnackbar(t`File deleted successfully.`);\n })\n }\n />\n </Tooltip>\n );\n }}\n </ConfirmationDialog>\n );\n }, []);\n\n const fileTypeIcon = useMemo(() => {\n if (file && typeof file.type === \"string\") {\n return file.type.includes(\"image\") ? <ImageIcon /> : <FileIcon />;\n }\n return <ImageIcon />;\n }, [file]);\n\n return (\n <Drawer\n className={fileDetailsSidebar}\n dir=\"rtl\"\n modal\n open={Boolean(file)}\n onClose={hideFileDetails}\n data-testid={\"fm.file-details.drawer\"}\n >\n {file && (\n <div className={style.wrapper} dir=\"ltr\">\n <div className={style.header}>\n <Typography use={\"headline5\"}>{t`File details`}</Typography>\n </div>\n <div\n className={classNames(style.preview, {\n dark: darkImageBackground\n })}\n >\n {filePlugin &&\n filePlugin.render({\n /**\n * TODO: @ts-refactor\n * Figure out which type is the file\n */\n // @ts-ignore\n file,\n uploadFile,\n validateFiles\n })}\n </div>\n <div className={style.download}>\n <>\n <Tooltip content={<span>{t`Copy URL`}</span>} placement={\"bottom\"}>\n <IconButton\n onClick={() => {\n navigator.clipboard.writeText(file.src);\n showSnackbar(t`URL copied successfully.`);\n }}\n icon={<CopyContentIcon style={{ margin: \"0 8px 0 0\" }} />}\n />\n </Tooltip>\n\n {actions.map((Component: React.FC, index: number) => (\n <Component key={index} {...props} />\n ))}\n {renderDeleteImageAction(file)}\n {/* Render background switcher */}\n <Tooltip content={t`Toggle background`} placement={\"bottom\"}>\n <IconButton\n icon={<HighlightIcon />}\n onClick={() => setDarkImageBackground(!darkImageBackground)}\n className={classNames({ \"icon--active\": darkImageBackground })}\n />\n </Tooltip>\n </>\n </div>\n <DrawerContent dir=\"ltr\" className={style.drawerContent}>\n <ul className={style.list}>\n <li>\n <Name {...props} />\n </li>\n <li>\n <li-title>\n <Icon className={\"list-item__icon\"} icon={fileTypeIcon} />\n <div>\n <Typography use={\"subtitle1\"}>{file.type}</Typography>{\" \"}\n {\" - \"}\n <Typography use={\"subtitle1\"}>\n {bytes.format(file.size, { unitSeparator: \" \" })}\n </Typography>\n </div>\n </li-title>\n </li>\n <li>\n <li-title>\n <Icon className={\"list-item__icon\"} icon={<CalendarIcon />} />\n <div>\n <Typography use={\"subtitle1\"}>\n {dayjs(file.createdOn).format(\"DD MMM YYYY [at] HH:mm\")}\n </Typography>\n </div>\n </li-title>\n </li>\n <li>\n <Tags key={props.file.id} {...props} />\n </li>\n </ul>\n </DrawerContent>\n </div>\n )}\n </Drawer>\n );\n};\n\nexport default FileDetails;\n"]}
|
|
1
|
+
{"version":3,"sources":["FileDetails.tsx"],"names":["React","useCallback","useMemo","useState","bytes","classNames","css","Drawer","DrawerContent","IconButton","getFileTypePlugin","dayjs","get","set","cloneDeep","Tags","Name","Tooltip","Icon","Typography","useHotkeys","ReactComponent","CopyContentIcon","DeleteIcon","ImageIcon","FileIcon","CalendarIcon","HighlightIcon","getWhere","useFileManager","useMutation","useSnackbar","useSecurity","ConfirmationDialog","DELETE_FILE","LIST_FILES","LIST_TAGS","i18n","mime","t","ns","fileDetailsSidebar","width","style","wrapper","height","overflowY","header","textAlign","marginBottom","paddingTop","textTransform","color","fontWeight","preview","boxSizing","display","justifyContent","alignItems","position","margin","img","objectFit","maxHeight","maxWidth","transform","backgroundColor","download","list","li","padding","lineHeight","minHeight","marginRight","flex","whiteSpace","overflow","textOverflow","drawerContent","isImage","file","fileType","getType","name","includes","FileDetails","props","uploadFile","validateFiles","filePlugin","actions","hideFileDetails","queryParams","darkImageBackground","setDarkImageBackground","identity","getPermission","fmFilePermission","canDelete","item","own","identityId","id","login","rwd","zIndex","disabled","keys","esc","update","cache","data","readQuery","query","variables","fileManager","listFiles","error","meta","hasMoreItems","cursor","totalItem","filteredList","filter","selectedFile","find","writeQuery","Array","isArray","tags","tagCountMap","forEach","tag","listTagsData","where","scope","filteredTags","listTags","deleteFile","showSnackbar","renderDeleteImageAction","fileDeleteConfirmationProps","title","message","showConfirmation","fileTypeIcon","type","Boolean","dark","render","navigator","clipboard","writeText","src","map","Component","index","format","size","unitSeparator","createdOn"],"mappings":"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","sourcesContent":["import React, { useCallback, useMemo, useState } from \"react\";\nimport bytes from \"bytes\";\nimport classNames from \"classnames\";\nimport { css } from \"emotion\";\nimport { Drawer, DrawerContent } from \"@webiny/ui/Drawer\";\nimport { IconButton } from \"@webiny/ui/Button\";\nimport getFileTypePlugin from \"./getFileTypePlugin\";\nimport dayjs from \"dayjs\";\nimport get from \"lodash/get\";\nimport set from \"lodash/set\";\nimport cloneDeep from \"lodash/cloneDeep\";\nimport Tags from \"./FileDetails/Tags\";\nimport Name from \"./FileDetails/Name\";\nimport { Tooltip } from \"@webiny/ui/Tooltip\";\nimport { Icon } from \"@webiny/ui/Icon\";\nimport { Typography } from \"@webiny/ui/Typography\";\n/**\n * Package react-hotkeyz has no types.\n */\n// @ts-ignore\nimport { useHotkeys } from \"react-hotkeyz\";\nimport { ReactComponent as CopyContentIcon } from \"./icons/content_copy-black-24px.svg\";\nimport { ReactComponent as DeleteIcon } from \"./icons/delete.svg\";\nimport { ReactComponent as ImageIcon } from \"../../assets/icons/insert_photo-24px.svg\";\nimport { ReactComponent as FileIcon } from \"../../assets/icons/insert_drive_file-24px.svg\";\nimport { ReactComponent as CalendarIcon } from \"../../assets/icons/today-24px.svg\";\nimport { ReactComponent as HighlightIcon } from \"../../assets/icons/highlight-24px.svg\";\nimport { getWhere, useFileManager } from \"./FileManagerContext\";\nimport { useMutation } from \"@apollo/react-hooks\";\nimport { useSnackbar } from \"~/hooks/useSnackbar\";\nimport { useSecurity } from \"@webiny/app-security\";\nimport { ConfirmationDialog } from \"@webiny/ui/ConfirmationDialog\";\nimport {\n DELETE_FILE,\n DeleteFileMutationResponse,\n DeleteFileMutationVariables,\n LIST_FILES,\n LIST_TAGS,\n ListFilesQueryResponse,\n ListFileTagsQueryResponse\n} from \"./graphql\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport mime from \"mime\";\nimport { FileItem, FileManagerSecurityPermission } from \"./types\";\nimport { FilesRenderChildren } from \"react-butterfiles\";\n\nconst t = i18n.ns(\"app-admin/file-manager/file-details\");\n\nconst fileDetailsSidebar = css({\n \"&.mdc-drawer\": {\n width: 360\n }\n});\n\ndeclare global {\n // eslint-disable-next-line\n namespace JSX {\n interface IntrinsicElements {\n \"li-title\": {\n children?: React.ReactNode;\n };\n\n \"li-content\": {\n children?: React.ReactNode;\n };\n }\n }\n}\n\nconst style: any = {\n wrapper: css({\n height: \"100vh\",\n overflowY: \"auto\"\n }),\n header: css({\n textAlign: \"center\",\n marginBottom: 24,\n paddingTop: 16,\n \"& span\": {\n textTransform: \"capitalize\",\n color: \"var(--mdc-theme-on-surface)\",\n fontWeight: 600\n }\n }),\n preview: css({\n boxSizing: \"border-box\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n position: \"relative\",\n width: \"100%\",\n height: 300,\n margin: \"0 auto 24px\",\n img: {\n objectFit: \"contain\",\n maxHeight: 300,\n maxWidth: 300,\n width: \"100%\",\n position: \"static\",\n transform: \"none\"\n },\n \"&.dark\": {\n backgroundColor: \"var(--mdc-theme-background)\"\n }\n }),\n download: css({\n textAlign: \"center\",\n margin: \"0 auto\",\n width: \"100%\",\n \"& .icon--active\": {\n \"&.mdc-icon-button\": {\n color: \"var(--mdc-theme-text-on-primary)\"\n }\n }\n }),\n list: css({\n textAlign: \"left\",\n color: \"var(--mdc-theme-on-surface)\",\n li: {\n padding: \"12px 16px\",\n lineHeight: \"22px\",\n \"li-title\": {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n minHeight: 48,\n \"& .list-item__title\": {\n fontWeight: 600\n },\n \"& .list-item__icon\": {\n marginRight: 24\n },\n \"& .list-item__content\": {\n flex: \"1 0 200px\"\n }\n },\n \"li-content\": {\n width: \"100%\",\n display: \"block\",\n \"& .list-item__truncate\": {\n display: \"block\",\n width: \"100%\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\"\n }\n }\n }\n }),\n drawerContent: css({\n \"&.mdc-drawer__content\": {\n height: \"auto\",\n overflowY: \"inherit\"\n }\n })\n};\ninterface FileDetailsProps {\n canEdit: (item: any) => boolean;\n file: FileItem;\n uploadFile: (files: FileItem[] | FileItem) => Promise<number | null>;\n validateFiles: FilesRenderChildren[\"validateFiles\"];\n [key: string]: any;\n}\n\nconst isImage = (file: FileItem) => {\n const fileType = mime.getType(file && file.name);\n\n if (fileType && typeof fileType === \"string\") {\n return fileType.includes(\"image\");\n }\n\n return false;\n};\n\nconst FileDetails: React.FC<FileDetailsProps> = props => {\n const { file, uploadFile, validateFiles } = props;\n\n const filePlugin = getFileTypePlugin(file);\n const actions: React.FC[] =\n get(filePlugin, \"fileDetails.actions\") || get(filePlugin, \"actions\") || [];\n\n const { hideFileDetails, queryParams } = useFileManager();\n const [darkImageBackground, setDarkImageBackground] = useState(false);\n\n const { identity, getPermission } = useSecurity();\n const fmFilePermission = useMemo((): FileManagerSecurityPermission | null => {\n return getPermission(\"fm.file\");\n }, [identity]);\n const canDelete = useCallback(\n item => {\n // Bail out early if no access\n if (!fmFilePermission) {\n return false;\n }\n if (fmFilePermission.own) {\n const identityId = identity ? identity.id || identity.login : null;\n if (!identityId) {\n return false;\n }\n return get(item, \"createdBy.id\") === identityId;\n }\n if (typeof fmFilePermission.rwd === \"string\") {\n return fmFilePermission.rwd.includes(\"d\");\n }\n return true;\n },\n [fmFilePermission]\n );\n\n useHotkeys({\n zIndex: 55,\n disabled: !file,\n keys: {\n esc: hideFileDetails\n }\n });\n\n const [deleteFile] = useMutation<DeleteFileMutationResponse, DeleteFileMutationVariables>(\n DELETE_FILE,\n {\n update: cache => {\n // 1. Update files list cache\n let data = cloneDeep(\n cache.readQuery<ListFilesQueryResponse>({\n query: LIST_FILES,\n variables: queryParams\n })\n );\n if (!data) {\n data = {\n fileManager: {\n listFiles: {\n data: [],\n error: null,\n meta: {\n hasMoreItems: false,\n cursor: null,\n totalItem: 0\n }\n }\n }\n };\n }\n const filteredList = data.fileManager.listFiles.data.filter(\n (item: FileItem) => item.id !== file.id\n );\n const selectedFile = data.fileManager.listFiles.data.find(\n (item: FileItem) => item.id === file.id\n );\n\n cache.writeQuery({\n query: LIST_FILES,\n variables: queryParams,\n data: set(data, \"fileManager.listFiles.data\", filteredList)\n });\n // 2. Update \"ListTags\" cache\n if (!selectedFile || Array.isArray(selectedFile.tags) === false) {\n return;\n }\n const tagCountMap: Record<string, number> = {};\n // Prepare \"tag\" count map\n data.fileManager.listFiles.data.forEach((file: FileItem) => {\n if (!Array.isArray(file.tags)) {\n return;\n }\n file.tags.forEach(tag => {\n if (tagCountMap[tag]) {\n tagCountMap[tag] += 1;\n } else {\n tagCountMap[tag] = 1;\n }\n });\n });\n\n // Get tags from cache\n const listTagsData = cloneDeep(\n cache.readQuery<ListFileTagsQueryResponse>({\n query: LIST_TAGS,\n variables: { where: getWhere(queryParams.scope) }\n })\n );\n // Remove selected file tags from list.\n const filteredTags = (listTagsData?.fileManager?.listTags || []).filter(\n (tag: string) => {\n if (!selectedFile.tags.includes(tag)) {\n return true;\n }\n return tagCountMap[tag] > 1;\n }\n );\n\n // Write it to cache\n cache.writeQuery({\n query: LIST_TAGS,\n variables: { where: getWhere(queryParams.scope) },\n data: set(data, \"fileManager.listTags\", filteredTags)\n });\n }\n }\n );\n const { showSnackbar } = useSnackbar();\n\n const renderDeleteImageAction = useCallback(file => {\n if (!canDelete(file)) {\n return null;\n }\n const fileDeleteConfirmationProps = {\n title: t`Delete file`,\n message: file && (\n <span>\n {t`You're about to delete file {name}. Are you sure you want to continue?`({\n name: file.name\n })}\n </span>\n )\n };\n return (\n <ConfirmationDialog\n {...fileDeleteConfirmationProps}\n data-testid={\"fm-delete-file-confirmation-dialog\"}\n style={{ zIndex: 100 }}\n >\n {({ showConfirmation }) => {\n return (\n <Tooltip\n content={\n isImage(file) ? (\n <span>{t`Delete image`}</span>\n ) : (\n <span>{t`Delete file`}</span>\n )\n }\n placement={\"bottom\"}\n >\n <IconButton\n data-testid={\"fm-delete-file-button\"}\n icon={<DeleteIcon style={{ margin: \"0 8px 0 0\" }} />}\n onClick={() =>\n showConfirmation(async () => {\n await deleteFile({\n variables: {\n id: file.id\n }\n });\n showSnackbar(t`File deleted successfully.`);\n })\n }\n />\n </Tooltip>\n );\n }}\n </ConfirmationDialog>\n );\n }, []);\n\n const fileTypeIcon = useMemo(() => {\n if (file && typeof file.type === \"string\") {\n return file.type.includes(\"image\") ? <ImageIcon /> : <FileIcon />;\n }\n return <ImageIcon />;\n }, [file]);\n\n return (\n <Drawer\n className={fileDetailsSidebar}\n dir=\"rtl\"\n modal\n open={Boolean(file)}\n onClose={hideFileDetails}\n data-testid={\"fm.file-details.drawer\"}\n >\n {file && (\n <div className={style.wrapper} dir=\"ltr\">\n <div className={style.header}>\n <Typography use={\"headline5\"}>{t`File details`}</Typography>\n </div>\n <div\n className={classNames(style.preview, {\n dark: darkImageBackground\n })}\n >\n {filePlugin &&\n filePlugin.render({\n /**\n * TODO: @ts-refactor\n * Figure out which type is the file\n */\n // @ts-ignore\n file,\n uploadFile,\n validateFiles\n })}\n </div>\n <div className={style.download}>\n <>\n <Tooltip content={<span>{t`Copy URL`}</span>} placement={\"bottom\"}>\n <IconButton\n onClick={() => {\n navigator.clipboard.writeText(file.src);\n showSnackbar(t`URL copied successfully.`);\n }}\n icon={<CopyContentIcon style={{ margin: \"0 8px 0 0\" }} />}\n />\n </Tooltip>\n\n {actions.map((Component: React.FC, index: number) => (\n <Component key={index} {...props} />\n ))}\n {renderDeleteImageAction(file)}\n {/* Render background switcher */}\n <Tooltip content={t`Toggle background`} placement={\"bottom\"}>\n <IconButton\n icon={<HighlightIcon />}\n onClick={() => setDarkImageBackground(!darkImageBackground)}\n className={classNames({ \"icon--active\": darkImageBackground })}\n />\n </Tooltip>\n </>\n </div>\n <DrawerContent dir=\"ltr\" className={style.drawerContent}>\n <ul className={style.list}>\n <li>\n <Name {...props} />\n </li>\n <li>\n <li-title>\n <Icon className={\"list-item__icon\"} icon={fileTypeIcon} />\n <div>\n <Typography use={\"subtitle1\"}>{file.type}</Typography>{\" \"}\n {\" - \"}\n <Typography use={\"subtitle1\"}>\n {bytes.format(file.size, { unitSeparator: \" \" })}\n </Typography>\n </div>\n </li-title>\n </li>\n <li>\n <li-title>\n <Icon className={\"list-item__icon\"} icon={<CalendarIcon />} />\n <div>\n <Typography use={\"subtitle1\"}>\n {dayjs(file.createdOn).format(\"DD MMM YYYY [at] HH:mm\")}\n </Typography>\n </div>\n </li-title>\n </li>\n <li>\n <Tags key={props.file.id} {...props} />\n </li>\n </ul>\n </DrawerContent>\n </div>\n )}\n </Drawer>\n );\n};\n\nexport default FileDetails;\n"]}
|
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { FileItem } from "./types";
|
|
3
|
+
export declare const getWhere: (scope: string | undefined) => {
|
|
4
|
+
tag_not_startsWith: string;
|
|
5
|
+
tag_startsWith?: undefined;
|
|
6
|
+
} | {
|
|
7
|
+
tag_startsWith: string;
|
|
8
|
+
tag_not_startsWith?: undefined;
|
|
9
|
+
};
|
|
3
10
|
interface StateQueryParams {
|
|
4
11
|
types: string[];
|
|
5
12
|
limit: number;
|
|
6
13
|
sort: number;
|
|
14
|
+
tags: string[];
|
|
15
|
+
scope: string;
|
|
16
|
+
where: Record<string, any>;
|
|
7
17
|
}
|
|
8
18
|
declare const FileManagerProvider: React.FC;
|
|
9
19
|
declare function useFileManager(): {
|
|
@@ -3,6 +3,7 @@ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProper
|
|
|
3
3
|
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
|
|
4
4
|
var _excluded = ["children"];
|
|
5
5
|
import React from "react";
|
|
6
|
+
import { useSecurity } from "@webiny/app-security";
|
|
6
7
|
var ListFilesSort;
|
|
7
8
|
|
|
8
9
|
(function (ListFilesSort) {
|
|
@@ -12,16 +13,39 @@ var ListFilesSort;
|
|
|
12
13
|
ListFilesSort[ListFilesSort["SIZE_DESC"] = 3] = "SIZE_DESC";
|
|
13
14
|
})(ListFilesSort || (ListFilesSort = {}));
|
|
14
15
|
|
|
16
|
+
var DEFAULT_SCOPE = "scope:";
|
|
17
|
+
export var getWhere = function getWhere(scope) {
|
|
18
|
+
if (!scope) {
|
|
19
|
+
return {
|
|
20
|
+
tag_not_startsWith: DEFAULT_SCOPE
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return {
|
|
25
|
+
tag_startsWith: scope
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
|
|
15
29
|
var init = function init(_ref) {
|
|
16
|
-
var accept = _ref.accept
|
|
30
|
+
var accept = _ref.accept,
|
|
31
|
+
tags = _ref.tags,
|
|
32
|
+
scope = _ref.scope,
|
|
33
|
+
own = _ref.own,
|
|
34
|
+
identity = _ref.identity;
|
|
35
|
+
var initialWhere = own ? {
|
|
36
|
+
createdBy: identity.id
|
|
37
|
+
} : {};
|
|
17
38
|
return {
|
|
18
39
|
showingFileDetails: null,
|
|
19
40
|
selected: [],
|
|
20
41
|
hasPreviouslyUploadedFiles: null,
|
|
21
42
|
queryParams: {
|
|
43
|
+
scope: scope,
|
|
44
|
+
tags: tags,
|
|
22
45
|
types: accept,
|
|
23
46
|
limit: 50,
|
|
24
|
-
sort: ListFilesSort.CREATED_ON_DESC
|
|
47
|
+
sort: ListFilesSort.CREATED_ON_DESC,
|
|
48
|
+
where: _objectSpread(_objectSpread({}, initialWhere), getWhere(scope))
|
|
25
49
|
},
|
|
26
50
|
dragging: false,
|
|
27
51
|
uploading: false
|
|
@@ -92,12 +116,18 @@ var FileManagerProvider = function FileManagerProvider(_ref2) {
|
|
|
92
116
|
var children = _ref2.children,
|
|
93
117
|
props = _objectWithoutProperties(_ref2, _excluded);
|
|
94
118
|
|
|
119
|
+
var _useSecurity = useSecurity(),
|
|
120
|
+
identity = _useSecurity.identity;
|
|
95
121
|
/**
|
|
96
122
|
* TODO @ts-refactor
|
|
97
123
|
* Figure out how to type the rest of the types.
|
|
98
124
|
*/
|
|
99
125
|
// @ts-ignore
|
|
100
|
-
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
var _React$useReducer = React.useReducer(fileManagerReducer, _objectSpread(_objectSpread({}, props), {}, {
|
|
129
|
+
identity: identity
|
|
130
|
+
}), init),
|
|
101
131
|
_React$useReducer2 = _slicedToArray(_React$useReducer, 2),
|
|
102
132
|
state = _React$useReducer2[0],
|
|
103
133
|
dispatch = _React$useReducer2[1];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["FileManagerContext.tsx"],"names":["React","ListFilesSort","init","accept","showingFileDetails","selected","hasPreviouslyUploadedFiles","queryParams","types","limit","sort","CREATED_ON_DESC","dragging","uploading","fileManagerReducer","state","action","next","type","existingIndex","findIndex","item","src","file","push","splice","FileManagerContext","createContext","FileManagerProvider","children","props","useReducer","dispatch","value","useMemo","useFileManager","context","useContext","Error","toggleSelected","setHasPreviouslyUploadedFiles","setQueryParams","setDragging","setUploading","showFileDetails","hideFileDetails"],"mappings":"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","sourcesContent":["import React from \"react\";\nimport { FileItem } from \"./types\";\n\nenum ListFilesSort {\n CREATED_ON_ASC,\n CREATED_ON_DESC,\n SIZE_ASC,\n SIZE_DESC\n}\n\ninterface InitParams {\n accept: string[];\n}\ninterface StateQueryParams {\n types: string[];\n limit: number;\n sort: number;\n}\ninterface State {\n showingFileDetails: string | null;\n selected: FileItem[];\n hasPreviouslyUploadedFiles: boolean | null;\n queryParams: StateQueryParams;\n dragging: boolean;\n uploading: boolean;\n}\nconst init = ({ accept }: InitParams): State => {\n return {\n showingFileDetails: null,\n selected: [],\n hasPreviouslyUploadedFiles: null,\n queryParams: {\n types: accept,\n limit: 50,\n sort: ListFilesSort.CREATED_ON_DESC\n },\n dragging: false,\n uploading: false\n };\n};\n\ninterface Action {\n type:\n | \"toggleSelected\"\n | \"queryParams\"\n | \"showFileDetails\"\n | \"dragging\"\n | \"hasPreviouslyUploadedFiles\"\n | \"uploading\";\n file: FileItem;\n queryParams: StateQueryParams;\n src: string;\n state: boolean;\n hasPreviouslyUploadedFiles: boolean;\n}\ninterface Reducer {\n (prev: State, action: Action): State;\n}\n\nconst fileManagerReducer: Reducer = (state: State, action) => {\n const next: State = {\n ...state\n };\n switch (action.type) {\n case \"toggleSelected\": {\n const existingIndex = state.selected.findIndex(item => item.src === action.file.src);\n if (existingIndex < 0) {\n next.selected.push(action.file);\n } else {\n next.selected.splice(existingIndex, 1);\n }\n break;\n }\n case \"queryParams\": {\n next.selected = [];\n next.queryParams = {\n ...state.queryParams,\n ...action.queryParams,\n types: state.queryParams.types,\n limit: 40,\n sort: ListFilesSort.CREATED_ON_DESC\n };\n break;\n }\n case \"showFileDetails\": {\n next.showingFileDetails = action.src;\n break;\n }\n case \"dragging\": {\n next.dragging = action.state;\n break;\n }\n case \"hasPreviouslyUploadedFiles\": {\n next.hasPreviouslyUploadedFiles = action.hasPreviouslyUploadedFiles;\n break;\n }\n case \"uploading\": {\n next.uploading = action.state;\n break;\n }\n }\n\n return next;\n};\n\nconst FileManagerContext = React.createContext({});\n\nconst FileManagerProvider: React.FC = ({ children, ...props }) => {\n /**\n * TODO @ts-refactor\n * Figure out how to type the rest of the types.\n */\n // @ts-ignore\n const [state, dispatch] = React.useReducer(fileManagerReducer, props, init);\n\n const value = React.useMemo(() => {\n return {\n state,\n dispatch\n };\n }, [state]);\n\n return (\n <FileManagerContext.Provider value={value} {...props}>\n {children}\n </FileManagerContext.Provider>\n );\n};\n\nfunction useFileManager() {\n const context: any = React.useContext(FileManagerContext);\n if (!context) {\n throw new Error(\"useFileManager must be used within a FileManagerProvider\");\n }\n\n const { state, dispatch } = context;\n return {\n selected: state.selected,\n toggleSelected(file: FileItem) {\n dispatch({\n type: \"toggleSelected\",\n file\n });\n },\n hasPreviouslyUploadedFiles: state.hasPreviouslyUploadedFiles,\n setHasPreviouslyUploadedFiles(hasPreviouslyUploadedFiles: boolean) {\n dispatch({ type: \"hasPreviouslyUploadedFiles\", hasPreviouslyUploadedFiles });\n },\n queryParams: state.queryParams,\n setQueryParams(queryParams: StateQueryParams) {\n dispatch({ type: \"queryParams\", queryParams });\n },\n setDragging(state = true) {\n dispatch({\n type: \"dragging\",\n state\n });\n },\n dragging: state.dragging,\n setUploading(state = true) {\n dispatch({\n type: \"uploading\",\n state\n });\n },\n uploading: state.uploading,\n showFileDetails(src: string) {\n dispatch({ type: \"showFileDetails\", src });\n },\n hideFileDetails() {\n dispatch({ type: \"showFileDetails\", src: null });\n },\n showingFileDetails: state.showingFileDetails,\n state,\n dispatch\n };\n}\n\nexport { FileManagerProvider, useFileManager };\n"]}
|
|
1
|
+
{"version":3,"sources":["FileManagerContext.tsx"],"names":["React","useSecurity","ListFilesSort","DEFAULT_SCOPE","getWhere","scope","tag_not_startsWith","tag_startsWith","init","accept","tags","own","identity","initialWhere","createdBy","id","showingFileDetails","selected","hasPreviouslyUploadedFiles","queryParams","types","limit","sort","CREATED_ON_DESC","where","dragging","uploading","fileManagerReducer","state","action","next","type","existingIndex","findIndex","item","src","file","push","splice","FileManagerContext","createContext","FileManagerProvider","children","props","useReducer","dispatch","value","useMemo","useFileManager","context","useContext","Error","toggleSelected","setHasPreviouslyUploadedFiles","setQueryParams","setDragging","setUploading","showFileDetails","hideFileDetails"],"mappings":"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","sourcesContent":["import React from \"react\";\nimport { FileItem } from \"./types\";\nimport { useSecurity } from \"@webiny/app-security\";\n\nenum ListFilesSort {\n CREATED_ON_ASC,\n CREATED_ON_DESC,\n SIZE_ASC,\n SIZE_DESC\n}\n\nconst DEFAULT_SCOPE = \"scope:\";\n\nexport const getWhere = (scope: string | undefined) => {\n if (!scope) {\n return {\n tag_not_startsWith: DEFAULT_SCOPE\n };\n }\n return {\n tag_startsWith: scope\n };\n};\n\ninterface InitParams {\n accept: string[];\n tags: string[];\n scope: string;\n own: boolean;\n identity: any;\n}\ninterface StateQueryParams {\n types: string[];\n limit: number;\n sort: number;\n tags: string[];\n scope: string;\n where: Record<string, any>;\n}\ninterface State {\n showingFileDetails: string | null;\n selected: FileItem[];\n hasPreviouslyUploadedFiles: boolean | null;\n queryParams: StateQueryParams;\n dragging: boolean;\n uploading: boolean;\n}\nconst init = ({ accept, tags, scope, own, identity }: InitParams): State => {\n const initialWhere = own ? { createdBy: identity.id } : {};\n return {\n showingFileDetails: null,\n selected: [],\n hasPreviouslyUploadedFiles: null,\n queryParams: {\n scope,\n tags,\n types: accept,\n limit: 50,\n sort: ListFilesSort.CREATED_ON_DESC,\n where: { ...initialWhere, ...getWhere(scope) }\n },\n dragging: false,\n uploading: false\n };\n};\n\ninterface Action {\n type:\n | \"toggleSelected\"\n | \"queryParams\"\n | \"showFileDetails\"\n | \"dragging\"\n | \"hasPreviouslyUploadedFiles\"\n | \"uploading\";\n file: FileItem;\n queryParams: StateQueryParams;\n src: string;\n state: boolean;\n hasPreviouslyUploadedFiles: boolean;\n}\ninterface Reducer {\n (prev: State, action: Action): State;\n}\n\nconst fileManagerReducer: Reducer = (state: State, action) => {\n const next: State = {\n ...state\n };\n switch (action.type) {\n case \"toggleSelected\": {\n const existingIndex = state.selected.findIndex(item => item.src === action.file.src);\n if (existingIndex < 0) {\n next.selected.push(action.file);\n } else {\n next.selected.splice(existingIndex, 1);\n }\n break;\n }\n case \"queryParams\": {\n next.selected = [];\n next.queryParams = {\n ...state.queryParams,\n ...action.queryParams,\n types: state.queryParams.types,\n limit: 40,\n sort: ListFilesSort.CREATED_ON_DESC\n };\n break;\n }\n case \"showFileDetails\": {\n next.showingFileDetails = action.src;\n break;\n }\n case \"dragging\": {\n next.dragging = action.state;\n break;\n }\n case \"hasPreviouslyUploadedFiles\": {\n next.hasPreviouslyUploadedFiles = action.hasPreviouslyUploadedFiles;\n break;\n }\n case \"uploading\": {\n next.uploading = action.state;\n break;\n }\n }\n\n return next;\n};\n\nconst FileManagerContext = React.createContext({});\n\nconst FileManagerProvider: React.FC = ({ children, ...props }) => {\n const { identity } = useSecurity();\n /**\n * TODO @ts-refactor\n * Figure out how to type the rest of the types.\n */\n // @ts-ignore\n const [state, dispatch] = React.useReducer(fileManagerReducer, { ...props, identity }, init);\n\n const value = React.useMemo(() => {\n return {\n state,\n dispatch\n };\n }, [state]);\n\n return (\n <FileManagerContext.Provider value={value} {...props}>\n {children}\n </FileManagerContext.Provider>\n );\n};\n\nfunction useFileManager() {\n const context: any = React.useContext(FileManagerContext);\n if (!context) {\n throw new Error(\"useFileManager must be used within a FileManagerProvider\");\n }\n\n const { state, dispatch } = context;\n return {\n selected: state.selected,\n toggleSelected(file: FileItem) {\n dispatch({\n type: \"toggleSelected\",\n file\n });\n },\n hasPreviouslyUploadedFiles: state.hasPreviouslyUploadedFiles,\n setHasPreviouslyUploadedFiles(hasPreviouslyUploadedFiles: boolean) {\n dispatch({ type: \"hasPreviouslyUploadedFiles\", hasPreviouslyUploadedFiles });\n },\n queryParams: state.queryParams,\n setQueryParams(queryParams: StateQueryParams) {\n dispatch({ type: \"queryParams\", queryParams });\n },\n setDragging(state = true) {\n dispatch({\n type: \"dragging\",\n state\n });\n },\n dragging: state.dragging,\n setUploading(state = true) {\n dispatch({\n type: \"uploading\",\n state\n });\n },\n uploading: state.uploading,\n showFileDetails(src: string) {\n dispatch({ type: \"showFileDetails\", src });\n },\n hideFileDetails() {\n dispatch({ type: \"showFileDetails\", src: null });\n },\n showingFileDetails: state.showingFileDetails,\n state,\n dispatch\n };\n}\n\nexport { FileManagerProvider, useFileManager };\n"]}
|
|
@@ -10,6 +10,9 @@ export interface FileManagerViewProps {
|
|
|
10
10
|
multipleMaxCount: number;
|
|
11
11
|
multipleMaxSize: number | string;
|
|
12
12
|
onUploadCompletion?: Function;
|
|
13
|
+
tags?: string[];
|
|
14
|
+
scope?: string;
|
|
15
|
+
own?: boolean;
|
|
13
16
|
}
|
|
14
17
|
declare const FileManagerView: React.FC<FileManagerViewProps>;
|
|
15
18
|
export default FileManagerView;
|
|
@@ -397,7 +397,9 @@ var FileManagerView = function FileManagerView(props) {
|
|
|
397
397
|
_context2.next = 6;
|
|
398
398
|
return createFile({
|
|
399
399
|
variables: {
|
|
400
|
-
data: response
|
|
400
|
+
data: _objectSpread(_objectSpread({}, response), {}, {
|
|
401
|
+
tags: queryParams.scope ? [queryParams.scope] : []
|
|
402
|
+
})
|
|
401
403
|
}
|
|
402
404
|
});
|
|
403
405
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["FileManagerView.tsx"],"names":["React","useRef","useCallback","useMemo","css","styled","Files","ButtonPrimary","ButtonIcon","Icon","File","useQuery","useMutation","useApolloClient","LIST_FILES","CREATE_FILE","GET_FILE_SETTINGS","getFileTypePlugin","get","debounce","getFileUploader","outputFileSelectionError","DropFilesHere","NoResults","FileDetails","LeftSidebar","BottomInfoBar","OverlayLayout","useSnackbar","Scrollbar","CircularProgress","i18n","useSecurity","useHotkeys","useFileManager","ReactComponent","SearchIcon","UploadIcon","NoPermissionView","t","ns","style","draggingFeedback","position","top","left","width","height","opacity","background","zIndex","leftDrawer","header","textAlign","fontSize","padding","fontWeight","color","InputSearch","backgroundColor","borderRadius","border","marginLeft","outline","searchIcon","FileListWrapper","float","display","FileList","gridTemplateColumns","marginBottom","renderFile","props","file","plugin","id","render","renderEmpty","hasPreviouslyUploadedFiles","browseFiles","fmFilePermission","FileManagerView","onClose","onChange","accept","multiple","maxSize","multipleMaxCount","multipleMaxSize","onUploadCompletion","selected","toggleSelected","dragging","setDragging","uploading","setUploading","showFileDetails","showingFileDetails","queryParams","setQueryParams","setHasPreviouslyUploadedFiles","showSnackbar","identity","getPermission","canCreate","own","rwd","includes","canEdit","item","creatorId","identityId","login","searchOnChange","search","toggleTag","tag","finalTags","Array","isArray","tags","splice","indexOf","push","getFileUploadErrorMessage","e","match","message","updateCacheAfterCreateFile","cache","newFile","newFileData","data","readQuery","query","variables","writeQuery","fileManager","listFiles","getFileDetailsFile","src","list","find","keys","esc","searchInput","apolloClient","gqlQuery","onCompleted","response","length","refreshOnScroll","scrollFrame","fetchMore","cursor","after","updateQuery","prev","result","fetchMoreResult","next","loading","update","createFile","uploadFile","files","errors","uploadedFiles","Promise","all","map","createFileResponse","setTimeout","name","renderUploadFileAction","settingsQuery","settings","uploadMaxFileSize","filter","Boolean","getDropZoneProps","validateFiles","onDragEnter","onExited","target","value","current","onSelect","defaultProps"],"mappings":"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","sourcesContent":["import React, { useRef, useCallback, useMemo } from \"react\";\nimport { css } from \"emotion\";\nimport styled from \"@emotion/styled\";\nimport Files, { FilesRenderChildren } from \"react-butterfiles\";\nimport { ButtonPrimary, ButtonIcon } from \"@webiny/ui/Button\";\nimport { Icon } from \"@webiny/ui/Icon\";\nimport File, { FileProps } from \"./File\";\nimport { useQuery, useMutation, useApolloClient } from \"@apollo/react-hooks\";\nimport { FilesRules } from \"react-butterfiles\";\nimport {\n LIST_FILES,\n CREATE_FILE,\n GET_FILE_SETTINGS,\n CreateFileMutationVariables,\n CreateFileMutationResponse,\n ListFilesQueryResponse,\n ListFilesQueryVariables\n} from \"./graphql\";\nimport getFileTypePlugin from \"./getFileTypePlugin\";\nimport get from \"lodash/get\";\nimport debounce from \"lodash/debounce\";\nimport getFileUploader from \"./getFileUploader\";\nimport outputFileSelectionError from \"./outputFileSelectionError\";\nimport DropFilesHere from \"./DropFilesHere\";\nimport NoResults from \"./NoResults\";\nimport FileDetails from \"./FileDetails\";\nimport LeftSidebar from \"./LeftSidebar\";\nimport BottomInfoBar from \"./BottomInfoBar\";\nimport { OverlayLayout } from \"../OverlayLayout\";\nimport { useSnackbar } from \"~/hooks/useSnackbar\";\nimport { Scrollbar } from \"@webiny/ui/Scrollbar\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { useSecurity } from \"@webiny/app-security\";\n/**\n * Package react-hotkeyz is missing types.\n */\n// @ts-ignore\nimport { useHotkeys } from \"react-hotkeyz\";\nimport { useFileManager } from \"./FileManagerContext\";\nimport { ReactComponent as SearchIcon } from \"./icons/round-search-24px.svg\";\nimport { ReactComponent as UploadIcon } from \"./icons/round-cloud_upload-24px.svg\";\nimport NoPermissionView from \"./NoPermissionView\";\nimport { FileItem, FileManagerSecurityPermission } from \"~/components/FileManager/types\";\nimport { MutationUpdaterFn } from \"apollo-client/core/watchQueryOptions\";\nimport { SecurityPermission } from \"@webiny/app-security/types\";\nimport { ObservableQueryFields } from \"@apollo/react-common/lib/types/types\";\n\nconst t = i18n.ns(\"app-admin/file-manager/file-manager-view\");\n\nconst style = {\n draggingFeedback: css({\n position: \"fixed\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: \"100%\",\n opacity: 0.5,\n background: \"white\",\n zIndex: 100\n }),\n leftDrawer: {\n header: css({\n textAlign: \"center\",\n fontSize: 18,\n padding: 10,\n fontWeight: 600,\n color: \"var(--mdc-theme-on-surface)\"\n })\n }\n};\n\nconst InputSearch = styled(\"div\")({\n backgroundColor: \"var(--mdc-theme-on-background)\",\n position: \"relative\",\n height: 32,\n padding: 3,\n width: \"100%\",\n borderRadius: 2,\n \"> input\": {\n border: \"none\",\n fontSize: 14,\n width: \"calc(100% - 10px)\",\n height: \"100%\",\n marginLeft: 50,\n backgroundColor: \"transparent\",\n outline: \"none\",\n color: \"var(--mdc-theme-text-primary-on-background)\"\n }\n});\n\nconst searchIcon = css({\n \"&.mdc-button__icon\": {\n color: \"var(--mdc-theme-text-secondary-on-background)\",\n position: \"absolute\",\n width: 24,\n height: 24,\n left: 15,\n top: 7\n }\n});\n\nconst FileListWrapper = styled(\"div\")({\n float: \"right\",\n display: \"inline-block\",\n width: \"calc(100vw - 270px)\",\n height: \"100%\"\n});\n\nconst FileList = styled(\"div\")({\n width: \"100%\",\n display: \"grid\",\n /* define the number of grid columns */\n gridTemplateColumns: \"repeat( auto-fill, minmax(220px, 1fr) )\",\n marginBottom: 95\n});\n\nexport interface FileManagerViewProps {\n onChange: Function;\n onClose: Function;\n files?: FilesRules;\n multiple: boolean; // Does not affect <Files> component, it always allows multiple selection.\n accept: Array<string>;\n maxSize: number | string;\n multipleMaxCount: number;\n multipleMaxSize: number | string;\n onUploadCompletion?: Function;\n}\n\ninterface RenderFileProps extends Omit<FileProps, \"children\"> {\n file: FileItem;\n children?: React.ReactNode;\n}\nconst renderFile: React.FC<RenderFileProps> = props => {\n const { file } = props;\n const plugin = getFileTypePlugin(file);\n if (!plugin) {\n return null;\n }\n return (\n <File {...props} key={file.id}>\n {plugin.render({\n /**\n * TODO @ts-refactor\n */\n // @ts-ignore\n file\n })}\n </File>\n );\n};\ninterface RenderEmptyProps {\n hasPreviouslyUploadedFiles: boolean;\n browseFiles: FilesRenderChildren[\"browseFiles\"];\n fmFilePermission: SecurityPermission | null;\n}\nconst renderEmpty: React.FC<RenderEmptyProps> = ({\n hasPreviouslyUploadedFiles,\n browseFiles,\n fmFilePermission\n}) => {\n if (!fmFilePermission) {\n return <NoPermissionView />;\n }\n if (hasPreviouslyUploadedFiles) {\n return <NoResults />;\n }\n return <DropFilesHere empty onClick={() => browseFiles()} />;\n};\n\ninterface RefreshOnScrollParams {\n fetchMore: ObservableQueryFields<ListFilesQueryResponse, ListFilesQueryVariables>[\"fetchMore\"];\n scrollFrame: {\n top: number;\n };\n}\n\ninterface FileError {\n file: FileItem;\n e: Error;\n}\n\ninterface GetFileDetailsFileParams {\n src: string;\n list: FileItem[];\n}\n\nconst FileManagerView: React.FC<FileManagerViewProps> = props => {\n const {\n onClose,\n onChange,\n accept,\n multiple,\n maxSize,\n multipleMaxCount,\n multipleMaxSize,\n onUploadCompletion\n } = props;\n\n const {\n selected,\n toggleSelected,\n dragging,\n setDragging,\n uploading,\n setUploading,\n showFileDetails,\n showingFileDetails,\n queryParams,\n setQueryParams,\n hasPreviouslyUploadedFiles,\n setHasPreviouslyUploadedFiles\n } = useFileManager();\n const { showSnackbar } = useSnackbar();\n\n const { identity, getPermission } = useSecurity();\n const fmFilePermission = useMemo((): FileManagerSecurityPermission | null => {\n return getPermission<FileManagerSecurityPermission>(\"fm.file\");\n }, [identity]);\n const canCreate = useMemo(() => {\n // Bail out early if no access\n if (!fmFilePermission) {\n return false;\n }\n\n if (fmFilePermission.own) {\n return true;\n }\n\n if (typeof fmFilePermission.rwd === \"string\") {\n return fmFilePermission.rwd.includes(\"w\");\n }\n\n return true;\n }, [fmFilePermission]);\n const canEdit = useCallback(\n item => {\n // Bail out early if no access\n if (!fmFilePermission) {\n return false;\n }\n const creatorId = get(item, \"createdBy.id\");\n\n if (fmFilePermission.own && creatorId) {\n const identityId = identity ? identity.id || identity.login : null;\n return creatorId === identityId;\n }\n\n if (typeof fmFilePermission.rwd === \"string\") {\n return fmFilePermission.rwd.includes(\"w\");\n }\n\n return true;\n },\n [fmFilePermission]\n );\n\n const searchOnChange = useCallback(\n // @ts-ignore\n debounce(search => setQueryParams({ search }), 500),\n []\n );\n\n const toggleTag = useCallback(async ({ tag, queryParams }) => {\n const finalTags = Array.isArray(queryParams.tags) ? [...queryParams.tags] : [];\n\n if (finalTags.includes(tag)) {\n finalTags.splice(finalTags.indexOf(tag), 1);\n } else {\n finalTags.push(tag);\n }\n\n setQueryParams({ ...queryParams, tags: finalTags });\n }, []);\n\n const getFileUploadErrorMessage = useCallback(e => {\n if (typeof e === \"string\") {\n const match = e.match(/Message>(.*?)<\\/Message/);\n if (match) {\n const [, message] = match;\n return message;\n }\n\n return e;\n }\n return e.message;\n }, []);\n\n const updateCacheAfterCreateFile: MutationUpdaterFn<CreateFileMutationResponse> = (\n cache,\n newFile\n ) => {\n const newFileData = get(newFile, \"data.fileManager.createFile.data\");\n\n const data = cache.readQuery<ListFilesQueryResponse>({\n query: LIST_FILES,\n variables: queryParams\n });\n\n cache.writeQuery({\n query: LIST_FILES,\n variables: queryParams,\n data: {\n fileManager: {\n ...(data?.fileManager || {}),\n listFiles: {\n ...(data?.fileManager || {}).listFiles,\n data: [newFileData, ...((data?.fileManager?.listFiles || {}).data || [])]\n }\n }\n }\n });\n };\n\n const getFileDetailsFile = useCallback(({ src, list }: GetFileDetailsFileParams): FileItem => {\n return list.find(item => item.src === src) as FileItem;\n }, []);\n\n useHotkeys({\n zIndex: 50,\n keys: {\n esc: onClose\n }\n });\n\n const searchInput = useRef<HTMLInputElement>(null);\n\n const apolloClient = useApolloClient();\n\n const gqlQuery = useQuery<ListFilesQueryResponse, ListFilesQueryVariables>(LIST_FILES, {\n variables: queryParams,\n onCompleted: response => {\n const list = get(response, \"fileManager.listFiles.data\") || [];\n if (hasPreviouslyUploadedFiles === null) {\n setHasPreviouslyUploadedFiles(list.length > 0);\n }\n }\n });\n\n const refreshOnScroll = useCallback(\n debounce(({ scrollFrame, fetchMore }: RefreshOnScrollParams) => {\n if (scrollFrame.top > 0.9) {\n const cursor = get(gqlQuery.data, \"fileManager.listFiles.meta.cursor\");\n if (cursor) {\n fetchMore({\n variables: { after: cursor },\n updateQuery: (\n prev: ListFilesQueryResponse,\n result: { fetchMoreResult?: ListFilesQueryResponse }\n ) => {\n const { fetchMoreResult } = result;\n if (!fetchMoreResult) {\n return prev;\n }\n\n const next = { ...fetchMoreResult };\n\n next.fileManager.listFiles.data = [\n ...prev.fileManager.listFiles.data,\n ...fetchMoreResult.fileManager.listFiles.data\n ];\n\n return next;\n }\n });\n }\n }\n }, 500),\n [gqlQuery]\n );\n\n const { data, fetchMore, loading } = gqlQuery;\n\n const list: FileItem[] = get(data, \"fileManager.listFiles.data\") || [];\n const [createFile] = useMutation<CreateFileMutationResponse, CreateFileMutationVariables>(\n CREATE_FILE,\n {\n update: updateCacheAfterCreateFile\n }\n );\n const uploadFile = async (files: FileItem[] | FileItem): Promise<number | null> => {\n setUploading(true);\n const list: FileItem[] = Array.isArray(files) ? files : [files];\n\n const errors: FileError[] = [];\n const uploadedFiles: FileItem[] = [];\n await Promise.all(\n list.map(async file => {\n try {\n const response = await getFileUploader()(file, { apolloClient });\n const createFileResponse = await createFile({ variables: { data: response } });\n // Save create file data for later\n uploadedFiles.push(get(createFileResponse, \"data.fileManager.createFile.data\"));\n } catch (e) {\n errors.push({ file, e });\n }\n })\n );\n\n if (!hasPreviouslyUploadedFiles) {\n setHasPreviouslyUploadedFiles(true);\n }\n\n setUploading(false);\n\n if (errors.length > 0) {\n // We wait 750ms, just for everything to settle down a bit.\n return setTimeout(() => {\n showSnackbar(\n <>\n {t`One or more files were not uploaded successfully:`}\n <ol>\n {errors.map(({ file, e }) => (\n <li key={file.name}>\n <strong>{file.name}</strong>: {getFileUploadErrorMessage(e)}\n </li>\n ))}\n </ol>\n </>\n );\n // TODO @ts-refactor\n }, 750) as unknown as number;\n }\n\n // We wait 750ms, just for everything to settle down a bit.\n setTimeout(() => showSnackbar(t`File upload complete.`), 750);\n if (typeof onUploadCompletion === \"function\") {\n // We wait 750ms, just for everything to settle down a bit.\n return setTimeout(() => {\n onUploadCompletion(uploadedFiles);\n onClose();\n // TODO @ts-refactor\n }, 750) as unknown as number;\n }\n return null;\n };\n\n const renderUploadFileAction = useCallback(\n ({ browseFiles }) => {\n if (!canCreate) {\n return null;\n }\n return (\n <ButtonPrimary onClick={browseFiles} disabled={uploading}>\n <ButtonIcon icon={<UploadIcon />} />\n {t`Upload...`}\n </ButtonPrimary>\n );\n },\n [uploading, canCreate]\n );\n\n const settingsQuery = useQuery(GET_FILE_SETTINGS);\n const settings = get(settingsQuery.data, \"fileManager.getSettings.data\") || {};\n return (\n <Files\n multiple\n maxSize={settings.uploadMaxFileSize ? settings.uploadMaxFileSize + \"b\" : maxSize}\n multipleMaxSize={multipleMaxSize}\n multipleMaxCount={multipleMaxCount}\n accept={accept}\n onSuccess={files => {\n uploadFile(files.map(file => file.src.file as FileItem).filter(Boolean));\n }}\n onError={errors => {\n /**\n * TODO @ts-refactor\n * Figure out if incoming errors var is wrong or the one in the outputFileSelectionError\n */\n // @ts-ignore\n const message = outputFileSelectionError(errors);\n showSnackbar(message);\n }}\n >\n {({ getDropZoneProps, browseFiles, validateFiles }) => (\n <OverlayLayout\n {...getDropZoneProps({\n onDragEnter: () => hasPreviouslyUploadedFiles && setDragging(true),\n onExited: onClose\n })}\n barLeft={\n <InputSearch>\n <Icon className={searchIcon} icon={<SearchIcon />} />\n <input\n ref={searchInput}\n onChange={e => searchOnChange(e.target.value)}\n placeholder={t`Search by filename or tags`}\n disabled={!fmFilePermission}\n data-testid={\"file-manager.search-input\"}\n />\n </InputSearch>\n }\n barRight={\n selected.length > 0 ? (\n <ButtonPrimary\n disabled={uploading}\n onClick={() => {\n (async () => {\n await onChange(multiple ? selected : selected[0]);\n\n onClose();\n })();\n }}\n >\n {t`Select`} {multiple && `(${selected.length})`}\n </ButtonPrimary>\n ) : (\n renderUploadFileAction({ browseFiles })\n )\n }\n >\n <>\n {dragging && hasPreviouslyUploadedFiles && (\n <DropFilesHere\n // @ts-ignore TODO: @adrian - className is never rendered?!\n className={style.draggingFeedback}\n onDragLeave={() => setDragging(false)}\n onDrop={() => setDragging(false)}\n />\n )}\n\n <FileDetails\n validateFiles={validateFiles}\n uploadFile={uploadFile}\n file={getFileDetailsFile({\n list,\n src: showingFileDetails\n })}\n canEdit={canEdit}\n />\n\n <LeftSidebar\n queryParams={queryParams}\n toggleTag={tag => toggleTag({ tag, queryParams })}\n />\n\n <FileListWrapper data-testid={\"fm-list-wrapper\"}>\n {loading && (\n <CircularProgress\n label={t`Loading Files...`}\n style={{ opacity: 1 }}\n />\n )}\n <Scrollbar\n onScrollFrame={scrollFrame =>\n refreshOnScroll({\n scrollFrame,\n fetchMore\n })\n }\n >\n <FileList>\n {list.length\n ? list.map(file =>\n renderFile({\n uploadFile,\n file,\n showFileDetails: () => showFileDetails(file.src),\n selected: selected.find(\n (current: FileItem) =>\n current.src === file.src\n ),\n onSelect:\n typeof onChange === \"undefined\"\n ? () => {\n return void 0;\n }\n : async () => {\n if (multiple) {\n toggleSelected(file);\n return;\n }\n\n await onChange(file);\n onClose();\n }\n })\n )\n : renderEmpty({\n hasPreviouslyUploadedFiles,\n browseFiles,\n fmFilePermission\n })}\n </FileList>\n </Scrollbar>\n <BottomInfoBar accept={accept} uploading={uploading} />\n </FileListWrapper>\n </>\n </OverlayLayout>\n )}\n </Files>\n );\n};\n\nFileManagerView.defaultProps = {\n multiple: false,\n maxSize: \"1000mb\",\n multipleMaxSize: \"1000mb\",\n multipleMaxCount: 100\n};\n\nexport default FileManagerView;\n"]}
|
|
1
|
+
{"version":3,"sources":["FileManagerView.tsx"],"names":["React","useRef","useCallback","useMemo","css","styled","Files","ButtonPrimary","ButtonIcon","Icon","File","useQuery","useMutation","useApolloClient","LIST_FILES","CREATE_FILE","GET_FILE_SETTINGS","getFileTypePlugin","get","debounce","getFileUploader","outputFileSelectionError","DropFilesHere","NoResults","FileDetails","LeftSidebar","BottomInfoBar","OverlayLayout","useSnackbar","Scrollbar","CircularProgress","i18n","useSecurity","useHotkeys","useFileManager","ReactComponent","SearchIcon","UploadIcon","NoPermissionView","t","ns","style","draggingFeedback","position","top","left","width","height","opacity","background","zIndex","leftDrawer","header","textAlign","fontSize","padding","fontWeight","color","InputSearch","backgroundColor","borderRadius","border","marginLeft","outline","searchIcon","FileListWrapper","float","display","FileList","gridTemplateColumns","marginBottom","renderFile","props","file","plugin","id","render","renderEmpty","hasPreviouslyUploadedFiles","browseFiles","fmFilePermission","FileManagerView","onClose","onChange","accept","multiple","maxSize","multipleMaxCount","multipleMaxSize","onUploadCompletion","selected","toggleSelected","dragging","setDragging","uploading","setUploading","showFileDetails","showingFileDetails","queryParams","setQueryParams","setHasPreviouslyUploadedFiles","showSnackbar","identity","getPermission","canCreate","own","rwd","includes","canEdit","item","creatorId","identityId","login","searchOnChange","search","toggleTag","tag","finalTags","Array","isArray","tags","splice","indexOf","push","getFileUploadErrorMessage","e","match","message","updateCacheAfterCreateFile","cache","newFile","newFileData","data","readQuery","query","variables","writeQuery","fileManager","listFiles","getFileDetailsFile","src","list","find","keys","esc","searchInput","apolloClient","gqlQuery","onCompleted","response","length","refreshOnScroll","scrollFrame","fetchMore","cursor","after","updateQuery","prev","result","fetchMoreResult","next","loading","update","createFile","uploadFile","files","errors","uploadedFiles","Promise","all","map","scope","createFileResponse","setTimeout","name","renderUploadFileAction","settingsQuery","settings","uploadMaxFileSize","filter","Boolean","getDropZoneProps","validateFiles","onDragEnter","onExited","target","value","current","onSelect","defaultProps"],"mappings":"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","sourcesContent":["import React, { useRef, useCallback, useMemo } from \"react\";\nimport { css } from \"emotion\";\nimport styled from \"@emotion/styled\";\nimport Files, { FilesRenderChildren } from \"react-butterfiles\";\nimport { ButtonPrimary, ButtonIcon } from \"@webiny/ui/Button\";\nimport { Icon } from \"@webiny/ui/Icon\";\nimport File, { FileProps } from \"./File\";\nimport { useQuery, useMutation, useApolloClient } from \"@apollo/react-hooks\";\nimport { FilesRules } from \"react-butterfiles\";\nimport {\n LIST_FILES,\n CREATE_FILE,\n GET_FILE_SETTINGS,\n CreateFileMutationVariables,\n CreateFileMutationResponse,\n ListFilesQueryResponse,\n ListFilesQueryVariables\n} from \"./graphql\";\nimport getFileTypePlugin from \"./getFileTypePlugin\";\nimport get from \"lodash/get\";\nimport debounce from \"lodash/debounce\";\nimport getFileUploader from \"./getFileUploader\";\nimport outputFileSelectionError from \"./outputFileSelectionError\";\nimport DropFilesHere from \"./DropFilesHere\";\nimport NoResults from \"./NoResults\";\nimport FileDetails from \"./FileDetails\";\nimport LeftSidebar from \"./LeftSidebar\";\nimport BottomInfoBar from \"./BottomInfoBar\";\nimport { OverlayLayout } from \"../OverlayLayout\";\nimport { useSnackbar } from \"~/hooks/useSnackbar\";\nimport { Scrollbar } from \"@webiny/ui/Scrollbar\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { useSecurity } from \"@webiny/app-security\";\n/**\n * Package react-hotkeyz is missing types.\n */\n// @ts-ignore\nimport { useHotkeys } from \"react-hotkeyz\";\nimport { useFileManager } from \"./FileManagerContext\";\nimport { ReactComponent as SearchIcon } from \"./icons/round-search-24px.svg\";\nimport { ReactComponent as UploadIcon } from \"./icons/round-cloud_upload-24px.svg\";\nimport NoPermissionView from \"./NoPermissionView\";\nimport { FileItem, FileManagerSecurityPermission } from \"~/components/FileManager/types\";\nimport { MutationUpdaterFn } from \"apollo-client/core/watchQueryOptions\";\nimport { SecurityPermission } from \"@webiny/app-security/types\";\nimport { ObservableQueryFields } from \"@apollo/react-common/lib/types/types\";\n\nconst t = i18n.ns(\"app-admin/file-manager/file-manager-view\");\n\nconst style = {\n draggingFeedback: css({\n position: \"fixed\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: \"100%\",\n opacity: 0.5,\n background: \"white\",\n zIndex: 100\n }),\n leftDrawer: {\n header: css({\n textAlign: \"center\",\n fontSize: 18,\n padding: 10,\n fontWeight: 600,\n color: \"var(--mdc-theme-on-surface)\"\n })\n }\n};\n\nconst InputSearch = styled(\"div\")({\n backgroundColor: \"var(--mdc-theme-on-background)\",\n position: \"relative\",\n height: 32,\n padding: 3,\n width: \"100%\",\n borderRadius: 2,\n \"> input\": {\n border: \"none\",\n fontSize: 14,\n width: \"calc(100% - 10px)\",\n height: \"100%\",\n marginLeft: 50,\n backgroundColor: \"transparent\",\n outline: \"none\",\n color: \"var(--mdc-theme-text-primary-on-background)\"\n }\n});\n\nconst searchIcon = css({\n \"&.mdc-button__icon\": {\n color: \"var(--mdc-theme-text-secondary-on-background)\",\n position: \"absolute\",\n width: 24,\n height: 24,\n left: 15,\n top: 7\n }\n});\n\nconst FileListWrapper = styled(\"div\")({\n float: \"right\",\n display: \"inline-block\",\n width: \"calc(100vw - 270px)\",\n height: \"100%\"\n});\n\nconst FileList = styled(\"div\")({\n width: \"100%\",\n display: \"grid\",\n /* define the number of grid columns */\n gridTemplateColumns: \"repeat( auto-fill, minmax(220px, 1fr) )\",\n marginBottom: 95\n});\n\nexport interface FileManagerViewProps {\n onChange: Function;\n onClose: Function;\n files?: FilesRules;\n multiple: boolean; // Does not affect <Files> component, it always allows multiple selection.\n accept: Array<string>;\n maxSize: number | string;\n multipleMaxCount: number;\n multipleMaxSize: number | string;\n onUploadCompletion?: Function;\n tags?: string[];\n scope?: string;\n own?: boolean;\n}\n\ninterface RenderFileProps extends Omit<FileProps, \"children\"> {\n file: FileItem;\n children?: React.ReactNode;\n}\nconst renderFile: React.FC<RenderFileProps> = props => {\n const { file } = props;\n const plugin = getFileTypePlugin(file);\n if (!plugin) {\n return null;\n }\n return (\n <File {...props} key={file.id}>\n {plugin.render({\n /**\n * TODO @ts-refactor\n */\n // @ts-ignore\n file\n })}\n </File>\n );\n};\ninterface RenderEmptyProps {\n hasPreviouslyUploadedFiles: boolean;\n browseFiles: FilesRenderChildren[\"browseFiles\"];\n fmFilePermission: SecurityPermission | null;\n}\nconst renderEmpty: React.FC<RenderEmptyProps> = ({\n hasPreviouslyUploadedFiles,\n browseFiles,\n fmFilePermission\n}) => {\n if (!fmFilePermission) {\n return <NoPermissionView />;\n }\n if (hasPreviouslyUploadedFiles) {\n return <NoResults />;\n }\n return <DropFilesHere empty onClick={() => browseFiles()} />;\n};\n\ninterface RefreshOnScrollParams {\n fetchMore: ObservableQueryFields<ListFilesQueryResponse, ListFilesQueryVariables>[\"fetchMore\"];\n scrollFrame: {\n top: number;\n };\n}\n\ninterface FileError {\n file: FileItem;\n e: Error;\n}\n\ninterface GetFileDetailsFileParams {\n src: string;\n list: FileItem[];\n}\n\nconst FileManagerView: React.FC<FileManagerViewProps> = props => {\n const {\n onClose,\n onChange,\n accept,\n multiple,\n maxSize,\n multipleMaxCount,\n multipleMaxSize,\n onUploadCompletion\n } = props;\n\n const {\n selected,\n toggleSelected,\n dragging,\n setDragging,\n uploading,\n setUploading,\n showFileDetails,\n showingFileDetails,\n queryParams,\n setQueryParams,\n hasPreviouslyUploadedFiles,\n setHasPreviouslyUploadedFiles\n } = useFileManager();\n const { showSnackbar } = useSnackbar();\n\n const { identity, getPermission } = useSecurity();\n const fmFilePermission = useMemo((): FileManagerSecurityPermission | null => {\n return getPermission<FileManagerSecurityPermission>(\"fm.file\");\n }, [identity]);\n const canCreate = useMemo(() => {\n // Bail out early if no access\n if (!fmFilePermission) {\n return false;\n }\n\n if (fmFilePermission.own) {\n return true;\n }\n\n if (typeof fmFilePermission.rwd === \"string\") {\n return fmFilePermission.rwd.includes(\"w\");\n }\n\n return true;\n }, [fmFilePermission]);\n const canEdit = useCallback(\n item => {\n // Bail out early if no access\n if (!fmFilePermission) {\n return false;\n }\n const creatorId = get(item, \"createdBy.id\");\n\n if (fmFilePermission.own && creatorId) {\n const identityId = identity ? identity.id || identity.login : null;\n return creatorId === identityId;\n }\n\n if (typeof fmFilePermission.rwd === \"string\") {\n return fmFilePermission.rwd.includes(\"w\");\n }\n\n return true;\n },\n [fmFilePermission]\n );\n\n const searchOnChange = useCallback(\n // @ts-ignore\n debounce(search => setQueryParams({ search }), 500),\n []\n );\n\n const toggleTag = useCallback(async ({ tag, queryParams }) => {\n const finalTags = Array.isArray(queryParams.tags) ? [...queryParams.tags] : [];\n\n if (finalTags.includes(tag)) {\n finalTags.splice(finalTags.indexOf(tag), 1);\n } else {\n finalTags.push(tag);\n }\n\n setQueryParams({ ...queryParams, tags: finalTags });\n }, []);\n\n const getFileUploadErrorMessage = useCallback(e => {\n if (typeof e === \"string\") {\n const match = e.match(/Message>(.*?)<\\/Message/);\n if (match) {\n const [, message] = match;\n return message;\n }\n\n return e;\n }\n return e.message;\n }, []);\n\n const updateCacheAfterCreateFile: MutationUpdaterFn<CreateFileMutationResponse> = (\n cache,\n newFile\n ) => {\n const newFileData = get(newFile, \"data.fileManager.createFile.data\");\n\n const data = cache.readQuery<ListFilesQueryResponse>({\n query: LIST_FILES,\n variables: queryParams\n });\n\n cache.writeQuery({\n query: LIST_FILES,\n variables: queryParams,\n data: {\n fileManager: {\n ...(data?.fileManager || {}),\n listFiles: {\n ...(data?.fileManager || {}).listFiles,\n data: [newFileData, ...((data?.fileManager?.listFiles || {}).data || [])]\n }\n }\n }\n });\n };\n\n const getFileDetailsFile = useCallback(({ src, list }: GetFileDetailsFileParams): FileItem => {\n return list.find(item => item.src === src) as FileItem;\n }, []);\n\n useHotkeys({\n zIndex: 50,\n keys: {\n esc: onClose\n }\n });\n\n const searchInput = useRef<HTMLInputElement>(null);\n\n const apolloClient = useApolloClient();\n\n const gqlQuery = useQuery<ListFilesQueryResponse, ListFilesQueryVariables>(LIST_FILES, {\n variables: queryParams,\n onCompleted: response => {\n const list = get(response, \"fileManager.listFiles.data\") || [];\n if (hasPreviouslyUploadedFiles === null) {\n setHasPreviouslyUploadedFiles(list.length > 0);\n }\n }\n });\n\n const refreshOnScroll = useCallback(\n debounce(({ scrollFrame, fetchMore }: RefreshOnScrollParams) => {\n if (scrollFrame.top > 0.9) {\n const cursor = get(gqlQuery.data, \"fileManager.listFiles.meta.cursor\");\n if (cursor) {\n fetchMore({\n variables: { after: cursor },\n updateQuery: (\n prev: ListFilesQueryResponse,\n result: { fetchMoreResult?: ListFilesQueryResponse }\n ) => {\n const { fetchMoreResult } = result;\n if (!fetchMoreResult) {\n return prev;\n }\n\n const next = { ...fetchMoreResult };\n\n next.fileManager.listFiles.data = [\n ...prev.fileManager.listFiles.data,\n ...fetchMoreResult.fileManager.listFiles.data\n ];\n\n return next;\n }\n });\n }\n }\n }, 500),\n [gqlQuery]\n );\n\n const { data, fetchMore, loading } = gqlQuery;\n\n const list: FileItem[] = get(data, \"fileManager.listFiles.data\") || [];\n const [createFile] = useMutation<CreateFileMutationResponse, CreateFileMutationVariables>(\n CREATE_FILE,\n {\n update: updateCacheAfterCreateFile\n }\n );\n const uploadFile = async (files: FileItem[] | FileItem): Promise<number | null> => {\n setUploading(true);\n const list: FileItem[] = Array.isArray(files) ? files : [files];\n\n const errors: FileError[] = [];\n const uploadedFiles: FileItem[] = [];\n await Promise.all(\n list.map(async file => {\n try {\n const response = await getFileUploader()(file, { apolloClient });\n /**\n * Add \"tags\" while creating the new file.\n */\n const createFileResponse = await createFile({\n variables: {\n data: {\n ...response,\n tags: queryParams.scope ? [queryParams.scope] : []\n }\n }\n });\n // Save create file data for later\n uploadedFiles.push(get(createFileResponse, \"data.fileManager.createFile.data\"));\n } catch (e) {\n errors.push({ file, e });\n }\n })\n );\n\n if (!hasPreviouslyUploadedFiles) {\n setHasPreviouslyUploadedFiles(true);\n }\n\n setUploading(false);\n\n if (errors.length > 0) {\n // We wait 750ms, just for everything to settle down a bit.\n return setTimeout(() => {\n showSnackbar(\n <>\n {t`One or more files were not uploaded successfully:`}\n <ol>\n {errors.map(({ file, e }) => (\n <li key={file.name}>\n <strong>{file.name}</strong>: {getFileUploadErrorMessage(e)}\n </li>\n ))}\n </ol>\n </>\n );\n // TODO @ts-refactor\n }, 750) as unknown as number;\n }\n\n // We wait 750ms, just for everything to settle down a bit.\n setTimeout(() => showSnackbar(t`File upload complete.`), 750);\n if (typeof onUploadCompletion === \"function\") {\n // We wait 750ms, just for everything to settle down a bit.\n return setTimeout(() => {\n onUploadCompletion(uploadedFiles);\n onClose();\n // TODO @ts-refactor\n }, 750) as unknown as number;\n }\n return null;\n };\n\n const renderUploadFileAction = useCallback(\n ({ browseFiles }) => {\n if (!canCreate) {\n return null;\n }\n return (\n <ButtonPrimary onClick={browseFiles} disabled={uploading}>\n <ButtonIcon icon={<UploadIcon />} />\n {t`Upload...`}\n </ButtonPrimary>\n );\n },\n [uploading, canCreate]\n );\n\n const settingsQuery = useQuery(GET_FILE_SETTINGS);\n const settings = get(settingsQuery.data, \"fileManager.getSettings.data\") || {};\n return (\n <Files\n multiple\n maxSize={settings.uploadMaxFileSize ? settings.uploadMaxFileSize + \"b\" : maxSize}\n multipleMaxSize={multipleMaxSize}\n multipleMaxCount={multipleMaxCount}\n accept={accept}\n onSuccess={files => {\n uploadFile(files.map(file => file.src.file as FileItem).filter(Boolean));\n }}\n onError={errors => {\n /**\n * TODO @ts-refactor\n * Figure out if incoming errors var is wrong or the one in the outputFileSelectionError\n */\n // @ts-ignore\n const message = outputFileSelectionError(errors);\n showSnackbar(message);\n }}\n >\n {({ getDropZoneProps, browseFiles, validateFiles }) => (\n <OverlayLayout\n {...getDropZoneProps({\n onDragEnter: () => hasPreviouslyUploadedFiles && setDragging(true),\n onExited: onClose\n })}\n barLeft={\n <InputSearch>\n <Icon className={searchIcon} icon={<SearchIcon />} />\n <input\n ref={searchInput}\n onChange={e => searchOnChange(e.target.value)}\n placeholder={t`Search by filename or tags`}\n disabled={!fmFilePermission}\n data-testid={\"file-manager.search-input\"}\n />\n </InputSearch>\n }\n barRight={\n selected.length > 0 ? (\n <ButtonPrimary\n disabled={uploading}\n onClick={() => {\n (async () => {\n await onChange(multiple ? selected : selected[0]);\n\n onClose();\n })();\n }}\n >\n {t`Select`} {multiple && `(${selected.length})`}\n </ButtonPrimary>\n ) : (\n renderUploadFileAction({ browseFiles })\n )\n }\n >\n <>\n {dragging && hasPreviouslyUploadedFiles && (\n <DropFilesHere\n // @ts-ignore TODO: @adrian - className is never rendered?!\n className={style.draggingFeedback}\n onDragLeave={() => setDragging(false)}\n onDrop={() => setDragging(false)}\n />\n )}\n\n <FileDetails\n validateFiles={validateFiles}\n uploadFile={uploadFile}\n file={getFileDetailsFile({\n list,\n src: showingFileDetails\n })}\n canEdit={canEdit}\n />\n\n <LeftSidebar\n queryParams={queryParams}\n toggleTag={tag => toggleTag({ tag, queryParams })}\n />\n\n <FileListWrapper data-testid={\"fm-list-wrapper\"}>\n {loading && (\n <CircularProgress\n label={t`Loading Files...`}\n style={{ opacity: 1 }}\n />\n )}\n <Scrollbar\n onScrollFrame={scrollFrame =>\n refreshOnScroll({\n scrollFrame,\n fetchMore\n })\n }\n >\n <FileList>\n {list.length\n ? list.map(file =>\n renderFile({\n uploadFile,\n file,\n showFileDetails: () => showFileDetails(file.src),\n selected: selected.find(\n (current: FileItem) =>\n current.src === file.src\n ),\n onSelect:\n typeof onChange === \"undefined\"\n ? () => {\n return void 0;\n }\n : async () => {\n if (multiple) {\n toggleSelected(file);\n return;\n }\n\n await onChange(file);\n onClose();\n }\n })\n )\n : renderEmpty({\n hasPreviouslyUploadedFiles,\n browseFiles,\n fmFilePermission\n })}\n </FileList>\n </Scrollbar>\n <BottomInfoBar accept={accept} uploading={uploading} />\n </FileListWrapper>\n </>\n </OverlayLayout>\n )}\n </Files>\n );\n};\n\nFileManagerView.defaultProps = {\n multiple: false,\n maxSize: \"1000mb\",\n multipleMaxSize: \"1000mb\",\n multipleMaxCount: 100\n};\n\nexport default FileManagerView;\n"]}
|
|
@@ -7,6 +7,8 @@ import styled from "@emotion/styled";
|
|
|
7
7
|
import { Icon } from "@webiny/ui/Icon";
|
|
8
8
|
import { ReactComponent as TagIcon } from "./icons/round-label-24px.svg";
|
|
9
9
|
import { LIST_TAGS } from "./graphql";
|
|
10
|
+
import { getWhere } from "./FileManagerContext";
|
|
11
|
+
import { formatTagAsLabel } from "./FileDetails/Tags";
|
|
10
12
|
var style = {
|
|
11
13
|
leftDrawer: /*#__PURE__*/css({
|
|
12
14
|
float: "left",
|
|
@@ -56,13 +58,19 @@ var Tag = /*#__PURE__*/styled("div", {
|
|
|
56
58
|
|
|
57
59
|
var LeftSidebar = function LeftSidebar(props) {
|
|
58
60
|
var toggleTag = props.toggleTag,
|
|
59
|
-
|
|
61
|
+
_props$queryParams = props.queryParams,
|
|
62
|
+
tags = _props$queryParams.tags,
|
|
63
|
+
scope = _props$queryParams.scope;
|
|
60
64
|
var activeTags = Array.isArray(tags) ? tags : [];
|
|
61
65
|
|
|
62
|
-
var _useQuery = useQuery(LIST_TAGS
|
|
66
|
+
var _useQuery = useQuery(LIST_TAGS, {
|
|
67
|
+
variables: {
|
|
68
|
+
where: getWhere(scope)
|
|
69
|
+
}
|
|
70
|
+
}),
|
|
63
71
|
data = _useQuery.data;
|
|
64
72
|
|
|
65
|
-
var list = get(data, "fileManager.listTags"
|
|
73
|
+
var list = get(data, "fileManager.listTags", []);
|
|
66
74
|
|
|
67
75
|
if (list.length === 0) {
|
|
68
76
|
return /*#__PURE__*/React.createElement("div", {
|
|
@@ -79,7 +87,9 @@ var LeftSidebar = function LeftSidebar(props) {
|
|
|
79
87
|
className: style.leftDrawer
|
|
80
88
|
}, /*#__PURE__*/React.createElement(TagList, {
|
|
81
89
|
"data-testid": "fm.left-drawer.tag-list"
|
|
82
|
-
}, tagList.
|
|
90
|
+
}, tagList.filter(function (tag) {
|
|
91
|
+
return tag !== scope;
|
|
92
|
+
}).map(function (item, index) {
|
|
83
93
|
var className = activeTags.includes(item) ? "active" : "";
|
|
84
94
|
return /*#__PURE__*/React.createElement(Tag, {
|
|
85
95
|
className: className,
|
|
@@ -89,7 +99,7 @@ var LeftSidebar = function LeftSidebar(props) {
|
|
|
89
99
|
}
|
|
90
100
|
}, /*#__PURE__*/React.createElement(Icon, {
|
|
91
101
|
icon: /*#__PURE__*/React.createElement(TagIcon, null)
|
|
92
|
-
}), " ", item);
|
|
102
|
+
}), " ", formatTagAsLabel(item, scope));
|
|
93
103
|
})));
|
|
94
104
|
};
|
|
95
105
|
|