@webiny/app-admin 5.23.1 → 5.25.0-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/base/Admin.d.ts +3 -10
- package/base/Admin.js +4 -0
- package/base/Admin.js.map +1 -0
- package/base/Base.d.ts +1 -1
- package/base/Base.js.map +1 -0
- package/base/plugins/AddGraphQLQuerySelection.d.ts +2 -2
- package/base/plugins/AddGraphQLQuerySelection.js +3 -2
- package/base/plugins/AddGraphQLQuerySelection.js.map +1 -0
- package/base/providers/ApolloProvider.d.ts +9 -3
- package/base/providers/ApolloProvider.js +2 -1
- package/base/providers/ApolloProvider.js.map +1 -0
- package/base/providers/TelemetryProvider.d.ts +2 -4
- package/base/providers/TelemetryProvider.js +5 -0
- package/base/providers/TelemetryProvider.js.map +1 -0
- package/base/providers/UiStateProvider.d.ts +1 -3
- package/base/providers/UiStateProvider.js.map +1 -0
- package/base/providers/ViewCompositionProvider.d.ts +4 -5
- 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 +8 -12
- package/base/ui/Menu.js +96 -30
- package/base/ui/Menu.js.map +1 -0
- package/base/ui/Navigation.d.ts +9 -20
- package/base/ui/Navigation.js +29 -29
- 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 +4 -13
- package/base/ui/Search.js +6 -1
- package/base/ui/Search.js.map +1 -0
- package/base/ui/Tags.d.ts +4 -2
- package/base/ui/Tags.js.map +1 -0
- package/base/ui/UserMenu.d.ts +9 -33
- package/base/ui/UserMenu.js +15 -2
- package/base/ui/UserMenu.js.map +1 -0
- package/components/AdminLayout.d.ts +1 -2
- package/components/AdminLayout.js.map +1 -0
- package/components/AppInstaller/AppInstaller.d.ts +2 -4
- package/components/AppInstaller/AppInstaller.js.map +1 -0
- package/components/AppInstaller/Sidebar.d.ts +8 -6
- package/components/AppInstaller/Sidebar.js +11 -10
- package/components/AppInstaller/Sidebar.js.map +1 -0
- package/components/AppInstaller/index.js.map +1 -0
- package/components/AppInstaller/styled.d.ts +4 -4
- package/components/AppInstaller/styled.js.map +1 -0
- package/components/AppInstaller/useInstaller.d.ts +28 -9
- package/components/AppInstaller/useInstaller.js +44 -36
- package/components/AppInstaller/useInstaller.js.map +1 -0
- package/components/EmptyView.d.ts +5 -5
- package/components/EmptyView.js.map +1 -0
- package/components/FileManager/BottomInfoBar/SupportedFileTypes.d.ts +5 -4
- package/components/FileManager/BottomInfoBar/SupportedFileTypes.js +7 -1
- package/components/FileManager/BottomInfoBar/SupportedFileTypes.js.map +1 -0
- package/components/FileManager/BottomInfoBar/UploadStatus.d.ts +5 -4
- package/components/FileManager/BottomInfoBar/UploadStatus.js.map +1 -0
- package/components/FileManager/BottomInfoBar.d.ts +4 -2
- package/components/FileManager/BottomInfoBar.js.map +1 -0
- package/components/FileManager/DropFilesHere.d.ts +4 -3
- package/components/FileManager/DropFilesHere.js +5 -2
- package/components/FileManager/DropFilesHere.js.map +1 -0
- package/components/FileManager/File.d.ts +7 -8
- package/components/FileManager/File.js +11 -5
- package/components/FileManager/File.js.map +1 -0
- package/components/FileManager/FileDetails/Name.d.ts +7 -5
- package/components/FileManager/FileDetails/Name.js +10 -7
- package/components/FileManager/FileDetails/Name.js.map +1 -0
- package/components/FileManager/FileDetails/Tags.d.ts +7 -5
- package/components/FileManager/FileDetails/Tags.js +22 -9
- package/components/FileManager/FileDetails/Tags.js.map +1 -0
- package/components/FileManager/FileDetails.d.ts +9 -8
- package/components/FileManager/FileDetails.js +80 -41
- package/components/FileManager/FileDetails.js.map +1 -0
- package/components/FileManager/FileManagerContext.d.ts +12 -9
- package/components/FileManager/FileManagerContext.js +14 -7
- package/components/FileManager/FileManagerContext.js.map +1 -0
- package/components/FileManager/FileManagerView.d.ts +3 -11
- package/components/FileManager/FileManagerView.js +79 -51
- package/components/FileManager/FileManagerView.js.map +1 -0
- package/components/FileManager/LeftSidebar.d.ts +6 -5
- package/components/FileManager/LeftSidebar.js +6 -5
- package/components/FileManager/LeftSidebar.js.map +1 -0
- package/components/FileManager/NoPermissionView.d.ts +2 -2
- package/components/FileManager/NoPermissionView.js.map +1 -0
- package/components/FileManager/NoResults.d.ts +3 -2
- package/components/FileManager/NoResults.js +5 -2
- package/components/FileManager/NoResults.js.map +1 -0
- package/components/FileManager/getFileTypePlugin.d.ts +4 -1
- package/components/FileManager/getFileTypePlugin.js +9 -0
- package/components/FileManager/getFileTypePlugin.js.map +1 -0
- package/components/FileManager/getFileUploader.d.ts +2 -1
- 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 -1
- package/components/FileManager/outputFileSelectionError.js +3 -2
- package/components/FileManager/outputFileSelectionError.js.map +1 -0
- package/components/FileManager/types.d.ts +19 -0
- package/components/FileManager/types.js +1 -0
- package/components/FileManager/types.js.map +1 -0
- package/components/FileManager.d.ts +15 -10
- package/components/FileManager.js +27 -16
- package/components/FileManager.js.map +1 -0
- package/components/FloatingActionButton.d.ts +2 -2
- package/components/FloatingActionButton.js.map +1 -0
- package/components/MultiImageUpload.d.ts +13 -4
- package/components/MultiImageUpload.js +15 -4
- package/components/MultiImageUpload.js.map +1 -0
- package/components/OverlayLayout/OverlayLayout.d.ts +10 -13
- 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 +6 -4
- package/components/Permissions/StyledComponents.js.map +1 -0
- package/components/Permissions/index.js.map +1 -0
- package/components/RichTextEditor/RichTextEditor.d.ts +2 -2
- package/components/RichTextEditor/RichTextEditor.js.map +1 -0
- package/components/RichTextEditor/index.js.map +1 -0
- package/components/RichTextEditor/tools/header/index.d.ts +33 -34
- package/components/RichTextEditor/tools/header/index.js +5 -6
- package/components/RichTextEditor/tools/header/index.js.map +1 -0
- package/components/RichTextEditor/tools/image/index.d.ts +38 -13
- package/components/RichTextEditor/tools/image/index.js +4 -2
- 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.d.ts +12 -15
- package/components/RichTextEditor/tools/image/tunes.js +9 -4
- package/components/RichTextEditor/tools/image/tunes.js.map +1 -0
- package/components/RichTextEditor/tools/image/types.d.ts +29 -0
- package/components/RichTextEditor/tools/image/types.js +1 -0
- package/components/RichTextEditor/tools/image/types.js.map +1 -0
- package/components/RichTextEditor/tools/image/ui.d.ts +36 -27
- package/components/RichTextEditor/tools/image/ui.js +25 -12
- package/components/RichTextEditor/tools/image/ui.js.map +1 -0
- package/components/RichTextEditor/tools/paragraph/index.d.ts +32 -36
- package/components/RichTextEditor/tools/paragraph/index.js +17 -25
- package/components/RichTextEditor/tools/paragraph/index.js.map +1 -0
- package/components/RichTextEditor/tools/textColor/index.d.ts +30 -22
- package/components/RichTextEditor/tools/textColor/index.js +46 -10
- package/components/RichTextEditor/tools/textColor/index.js.map +1 -0
- package/components/RichTextEditor/tools/utils.js.map +1 -0
- package/components/Routes.d.ts +2 -2
- package/components/Routes.js.map +1 -0
- package/components/SearchUI.d.ts +4 -4
- package/components/SearchUI.js.map +1 -0
- package/components/SimpleForm/SimpleForm.d.ts +10 -11
- package/components/SimpleForm/SimpleForm.js.map +1 -0
- package/components/SimpleForm/index.js.map +1 -0
- package/components/SimpleUI/InputField.d.ts +4 -3
- package/components/SimpleUI/InputField.js +22 -20
- package/components/SimpleUI/InputField.js.map +1 -0
- package/components/SingleImageUpload.d.ts +3 -9
- package/components/SingleImageUpload.js +9 -11
- package/components/SingleImageUpload.js.map +1 -0
- package/components/SplitView/SplitView.d.ts +5 -5
- 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.d.ts +6 -5
- package/hooks/useConfirmationDialog.js +1 -2
- package/hooks/useConfirmationDialog.js.map +1 -0
- package/hooks/useDialog.d.ts +8 -3
- package/hooks/useDialog.js +1 -1
- package/hooks/useDialog.js.map +1 -0
- package/hooks/useSnackbar.d.ts +6 -3
- package/hooks/useSnackbar.js.map +1 -0
- package/index.js.map +1 -0
- package/package.json +24 -20
- package/plugins/FileManagerFileTypePlugin.d.ts +3 -3
- package/plugins/FileManagerFileTypePlugin.js +4 -0
- package/plugins/FileManagerFileTypePlugin.js.map +1 -0
- package/plugins/MenuPlugin.d.ts +6 -6
- 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.d.ts +6 -2
- package/plugins/fileManager/fileImage/DeleteAction.js.map +1 -0
- package/plugins/fileManager/fileImage/EditAction.d.ts +7 -6
- package/plugins/fileManager/fileImage/EditAction.js +24 -11
- 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 +14 -5
- package/plugins/globalSearch/SearchBar.js +9 -0
- package/plugins/globalSearch/SearchBar.js.map +1 -0
- package/plugins/globalSearch/SearchBarDropdown.d.ts +19 -1
- package/plugins/globalSearch/SearchBarDropdown.js.map +1 -0
- package/plugins/globalSearch/index.d.ts +2 -1
- package/plugins/globalSearch/index.js.map +1 -0
- package/plugins/globalSearch/styled.d.ts +3 -3
- package/plugins/globalSearch/styled.js.map +1 -0
- package/plugins/index.d.ts +2 -1
- package/plugins/index.js.map +1 -0
- package/plugins/uiLayoutRenderer/index.js.map +1 -0
- package/types.d.ts +10 -8
- package/types.js.map +1 -0
- package/ui/UIElement.d.ts +1 -1
- package/ui/UIElement.js.map +1 -0
- package/ui/UILayout.js.map +1 -0
- package/ui/UIRenderer.js.map +1 -0
- package/ui/UIView.d.ts +1 -1
- package/ui/UIView.js.map +1 -0
- package/ui/elements/AccordionElement.d.ts +5 -5
- package/ui/elements/AccordionElement.js +4 -0
- package/ui/elements/AccordionElement.js.map +1 -0
- package/ui/elements/ButtonElement.d.ts +3 -3
- package/ui/elements/ButtonElement.js +7 -0
- package/ui/elements/ButtonElement.js.map +1 -0
- package/ui/elements/ButtonGroupElement.d.ts +2 -2
- 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 -1
- package/ui/elements/NavigationMenuElement.js +3 -2
- package/ui/elements/NavigationMenuElement.js.map +1 -0
- package/ui/elements/PanelElement.js.map +1 -0
- package/ui/elements/PlaceholderElement.d.ts +2 -1
- package/ui/elements/PlaceholderElement.js.map +1 -0
- package/ui/elements/SmallButtonElement.d.ts +1 -1
- package/ui/elements/SmallButtonElement.js.map +1 -0
- package/ui/elements/TypographyElement.d.ts +1 -1
- 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 -13
- package/ui/elements/form/FileManagerElement/styled.js.map +1 -0
- package/ui/elements/form/FileManagerElement.d.ts +6 -6
- package/ui/elements/form/FileManagerElement.js.map +1 -0
- package/ui/elements/form/FormElement.d.ts +5 -5
- package/ui/elements/form/FormElement.js.map +1 -0
- package/ui/elements/form/FormFieldElement.d.ts +9 -8
- package/ui/elements/form/FormFieldElement.js +15 -7
- package/ui/elements/form/FormFieldElement.js.map +1 -0
- package/ui/elements/form/HiddenElement.js.map +1 -0
- package/ui/elements/form/InputElement.d.ts +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.d.ts +2 -2
- package/ui/views/AdminView/HeaderSectionCenterElement.js.map +1 -0
- package/ui/views/AdminView/HeaderSectionLeftElement.d.ts +2 -2
- package/ui/views/AdminView/HeaderSectionLeftElement.js.map +1 -0
- package/ui/views/AdminView/HeaderSectionRightElement.d.ts +2 -2
- 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.d.ts +2 -2
- package/ui/views/AdminView/components/Hamburger.js.map +1 -0
- package/ui/views/AdminView/components/Snackbar.d.ts +2 -2
- package/ui/views/AdminView/components/Snackbar.js.map +1 -0
- package/ui/views/FormView/FormContainerElement.d.ts +2 -2
- 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 +3 -3
- package/ui/views/FormView/FormFooterElement.js.map +1 -0
- package/ui/views/FormView/FormHeaderElement.d.ts +2 -2
- package/ui/views/FormView/FormHeaderElement.js.map +1 -0
- package/ui/views/FormView.d.ts +1 -1
- package/ui/views/FormView.js +25 -3
- package/ui/views/FormView.js.map +1 -0
- package/ui/views/OverlayView/ContentElement.d.ts +2 -2
- package/ui/views/OverlayView/ContentElement.js.map +1 -0
- package/ui/views/OverlayView/HeaderElement.d.ts +5 -5
- 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.d.ts +4 -5
- package/ui/views/OverlayView/useOverlayView.js +2 -2
- package/ui/views/OverlayView/useOverlayView.js.map +1 -0
- package/ui/views/OverlayView.d.ts +4 -6
- package/ui/views/OverlayView.js.map +1 -0
- package/ui/views/SplitView/SplitViewPanelElement.d.ts +3 -3
- package/ui/views/SplitView/SplitViewPanelElement.js.map +1 -0
- package/ui/views/SplitView.d.ts +3 -3
- 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,4 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
+
import { FileItem } from "./types";
|
|
3
|
+
import { FilesRenderChildren } from "react-butterfiles";
|
|
2
4
|
declare global {
|
|
3
5
|
namespace JSX {
|
|
4
6
|
interface IntrinsicElements {
|
|
@@ -11,13 +13,12 @@ declare global {
|
|
|
11
13
|
}
|
|
12
14
|
}
|
|
13
15
|
}
|
|
14
|
-
|
|
16
|
+
interface FileDetailsProps {
|
|
15
17
|
canEdit: (item: any) => boolean;
|
|
16
|
-
file:
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
};
|
|
18
|
+
file: FileItem;
|
|
19
|
+
uploadFile: (files: FileItem[] | FileItem) => Promise<number | null>;
|
|
20
|
+
validateFiles: FilesRenderChildren["validateFiles"];
|
|
20
21
|
[key: string]: any;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export
|
|
22
|
+
}
|
|
23
|
+
declare const FileDetails: React.FC<FileDetailsProps>;
|
|
24
|
+
export default FileDetails;
|
|
@@ -21,6 +21,11 @@ import Name from "./FileDetails/Name";
|
|
|
21
21
|
import { Tooltip } from "@webiny/ui/Tooltip";
|
|
22
22
|
import { Icon } from "@webiny/ui/Icon";
|
|
23
23
|
import { Typography } from "@webiny/ui/Typography";
|
|
24
|
+
/**
|
|
25
|
+
* Package react-hotkeyz has no types.
|
|
26
|
+
*/
|
|
27
|
+
// @ts-ignore
|
|
28
|
+
|
|
24
29
|
import { useHotkeys } from "react-hotkeyz";
|
|
25
30
|
import { ReactComponent as CopyContentIcon } from "./icons/content_copy-black-24px.svg";
|
|
26
31
|
import { ReactComponent as DeleteIcon } from "./icons/delete.svg";
|
|
@@ -140,7 +145,7 @@ var isImage = function isImage(file) {
|
|
|
140
145
|
return false;
|
|
141
146
|
};
|
|
142
147
|
|
|
143
|
-
|
|
148
|
+
var FileDetails = function FileDetails(props) {
|
|
144
149
|
var file = props.file,
|
|
145
150
|
uploadFile = props.uploadFile,
|
|
146
151
|
validateFiles = props.validateFiles;
|
|
@@ -157,11 +162,12 @@ export default function FileDetails(props) {
|
|
|
157
162
|
setDarkImageBackground = _useState2[1];
|
|
158
163
|
|
|
159
164
|
var _useSecurity = useSecurity(),
|
|
160
|
-
identity = _useSecurity.identity
|
|
165
|
+
identity = _useSecurity.identity,
|
|
166
|
+
getPermission = _useSecurity.getPermission;
|
|
161
167
|
|
|
162
168
|
var fmFilePermission = useMemo(function () {
|
|
163
|
-
return
|
|
164
|
-
}, []);
|
|
169
|
+
return getPermission("fm.file");
|
|
170
|
+
}, [identity]);
|
|
165
171
|
var canDelete = useCallback(function (item) {
|
|
166
172
|
// Bail out early if no access
|
|
167
173
|
if (!fmFilePermission) {
|
|
@@ -169,7 +175,12 @@ export default function FileDetails(props) {
|
|
|
169
175
|
}
|
|
170
176
|
|
|
171
177
|
if (fmFilePermission.own) {
|
|
172
|
-
var identityId = identity.id || identity.login;
|
|
178
|
+
var identityId = identity ? identity.id || identity.login : null;
|
|
179
|
+
|
|
180
|
+
if (!identityId) {
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
|
|
173
184
|
return get(item, "createdBy.id") === identityId;
|
|
174
185
|
}
|
|
175
186
|
|
|
@@ -189,11 +200,30 @@ export default function FileDetails(props) {
|
|
|
189
200
|
|
|
190
201
|
var _useMutation = useMutation(DELETE_FILE, {
|
|
191
202
|
update: function update(cache) {
|
|
203
|
+
var _listTagsData$fileMan;
|
|
204
|
+
|
|
192
205
|
// 1. Update files list cache
|
|
193
206
|
var data = cloneDeep(cache.readQuery({
|
|
194
207
|
query: LIST_FILES,
|
|
195
208
|
variables: queryParams
|
|
196
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
|
+
|
|
197
227
|
var filteredList = data.fileManager.listFiles.data.filter(function (item) {
|
|
198
228
|
return item.id !== file.id;
|
|
199
229
|
});
|
|
@@ -207,44 +237,46 @@ export default function FileDetails(props) {
|
|
|
207
237
|
}); // 2. Update "ListTags" cache
|
|
208
238
|
|
|
209
239
|
// 2. Update "ListTags" cache
|
|
210
|
-
if (Array.isArray(selectedFile.tags)) {
|
|
211
|
-
|
|
240
|
+
if (!selectedFile || Array.isArray(selectedFile.tags) === false) {
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
212
243
|
|
|
213
|
-
|
|
214
|
-
data.fileManager.listFiles.data.forEach(function (file) {
|
|
215
|
-
if (!Array.isArray(file.tags)) {
|
|
216
|
-
return;
|
|
217
|
-
}
|
|
244
|
+
var tagCountMap = {}; // Prepare "tag" count map
|
|
218
245
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
query: LIST_TAGS
|
|
231
|
-
})); // Remove selected file tags from list.
|
|
232
|
-
|
|
233
|
-
// Remove selected file tags from list.
|
|
234
|
-
var filteredTags = listTagsData.fileManager.listTags.filter(function (tag) {
|
|
235
|
-
if (!selectedFile.tags.includes(tag)) {
|
|
236
|
-
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;
|
|
237
257
|
}
|
|
258
|
+
});
|
|
259
|
+
}); // Get tags from cache
|
|
238
260
|
|
|
239
|
-
|
|
240
|
-
|
|
261
|
+
// Get tags from cache
|
|
262
|
+
var listTagsData = cloneDeep(cache.readQuery({
|
|
263
|
+
query: LIST_TAGS
|
|
264
|
+
})); // Remove selected file tags from list.
|
|
241
265
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
}
|
|
247
|
-
|
|
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
|
+
});
|
|
248
280
|
}
|
|
249
281
|
}),
|
|
250
282
|
_useMutation2 = _slicedToArray(_useMutation, 1),
|
|
@@ -272,7 +304,7 @@ export default function FileDetails(props) {
|
|
|
272
304
|
}), function (_ref) {
|
|
273
305
|
var showConfirmation = _ref.showConfirmation;
|
|
274
306
|
return /*#__PURE__*/React.createElement(Tooltip, {
|
|
275
|
-
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"])))),
|
|
276
308
|
placement: "bottom"
|
|
277
309
|
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
278
310
|
"data-testid": "fm-delete-file-button",
|
|
@@ -333,7 +365,12 @@ export default function FileDetails(props) {
|
|
|
333
365
|
className: classNames(style.preview, {
|
|
334
366
|
dark: darkImageBackground
|
|
335
367
|
})
|
|
336
|
-
}, filePlugin.render({
|
|
368
|
+
}, filePlugin && filePlugin.render({
|
|
369
|
+
/**
|
|
370
|
+
* TODO: @ts-refactor
|
|
371
|
+
* Figure out which type is the file
|
|
372
|
+
*/
|
|
373
|
+
// @ts-ignore
|
|
337
374
|
file: file,
|
|
338
375
|
uploadFile: uploadFile,
|
|
339
376
|
validateFiles: validateFiles
|
|
@@ -389,4 +426,6 @@ export default function FileDetails(props) {
|
|
|
389
426
|
}, dayjs(file.createdOn).format("DD MMM YYYY [at] HH:mm"))))), /*#__PURE__*/React.createElement("li", null, /*#__PURE__*/React.createElement(Tags, Object.assign({
|
|
390
427
|
key: props.file.id
|
|
391
428
|
}, props)))))));
|
|
392
|
-
}
|
|
429
|
+
};
|
|
430
|
+
|
|
431
|
+
export default FileDetails;
|
|
@@ -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":";;;;;;;AAAA,OAAOA,KAAP,IAAgBC,WAAhB,EAA6BC,OAA7B,EAAsCC,QAAtC,QAAsD,OAAtD;AACA,OAAOC,KAAP,MAAkB,OAAlB;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,SAASC,GAAT,QAAoB,SAApB;AACA,SAASC,MAAT,EAAiBC,aAAjB,QAAsC,mBAAtC;AACA,SAASC,UAAT,QAA2B,mBAA3B;AACA,OAAOC,iBAAP;AACA,OAAOC,KAAP,MAAkB,OAAlB;AACA,OAAOC,GAAP,MAAgB,YAAhB;AACA,OAAOC,GAAP,MAAgB,YAAhB;AACA,OAAOC,SAAP,MAAsB,kBAAtB;AACA,OAAOC,IAAP;AACA,OAAOC,IAAP;AACA,SAASC,OAAT,QAAwB,oBAAxB;AACA,SAASC,IAAT,QAAqB,iBAArB;AACA,SAASC,UAAT,QAA2B,uBAA3B;AACA;AACA;AACA;AACA;;AACA,SAASC,UAAT,QAA2B,eAA3B;AACA,SAASC,cAAc,IAAIC,eAA3B;AACA,SAASD,cAAc,IAAIE,UAA3B;AACA,SAASF,cAAc,IAAIG,SAA3B;AACA,SAASH,cAAc,IAAII,QAA3B;AACA,SAASJ,cAAc,IAAIK,YAA3B;AACA,SAASL,cAAc,IAAIM,aAA3B;AACA,SAASC,cAAT;AACA,SAASC,WAAT,QAA4B,qBAA5B;AACA,SAASC,WAAT;AACA,SAASC,WAAT,QAA4B,sBAA5B;AACA,SAASC,kBAAT,QAAmC,+BAAnC;AACA,SACIC,WADJ,EAIIC,UAJJ,EAKIC,SALJ;AASA,SAASC,IAAT,QAAqB,kBAArB;AACA,OAAOC,IAAP,MAAiB,MAAjB;AAIA,IAAMC,CAAC,GAAGF,IAAI,CAACG,EAAL,CAAQ,qCAAR,CAAV;AAEA,IAAMC,kBAAkB,gBAAGlC,GAAG,CAAC;AAC3B,kBAAgB;AACZmC,IAAAA,KAAK,EAAE;AADK;AADW,CAAD,8BAA9B;AAqBA,IAAMC,KAAU,GAAG;AACfC,EAAAA,OAAO,eAAErC,GAAG,CAAC;AACTsC,IAAAA,MAAM,EAAE,OADC;AAETC,IAAAA,SAAS,EAAE;AAFF,GAAD,mBADG;AAKfC,EAAAA,MAAM,eAAExC,GAAG,CAAC;AACRyC,IAAAA,SAAS,EAAE,QADH;AAERC,IAAAA,YAAY,EAAE,EAFN;AAGRC,IAAAA,UAAU,EAAE,EAHJ;AAIR,cAAU;AACNC,MAAAA,aAAa,EAAE,YADT;AAENC,MAAAA,KAAK,EAAE,6BAFD;AAGNC,MAAAA,UAAU,EAAE;AAHN;AAJF,GAAD,kBALI;AAefC,EAAAA,OAAO,eAAE/C,GAAG,CAAC;AACTgD,IAAAA,SAAS,EAAE,YADF;AAETC,IAAAA,OAAO,EAAE,MAFA;AAGTC,IAAAA,cAAc,EAAE,QAHP;AAITC,IAAAA,UAAU,EAAE,QAJH;AAKTC,IAAAA,QAAQ,EAAE,UALD;AAMTjB,IAAAA,KAAK,EAAE,MANE;AAOTG,IAAAA,MAAM,EAAE,GAPC;AAQTe,IAAAA,MAAM,EAAE,aARC;AASTC,IAAAA,GAAG,EAAE;AACDC,MAAAA,SAAS,EAAE,SADV;AAEDC,MAAAA,SAAS,EAAE,GAFV;AAGDC,MAAAA,QAAQ,EAAE,GAHT;AAIDtB,MAAAA,KAAK,EAAE,MAJN;AAKDiB,MAAAA,QAAQ,EAAE,QALT;AAMDM,MAAAA,SAAS,EAAE;AANV,KATI;AAiBT,cAAU;AACNC,MAAAA,eAAe,EAAE;AADX;AAjBD,GAAD,mBAfG;AAoCfC,EAAAA,QAAQ,eAAE5D,GAAG,CAAC;AACVyC,IAAAA,SAAS,EAAE,QADD;AAEVY,IAAAA,MAAM,EAAE,QAFE;AAGVlB,IAAAA,KAAK,EAAE,MAHG;AAIV,uBAAmB;AACf,2BAAqB;AACjBU,QAAAA,KAAK,EAAE;AADU;AADN;AAJT,GAAD,oBApCE;AA8CfgB,EAAAA,IAAI,eAAE7D,GAAG,CAAC;AACNyC,IAAAA,SAAS,EAAE,MADL;AAENI,IAAAA,KAAK,EAAE,6BAFD;AAGNiB,IAAAA,EAAE,EAAE;AACAC,MAAAA,OAAO,EAAE,WADT;AAEAC,MAAAA,UAAU,EAAE,MAFZ;AAGA,kBAAY;AACRf,QAAAA,OAAO,EAAE,MADD;AAERE,QAAAA,UAAU,EAAE,QAFJ;AAGRD,QAAAA,cAAc,EAAE,YAHR;AAIRe,QAAAA,SAAS,EAAE,EAJH;AAKR,+BAAuB;AACnBnB,UAAAA,UAAU,EAAE;AADO,SALf;AAQR,8BAAsB;AAClBoB,UAAAA,WAAW,EAAE;AADK,SARd;AAWR,iCAAyB;AACrBC,UAAAA,IAAI,EAAE;AADe;AAXjB,OAHZ;AAkBA,oBAAc;AACVhC,QAAAA,KAAK,EAAE,MADG;AAEVc,QAAAA,OAAO,EAAE,OAFC;AAGV,kCAA0B;AACtBA,UAAAA,OAAO,EAAE,OADa;AAEtBd,UAAAA,KAAK,EAAE,MAFe;AAGtBiC,UAAAA,UAAU,EAAE,QAHU;AAItBC,UAAAA,QAAQ,EAAE,QAJY;AAKtBC,UAAAA,YAAY,EAAE;AALQ;AAHhB;AAlBd;AAHE,GAAD,gBA9CM;AAgFfC,EAAAA,aAAa,eAAEvE,GAAG,CAAC;AACf,6BAAyB;AACrBsC,MAAAA,MAAM,EAAE,MADa;AAErBC,MAAAA,SAAS,EAAE;AAFU;AADV,GAAD;AAhFH,CAAnB;;AA+FA,IAAMiC,OAAO,GAAG,SAAVA,OAAU,CAACC,IAAD,EAAoB;AAChC,MAAMC,QAAQ,GAAG3C,IAAI,CAAC4C,OAAL,CAAaF,IAAI,IAAIA,IAAI,CAACG,IAA1B,CAAjB;;AAEA,MAAIF,QAAQ,IAAI,OAAOA,QAAP,KAAoB,QAApC,EAA8C;AAC1C,WAAOA,QAAQ,CAACG,QAAT,CAAkB,OAAlB,CAAP;AACH;;AAED,SAAO,KAAP;AACH,CARD;;AAUA,IAAMC,WAAuC,GAAG,SAA1CA,WAA0C,CAAAC,KAAK,EAAI;AACrD,MAAQN,IAAR,GAA4CM,KAA5C,CAAQN,IAAR;AAAA,MAAcO,UAAd,GAA4CD,KAA5C,CAAcC,UAAd;AAAA,MAA0BC,aAA1B,GAA4CF,KAA5C,CAA0BE,aAA1B;AAEA,MAAMC,UAAU,GAAG9E,iBAAiB,CAACqE,IAAD,CAApC;AACA,MAAMU,OAAmB,GACrB7E,GAAG,CAAC4E,UAAD,EAAa,qBAAb,CAAH,IAA0C5E,GAAG,CAAC4E,UAAD,EAAa,SAAb,CAA7C,IAAwE,EAD5E;;AAGA,wBAAyC5D,cAAc,EAAvD;AAAA,MAAQ8D,eAAR,mBAAQA,eAAR;AAAA,MAAyBC,WAAzB,mBAAyBA,WAAzB;;AACA,kBAAsDxF,QAAQ,CAAC,KAAD,CAA9D;AAAA;AAAA,MAAOyF,mBAAP;AAAA,MAA4BC,sBAA5B;;AAEA,qBAAoC9D,WAAW,EAA/C;AAAA,MAAQ+D,QAAR,gBAAQA,QAAR;AAAA,MAAkBC,aAAlB,gBAAkBA,aAAlB;;AACA,MAAMC,gBAAgB,GAAG9F,OAAO,CAAC,YAA4C;AACzE,WAAO6F,aAAa,CAAC,SAAD,CAApB;AACH,GAF+B,EAE7B,CAACD,QAAD,CAF6B,CAAhC;AAGA,MAAMG,SAAS,GAAGhG,WAAW,CACzB,UAAAiG,IAAI,EAAI;AACJ;AACA,QAAI,CAACF,gBAAL,EAAuB;AACnB,aAAO,KAAP;AACH;;AACD,QAAIA,gBAAgB,CAACG,GAArB,EAA0B;AACtB,UAAMC,UAAU,GAAGN,QAAQ,GAAGA,QAAQ,CAACO,EAAT,IAAeP,QAAQ,CAACQ,KAA3B,GAAmC,IAA9D;;AACA,UAAI,CAACF,UAAL,EAAiB;AACb,eAAO,KAAP;AACH;;AACD,aAAOxF,GAAG,CAACsF,IAAD,EAAO,cAAP,CAAH,KAA8BE,UAArC;AACH;;AACD,QAAI,OAAOJ,gBAAgB,CAACO,GAAxB,KAAgC,QAApC,EAA8C;AAC1C,aAAOP,gBAAgB,CAACO,GAAjB,CAAqBpB,QAArB,CAA8B,GAA9B,CAAP;AACH;;AACD,WAAO,IAAP;AACH,GAjBwB,EAkBzB,CAACa,gBAAD,CAlByB,CAA7B;AAqBA5E,EAAAA,UAAU,CAAC;AACPoF,IAAAA,MAAM,EAAE,EADD;AAEPC,IAAAA,QAAQ,EAAE,CAAC1B,IAFJ;AAGP2B,IAAAA,IAAI,EAAE;AACFC,MAAAA,GAAG,EAAEjB;AADH;AAHC,GAAD,CAAV;;AAQA,qBAAqB7D,WAAW,CAC5BI,WAD4B,EAE5B;AACI2E,IAAAA,MAAM,EAAE,gBAAAC,KAAK,EAAI;AAAA;;AACb;AACA,UAAIC,IAAI,GAAGhG,SAAS,CAChB+F,KAAK,CAACE,SAAN,CAAwC;AACpCC,QAAAA,KAAK,EAAE9E,UAD6B;AAEpC+E,QAAAA,SAAS,EAAEtB;AAFyB,OAAxC,CADgB,CAApB;;AAMA,UAAI,CAACmB,IAAL,EAAW;AACPA,QAAAA,IAAI,GAAG;AACHI,UAAAA,WAAW,EAAE;AACTC,YAAAA,SAAS,EAAE;AACPL,cAAAA,IAAI,EAAE,EADC;AAEPM,cAAAA,KAAK,EAAE,IAFA;AAGPC,cAAAA,IAAI,EAAE;AACFC,gBAAAA,YAAY,EAAE,KADZ;AAEFC,gBAAAA,MAAM,EAAE,IAFN;AAGFC,gBAAAA,SAAS,EAAE;AAHT;AAHC;AADF;AADV,SAAP;AAaH;;AACD,UAAMC,YAAY,GAAGX,IAAI,CAACI,WAAL,CAAiBC,SAAjB,CAA2BL,IAA3B,CAAgCY,MAAhC,CACjB,UAACxB,IAAD;AAAA,eAAoBA,IAAI,CAACG,EAAL,KAAYtB,IAAI,CAACsB,EAArC;AAAA,OADiB,CAArB;AAGA,UAAMsB,YAAY,GAAGb,IAAI,CAACI,WAAL,CAAiBC,SAAjB,CAA2BL,IAA3B,CAAgCc,IAAhC,CACjB,UAAC1B,IAAD;AAAA,eAAoBA,IAAI,CAACG,EAAL,KAAYtB,IAAI,CAACsB,EAArC;AAAA,OADiB,CAArB;AAIAQ,MAAAA,KAAK,CAACgB,UAAN,CAAiB;AACbb,QAAAA,KAAK,EAAE9E,UADM;AAEb+E,QAAAA,SAAS,EAAEtB,WAFE;AAGbmB,QAAAA,IAAI,EAAEjG,GAAG,CAACiG,IAAD,EAAO,4BAAP,EAAqCW,YAArC;AAHI,OAAjB,EA9Ba,CAmCb;;AAAA;AACA,UAAI,CAACE,YAAD,IAAiBG,KAAK,CAACC,OAAN,CAAcJ,YAAY,CAACK,IAA3B,MAAqC,KAA1D,EAAiE;AAC7D;AACH;;AACD,UAAMC,WAAmC,GAAG,EAA5C,CAvCa,CAwCb;;AAAA;AACAnB,MAAAA,IAAI,CAACI,WAAL,CAAiBC,SAAjB,CAA2BL,IAA3B,CAAgCoB,OAAhC,CAAwC,UAACnD,IAAD,EAAoB;AACxD,YAAI,CAAC+C,KAAK,CAACC,OAAN,CAAchD,IAAI,CAACiD,IAAnB,CAAL,EAA+B;AAC3B;AACH;;AACDjD,QAAAA,IAAI,CAACiD,IAAL,CAAUE,OAAV,CAAkB,UAAAC,GAAG,EAAI;AACrB,cAAIF,WAAW,CAACE,GAAD,CAAf,EAAsB;AAClBF,YAAAA,WAAW,CAACE,GAAD,CAAX,IAAoB,CAApB;AACH,WAFD,MAEO;AACHF,YAAAA,WAAW,CAACE,GAAD,CAAX,GAAmB,CAAnB;AACH;AACJ,SAND;AAOH,OAXD,EAzCa,CAsDb;;AAAA;AACA,UAAMC,YAAY,GAAGtH,SAAS,CAC1B+F,KAAK,CAACE,SAAN,CAA2C;AACvCC,QAAAA,KAAK,EAAE7E;AADgC,OAA3C,CAD0B,CAA9B,CAvDa,CA4Db;;AAAA;AACA,UAAMkG,YAAY,GAAG,CAAC,CAAAD,YAAY,SAAZ,IAAAA,YAAY,WAAZ,qCAAAA,YAAY,CAAElB,WAAd,gFAA2BoB,QAA3B,KAAuC,EAAxC,EAA4CZ,MAA5C,CACjB,UAACS,GAAD,EAAiB;AACb,YAAI,CAACR,YAAY,CAACK,IAAb,CAAkB7C,QAAlB,CAA2BgD,GAA3B,CAAL,EAAsC;AAClC,iBAAO,IAAP;AACH;;AACD,eAAOF,WAAW,CAACE,GAAD,CAAX,GAAmB,CAA1B;AACH,OANgB,CAArB,CA7Da,CAsEb;;AAAA;AACAtB,MAAAA,KAAK,CAACgB,UAAN,CAAiB;AACbb,QAAAA,KAAK,EAAE7E,SADM;AAEb2E,QAAAA,IAAI,EAAEjG,GAAG,CAACiG,IAAD,EAAO,sBAAP,EAA+BuB,YAA/B;AAFI,OAAjB;AAIH;AA5EL,GAF4B,CAAhC;AAAA;AAAA,MAAOE,UAAP;;AAiFA,qBAAyBzG,WAAW,EAApC;AAAA,MAAQ0G,YAAR,gBAAQA,YAAR;;AAEA,MAAMC,uBAAuB,GAAGxI,WAAW,CAAC,UAAA8E,IAAI,EAAI;AAChD,QAAI,CAACkB,SAAS,CAAClB,IAAD,CAAd,EAAsB;AAClB,aAAO,IAAP;AACH;;AACD,QAAM2D,2BAA2B,GAAG;AAChCC,MAAAA,KAAK,EAAErG,CAAF,gFAD2B;AAEhCsG,MAAAA,OAAO,EAAE7D,IAAI,iBACT,kCACKzC,CAAC,6IAAD,CAA0E;AACvE4C,QAAAA,IAAI,EAAEH,IAAI,CAACG;AAD4D,OAA1E,CADL;AAH4B,KAApC;AAUA,wBACI,oBAAC,kBAAD,oBACQwD,2BADR;AAEI,qBAAa,oCAFjB;AAGI,MAAA,KAAK,EAAE;AAAElC,QAAAA,MAAM,EAAE;AAAV;AAHX,QAKK,gBAA0B;AAAA,UAAvBqC,gBAAuB,QAAvBA,gBAAuB;AACvB,0BACI,oBAAC,OAAD;AACI,QAAA,OAAO,EACH/D,OAAO,CAACC,IAAD,CAAP,gBACI,kCAAOzC,CAAP,oFADJ,gBAGI,kCAAOA,CAAP,mFALZ;AAQI,QAAA,SAAS,EAAE;AARf,sBAUI,oBAAC,UAAD;AACI,uBAAa,uBADjB;AAEI,QAAA,IAAI,eAAE,oBAAC,UAAD;AAAY,UAAA,KAAK,EAAE;AAAEqB,YAAAA,MAAM,EAAE;AAAV;AAAnB,UAFV;AAGI,QAAA,OAAO,EAAE;AAAA,iBACLkF,gBAAgB,wEAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BACPN,UAAU,CAAC;AACbtB,sBAAAA,SAAS,EAAE;AACPZ,wBAAAA,EAAE,EAAEtB,IAAI,CAACsB;AADF;AADE,qBAAD,CADH;;AAAA;AAMbmC,oBAAAA,YAAY,CAAClG,CAAD,kGAAZ;;AANa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAAD,GADX;AAAA;AAHb,QAVJ,CADJ;AA2BH,KAjCL,CADJ;AAqCH,GAnD0C,EAmDxC,EAnDwC,CAA3C;AAqDA,MAAMwG,YAAY,GAAG5I,OAAO,CAAC,YAAM;AAC/B,QAAI6E,IAAI,IAAI,OAAOA,IAAI,CAACgE,IAAZ,KAAqB,QAAjC,EAA2C;AACvC,aAAOhE,IAAI,CAACgE,IAAL,CAAU5D,QAAV,CAAmB,OAAnB,iBAA8B,oBAAC,SAAD,OAA9B,gBAA8C,oBAAC,QAAD,OAArD;AACH;;AACD,wBAAO,oBAAC,SAAD,OAAP;AACH,GAL2B,EAKzB,CAACJ,IAAD,CALyB,CAA5B;AAOA,sBACI,oBAAC,MAAD;AACI,IAAA,SAAS,EAAEvC,kBADf;AAEI,IAAA,GAAG,EAAC,KAFR;AAGI,IAAA,KAAK,MAHT;AAII,IAAA,IAAI,EAAEwG,OAAO,CAACjE,IAAD,CAJjB;AAKI,IAAA,OAAO,EAAEW,eALb;AAMI,mBAAa;AANjB,KAQKX,IAAI,iBACD;AAAK,IAAA,SAAS,EAAErC,KAAK,CAACC,OAAtB;AAA+B,IAAA,GAAG,EAAC;AAAnC,kBACI;AAAK,IAAA,SAAS,EAAED,KAAK,CAACI;AAAtB,kBACI,oBAAC,UAAD;AAAY,IAAA,GAAG,EAAE;AAAjB,KAA+BR,CAA/B,oFADJ,CADJ,eAII;AACI,IAAA,SAAS,EAAEjC,UAAU,CAACqC,KAAK,CAACW,OAAP,EAAgB;AACjC4F,MAAAA,IAAI,EAAErD;AAD2B,KAAhB;AADzB,KAKKJ,UAAU,IACPA,UAAU,CAAC0D,MAAX,CAAkB;AACd;AAChC;AACA;AACA;AACgC;AACAnE,IAAAA,IAAI,EAAJA,IANc;AAOdO,IAAAA,UAAU,EAAVA,UAPc;AAQdC,IAAAA,aAAa,EAAbA;AARc,GAAlB,CANR,CAJJ,eAqBI;AAAK,IAAA,SAAS,EAAE7C,KAAK,CAACwB;AAAtB,kBACI,uDACI,oBAAC,OAAD;AAAS,IAAA,OAAO,eAAE,kCAAO5B,CAAP,gFAAlB;AAA8C,IAAA,SAAS,EAAE;AAAzD,kBACI,oBAAC,UAAD;AACI,IAAA,OAAO,EAAE,mBAAM;AACX6G,MAAAA,SAAS,CAACC,SAAV,CAAoBC,SAApB,CAA8BtE,IAAI,CAACuE,GAAnC;AACAd,MAAAA,YAAY,CAAClG,CAAD,gGAAZ;AACH,KAJL;AAKI,IAAA,IAAI,eAAE,oBAAC,eAAD;AAAiB,MAAA,KAAK,EAAE;AAAEqB,QAAAA,MAAM,EAAE;AAAV;AAAxB;AALV,IADJ,CADJ,EAWK8B,OAAO,CAAC8D,GAAR,CAAY,UAACC,SAAD,EAAsBC,KAAtB;AAAA,wBACT,oBAAC,SAAD;AAAW,MAAA,GAAG,EAAEA;AAAhB,OAA2BpE,KAA3B,EADS;AAAA,GAAZ,CAXL,EAcKoD,uBAAuB,CAAC1D,IAAD,CAd5B,eAgBI,oBAAC,OAAD;AAAS,IAAA,OAAO,EAAEzC,CAAF,wFAAhB;AAAwC,IAAA,SAAS,EAAE;AAAnD,kBACI,oBAAC,UAAD;AACI,IAAA,IAAI,eAAE,oBAAC,aAAD,OADV;AAEI,IAAA,OAAO,EAAE;AAAA,aAAMuD,sBAAsB,CAAC,CAACD,mBAAF,CAA5B;AAAA,KAFb;AAGI,IAAA,SAAS,EAAEvF,UAAU,CAAC;AAAE,sBAAgBuF;AAAlB,KAAD;AAHzB,IADJ,CAhBJ,CADJ,CArBJ,eA+CI,oBAAC,aAAD;AAAe,IAAA,GAAG,EAAC,KAAnB;AAAyB,IAAA,SAAS,EAAElD,KAAK,CAACmC;AAA1C,kBACI;AAAI,IAAA,SAAS,EAAEnC,KAAK,CAACyB;AAArB,kBACI,6CACI,oBAAC,IAAD,EAAUkB,KAAV,CADJ,CADJ,eAII,6CACI,mDACI,oBAAC,IAAD;AAAM,IAAA,SAAS,EAAE,iBAAjB;AAAoC,IAAA,IAAI,EAAEyD;AAA1C,IADJ,eAEI,8CACI,oBAAC,UAAD;AAAY,IAAA,GAAG,EAAE;AAAjB,KAA+B/D,IAAI,CAACgE,IAApC,CADJ,EAC2D,GAD3D,EAEK,KAFL,eAGI,oBAAC,UAAD;AAAY,IAAA,GAAG,EAAE;AAAjB,KACK3I,KAAK,CAACsJ,MAAN,CAAa3E,IAAI,CAAC4E,IAAlB,EAAwB;AAAEC,IAAAA,aAAa,EAAE;AAAjB,GAAxB,CADL,CAHJ,CAFJ,CADJ,CAJJ,eAgBI,6CACI,mDACI,oBAAC,IAAD;AAAM,IAAA,SAAS,EAAE,iBAAjB;AAAoC,IAAA,IAAI,eAAE,oBAAC,YAAD;AAA1C,IADJ,eAEI,8CACI,oBAAC,UAAD;AAAY,IAAA,GAAG,EAAE;AAAjB,KACKjJ,KAAK,CAACoE,IAAI,CAAC8E,SAAN,CAAL,CAAsBH,MAAtB,CAA6B,wBAA7B,CADL,CADJ,CAFJ,CADJ,CAhBJ,eA0BI,6CACI,oBAAC,IAAD;AAAM,IAAA,GAAG,EAAErE,KAAK,CAACN,IAAN,CAAWsB;AAAtB,KAA8BhB,KAA9B,EADJ,CA1BJ,CADJ,CA/CJ,CATR,CADJ;AA6FH,CAvRD;;AAyRA,eAAeD,WAAf","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,20 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { FileItem } from "./types";
|
|
3
|
+
interface StateQueryParams {
|
|
4
|
+
types: string[];
|
|
5
|
+
limit: number;
|
|
6
|
+
sort: number;
|
|
7
|
+
}
|
|
8
|
+
declare const FileManagerProvider: React.FC;
|
|
6
9
|
declare function useFileManager(): {
|
|
7
10
|
selected: any;
|
|
8
|
-
toggleSelected(file:
|
|
11
|
+
toggleSelected(file: FileItem): void;
|
|
9
12
|
hasPreviouslyUploadedFiles: any;
|
|
10
|
-
setHasPreviouslyUploadedFiles(hasPreviouslyUploadedFiles:
|
|
13
|
+
setHasPreviouslyUploadedFiles(hasPreviouslyUploadedFiles: boolean): void;
|
|
11
14
|
queryParams: any;
|
|
12
|
-
setQueryParams(queryParams:
|
|
15
|
+
setQueryParams(queryParams: StateQueryParams): void;
|
|
13
16
|
setDragging(state?: boolean): void;
|
|
14
17
|
dragging: any;
|
|
15
18
|
setUploading(state?: boolean): void;
|
|
16
19
|
uploading: any;
|
|
17
|
-
showFileDetails(src:
|
|
20
|
+
showFileDetails(src: string): void;
|
|
18
21
|
hideFileDetails(): void;
|
|
19
22
|
showingFileDetails: any;
|
|
20
23
|
state: any;
|
|
@@ -12,7 +12,7 @@ var ListFilesSort;
|
|
|
12
12
|
ListFilesSort[ListFilesSort["SIZE_DESC"] = 3] = "SIZE_DESC";
|
|
13
13
|
})(ListFilesSort || (ListFilesSort = {}));
|
|
14
14
|
|
|
15
|
-
function init(_ref) {
|
|
15
|
+
var init = function init(_ref) {
|
|
16
16
|
var accept = _ref.accept;
|
|
17
17
|
return {
|
|
18
18
|
showingFileDetails: null,
|
|
@@ -22,11 +22,13 @@ function init(_ref) {
|
|
|
22
22
|
types: accept,
|
|
23
23
|
limit: 50,
|
|
24
24
|
sort: ListFilesSort.CREATED_ON_DESC
|
|
25
|
-
}
|
|
25
|
+
},
|
|
26
|
+
dragging: false,
|
|
27
|
+
uploading: false
|
|
26
28
|
};
|
|
27
|
-
}
|
|
29
|
+
};
|
|
28
30
|
|
|
29
|
-
function fileManagerReducer(state, action) {
|
|
31
|
+
var fileManagerReducer = function fileManagerReducer(state, action) {
|
|
30
32
|
var next = _objectSpread({}, state);
|
|
31
33
|
|
|
32
34
|
switch (action.type) {
|
|
@@ -82,14 +84,19 @@ function fileManagerReducer(state, action) {
|
|
|
82
84
|
}
|
|
83
85
|
|
|
84
86
|
return next;
|
|
85
|
-
}
|
|
87
|
+
};
|
|
86
88
|
|
|
87
89
|
var FileManagerContext = /*#__PURE__*/React.createContext({});
|
|
88
90
|
|
|
89
|
-
function FileManagerProvider(_ref2) {
|
|
91
|
+
var FileManagerProvider = function FileManagerProvider(_ref2) {
|
|
90
92
|
var children = _ref2.children,
|
|
91
93
|
props = _objectWithoutProperties(_ref2, _excluded);
|
|
92
94
|
|
|
95
|
+
/**
|
|
96
|
+
* TODO @ts-refactor
|
|
97
|
+
* Figure out how to type the rest of the types.
|
|
98
|
+
*/
|
|
99
|
+
// @ts-ignore
|
|
93
100
|
var _React$useReducer = React.useReducer(fileManagerReducer, props, init),
|
|
94
101
|
_React$useReducer2 = _slicedToArray(_React$useReducer, 2),
|
|
95
102
|
state = _React$useReducer2[0],
|
|
@@ -104,7 +111,7 @@ function FileManagerProvider(_ref2) {
|
|
|
104
111
|
return /*#__PURE__*/React.createElement(FileManagerContext.Provider, Object.assign({
|
|
105
112
|
value: value
|
|
106
113
|
}, props), children);
|
|
107
|
-
}
|
|
114
|
+
};
|
|
108
115
|
|
|
109
116
|
function useFileManager() {
|
|
110
117
|
var context = React.useContext(FileManagerContext);
|
|
@@ -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,14 +10,6 @@ declare type FileManagerViewProps = {
|
|
|
10
10
|
multipleMaxCount: number;
|
|
11
11
|
multipleMaxSize: number | string;
|
|
12
12
|
onUploadCompletion?: Function;
|
|
13
|
-
};
|
|
14
|
-
declare function FileManagerView(props: FileManagerViewProps): JSX.Element;
|
|
15
|
-
declare namespace FileManagerView {
|
|
16
|
-
var defaultProps: {
|
|
17
|
-
multiple: boolean;
|
|
18
|
-
maxSize: string;
|
|
19
|
-
multipleMaxSize: string;
|
|
20
|
-
multipleMaxCount: number;
|
|
21
|
-
};
|
|
22
13
|
}
|
|
14
|
+
declare const FileManagerView: React.FC<FileManagerViewProps>;
|
|
23
15
|
export default FileManagerView;
|