@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.
Files changed (239) hide show
  1. package/base/Admin.d.ts +2 -2
  2. package/base/Admin.js +4 -0
  3. package/base/Admin.js.map +1 -0
  4. package/base/Base.js.map +1 -0
  5. package/base/plugins/AddGraphQLQuerySelection.js +3 -2
  6. package/base/plugins/AddGraphQLQuerySelection.js.map +1 -0
  7. package/base/providers/ApolloProvider.js +2 -1
  8. package/base/providers/ApolloProvider.js.map +1 -0
  9. package/base/providers/TelemetryProvider.js.map +1 -0
  10. package/base/providers/UiStateProvider.js.map +1 -0
  11. package/base/providers/ViewCompositionProvider.d.ts +2 -1
  12. package/base/providers/ViewCompositionProvider.js +8 -1
  13. package/base/providers/ViewCompositionProvider.js.map +1 -0
  14. package/base/ui/Brand.d.ts +2 -9
  15. package/base/ui/Brand.js.map +1 -0
  16. package/base/ui/CenteredView.d.ts +1 -5
  17. package/base/ui/CenteredView.js.map +1 -0
  18. package/base/ui/Dashboard.d.ts +2 -9
  19. package/base/ui/Dashboard.js.map +1 -0
  20. package/base/ui/Layout.d.ts +2 -8
  21. package/base/ui/Layout.js.map +1 -0
  22. package/base/ui/LocaleSelector.d.ts +2 -9
  23. package/base/ui/LocaleSelector.js.map +1 -0
  24. package/base/ui/LoginScreen.d.ts +2 -5
  25. package/base/ui/LoginScreen.js.map +1 -0
  26. package/base/ui/Logo.d.ts +3 -9
  27. package/base/ui/Logo.js.map +1 -0
  28. package/base/ui/Menu.d.ts +3 -12
  29. package/base/ui/Menu.js +9 -5
  30. package/base/ui/Menu.js.map +1 -0
  31. package/base/ui/Navigation.d.ts +6 -15
  32. package/base/ui/Navigation.js +20 -3
  33. package/base/ui/Navigation.js.map +1 -0
  34. package/base/ui/NotFound.d.ts +2 -9
  35. package/base/ui/NotFound.js.map +1 -0
  36. package/base/ui/Search.d.ts +3 -9
  37. package/base/ui/Search.js +6 -1
  38. package/base/ui/Search.js.map +1 -0
  39. package/base/ui/Tags.d.ts +3 -1
  40. package/base/ui/Tags.js.map +1 -0
  41. package/base/ui/UserMenu.d.ts +7 -28
  42. package/base/ui/UserMenu.js +15 -2
  43. package/base/ui/UserMenu.js.map +1 -0
  44. package/components/AdminLayout.js.map +1 -0
  45. package/components/AppInstaller/AppInstaller.js.map +1 -0
  46. package/components/AppInstaller/Sidebar.js +2 -1
  47. package/components/AppInstaller/Sidebar.js.map +1 -0
  48. package/components/AppInstaller/index.d.ts +0 -1
  49. package/components/AppInstaller/index.js.map +1 -0
  50. package/components/AppInstaller/styled.d.ts +4 -5
  51. package/components/AppInstaller/styled.js.map +1 -0
  52. package/components/AppInstaller/useInstaller.d.ts +6 -4
  53. package/components/AppInstaller/useInstaller.js +2 -2
  54. package/components/AppInstaller/useInstaller.js.map +1 -0
  55. package/components/EmptyView.d.ts +1 -1
  56. package/components/EmptyView.js.map +1 -0
  57. package/components/FileManager/BottomInfoBar/SupportedFileTypes.js +5 -0
  58. package/components/FileManager/BottomInfoBar/SupportedFileTypes.js.map +1 -0
  59. package/components/FileManager/BottomInfoBar/UploadStatus.js.map +1 -0
  60. package/components/FileManager/BottomInfoBar.js.map +1 -0
  61. package/components/FileManager/DropFilesHere.js.map +1 -0
  62. package/components/FileManager/File.js.map +1 -0
  63. package/components/FileManager/FileDetails/Name.js +8 -5
  64. package/components/FileManager/FileDetails/Name.js.map +1 -0
  65. package/components/FileManager/FileDetails/Tags.js +18 -7
  66. package/components/FileManager/FileDetails/Tags.js.map +1 -0
  67. package/components/FileManager/FileDetails.d.ts +3 -0
  68. package/components/FileManager/FileDetails.js +66 -39
  69. package/components/FileManager/FileDetails.js.map +1 -0
  70. package/components/FileManager/FileManagerContext.js +5 -0
  71. package/components/FileManager/FileManagerContext.js.map +1 -0
  72. package/components/FileManager/FileManagerView.d.ts +2 -2
  73. package/components/FileManager/FileManagerView.js +60 -43
  74. package/components/FileManager/FileManagerView.js.map +1 -0
  75. package/components/FileManager/LeftSidebar.js +2 -1
  76. package/components/FileManager/LeftSidebar.js.map +1 -0
  77. package/components/FileManager/NoPermissionView.js.map +1 -0
  78. package/components/FileManager/NoResults.js.map +1 -0
  79. package/components/FileManager/getFileTypePlugin.d.ts +1 -1
  80. package/components/FileManager/getFileTypePlugin.js +4 -0
  81. package/components/FileManager/getFileTypePlugin.js.map +1 -0
  82. package/components/FileManager/getFileUploader.js.map +1 -0
  83. package/components/FileManager/graphql.d.ts +90 -0
  84. package/components/FileManager/graphql.js +25 -0
  85. package/components/FileManager/graphql.js.map +1 -0
  86. package/components/FileManager/outputFileSelectionError.d.ts +6 -4
  87. package/components/FileManager/outputFileSelectionError.js +3 -7
  88. package/components/FileManager/outputFileSelectionError.js.map +1 -0
  89. package/components/FileManager/types.d.ts +4 -34
  90. package/components/FileManager/types.js.map +1 -0
  91. package/components/FileManager.js +12 -4
  92. package/components/FileManager.js.map +1 -0
  93. package/components/FloatingActionButton.js.map +1 -0
  94. package/components/MultiImageUpload.d.ts +2 -2
  95. package/components/MultiImageUpload.js.map +1 -0
  96. package/components/OverlayLayout/OverlayLayout.d.ts +3 -3
  97. package/components/OverlayLayout/OverlayLayout.js.map +1 -0
  98. package/components/OverlayLayout/index.js.map +1 -0
  99. package/components/Permissions/Permissions.d.ts +4 -4
  100. package/components/Permissions/Permissions.js.map +1 -0
  101. package/components/Permissions/StyledComponents.d.ts +2 -2
  102. package/components/Permissions/StyledComponents.js.map +1 -0
  103. package/components/Permissions/index.js.map +1 -0
  104. package/components/RichTextEditor/RichTextEditor.js.map +1 -0
  105. package/components/RichTextEditor/index.js.map +1 -0
  106. package/components/RichTextEditor/tools/header/index.js +3 -3
  107. package/components/RichTextEditor/tools/header/index.js.map +1 -0
  108. package/components/RichTextEditor/tools/image/index.d.ts +3 -1
  109. package/components/RichTextEditor/tools/image/index.js.map +1 -0
  110. package/components/RichTextEditor/tools/image/svgs.js.map +1 -0
  111. package/components/RichTextEditor/tools/image/tunes.js +7 -3
  112. package/components/RichTextEditor/tools/image/tunes.js.map +1 -0
  113. package/components/RichTextEditor/tools/image/types.js.map +1 -0
  114. package/components/RichTextEditor/tools/image/ui.d.ts +4 -2
  115. package/components/RichTextEditor/tools/image/ui.js +1 -1
  116. package/components/RichTextEditor/tools/image/ui.js.map +1 -0
  117. package/components/RichTextEditor/tools/paragraph/index.d.ts +3 -7
  118. package/components/RichTextEditor/tools/paragraph/index.js +6 -10
  119. package/components/RichTextEditor/tools/paragraph/index.js.map +1 -0
  120. package/components/RichTextEditor/tools/textColor/index.d.ts +9 -1
  121. package/components/RichTextEditor/tools/textColor/index.js +43 -9
  122. package/components/RichTextEditor/tools/textColor/index.js.map +1 -0
  123. package/components/RichTextEditor/tools/utils.js.map +1 -0
  124. package/components/Routes.js +2 -2
  125. package/components/Routes.js.map +1 -0
  126. package/components/SearchUI.js.map +1 -0
  127. package/components/SimpleForm/SimpleForm.d.ts +3 -2
  128. package/components/SimpleForm/SimpleForm.js.map +1 -0
  129. package/components/SimpleForm/index.js.map +1 -0
  130. package/components/SimpleUI/InputField.d.ts +1 -0
  131. package/components/SimpleUI/InputField.js +6 -4
  132. package/components/SimpleUI/InputField.js.map +1 -0
  133. package/components/SingleImageUpload.d.ts +0 -1
  134. package/components/SingleImageUpload.js +9 -12
  135. package/components/SingleImageUpload.js.map +1 -0
  136. package/components/SplitView/SplitView.js.map +1 -0
  137. package/components/SplitView/index.js.map +1 -0
  138. package/components/index.js.map +1 -0
  139. package/hooks/useConfirmationDialog.js.map +1 -0
  140. package/hooks/useDialog.js.map +1 -0
  141. package/hooks/useSnackbar.js.map +1 -0
  142. package/index.js.map +1 -0
  143. package/package.json +21 -20
  144. package/plugins/FileManagerFileTypePlugin.d.ts +2 -2
  145. package/plugins/FileManagerFileTypePlugin.js +4 -0
  146. package/plugins/FileManagerFileTypePlugin.js.map +1 -0
  147. package/plugins/MenuPlugin.d.ts +3 -3
  148. package/plugins/MenuPlugin.js +4 -0
  149. package/plugins/MenuPlugin.js.map +1 -0
  150. package/plugins/PermissionRendererPlugin.d.ts +4 -4
  151. package/plugins/PermissionRendererPlugin.js +4 -0
  152. package/plugins/PermissionRendererPlugin.js.map +1 -0
  153. package/plugins/fileManager/fileDefault.js.map +1 -0
  154. package/plugins/fileManager/fileImage/DeleteAction.js.map +1 -0
  155. package/plugins/fileManager/fileImage/EditAction.js +6 -2
  156. package/plugins/fileManager/fileImage/EditAction.js.map +1 -0
  157. package/plugins/fileManager/fileImage/index.js.map +1 -0
  158. package/plugins/fileManager/index.js.map +1 -0
  159. package/plugins/globalSearch/SearchBar.d.ts +1 -5
  160. package/plugins/globalSearch/SearchBar.js +4 -0
  161. package/plugins/globalSearch/SearchBar.js.map +1 -0
  162. package/plugins/globalSearch/SearchBarDropdown.d.ts +12 -9
  163. package/plugins/globalSearch/SearchBarDropdown.js.map +1 -0
  164. package/plugins/globalSearch/index.js.map +1 -0
  165. package/plugins/globalSearch/styled.d.ts +3 -4
  166. package/plugins/globalSearch/styled.js.map +1 -0
  167. package/plugins/index.d.ts +0 -1
  168. package/plugins/index.js.map +1 -0
  169. package/plugins/uiLayoutRenderer/index.js.map +1 -0
  170. package/types.d.ts +2 -2
  171. package/types.js.map +1 -0
  172. package/ui/UIElement.js.map +1 -0
  173. package/ui/UILayout.js.map +1 -0
  174. package/ui/UIRenderer.js.map +1 -0
  175. package/ui/UIView.js.map +1 -0
  176. package/ui/elements/AccordionElement.js.map +1 -0
  177. package/ui/elements/ButtonElement.js +7 -0
  178. package/ui/elements/ButtonElement.js.map +1 -0
  179. package/ui/elements/ButtonGroupElement.js.map +1 -0
  180. package/ui/elements/GenericElement.js.map +1 -0
  181. package/ui/elements/LabelElement.js.map +1 -0
  182. package/ui/elements/NavigationMenuElement.d.ts +2 -5
  183. package/ui/elements/NavigationMenuElement.js.map +1 -0
  184. package/ui/elements/PanelElement.js.map +1 -0
  185. package/ui/elements/PlaceholderElement.d.ts +0 -1
  186. package/ui/elements/PlaceholderElement.js.map +1 -0
  187. package/ui/elements/SmallButtonElement.js.map +1 -0
  188. package/ui/elements/TypographyElement.js.map +1 -0
  189. package/ui/elements/ViewElement.js.map +1 -0
  190. package/ui/elements/form/DynamicFieldsetElement/DynamicFieldsetRowElement.d.ts +2 -2
  191. package/ui/elements/form/DynamicFieldsetElement/DynamicFieldsetRowElement.js +10 -10
  192. package/ui/elements/form/DynamicFieldsetElement/DynamicFieldsetRowElement.js.map +1 -0
  193. package/ui/elements/form/DynamicFieldsetElement.d.ts +19 -18
  194. package/ui/elements/form/DynamicFieldsetElement.js +13 -0
  195. package/ui/elements/form/DynamicFieldsetElement.js.map +1 -0
  196. package/ui/elements/form/FileManagerElement/EmptyStateElement.js.map +1 -0
  197. package/ui/elements/form/FileManagerElement/EmptyStateElementRenderer.js.map +1 -0
  198. package/ui/elements/form/FileManagerElement/FileManagerElementRenderer.js.map +1 -0
  199. package/ui/elements/form/FileManagerElement/styled.d.ts +17 -14
  200. package/ui/elements/form/FileManagerElement/styled.js.map +1 -0
  201. package/ui/elements/form/FileManagerElement.d.ts +5 -5
  202. package/ui/elements/form/FileManagerElement.js.map +1 -0
  203. package/ui/elements/form/FormElement.js.map +1 -0
  204. package/ui/elements/form/FormFieldElement.d.ts +5 -5
  205. package/ui/elements/form/FormFieldElement.js +12 -4
  206. package/ui/elements/form/FormFieldElement.js.map +1 -0
  207. package/ui/elements/form/HiddenElement.js.map +1 -0
  208. package/ui/elements/form/InputElement.js.map +1 -0
  209. package/ui/elements/form/PasswordElement.js.map +1 -0
  210. package/ui/elements/form/SelectElement.d.ts +1 -1
  211. package/ui/elements/form/SelectElement.js +1 -1
  212. package/ui/elements/form/SelectElement.js.map +1 -0
  213. package/ui/elements/form/TextareaElement.js.map +1 -0
  214. package/ui/views/AdminView/ContentElement.js.map +1 -0
  215. package/ui/views/AdminView/HeaderElement.js +14 -2
  216. package/ui/views/AdminView/HeaderElement.js.map +1 -0
  217. package/ui/views/AdminView/HeaderSectionCenterElement.js.map +1 -0
  218. package/ui/views/AdminView/HeaderSectionLeftElement.js.map +1 -0
  219. package/ui/views/AdminView/HeaderSectionRightElement.js.map +1 -0
  220. package/ui/views/AdminView/components/Dialog.js.map +1 -0
  221. package/ui/views/AdminView/components/Hamburger.js.map +1 -0
  222. package/ui/views/AdminView/components/Snackbar.js.map +1 -0
  223. package/ui/views/FormView/FormContainerElement.d.ts +0 -1
  224. package/ui/views/FormView/FormContainerElement.js.map +1 -0
  225. package/ui/views/FormView/FormContentElement.js.map +1 -0
  226. package/ui/views/FormView/FormFooterElement.d.ts +0 -1
  227. package/ui/views/FormView/FormFooterElement.js.map +1 -0
  228. package/ui/views/FormView/FormHeaderElement.js.map +1 -0
  229. package/ui/views/FormView.js +21 -1
  230. package/ui/views/FormView.js.map +1 -0
  231. package/ui/views/OverlayView/ContentElement.js.map +1 -0
  232. package/ui/views/OverlayView/HeaderElement.js.map +1 -0
  233. package/ui/views/OverlayView/HeaderTitleElement.d.ts +1 -1
  234. package/ui/views/OverlayView/HeaderTitleElement.js.map +1 -0
  235. package/ui/views/OverlayView/useOverlayView.js.map +1 -0
  236. package/ui/views/OverlayView.js.map +1 -0
  237. package/ui/views/SplitView/SplitViewPanelElement.js.map +1 -0
  238. package/ui/views/SplitView.d.ts +2 -2
  239. 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 identity.getPermission("fm.file");
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
- var tagCountMap = {}; // Prepare "tag" count map
240
+ if (!selectedFile || Array.isArray(selectedFile.tags) === false) {
241
+ return;
242
+ }
217
243
 
