@webiny/app-admin 5.24.0 → 5.25.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/base/Admin.d.ts +2 -2
- package/base/Admin.js +4 -0
- package/base/Admin.js.map +1 -0
- package/base/Base.js.map +1 -0
- package/base/plugins/AddGraphQLQuerySelection.js +3 -2
- package/base/plugins/AddGraphQLQuerySelection.js.map +1 -0
- package/base/providers/ApolloProvider.js +2 -1
- package/base/providers/ApolloProvider.js.map +1 -0
- package/base/providers/TelemetryProvider.js.map +1 -0
- package/base/providers/UiStateProvider.js.map +1 -0
- package/base/providers/ViewCompositionProvider.d.ts +2 -1
- package/base/providers/ViewCompositionProvider.js +8 -1
- package/base/providers/ViewCompositionProvider.js.map +1 -0
- package/base/ui/Brand.d.ts +2 -9
- package/base/ui/Brand.js.map +1 -0
- package/base/ui/CenteredView.d.ts +1 -5
- package/base/ui/CenteredView.js.map +1 -0
- package/base/ui/Dashboard.d.ts +2 -9
- package/base/ui/Dashboard.js.map +1 -0
- package/base/ui/Layout.d.ts +2 -8
- package/base/ui/Layout.js.map +1 -0
- package/base/ui/LocaleSelector.d.ts +2 -9
- package/base/ui/LocaleSelector.js.map +1 -0
- package/base/ui/LoginScreen.d.ts +2 -5
- package/base/ui/LoginScreen.js.map +1 -0
- package/base/ui/Logo.d.ts +3 -9
- package/base/ui/Logo.js.map +1 -0
- package/base/ui/Menu.d.ts +3 -12
- package/base/ui/Menu.js +9 -5
- package/base/ui/Menu.js.map +1 -0
- package/base/ui/Navigation.d.ts +6 -15
- package/base/ui/Navigation.js +20 -3
- package/base/ui/Navigation.js.map +1 -0
- package/base/ui/NotFound.d.ts +2 -9
- package/base/ui/NotFound.js.map +1 -0
- package/base/ui/Search.d.ts +3 -9
- package/base/ui/Search.js +6 -1
- package/base/ui/Search.js.map +1 -0
- package/base/ui/Tags.d.ts +3 -1
- package/base/ui/Tags.js.map +1 -0
- package/base/ui/UserMenu.d.ts +7 -28
- package/base/ui/UserMenu.js +15 -2
- package/base/ui/UserMenu.js.map +1 -0
- package/components/AdminLayout.js.map +1 -0
- package/components/AppInstaller/AppInstaller.js.map +1 -0
- package/components/AppInstaller/Sidebar.js +2 -1
- package/components/AppInstaller/Sidebar.js.map +1 -0
- package/components/AppInstaller/index.d.ts +0 -1
- package/components/AppInstaller/index.js.map +1 -0
- package/components/AppInstaller/styled.d.ts +4 -5
- package/components/AppInstaller/styled.js.map +1 -0
- package/components/AppInstaller/useInstaller.d.ts +6 -4
- package/components/AppInstaller/useInstaller.js +2 -2
- package/components/AppInstaller/useInstaller.js.map +1 -0
- package/components/EmptyView.d.ts +1 -1
- package/components/EmptyView.js.map +1 -0
- package/components/FileManager/BottomInfoBar/SupportedFileTypes.js +5 -0
- package/components/FileManager/BottomInfoBar/SupportedFileTypes.js.map +1 -0
- package/components/FileManager/BottomInfoBar/UploadStatus.js.map +1 -0
- package/components/FileManager/BottomInfoBar.js.map +1 -0
- package/components/FileManager/DropFilesHere.js.map +1 -0
- package/components/FileManager/File.js.map +1 -0
- package/components/FileManager/FileDetails/Name.js +8 -5
- package/components/FileManager/FileDetails/Name.js.map +1 -0
- package/components/FileManager/FileDetails/Tags.js +18 -7
- package/components/FileManager/FileDetails/Tags.js.map +1 -0
- package/components/FileManager/FileDetails.d.ts +3 -0
- package/components/FileManager/FileDetails.js +66 -39
- package/components/FileManager/FileDetails.js.map +1 -0
- package/components/FileManager/FileManagerContext.js +5 -0
- package/components/FileManager/FileManagerContext.js.map +1 -0
- package/components/FileManager/FileManagerView.d.ts +2 -2
- package/components/FileManager/FileManagerView.js +60 -43
- package/components/FileManager/FileManagerView.js.map +1 -0
- package/components/FileManager/LeftSidebar.js +2 -1
- package/components/FileManager/LeftSidebar.js.map +1 -0
- package/components/FileManager/NoPermissionView.js.map +1 -0
- package/components/FileManager/NoResults.js.map +1 -0
- package/components/FileManager/getFileTypePlugin.d.ts +1 -1
- package/components/FileManager/getFileTypePlugin.js +4 -0
- package/components/FileManager/getFileTypePlugin.js.map +1 -0
- package/components/FileManager/getFileUploader.js.map +1 -0
- package/components/FileManager/graphql.d.ts +90 -0
- package/components/FileManager/graphql.js +25 -0
- package/components/FileManager/graphql.js.map +1 -0
- package/components/FileManager/outputFileSelectionError.d.ts +6 -4
- package/components/FileManager/outputFileSelectionError.js +3 -7
- package/components/FileManager/outputFileSelectionError.js.map +1 -0
- package/components/FileManager/types.d.ts +4 -34
- package/components/FileManager/types.js.map +1 -0
- package/components/FileManager.js +12 -4
- package/components/FileManager.js.map +1 -0
- package/components/FloatingActionButton.js.map +1 -0
- package/components/MultiImageUpload.d.ts +2 -2
- package/components/MultiImageUpload.js.map +1 -0
- package/components/OverlayLayout/OverlayLayout.d.ts +3 -3
- package/components/OverlayLayout/OverlayLayout.js.map +1 -0
- package/components/OverlayLayout/index.js.map +1 -0
- package/components/Permissions/Permissions.d.ts +4 -4
- package/components/Permissions/Permissions.js.map +1 -0
- package/components/Permissions/StyledComponents.d.ts +2 -2
- package/components/Permissions/StyledComponents.js.map +1 -0
- package/components/Permissions/index.js.map +1 -0
- package/components/RichTextEditor/RichTextEditor.js.map +1 -0
- package/components/RichTextEditor/index.js.map +1 -0
- package/components/RichTextEditor/tools/header/index.js +3 -3
- package/components/RichTextEditor/tools/header/index.js.map +1 -0
- package/components/RichTextEditor/tools/image/index.d.ts +3 -1
- package/components/RichTextEditor/tools/image/index.js.map +1 -0
- package/components/RichTextEditor/tools/image/svgs.js.map +1 -0
- package/components/RichTextEditor/tools/image/tunes.js +7 -3
- package/components/RichTextEditor/tools/image/tunes.js.map +1 -0
- package/components/RichTextEditor/tools/image/types.js.map +1 -0
- package/components/RichTextEditor/tools/image/ui.d.ts +4 -2
- package/components/RichTextEditor/tools/image/ui.js +1 -1
- package/components/RichTextEditor/tools/image/ui.js.map +1 -0
- package/components/RichTextEditor/tools/paragraph/index.d.ts +3 -7
- package/components/RichTextEditor/tools/paragraph/index.js +6 -10
- package/components/RichTextEditor/tools/paragraph/index.js.map +1 -0
- package/components/RichTextEditor/tools/textColor/index.d.ts +9 -1
- package/components/RichTextEditor/tools/textColor/index.js +43 -9
- package/components/RichTextEditor/tools/textColor/index.js.map +1 -0
- package/components/RichTextEditor/tools/utils.js.map +1 -0
- package/components/Routes.js +2 -2
- package/components/Routes.js.map +1 -0
- package/components/SearchUI.js.map +1 -0
- package/components/SimpleForm/SimpleForm.d.ts +3 -2
- package/components/SimpleForm/SimpleForm.js.map +1 -0
- package/components/SimpleForm/index.js.map +1 -0
- package/components/SimpleUI/InputField.d.ts +1 -0
- package/components/SimpleUI/InputField.js +6 -4
- package/components/SimpleUI/InputField.js.map +1 -0
- package/components/SingleImageUpload.d.ts +0 -1
- package/components/SingleImageUpload.js +9 -12
- package/components/SingleImageUpload.js.map +1 -0
- package/components/SplitView/SplitView.js.map +1 -0
- package/components/SplitView/index.js.map +1 -0
- package/components/index.js.map +1 -0
- package/hooks/useConfirmationDialog.js.map +1 -0
- package/hooks/useDialog.js.map +1 -0
- package/hooks/useSnackbar.js.map +1 -0
- package/index.js.map +1 -0
- package/package.json +21 -20
- package/plugins/FileManagerFileTypePlugin.d.ts +2 -2
- package/plugins/FileManagerFileTypePlugin.js +4 -0
- package/plugins/FileManagerFileTypePlugin.js.map +1 -0
- package/plugins/MenuPlugin.d.ts +3 -3
- package/plugins/MenuPlugin.js +4 -0
- package/plugins/MenuPlugin.js.map +1 -0
- package/plugins/PermissionRendererPlugin.d.ts +4 -4
- package/plugins/PermissionRendererPlugin.js +4 -0
- package/plugins/PermissionRendererPlugin.js.map +1 -0
- package/plugins/fileManager/fileDefault.js.map +1 -0
- package/plugins/fileManager/fileImage/DeleteAction.js.map +1 -0
- package/plugins/fileManager/fileImage/EditAction.js +6 -2
- package/plugins/fileManager/fileImage/EditAction.js.map +1 -0
- package/plugins/fileManager/fileImage/index.js.map +1 -0
- package/plugins/fileManager/index.js.map +1 -0
- package/plugins/globalSearch/SearchBar.d.ts +1 -5
- package/plugins/globalSearch/SearchBar.js +4 -0
- package/plugins/globalSearch/SearchBar.js.map +1 -0
- package/plugins/globalSearch/SearchBarDropdown.d.ts +12 -9
- package/plugins/globalSearch/SearchBarDropdown.js.map +1 -0
- package/plugins/globalSearch/index.js.map +1 -0
- package/plugins/globalSearch/styled.d.ts +3 -4
- package/plugins/globalSearch/styled.js.map +1 -0
- package/plugins/index.d.ts +0 -1
- package/plugins/index.js.map +1 -0
- package/plugins/uiLayoutRenderer/index.js.map +1 -0
- package/types.d.ts +2 -2
- package/types.js.map +1 -0
- package/ui/UIElement.js.map +1 -0
- package/ui/UILayout.js.map +1 -0
- package/ui/UIRenderer.js.map +1 -0
- package/ui/UIView.js.map +1 -0
- package/ui/elements/AccordionElement.js.map +1 -0
- package/ui/elements/ButtonElement.js +7 -0
- package/ui/elements/ButtonElement.js.map +1 -0
- package/ui/elements/ButtonGroupElement.js.map +1 -0
- package/ui/elements/GenericElement.js.map +1 -0
- package/ui/elements/LabelElement.js.map +1 -0
- package/ui/elements/NavigationMenuElement.d.ts +2 -5
- package/ui/elements/NavigationMenuElement.js.map +1 -0
- package/ui/elements/PanelElement.js.map +1 -0
- package/ui/elements/PlaceholderElement.d.ts +0 -1
- package/ui/elements/PlaceholderElement.js.map +1 -0
- package/ui/elements/SmallButtonElement.js.map +1 -0
- package/ui/elements/TypographyElement.js.map +1 -0
- package/ui/elements/ViewElement.js.map +1 -0
- package/ui/elements/form/DynamicFieldsetElement/DynamicFieldsetRowElement.d.ts +2 -2
- package/ui/elements/form/DynamicFieldsetElement/DynamicFieldsetRowElement.js +10 -10
- package/ui/elements/form/DynamicFieldsetElement/DynamicFieldsetRowElement.js.map +1 -0
- package/ui/elements/form/DynamicFieldsetElement.d.ts +19 -18
- package/ui/elements/form/DynamicFieldsetElement.js +13 -0
- package/ui/elements/form/DynamicFieldsetElement.js.map +1 -0
- package/ui/elements/form/FileManagerElement/EmptyStateElement.js.map +1 -0
- package/ui/elements/form/FileManagerElement/EmptyStateElementRenderer.js.map +1 -0
- package/ui/elements/form/FileManagerElement/FileManagerElementRenderer.js.map +1 -0
- package/ui/elements/form/FileManagerElement/styled.d.ts +17 -14
- package/ui/elements/form/FileManagerElement/styled.js.map +1 -0
- package/ui/elements/form/FileManagerElement.d.ts +5 -5
- package/ui/elements/form/FileManagerElement.js.map +1 -0
- package/ui/elements/form/FormElement.js.map +1 -0
- package/ui/elements/form/FormFieldElement.d.ts +5 -5
- package/ui/elements/form/FormFieldElement.js +12 -4
- package/ui/elements/form/FormFieldElement.js.map +1 -0
- package/ui/elements/form/HiddenElement.js.map +1 -0
- package/ui/elements/form/InputElement.js.map +1 -0
- package/ui/elements/form/PasswordElement.js.map +1 -0
- package/ui/elements/form/SelectElement.d.ts +1 -1
- package/ui/elements/form/SelectElement.js +1 -1
- package/ui/elements/form/SelectElement.js.map +1 -0
- package/ui/elements/form/TextareaElement.js.map +1 -0
- package/ui/views/AdminView/ContentElement.js.map +1 -0
- package/ui/views/AdminView/HeaderElement.js +14 -2
- package/ui/views/AdminView/HeaderElement.js.map +1 -0
- package/ui/views/AdminView/HeaderSectionCenterElement.js.map +1 -0
- package/ui/views/AdminView/HeaderSectionLeftElement.js.map +1 -0
- package/ui/views/AdminView/HeaderSectionRightElement.js.map +1 -0
- package/ui/views/AdminView/components/Dialog.js.map +1 -0
- package/ui/views/AdminView/components/Hamburger.js.map +1 -0
- package/ui/views/AdminView/components/Snackbar.js.map +1 -0
- package/ui/views/FormView/FormContainerElement.d.ts +0 -1
- package/ui/views/FormView/FormContainerElement.js.map +1 -0
- package/ui/views/FormView/FormContentElement.js.map +1 -0
- package/ui/views/FormView/FormFooterElement.d.ts +0 -1
- package/ui/views/FormView/FormFooterElement.js.map +1 -0
- package/ui/views/FormView/FormHeaderElement.js.map +1 -0
- package/ui/views/FormView.js +21 -1
- package/ui/views/FormView.js.map +1 -0
- package/ui/views/OverlayView/ContentElement.js.map +1 -0
- package/ui/views/OverlayView/HeaderElement.js.map +1 -0
- package/ui/views/OverlayView/HeaderTitleElement.d.ts +1 -1
- package/ui/views/OverlayView/HeaderTitleElement.js.map +1 -0
- package/ui/views/OverlayView/useOverlayView.js.map +1 -0
- package/ui/views/OverlayView.js.map +1 -0
- package/ui/views/SplitView/SplitViewPanelElement.js.map +1 -0
- package/ui/views/SplitView.d.ts +2 -2
- package/ui/views/SplitView.js.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["Tags.tsx"],"names":["React","useCallback","useState","classNames","css","useApolloClient","useQuery","set","get","cloneDeep","Chips","Chip","ButtonSecondary","ButtonPrimary","ButtonDefault","IconButton","MultiAutoComplete","Icon","Form","useSnackbar","useFileManager","UPDATE_FILE","LIST_FILES","LIST_TAGS","ReactComponent","EditIcon","LabelIcon","chipsStyle","padding","marginLeft","backgroundColor","iconButtonStyle","width","height","addTagsStyle","color","textTransform","letterSpacing","actionWrapperStyle","marginTop","marginRight","Tags","file","canEdit","client","editing","setEdit","saving","setSaving","Array","isArray","tags","initialTags","setInitialTags","showSnackbar","queryParams","handleEdit","listTagsQuery","allTags","isEditingAllowed","renderHeaderContent","data","hasTags","length","map","tag","index","label","name","mutate","mutation","variables","id","update","cache","updated","newFileData","readQuery","query","fileManager","listFiles","forEach","item","key","writeQuery","listTagsData","updatedTagsList","listTags","includes","push","then","Bind","setValue","submit","baseOnChange","formattedTags","toLowerCase","ev"],"mappings":"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","sourcesContent":["import React, { useCallback, useState } from \"react\";\nimport classNames from \"classnames\";\nimport { css } from \"emotion\";\nimport { useApolloClient, useQuery } from \"@apollo/react-hooks\";\nimport set from \"lodash/set\";\nimport get from \"lodash/get\";\nimport cloneDeep from \"lodash/cloneDeep\";\nimport { Chips, Chip } from \"@webiny/ui/Chips\";\nimport { ButtonSecondary, ButtonPrimary, ButtonDefault, IconButton } from \"@webiny/ui/Button\";\nimport { MultiAutoComplete } from \"@webiny/ui/AutoComplete\";\nimport { Icon } from \"@webiny/ui/Icon\";\nimport { Form } from \"@webiny/form\";\nimport { useSnackbar } from \"~/hooks/useSnackbar\";\nimport { useFileManager } from \"./../FileManagerContext\";\nimport {\n UPDATE_FILE,\n LIST_FILES,\n LIST_TAGS,\n ListFilesQueryResponse,\n ListFileTagsQueryResponse\n} from \"./../graphql\";\nimport { ReactComponent as EditIcon } from \"./../icons/round-edit-24px.svg\";\nimport { ReactComponent as LabelIcon } from \"./../icons/round-label-24px.svg\";\nimport { FileItem } from \"../types\";\n\nconst chipsStyle = css({\n \"&.mdc-chip-set\": {\n padding: 0,\n marginLeft: -4,\n \"& .mdc-chip\": {\n backgroundColor: \"var(--mdc-theme-background)\"\n }\n }\n});\nconst iconButtonStyle = css({\n \"&.mdc-icon-button svg\": {\n width: 20,\n height: 20\n }\n});\nconst addTagsStyle = css({\n \"&.mdc-button:not(:disabled)\": {\n color: \"var(--mdc-theme-text-secondary-on-background)\",\n textTransform: \"capitalize\",\n letterSpacing: \"initial\",\n marginLeft: -8\n }\n});\nconst actionWrapperStyle = css({\n marginTop: 16,\n \"& button:first-child\": {\n marginRight: 16\n }\n});\n\ninterface TagsProps {\n file: FileItem;\n canEdit: (file: FileItem) => boolean;\n}\nconst Tags: React.FC<TagsProps> = ({ file, canEdit }) => {\n const client = useApolloClient();\n\n const [editing, setEdit] = useState(false);\n const [saving, setSaving] = useState(false);\n const [initialTags, setInitialTags] = useState(Array.isArray(file.tags) ? [...file.tags] : []);\n const { showSnackbar } = useSnackbar();\n const { queryParams } = useFileManager();\n const handleEdit = useCallback(() => setEdit(true), []);\n const listTagsQuery = useQuery(LIST_TAGS);\n const allTags = get(listTagsQuery, \"data.fileManager.listTags\") || [];\n\n const isEditingAllowed = canEdit(file);\n\n const renderHeaderContent = useCallback(\n ({ data }: { data: { tags: { name: string }[] } }) => {\n if (editing) {\n return null;\n }\n const hasTags = data.tags.length > 0;\n\n if (hasTags) {\n // Render existing tags and \"edit tags\" action.\n return (\n <>\n <Chips className={classNames(\"list-item__content\", chipsStyle)}>\n {data.tags.map((tag, index) => {\n const label = typeof tag === \"string\" ? tag : tag.name;\n return <Chip key={label + index} label={label} />;\n })}\n </Chips>\n {isEditingAllowed && (\n <IconButton\n className={iconButtonStyle}\n icon={<EditIcon />}\n onClick={handleEdit}\n />\n )}\n </>\n );\n }\n // Render \"add tags\" action.\n return (\n <ButtonDefault\n className={addTagsStyle}\n onClick={handleEdit}\n disabled={!isEditingAllowed}\n >\n Add tags...\n </ButtonDefault>\n );\n },\n [editing, isEditingAllowed]\n );\n\n return (\n <Form\n data={{\n tags: initialTags\n }}\n onSubmit={async ({ tags }) => {\n setSaving(true);\n client\n .mutate({\n mutation: UPDATE_FILE,\n variables: {\n id: file.id,\n data: { tags }\n },\n update: (cache, updated) => {\n const newFileData: FileItem = get(\n updated,\n \"data.fileManager.updateFile.data\"\n );\n\n // 1. Update files list cache\n const data = cloneDeep(\n cache.readQuery<ListFilesQueryResponse>({\n query: LIST_FILES,\n variables: queryParams\n })\n );\n\n if (data) {\n data.fileManager.listFiles.data.forEach(item => {\n if (item.key === newFileData.key) {\n item.tags = newFileData.tags;\n }\n });\n }\n\n cache.writeQuery({\n query: LIST_FILES,\n variables: queryParams,\n data\n });\n // 2. Update \"LIST_TAGS\" cache\n if (Array.isArray(newFileData.tags)) {\n // Get list tags data\n const listTagsData = cloneDeep(\n cache.readQuery<ListFileTagsQueryResponse>({\n query: LIST_TAGS\n })\n );\n if (!listTagsData) {\n return;\n }\n // Add new tag in list\n const updatedTagsList = [...newFileData.tags];\n\n if (Array.isArray(listTagsData.fileManager.listTags)) {\n listTagsData.fileManager.listTags.forEach(tag => {\n if (!updatedTagsList.includes(tag)) {\n updatedTagsList.push(tag);\n }\n });\n }\n\n set(listTagsData, \"fileManager.listTags\", updatedTagsList);\n // Write it to cache\n cache.writeQuery({\n query: LIST_TAGS,\n data: listTagsData\n });\n }\n }\n })\n .then(() => {\n setInitialTags(tags);\n setSaving(false);\n setEdit(false);\n showSnackbar(\"Tags successfully updated.\");\n });\n }}\n >\n {({ Bind, data, setValue, submit }) => (\n <React.Fragment>\n <li-title>\n <Icon className={\"list-item__icon\"} icon={<LabelIcon />} />\n {renderHeaderContent({\n // TODO @ts-refactor\n // @ts-ignore\n data\n })}\n </li-title>\n {editing && (\n <li-content>\n <Bind\n name={\"tags\"}\n beforeChange={(\n tags: string[],\n baseOnChange: (tags: string[]) => void\n ) => {\n const formattedTags = tags.map(tag => tag.toLowerCase());\n baseOnChange(formattedTags);\n }}\n >\n <MultiAutoComplete\n options={allTags}\n placeholder={\"homepage asset\"}\n description={\"Type in a new tag or select an existing one.\"}\n unique={true}\n allowFreeInput={true}\n useSimpleValues={true}\n disabled={saving}\n />\n </Bind>\n <div className={actionWrapperStyle}>\n <ButtonPrimary\n small\n onClick={ev => {\n submit(ev);\n }}\n data-testid={\"fm.tags.submit\"}\n >\n Submit\n </ButtonPrimary>\n <ButtonSecondary\n small\n onClick={() => {\n setValue(\"tags\", initialTags);\n setEdit(false);\n }}\n >\n Cancel\n </ButtonSecondary>\n </div>\n </li-content>\n )}\n </React.Fragment>\n )}\n </Form>\n );\n};\n\nexport default Tags;\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { FileItem } from "./types";
|
|
3
|
+
import { FilesRenderChildren } from "react-butterfiles";
|
|
3
4
|
declare global {
|
|
4
5
|
namespace JSX {
|
|
5
6
|
interface IntrinsicElements {
|
|
@@ -15,6 +16,8 @@ declare global {
|
|
|
15
16
|
interface FileDetailsProps {
|
|
16
17
|
canEdit: (item: any) => boolean;
|
|
17
18
|
file: FileItem;
|
|
19
|
+
uploadFile: (files: FileItem[] | FileItem) => Promise<number | null>;
|
|
20
|
+
validateFiles: FilesRenderChildren["validateFiles"];
|
|
18
21
|
[key: string]: any;
|
|
19
22
|
}
|
|
20
23
|
declare const FileDetails: React.FC<FileDetailsProps>;
|
|
@@ -162,11 +162,12 @@ var FileDetails = function FileDetails(props) {
|
|
|
162
162
|
setDarkImageBackground = _useState2[1];
|
|
163
163
|
|
|
164
164
|
var _useSecurity = useSecurity(),
|
|
165
|
-
identity = _useSecurity.identity
|
|
165
|
+
identity = _useSecurity.identity,
|
|
166
|
+
getPermission = _useSecurity.getPermission;
|
|
166
167
|
|
|
167
168
|
var fmFilePermission = useMemo(function () {
|
|
168
|
-
return
|
|
169
|
-
}, []);
|
|
169
|
+
return getPermission("fm.file");
|
|
170
|
+
}, [identity]);
|
|
170
171
|
var canDelete = useCallback(function (item) {
|
|
171
172
|
// Bail out early if no access
|
|
172
173
|
if (!fmFilePermission) {
|
|
@@ -174,7 +175,12 @@ var FileDetails = function FileDetails(props) {
|
|
|
174
175
|
}
|
|
175
176
|
|
|
176
177
|
if (fmFilePermission.own) {
|
|
177
|
-
var identityId = identity.id || identity.login;
|
|
178
|
+
var identityId = identity ? identity.id || identity.login : null;
|
|
179
|
+
|
|
180
|
+
if (!identityId) {
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
|
|
178
184
|
return get(item, "createdBy.id") === identityId;
|
|
179
185
|
}
|
|
180
186
|
|
|
@@ -194,11 +200,30 @@ var FileDetails = function FileDetails(props) {
|
|
|
194
200
|
|
|
195
201
|
var _useMutation = useMutation(DELETE_FILE, {
|
|
196
202
|
update: function update(cache) {
|
|
203
|
+
var _listTagsData$fileMan;
|
|
204
|
+
|
|
197
205
|
// 1. Update files list cache
|
|
198
206
|
var data = cloneDeep(cache.readQuery({
|
|
199
207
|
query: LIST_FILES,
|
|
200
208
|
variables: queryParams
|
|
201
209
|
}));
|
|
210
|
+
|
|
211
|
+
if (!data) {
|
|
212
|
+
data = {
|
|
213
|
+
fileManager: {
|
|
214
|
+
listFiles: {
|
|
215
|
+
data: [],
|
|
216
|
+
error: null,
|
|
217
|
+
meta: {
|
|
218
|
+
hasMoreItems: false,
|
|
219
|
+
cursor: null,
|
|
220
|
+
totalItem: 0
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
|
|
202
227
|
var filteredList = data.fileManager.listFiles.data.filter(function (item) {
|
|
203
228
|
return item.id !== file.id;
|
|
204
229
|
});
|
|
@@ -212,44 +237,46 @@ var FileDetails = function FileDetails(props) {
|
|
|
212
237
|
}); // 2. Update "ListTags" cache
|
|
213
238
|
|
|
214
239
|
// 2. Update "ListTags" cache
|
|
215
|
-
if (Array.isArray(selectedFile.tags)) {
|
|
216
|
-
|
|
240
|
+
if (!selectedFile || Array.isArray(selectedFile.tags) === false) {
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
217
243
|
|
|
218
|
-
|
|
219
|
-
data.fileManager.listFiles.data.forEach(function (file) {
|
|
220
|
-
if (!Array.isArray(file.tags)) {
|
|
221
|
-
return;
|
|
222
|
-
}
|
|
244
|
+
var tagCountMap = {}; // Prepare "tag" count map
|
|
223
245
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
query: LIST_TAGS
|
|
236
|
-
})); // Remove selected file tags from list.
|
|
237
|
-
|
|
238
|
-
// Remove selected file tags from list.
|
|
239
|
-
var filteredTags = listTagsData.fileManager.listTags.filter(function (tag) {
|
|
240
|
-
if (!selectedFile.tags.includes(tag)) {
|
|
241
|
-
return true;
|
|
246
|
+
// Prepare "tag" count map
|
|
247
|
+
data.fileManager.listFiles.data.forEach(function (file) {
|
|
248
|
+
if (!Array.isArray(file.tags)) {
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
file.tags.forEach(function (tag) {
|
|
253
|
+
if (tagCountMap[tag]) {
|
|
254
|
+
tagCountMap[tag] += 1;
|
|
255
|
+
} else {
|
|
256
|
+
tagCountMap[tag] = 1;
|
|
242
257
|
}
|
|
258
|
+
});
|
|
259
|
+
}); // Get tags from cache
|
|
243
260
|
|
|
244
|
-
|
|
245
|
-
|
|
261
|
+
// Get tags from cache
|
|
262
|
+
var listTagsData = cloneDeep(cache.readQuery({
|
|
263
|
+
query: LIST_TAGS
|
|
264
|
+
})); // Remove selected file tags from list.
|
|
246
265
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
}
|
|
252
|
-
|
|
266
|
+
// Remove selected file tags from list.
|
|
267
|
+
var filteredTags = ((listTagsData === null || listTagsData === void 0 ? void 0 : (_listTagsData$fileMan = listTagsData.fileManager) === null || _listTagsData$fileMan === void 0 ? void 0 : _listTagsData$fileMan.listTags) || []).filter(function (tag) {
|
|
268
|
+
if (!selectedFile.tags.includes(tag)) {
|
|
269
|
+
return true;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
return tagCountMap[tag] > 1;
|
|
273
|
+
}); // Write it to cache
|
|
274
|
+
|
|
275
|
+
// Write it to cache
|
|
276
|
+
cache.writeQuery({
|
|
277
|
+
query: LIST_TAGS,
|
|
278
|
+
data: set(data, "fileManager.listTags", filteredTags)
|
|
279
|
+
});
|
|
253
280
|
}
|
|
254
281
|
}),
|
|
255
282
|
_useMutation2 = _slicedToArray(_useMutation, 1),
|
|
@@ -277,7 +304,7 @@ var FileDetails = function FileDetails(props) {
|
|
|
277
304
|
}), function (_ref) {
|
|
278
305
|
var showConfirmation = _ref.showConfirmation;
|
|
279
306
|
return /*#__PURE__*/React.createElement(Tooltip, {
|
|
280
|
-
content: isImage ? /*#__PURE__*/React.createElement("span", null, t(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["Delete image"])))) : /*#__PURE__*/React.createElement("span", null, t(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["Delete file"])))),
|
|
307
|
+
content: isImage(file) ? /*#__PURE__*/React.createElement("span", null, t(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["Delete image"])))) : /*#__PURE__*/React.createElement("span", null, t(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["Delete file"])))),
|
|
281
308
|
placement: "bottom"
|
|
282
309
|
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
283
310
|
"data-testid": "fm-delete-file-button",
|
|
@@ -338,7 +365,7 @@ var FileDetails = function FileDetails(props) {
|
|
|
338
365
|
className: classNames(style.preview, {
|
|
339
366
|
dark: darkImageBackground
|
|
340
367
|
})
|
|
341
|
-
}, filePlugin.render({
|
|
368
|
+
}, filePlugin && filePlugin.render({
|
|
342
369
|
/**
|
|
343
370
|
* TODO: @ts-refactor
|
|
344
371
|
* Figure out which type is the file
|
|
@@ -0,0 +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"]}
|
|
@@ -92,6 +92,11 @@ var FileManagerProvider = function FileManagerProvider(_ref2) {
|
|
|
92
92
|
var children = _ref2.children,
|
|
93
93
|
props = _objectWithoutProperties(_ref2, _excluded);
|
|
94
94
|
|
|
95
|
+
/**
|
|
96
|
+
* TODO @ts-refactor
|
|
97
|
+
* Figure out how to type the rest of the types.
|
|
98
|
+
*/
|
|
99
|
+
// @ts-ignore
|
|
95
100
|
var _React$useReducer = React.useReducer(fileManagerReducer, props, init),
|
|
96
101
|
_React$useReducer2 = _slicedToArray(_React$useReducer, 2),
|
|
97
102
|
state = _React$useReducer2[0],
|
|
@@ -0,0 +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,6 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { FilesRules } from "react-butterfiles";
|
|
3
|
-
|
|
3
|
+
export interface FileManagerViewProps {
|
|
4
4
|
onChange: Function;
|
|
5
5
|
onClose: Function;
|
|
6
6
|
files?: FilesRules;
|
|
@@ -10,6 +10,6 @@ declare type FileManagerViewProps = {
|
|
|
10
10
|
multipleMaxCount: number;
|
|
11
11
|
multipleMaxSize: number | string;
|
|
12
12
|
onUploadCompletion?: Function;
|
|
13
|
-
}
|
|
13
|
+
}
|
|
14
14
|
declare const FileManagerView: React.FC<FileManagerViewProps>;
|
|
15
15
|
export default FileManagerView;
|
|
@@ -119,6 +119,11 @@ var FileList = /*#__PURE__*/styled("div", {
|
|
|
119
119
|
var renderFile = function renderFile(props) {
|
|
120
120
|
var file = props.file;
|
|
121
121
|
var plugin = getFileTypePlugin(file);
|
|
122
|
+
|
|
123
|
+
if (!plugin) {
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
|
|
122
127
|
return /*#__PURE__*/React.createElement(File, Object.assign({}, props, {
|
|
123
128
|
key: file.id
|
|
124
129
|
}), plugin.render({
|
|
@@ -179,11 +184,12 @@ var FileManagerView = function FileManagerView(props) {
|
|
|
179
184
|
showSnackbar = _useSnackbar.showSnackbar;
|
|
180
185
|
|
|
181
186
|
var _useSecurity = useSecurity(),
|
|
182
|
-
identity = _useSecurity.identity
|
|
187
|
+
identity = _useSecurity.identity,
|
|
188
|
+
getPermission = _useSecurity.getPermission;
|
|
183
189
|
|
|
184
190
|
var fmFilePermission = useMemo(function () {
|
|
185
|
-
return
|
|
186
|
-
}, []);
|
|
191
|
+
return getPermission("fm.file");
|
|
192
|
+
}, [identity]);
|
|
187
193
|
var canCreate = useMemo(function () {
|
|
188
194
|
// Bail out early if no access
|
|
189
195
|
if (!fmFilePermission) {
|
|
@@ -209,7 +215,7 @@ var FileManagerView = function FileManagerView(props) {
|
|
|
209
215
|
var creatorId = get(item, "createdBy.id");
|
|
210
216
|
|
|
211
217
|
if (fmFilePermission.own && creatorId) {
|
|
212
|
-
var identityId = identity.id || identity.login;
|
|
218
|
+
var identityId = identity ? identity.id || identity.login : null;
|
|
213
219
|
return creatorId === identityId;
|
|
214
220
|
}
|
|
215
221
|
|
|
@@ -277,6 +283,8 @@ var FileManagerView = function FileManagerView(props) {
|
|
|
277
283
|
}, []);
|
|
278
284
|
|
|
279
285
|
var updateCacheAfterCreateFile = function updateCacheAfterCreateFile(cache, newFile) {
|
|
286
|
+
var _data$fileManager;
|
|
287
|
+
|
|
280
288
|
var newFileData = get(newFile, "data.fileManager.createFile.data");
|
|
281
289
|
var data = cache.readQuery({
|
|
282
290
|
query: LIST_FILES,
|
|
@@ -286,9 +294,9 @@ var FileManagerView = function FileManagerView(props) {
|
|
|
286
294
|
query: LIST_FILES,
|
|
287
295
|
variables: queryParams,
|
|
288
296
|
data: {
|
|
289
|
-
fileManager: _objectSpread(_objectSpread({}, data.fileManager), {}, {
|
|
290
|
-
listFiles: _objectSpread(_objectSpread({}, data.fileManager.listFiles), {}, {
|
|
291
|
-
data: [newFileData].concat(_toConsumableArray(data.fileManager.listFiles.data || []))
|
|
297
|
+
fileManager: _objectSpread(_objectSpread({}, (data === null || data === void 0 ? void 0 : data.fileManager) || {}), {}, {
|
|
298
|
+
listFiles: _objectSpread(_objectSpread({}, ((data === null || data === void 0 ? void 0 : data.fileManager) || {}).listFiles), {}, {
|
|
299
|
+
data: [newFileData].concat(_toConsumableArray(((data === null || data === void 0 ? void 0 : (_data$fileManager = data.fileManager) === null || _data$fileManager === void 0 ? void 0 : _data$fileManager.listFiles) || {}).data || []))
|
|
292
300
|
})
|
|
293
301
|
})
|
|
294
302
|
}
|
|
@@ -308,7 +316,7 @@ var FileManagerView = function FileManagerView(props) {
|
|
|
308
316
|
esc: onClose
|
|
309
317
|
}
|
|
310
318
|
});
|
|
311
|
-
var searchInput = useRef();
|
|
319
|
+
var searchInput = useRef(null);
|
|
312
320
|
var apolloClient = useApolloClient();
|
|
313
321
|
var gqlQuery = useQuery(LIST_FILES, {
|
|
314
322
|
variables: queryParams,
|
|
@@ -332,8 +340,8 @@ var FileManagerView = function FileManagerView(props) {
|
|
|
332
340
|
variables: {
|
|
333
341
|
after: cursor
|
|
334
342
|
},
|
|
335
|
-
updateQuery: function updateQuery(prev,
|
|
336
|
-
var fetchMoreResult =
|
|
343
|
+
updateQuery: function updateQuery(prev, result) {
|
|
344
|
+
var fetchMoreResult = result.fetchMoreResult;
|
|
337
345
|
|
|
338
346
|
if (!fetchMoreResult) {
|
|
339
347
|
return prev;
|
|
@@ -360,7 +368,7 @@ var FileManagerView = function FileManagerView(props) {
|
|
|
360
368
|
createFile = _useMutation2[0];
|
|
361
369
|
|
|
362
370
|
var uploadFile = /*#__PURE__*/function () {
|
|
363
|
-
var
|
|
371
|
+
var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(files) {
|
|
364
372
|
var list, errors, uploadedFiles;
|
|
365
373
|
return _regeneratorRuntime.wrap(function _callee3$(_context3) {
|
|
366
374
|
while (1) {
|
|
@@ -372,7 +380,7 @@ var FileManagerView = function FileManagerView(props) {
|
|
|
372
380
|
uploadedFiles = [];
|
|
373
381
|
_context3.next = 6;
|
|
374
382
|
return Promise.all(list.map( /*#__PURE__*/function () {
|
|
375
|
-
var
|
|
383
|
+
var _ref7 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(file) {
|
|
376
384
|
var response, createFileResponse;
|
|
377
385
|
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
378
386
|
while (1) {
|
|
@@ -417,7 +425,7 @@ var FileManagerView = function FileManagerView(props) {
|
|
|
417
425
|
}));
|
|
418
426
|
|
|
419
427
|
return function (_x3) {
|
|
420
|
-
return
|
|
428
|
+
return _ref7.apply(this, arguments);
|
|
421
429
|
};
|
|
422
430
|
}()));
|
|
423
431
|
|
|
@@ -434,9 +442,9 @@ var FileManagerView = function FileManagerView(props) {
|
|
|
434
442
|
}
|
|
435
443
|
|
|
436
444
|
return _context3.abrupt("return", setTimeout(function () {
|
|
437
|
-
showSnackbar( /*#__PURE__*/React.createElement(React.Fragment, null, t(_templateObject || (_templateObject = _taggedTemplateLiteral(["One or more files were not uploaded successfully:"]))), /*#__PURE__*/React.createElement("ol", null, errors.map(function (
|
|
438
|
-
var file =
|
|
439
|
-
e =
|
|
445
|
+
showSnackbar( /*#__PURE__*/React.createElement(React.Fragment, null, t(_templateObject || (_templateObject = _taggedTemplateLiteral(["One or more files were not uploaded successfully:"]))), /*#__PURE__*/React.createElement("ol", null, errors.map(function (_ref8) {
|
|
446
|
+
var file = _ref8.file,
|
|
447
|
+
e = _ref8.e;
|
|
440
448
|
return /*#__PURE__*/React.createElement("li", {
|
|
441
449
|
key: file.name
|
|
442
450
|
}, /*#__PURE__*/React.createElement("strong", null, file.name), ": ", getFileUploadErrorMessage(e));
|
|
@@ -471,12 +479,12 @@ var FileManagerView = function FileManagerView(props) {
|
|
|
471
479
|
}));
|
|
472
480
|
|
|
473
481
|
return function uploadFile(_x2) {
|
|
474
|
-
return
|
|
482
|
+
return _ref6.apply(this, arguments);
|
|
475
483
|
};
|
|
476
484
|
}();
|
|
477
485
|
|
|
478
|
-
var renderUploadFileAction = useCallback(function (
|
|
479
|
-
var browseFiles =
|
|
486
|
+
var renderUploadFileAction = useCallback(function (_ref9) {
|
|
487
|
+
var browseFiles = _ref9.browseFiles;
|
|
480
488
|
|
|
481
489
|
if (!canCreate) {
|
|
482
490
|
return null;
|
|
@@ -498,18 +506,23 @@ var FileManagerView = function FileManagerView(props) {
|
|
|
498
506
|
multipleMaxCount: multipleMaxCount,
|
|
499
507
|
accept: accept,
|
|
500
508
|
onSuccess: function onSuccess(files) {
|
|
501
|
-
|
|
509
|
+
uploadFile(files.map(function (file) {
|
|
502
510
|
return file.src.file;
|
|
503
|
-
}));
|
|
511
|
+
}).filter(Boolean));
|
|
504
512
|
},
|
|
505
513
|
onError: function onError(errors) {
|
|
514
|
+
/**
|
|
515
|
+
* TODO @ts-refactor
|
|
516
|
+
* Figure out if incoming errors var is wrong or the one in the outputFileSelectionError
|
|
517
|
+
*/
|
|
518
|
+
// @ts-ignore
|
|
506
519
|
var message = outputFileSelectionError(errors);
|
|
507
520
|
showSnackbar(message);
|
|
508
521
|
}
|
|
509
|
-
}, function (
|
|
510
|
-
var getDropZoneProps =
|
|
511
|
-
browseFiles =
|
|
512
|
-
validateFiles =
|
|
522
|
+
}, function (_ref10) {
|
|
523
|
+
var getDropZoneProps = _ref10.getDropZoneProps,
|
|
524
|
+
browseFiles = _ref10.browseFiles,
|
|
525
|
+
validateFiles = _ref10.validateFiles;
|
|
513
526
|
return /*#__PURE__*/React.createElement(OverlayLayout, Object.assign({}, getDropZoneProps({
|
|
514
527
|
onDragEnter: function onDragEnter() {
|
|
515
528
|
return hasPreviouslyUploadedFiles && setDragging(true);
|
|
@@ -530,24 +543,26 @@ var FileManagerView = function FileManagerView(props) {
|
|
|
530
543
|
})),
|
|
531
544
|
barRight: selected.length > 0 ? /*#__PURE__*/React.createElement(ButtonPrimary, {
|
|
532
545
|
disabled: uploading,
|
|
533
|
-
onClick:
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
546
|
+
onClick: function onClick() {
|
|
547
|
+
_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
|
|
548
|
+
return _regeneratorRuntime.wrap(function _callee4$(_context4) {
|
|
549
|
+
while (1) {
|
|
550
|
+
switch (_context4.prev = _context4.next) {
|
|
551
|
+
case 0:
|
|
552
|
+
_context4.next = 2;
|
|
553
|
+
return onChange(multiple ? selected : selected[0]);
|
|
554
|
+
|
|
555
|
+
case 2:
|
|
556
|
+
onClose();
|
|
557
|
+
|
|
558
|
+
case 3:
|
|
559
|
+
case "end":
|
|
560
|
+
return _context4.stop();
|
|
561
|
+
}
|
|
547
562
|
}
|
|
548
|
-
}
|
|
549
|
-
}
|
|
550
|
-
}
|
|
563
|
+
}, _callee4);
|
|
564
|
+
}))();
|
|
565
|
+
}
|
|
551
566
|
}, t(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["Select"]))), " ", multiple && "(".concat(selected.length, ")")) : renderUploadFileAction({
|
|
552
567
|
browseFiles: browseFiles
|
|
553
568
|
})
|
|
@@ -600,7 +615,9 @@ var FileManagerView = function FileManagerView(props) {
|
|
|
600
615
|
selected: selected.find(function (current) {
|
|
601
616
|
return current.src === file.src;
|
|
602
617
|
}),
|
|
603
|
-
onSelect: typeof onChange === "undefined" ?
|
|
618
|
+
onSelect: typeof onChange === "undefined" ? function () {
|
|
619
|
+
return void 0;
|
|
620
|
+
} : /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5() {
|
|
604
621
|
return _regeneratorRuntime.wrap(function _callee5$(_context5) {
|
|
605
622
|
while (1) {
|
|
606
623
|
switch (_context5.prev = _context5.next) {
|