218
- // Prepare "tag" count map
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
- file.tags.forEach(function (tag) {
225
- if (tagCountMap[tag]) {
226
- tagCountMap[tag] += 1;
227
- } else {
228
- tagCountMap[tag] = 1;
229
- }
230
- });
231
- }); // Get tags from cache
232
-
233
- // Get tags from cache
234
- var listTagsData = cloneDeep(cache.readQuery({
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
- return tagCountMap[tag] > 1;
245
- }); // Write it to cache
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
- // Write it to cache
248
- cache.writeQuery({
249
- query: LIST_TAGS,
250
- data: set(data, "fileManager.listTags", filteredTags)
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
- declare type FileManagerViewProps = {
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 identity.getPermission("fm.file");
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, _ref6) {
336
- var fetchMoreResult = _ref6.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 _ref7 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(files) {
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 _ref8 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(file) {
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 _ref8.apply(this, arguments);
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 (_ref9) {
438
- var file = _ref9.file,
439
- e = _ref9.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 _ref7.apply(this, arguments);
482
+ return _ref6.apply(this, arguments);
475
483
  };
476
484
  }();
477
485
 
478
- var renderUploadFileAction = useCallback(function (_ref10) {
479
- var browseFiles = _ref10.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
- return uploadFile(files.map(function (file) {
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 (_ref11) {
510
- var getDropZoneProps = _ref11.getDropZoneProps,
511
- browseFiles = _ref11.browseFiles,
512
- validateFiles = _ref11.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: /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
534
- return _regeneratorRuntime.wrap(function _callee4$(_context4) {
535
- while (1) {
536
- switch (_context4.prev = _context4.next) {
537
- case 0:
538
- _context4.next = 2;
539
- return onChange(multiple ? selected : selected[0]);
540
-
541
- case 2:
542
- onClose();
543
-
544
- case 3:
545
- case "end":
546
- return _context4.stop();
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
- }, _callee4);
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" ? undefined : /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5() {
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) {