@webiny/app-file-manager 5.34.8 → 5.35.0-beta.1

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 (133) hide show
  1. package/FileManagerFileTypePlugin.d.ts +20 -0
  2. package/FileManagerFileTypePlugin.js +48 -0
  3. package/FileManagerFileTypePlugin.js.map +1 -0
  4. package/app.d.ts +2 -0
  5. package/app.js +16 -0
  6. package/app.js.map +1 -0
  7. package/components/FileDetails/Aliases.d.ts +3 -0
  8. package/components/FileDetails/Aliases.js +228 -0
  9. package/components/FileDetails/Aliases.js.map +1 -0
  10. package/components/FileDetails/DeleteImageAction.d.ts +2 -0
  11. package/components/FileDetails/DeleteImageAction.js +82 -0
  12. package/components/FileDetails/DeleteImageAction.js.map +1 -0
  13. package/components/FileDetails/FileProvider.d.ts +13 -0
  14. package/components/FileDetails/FileProvider.js +29 -0
  15. package/components/FileDetails/FileProvider.js.map +1 -0
  16. package/components/FileDetails/Name.d.ts +3 -0
  17. package/components/FileDetails/Name.js +81 -0
  18. package/components/FileDetails/Name.js.map +1 -0
  19. package/components/FileDetails/Tags.d.ts +3 -0
  20. package/components/FileDetails/Tags.js +176 -0
  21. package/components/FileDetails/Tags.js.map +1 -0
  22. package/components/FileDetails.d.ts +20 -0
  23. package/components/FileDetails.js +243 -0
  24. package/components/FileDetails.js.map +1 -0
  25. package/getFileTypePlugin.d.ts +4 -0
  26. package/getFileTypePlugin.js +51 -0
  27. package/getFileTypePlugin.js.map +1 -0
  28. package/index.d.ts +4 -2
  29. package/index.js +37 -31
  30. package/index.js.map +1 -1
  31. package/modules/FileManagerApiProvider/FileManagerApiContext/FileManagerApiContext.d.ts +37 -0
  32. package/modules/FileManagerApiProvider/FileManagerApiContext/FileManagerApiContext.js +293 -0
  33. package/modules/FileManagerApiProvider/FileManagerApiContext/FileManagerApiContext.js.map +1 -0
  34. package/modules/FileManagerApiProvider/FileManagerApiContext/getFileUploader.d.ts +2 -0
  35. package/modules/FileManagerApiProvider/FileManagerApiContext/getFileUploader.js +15 -0
  36. package/modules/FileManagerApiProvider/FileManagerApiContext/getFileUploader.js.map +1 -0
  37. package/modules/FileManagerApiProvider/FileManagerApiContext/index.d.ts +2 -0
  38. package/modules/FileManagerApiProvider/FileManagerApiContext/index.js +19 -0
  39. package/modules/FileManagerApiProvider/FileManagerApiContext/index.js.map +1 -0
  40. package/modules/FileManagerApiProvider/FileManagerApiContext/useFileManagerApi.d.ts +3 -0
  41. package/modules/FileManagerApiProvider/FileManagerApiContext/useFileManagerApi.js +16 -0
  42. package/modules/FileManagerApiProvider/FileManagerApiContext/useFileManagerApi.js.map +1 -0
  43. package/modules/FileManagerApiProvider/graphql.d.ts +103 -0
  44. package/modules/FileManagerApiProvider/graphql.js +24 -0
  45. package/modules/FileManagerApiProvider/graphql.js.map +1 -0
  46. package/modules/FileManagerApiProvider/index.d.ts +2 -0
  47. package/modules/FileManagerApiProvider/index.js +22 -0
  48. package/modules/FileManagerApiProvider/index.js.map +1 -0
  49. package/modules/FileManagerRenderer/DefaultRenderer/BottomInfoBar/SupportedFileTypes.d.ts +6 -0
  50. package/modules/FileManagerRenderer/DefaultRenderer/BottomInfoBar/SupportedFileTypes.js +41 -0
  51. package/modules/FileManagerRenderer/DefaultRenderer/BottomInfoBar/SupportedFileTypes.js.map +1 -0
  52. package/modules/FileManagerRenderer/DefaultRenderer/BottomInfoBar/UploadStatus.d.ts +6 -0
  53. package/modules/FileManagerRenderer/DefaultRenderer/BottomInfoBar/UploadStatus.js +51 -0
  54. package/modules/FileManagerRenderer/DefaultRenderer/BottomInfoBar/UploadStatus.js.map +1 -0
  55. package/modules/FileManagerRenderer/DefaultRenderer/BottomInfoBar.d.ts +5 -0
  56. package/modules/FileManagerRenderer/DefaultRenderer/BottomInfoBar.js +48 -0
  57. package/modules/FileManagerRenderer/DefaultRenderer/BottomInfoBar.js.map +1 -0
  58. package/modules/FileManagerRenderer/DefaultRenderer/DropFilesHere.d.ts +11 -0
  59. package/modules/FileManagerRenderer/DefaultRenderer/DropFilesHere.js +68 -0
  60. package/modules/FileManagerRenderer/DefaultRenderer/DropFilesHere.js.map +1 -0
  61. package/modules/FileManagerRenderer/DefaultRenderer/EmptyView.d.ts +7 -0
  62. package/modules/FileManagerRenderer/DefaultRenderer/EmptyView.js +32 -0
  63. package/modules/FileManagerRenderer/DefaultRenderer/EmptyView.js.map +1 -0
  64. package/modules/FileManagerRenderer/DefaultRenderer/File.d.ts +16 -0
  65. package/modules/FileManagerRenderer/DefaultRenderer/File.js +131 -0
  66. package/modules/FileManagerRenderer/DefaultRenderer/File.js.map +1 -0
  67. package/modules/FileManagerRenderer/DefaultRenderer/FileManagerView.d.ts +18 -0
  68. package/modules/FileManagerRenderer/DefaultRenderer/FileManagerView.js +443 -0
  69. package/modules/FileManagerRenderer/DefaultRenderer/FileManagerView.js.map +1 -0
  70. package/modules/FileManagerRenderer/DefaultRenderer/LeftSidebar.d.ts +6 -0
  71. package/modules/FileManagerRenderer/DefaultRenderer/LeftSidebar.js +96 -0
  72. package/modules/FileManagerRenderer/DefaultRenderer/LeftSidebar.js.map +1 -0
  73. package/modules/FileManagerRenderer/DefaultRenderer/NoPermissionView.d.ts +3 -0
  74. package/modules/FileManagerRenderer/DefaultRenderer/NoPermissionView.js +74 -0
  75. package/modules/FileManagerRenderer/DefaultRenderer/NoPermissionView.js.map +1 -0
  76. package/modules/FileManagerRenderer/DefaultRenderer/NoResults.d.ts +3 -0
  77. package/modules/FileManagerRenderer/DefaultRenderer/NoResults.js +22 -0
  78. package/modules/FileManagerRenderer/DefaultRenderer/NoResults.js.map +1 -0
  79. package/modules/FileManagerRenderer/DefaultRenderer/index.d.ts +2 -0
  80. package/modules/FileManagerRenderer/DefaultRenderer/index.js +70 -0
  81. package/modules/FileManagerRenderer/DefaultRenderer/index.js.map +1 -0
  82. package/modules/FileManagerRenderer/DefaultRenderer/outputFileSelectionError.d.ts +2 -0
  83. package/modules/FileManagerRenderer/DefaultRenderer/outputFileSelectionError.js +40 -0
  84. package/modules/FileManagerRenderer/DefaultRenderer/outputFileSelectionError.js.map +1 -0
  85. package/modules/FileManagerRenderer/FileManagerViewProvider/FileManagerViewContext.d.ts +47 -0
  86. package/modules/FileManagerRenderer/FileManagerViewProvider/FileManagerViewContext.js +448 -0
  87. package/modules/FileManagerRenderer/FileManagerViewProvider/FileManagerViewContext.js.map +1 -0
  88. package/modules/FileManagerRenderer/FileManagerViewProvider/index.d.ts +2 -0
  89. package/modules/FileManagerRenderer/FileManagerViewProvider/index.js +27 -0
  90. package/modules/FileManagerRenderer/FileManagerViewProvider/index.js.map +1 -0
  91. package/modules/FileManagerRenderer/FileManagerViewProvider/stateReducer.d.ts +63 -0
  92. package/modules/FileManagerRenderer/FileManagerViewProvider/stateReducer.js +100 -0
  93. package/modules/FileManagerRenderer/FileManagerViewProvider/stateReducer.js.map +1 -0
  94. package/modules/FileManagerRenderer/FileManagerViewProvider/useFileManagerView.d.ts +3 -0
  95. package/modules/FileManagerRenderer/FileManagerViewProvider/useFileManagerView.js +15 -0
  96. package/modules/FileManagerRenderer/FileManagerViewProvider/useFileManagerView.js.map +1 -0
  97. package/modules/FileManagerRenderer/index.d.ts +2 -0
  98. package/modules/FileManagerRenderer/index.js +13 -0
  99. package/modules/FileManagerRenderer/index.js.map +1 -0
  100. package/modules/FileTypes/fileDefault.d.ts +2 -0
  101. package/modules/FileTypes/fileDefault.js +28 -0
  102. package/modules/FileTypes/fileDefault.js.map +1 -0
  103. package/modules/FileTypes/fileImage/EditAction.d.ts +7 -0
  104. package/modules/FileTypes/fileImage/EditAction.js +123 -0
  105. package/modules/FileTypes/fileImage/EditAction.js.map +1 -0
  106. package/modules/FileTypes/fileImage/index.d.ts +2 -0
  107. package/modules/FileTypes/fileImage/index.js +37 -0
  108. package/modules/FileTypes/fileImage/index.js.map +1 -0
  109. package/modules/FileTypes/icons/edit.svg +17 -0
  110. package/modules/FileTypes/icons/round-description-24px.svg +1 -0
  111. package/modules/FileTypes/index.d.ts +1 -0
  112. package/modules/FileTypes/index.js +32 -0
  113. package/modules/FileTypes/index.js.map +1 -0
  114. package/modules/Settings/assets/icons/folder-open.svg +1 -0
  115. package/modules/Settings/graphql.d.ts +5 -0
  116. package/modules/Settings/graphql.js +17 -0
  117. package/modules/Settings/graphql.js.map +1 -0
  118. package/modules/Settings/index.d.ts +2 -0
  119. package/modules/Settings/index.js +35 -0
  120. package/modules/Settings/index.js.map +1 -0
  121. package/modules/Settings/plugins/installation.d.ts +3 -0
  122. package/modules/Settings/plugins/installation.js +103 -0
  123. package/modules/Settings/plugins/installation.js.map +1 -0
  124. package/modules/Settings/plugins/permissionRenderer/FileManagerPermissions.d.ts +14 -0
  125. package/modules/Settings/plugins/permissionRenderer/FileManagerPermissions.js +217 -0
  126. package/modules/Settings/plugins/permissionRenderer/FileManagerPermissions.js.map +1 -0
  127. package/modules/Settings/plugins/permissionRenderer/index.d.ts +3 -0
  128. package/modules/Settings/plugins/permissionRenderer/index.js +28 -0
  129. package/modules/Settings/plugins/permissionRenderer/index.js.map +1 -0
  130. package/modules/Settings/views/FileManagerSettings.d.ts +2 -0
  131. package/modules/Settings/views/FileManagerSettings.js +132 -0
  132. package/modules/Settings/views/FileManagerSettings.js.map +1 -0
  133. package/package.json +28 -16
@@ -0,0 +1,176 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
10
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
+ var _react = _interopRequireWildcard(require("react"));
13
+ var _classnames = _interopRequireDefault(require("classnames"));
14
+ var _emotion = require("emotion");
15
+ var _Chips = require("@webiny/ui/Chips");
16
+ var _Button = require("@webiny/ui/Button");
17
+ var _AutoComplete = require("@webiny/ui/AutoComplete");
18
+ var _Icon = require("@webiny/ui/Icon");
19
+ var _form = require("@webiny/form");
20
+ var _edit = require("@material-design-icons/svg/outlined/edit.svg");
21
+ var _label = require("@material-design-icons/svg/outlined/label.svg");
22
+ var _appAdmin = require("@webiny/app-admin");
23
+ var _ = require("../..");
24
+ var chipsStyle = /*#__PURE__*/(0, _emotion.css)({
25
+ "&.mdc-chip-set": {
26
+ padding: 0,
27
+ marginLeft: -4,
28
+ "& .mdc-chip": {
29
+ backgroundColor: "var(--mdc-theme-background)"
30
+ }
31
+ }
32
+ }, "label:chipsStyle;");
33
+ var iconButtonStyle = /*#__PURE__*/(0, _emotion.css)({
34
+ "&.mdc-icon-button svg": {
35
+ width: 20,
36
+ height: 20
37
+ }
38
+ }, "label:iconButtonStyle;");
39
+ var addTagsStyle = /*#__PURE__*/(0, _emotion.css)({
40
+ "&.mdc-button:not(:disabled)": {
41
+ color: "var(--mdc-theme-text-secondary-on-background)",
42
+ textTransform: "capitalize",
43
+ letterSpacing: "initial",
44
+ marginLeft: -8
45
+ }
46
+ }, "label:addTagsStyle;");
47
+ var actionWrapperStyle = /*#__PURE__*/(0, _emotion.css)({
48
+ marginTop: 16,
49
+ "& button:first-child": {
50
+ marginRight: 16
51
+ }
52
+ }, "label:actionWrapperStyle;");
53
+ var Tags = function Tags() {
54
+ var _useFile = (0, _.useFile)(),
55
+ file = _useFile.file;
56
+ var _useState = (0, _react.useState)(false),
57
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
58
+ editing = _useState2[0],
59
+ setEdit = _useState2[1];
60
+ var _useState3 = (0, _react.useState)(false),
61
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
62
+ updating = _useState4[0],
63
+ setUpdating = _useState4[1];
64
+ var _useSnackbar = (0, _appAdmin.useSnackbar)(),
65
+ showSnackbar = _useSnackbar.showSnackbar;
66
+ var _useFileManagerApi = (0, _.useFileManagerApi)(),
67
+ canEdit = _useFileManagerApi.canEdit;
68
+ var _useFileManagerView = (0, _.useFileManagerView)(),
69
+ updateFile = _useFileManagerView.updateFile,
70
+ tags = _useFileManagerView.tags;
71
+ var _useState5 = (0, _react.useState)(file.tags),
72
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
73
+ initialTags = _useState6[0],
74
+ setInitialTags = _useState6[1];
75
+ var handleEdit = (0, _react.useCallback)(function () {
76
+ return setEdit(true);
77
+ }, []);
78
+ var isEditingAllowed = canEdit(file);
79
+ var renderHeaderContent = (0, _react.useCallback)(function (_ref) {
80
+ var data = _ref.data;
81
+ if (editing) {
82
+ return null;
83
+ }
84
+ var hasTags = data.tags.length > 0;
85
+ if (hasTags) {
86
+ // Render existing tags and "edit tags" action.
87
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Chips.Chips, {
88
+ className: (0, _classnames.default)("list-item__content", chipsStyle)
89
+ }, tags.map(function (tag) {
90
+ return /*#__PURE__*/_react.default.createElement(_Chips.Chip, {
91
+ key: tag,
92
+ label: tag
93
+ });
94
+ })), isEditingAllowed && /*#__PURE__*/_react.default.createElement(_Button.IconButton, {
95
+ className: iconButtonStyle,
96
+ icon: /*#__PURE__*/_react.default.createElement(_edit.ReactComponent, null),
97
+ onClick: handleEdit
98
+ }));
99
+ }
100
+ // Render "add tags" action.
101
+ return /*#__PURE__*/_react.default.createElement(_Button.ButtonDefault, {
102
+ className: addTagsStyle,
103
+ onClick: handleEdit,
104
+ disabled: !isEditingAllowed,
105
+ "data-testid": "fm.tags.add"
106
+ }, "Add tags...");
107
+ }, [editing, isEditingAllowed]);
108
+ var onSubmit = /*#__PURE__*/function () {
109
+ var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(_ref2) {
110
+ var tags;
111
+ return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
112
+ while (1) switch (_context.prev = _context.next) {
113
+ case 0:
114
+ tags = _ref2.tags;
115
+ setUpdating(true);
116
+ _context.next = 4;
117
+ return updateFile(file.id, {
118
+ tags: tags
119
+ });
120
+ case 4:
121
+ setUpdating(false);
122
+ setInitialTags(tags);
123
+ setEdit(false);
124
+ showSnackbar("Tags successfully updated.");
125
+ case 8:
126
+ case "end":
127
+ return _context.stop();
128
+ }
129
+ }, _callee);
130
+ }));
131
+ return function onSubmit(_x) {
132
+ return _ref3.apply(this, arguments);
133
+ };
134
+ }();
135
+ return /*#__PURE__*/_react.default.createElement(_form.Form, {
136
+ data: {
137
+ tags: initialTags
138
+ },
139
+ onSubmit: onSubmit
140
+ }, function (_ref4) {
141
+ var Bind = _ref4.Bind,
142
+ data = _ref4.data,
143
+ setValue = _ref4.setValue,
144
+ submit = _ref4.submit;
145
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("li-title", null, /*#__PURE__*/_react.default.createElement(_Icon.Icon, {
146
+ className: "list-item__icon",
147
+ icon: /*#__PURE__*/_react.default.createElement(_label.ReactComponent, null)
148
+ }), renderHeaderContent({
149
+ data: data
150
+ })), editing && /*#__PURE__*/_react.default.createElement("li-content", null, /*#__PURE__*/_react.default.createElement(Bind, {
151
+ name: "tags"
152
+ }, /*#__PURE__*/_react.default.createElement(_AutoComplete.MultiAutoComplete, {
153
+ options: tags,
154
+ placeholder: "homepage asset",
155
+ description: "Type in a new tag or select an existing one.",
156
+ unique: true,
157
+ allowFreeInput: true,
158
+ useSimpleValues: true,
159
+ disabled: updating
160
+ })), /*#__PURE__*/_react.default.createElement("div", {
161
+ className: actionWrapperStyle
162
+ }, /*#__PURE__*/_react.default.createElement(_Button.ButtonPrimary, {
163
+ small: true,
164
+ onClick: submit,
165
+ "data-testid": "fm.tags.submit"
166
+ }, "Submit"), /*#__PURE__*/_react.default.createElement(_Button.ButtonSecondary, {
167
+ small: true,
168
+ onClick: function onClick() {
169
+ setValue("tags", initialTags);
170
+ setEdit(false);
171
+ }
172
+ }, "Cancel"))));
173
+ });
174
+ };
175
+ var _default = Tags;
176
+ exports.default = _default;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["chipsStyle","css","padding","marginLeft","backgroundColor","iconButtonStyle","width","height","addTagsStyle","color","textTransform","letterSpacing","actionWrapperStyle","marginTop","marginRight","Tags","useFile","file","useState","editing","setEdit","updating","setUpdating","useSnackbar","showSnackbar","useFileManagerApi","canEdit","useFileManagerView","updateFile","tags","initialTags","setInitialTags","handleEdit","useCallback","isEditingAllowed","renderHeaderContent","data","hasTags","length","classNames","map","tag","onSubmit","id","Bind","setValue","submit"],"sources":["Tags.tsx"],"sourcesContent":["import React, { useCallback, useState } from \"react\";\nimport classNames from \"classnames\";\nimport { css } from \"emotion\";\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, FormOnSubmit } from \"@webiny/form\";\nimport { ReactComponent as EditIcon } from \"@material-design-icons/svg/outlined/edit.svg\";\nimport { ReactComponent as LabelIcon } from \"@material-design-icons/svg/outlined/label.svg\";\nimport { useSnackbar } from \"@webiny/app-admin\";\nimport { useFile, useFileManagerApi, useFileManagerView } from \"~/index\";\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 TagsFormData {\n tags: string[];\n}\n\nconst Tags = () => {\n const { file } = useFile();\n const [editing, setEdit] = useState(false);\n const [updating, setUpdating] = useState(false);\n const { showSnackbar } = useSnackbar();\n const { canEdit } = useFileManagerApi();\n const { updateFile, tags } = useFileManagerView();\n const [initialTags, setInitialTags] = useState(file.tags);\n const handleEdit = useCallback(() => setEdit(true), []);\n\n const isEditingAllowed = canEdit(file);\n\n const renderHeaderContent = useCallback(\n ({ data }: { data: TagsFormData }) => {\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 {tags.map(tag => {\n return <Chip key={tag} label={tag} />;\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 data-testid=\"fm.tags.add\"\n >\n Add tags...\n </ButtonDefault>\n );\n },\n [editing, isEditingAllowed]\n );\n\n const onSubmit: FormOnSubmit<TagsFormData> = async ({ tags }) => {\n setUpdating(true);\n await updateFile(file.id, { tags });\n setUpdating(false);\n setInitialTags(tags);\n setEdit(false);\n showSnackbar(\"Tags successfully updated.\");\n };\n\n return (\n <Form<TagsFormData> data={{ tags: initialTags }} onSubmit={onSubmit}>\n {({ Bind, data, setValue, submit }) => (\n <React.Fragment>\n <li-title>\n <Icon className={\"list-item__icon\"} icon={<LabelIcon />} />\n {renderHeaderContent({ data })}\n </li-title>\n {editing && (\n <li-content>\n <Bind name={\"tags\"}>\n <MultiAutoComplete\n options={tags}\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={updating}\n />\n </Bind>\n <div className={actionWrapperStyle}>\n <ButtonPrimary\n small\n onClick={submit}\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"],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export { useFile } from "./FileDetails/FileProvider";
2
+ import React from "react";
3
+ import { FileItem } from "@webiny/app-admin/types";
4
+ declare global {
5
+ namespace JSX {
6
+ interface IntrinsicElements {
7
+ "li-title": {
8
+ children?: React.ReactNode;
9
+ };
10
+ "li-content": {
11
+ children?: React.ReactNode;
12
+ };
13
+ }
14
+ }
15
+ }
16
+ export interface FileDetailsProps {
17
+ file: FileItem;
18
+ onClose: () => void;
19
+ }
20
+ export declare const FileDetails: React.FC<FileDetailsProps>;
@@ -0,0 +1,243 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.FileDetails = void 0;
9
+ Object.defineProperty(exports, "useFile", {
10
+ enumerable: true,
11
+ get: function get() {
12
+ return _FileProvider.useFile;
13
+ }
14
+ });
15
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
16
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
17
+ var _FileProvider = require("./FileDetails/FileProvider");
18
+ var _react = _interopRequireWildcard(require("react"));
19
+ var _bytes = _interopRequireDefault(require("bytes"));
20
+ var _classnames = _interopRequireDefault(require("classnames"));
21
+ var _emotion = require("emotion");
22
+ var _styled = _interopRequireDefault(require("@emotion/styled"));
23
+ var _Drawer = require("@webiny/ui/Drawer");
24
+ var _Button = require("@webiny/ui/Button");
25
+ var _dayjs = _interopRequireDefault(require("dayjs"));
26
+ var _get = _interopRequireDefault(require("lodash/get"));
27
+ var _Tags = _interopRequireDefault(require("./FileDetails/Tags"));
28
+ var _Name = _interopRequireDefault(require("./FileDetails/Name"));
29
+ var _Aliases = require("./FileDetails/Aliases");
30
+ var _Tooltip = require("@webiny/ui/Tooltip");
31
+ var _Icon = require("@webiny/ui/Icon");
32
+ var _Typography = require("@webiny/ui/Typography");
33
+ var _reactHotkeyz = require("react-hotkeyz");
34
+ var _close = require("@material-design-icons/svg/outlined/close.svg");
35
+ var _content_copy = require("@material-design-icons/svg/outlined/content_copy.svg");
36
+ var _insert_photo = require("@material-design-icons/svg/outlined/insert_photo.svg");
37
+ var _insert_drive_file = require("@material-design-icons/svg/outlined/insert_drive_file.svg");
38
+ var _today = require("@material-design-icons/svg/outlined/today.svg");
39
+ var _highlight = require("@material-design-icons/svg/outlined/highlight.svg");
40
+ var _i18n = require("@webiny/app/i18n");
41
+ var _DeleteImageAction = require("./FileDetails/DeleteImageAction");
42
+ var _appAdmin = require("@webiny/app-admin");
43
+ var _getFileTypePlugin = _interopRequireDefault(require("../getFileTypePlugin"));
44
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4;
45
+ var t = _i18n.i18n.ns("app-admin/file-manager/file-details");
46
+ var fileDetailsSidebar = /*#__PURE__*/(0, _emotion.css)({
47
+ "&.mdc-drawer": {
48
+ width: 360
49
+ }
50
+ }, "label:fileDetailsSidebar;");
51
+ var CloseButton = /*#__PURE__*/(0, _styled.default)(_Button.IconButton, {
52
+ label: "CloseButton",
53
+ target: "e19slrb30"
54
+ })("position:absolute;right:10px;top:8px;");
55
+ var style = {
56
+ wrapper: /*#__PURE__*/(0, _emotion.css)({
57
+ height: "100vh",
58
+ overflowY: "auto"
59
+ }, "label:wrapper;"),
60
+ header: /*#__PURE__*/(0, _emotion.css)({
61
+ textAlign: "center",
62
+ marginBottom: 24,
63
+ paddingTop: 16,
64
+ "& span": {
65
+ textTransform: "capitalize",
66
+ color: "var(--mdc-theme-on-surface)",
67
+ fontWeight: 600
68
+ }
69
+ }, "label:header;"),
70
+ preview: /*#__PURE__*/(0, _emotion.css)({
71
+ boxSizing: "border-box",
72
+ display: "flex",
73
+ justifyContent: "center",
74
+ alignItems: "center",
75
+ position: "relative",
76
+ width: "100%",
77
+ height: 300,
78
+ margin: "0 auto 24px",
79
+ img: {
80
+ objectFit: "contain",
81
+ maxHeight: 300,
82
+ maxWidth: 300,
83
+ width: "100%",
84
+ position: "static",
85
+ transform: "none"
86
+ },
87
+ "&.dark": {
88
+ backgroundColor: "var(--mdc-theme-background)"
89
+ }
90
+ }, "label:preview;"),
91
+ download: /*#__PURE__*/(0, _emotion.css)({
92
+ textAlign: "center",
93
+ margin: "0 auto",
94
+ width: "100%",
95
+ "& .icon--active": {
96
+ "&.mdc-icon-button": {
97
+ color: "var(--mdc-theme-text-on-primary)"
98
+ }
99
+ }
100
+ }, "label:download;"),
101
+ list: /*#__PURE__*/(0, _emotion.css)({
102
+ textAlign: "left",
103
+ color: "var(--mdc-theme-on-surface)",
104
+ li: {
105
+ padding: "12px 16px",
106
+ lineHeight: "22px",
107
+ "li-title": {
108
+ display: "flex",
109
+ alignItems: "center",
110
+ justifyContent: "flex-start",
111
+ minHeight: 48,
112
+ "& .list-item__title": {
113
+ fontWeight: 600
114
+ },
115
+ "& .list-item__icon": {
116
+ marginRight: 24
117
+ },
118
+ "& .list-item__content": {
119
+ flex: "1 0 200px"
120
+ }
121
+ },
122
+ "li-content": {
123
+ width: "100%",
124
+ display: "block",
125
+ "& .list-item__truncate": {
126
+ display: "block",
127
+ width: "100%",
128
+ whiteSpace: "nowrap",
129
+ overflow: "hidden",
130
+ textOverflow: "ellipsis"
131
+ }
132
+ }
133
+ }
134
+ }, "label:list;"),
135
+ drawerContent: /*#__PURE__*/(0, _emotion.css)({
136
+ "&.mdc-drawer__content": {
137
+ height: "auto",
138
+ overflowY: "inherit"
139
+ }
140
+ }, "label:drawerContent;")
141
+ };
142
+ var FileDetails = function FileDetails(_ref) {
143
+ var file = _ref.file,
144
+ onClose = _ref.onClose;
145
+ var filePlugin = (0, _getFileTypePlugin.default)(file);
146
+ var _useState = (0, _react.useState)(false),
147
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
148
+ darkImageBackground = _useState2[0],
149
+ setDarkImageBackground = _useState2[1];
150
+ var _useSnackbar = (0, _appAdmin.useSnackbar)(),
151
+ showSnackbar = _useSnackbar.showSnackbar;
152
+ (0, _reactHotkeyz.useHotkeys)({
153
+ zIndex: 55,
154
+ disabled: !file,
155
+ keys: {
156
+ esc: onClose
157
+ }
158
+ });
159
+ var actions = (0, _get.default)(filePlugin, "fileDetails.actions") || (0, _get.default)(filePlugin, "actions") || [];
160
+ var fileTypeIcon = (0, _react.useMemo)(function () {
161
+ if (file && typeof file.type === "string") {
162
+ return file.type.includes("image") ? /*#__PURE__*/_react.default.createElement(_insert_photo.ReactComponent, null) : /*#__PURE__*/_react.default.createElement(_insert_drive_file.ReactComponent, null);
163
+ }
164
+ return /*#__PURE__*/_react.default.createElement(_insert_photo.ReactComponent, null);
165
+ }, [file]);
166
+ return /*#__PURE__*/_react.default.createElement(_Drawer.Drawer, {
167
+ className: fileDetailsSidebar,
168
+ dir: "rtl",
169
+ modal: true,
170
+ open: Boolean(file),
171
+ onClose: onClose,
172
+ "data-testid": "fm.file-details.drawer"
173
+ }, file && /*#__PURE__*/_react.default.createElement(_FileProvider.FileProvider, {
174
+ file: file
175
+ }, /*#__PURE__*/_react.default.createElement("div", {
176
+ className: style.wrapper,
177
+ dir: "ltr"
178
+ }, /*#__PURE__*/_react.default.createElement("div", {
179
+ className: style.header
180
+ }, /*#__PURE__*/_react.default.createElement(_Typography.Typography, {
181
+ use: "headline5"
182
+ }, t(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["File details"])))), /*#__PURE__*/_react.default.createElement(CloseButton, {
183
+ icon: /*#__PURE__*/_react.default.createElement(_close.ReactComponent, null),
184
+ onClick: onClose
185
+ })), /*#__PURE__*/_react.default.createElement("div", {
186
+ className: (0, _classnames.default)(style.preview, {
187
+ dark: darkImageBackground
188
+ })
189
+ }, filePlugin && filePlugin.render({
190
+ file: file
191
+ })), /*#__PURE__*/_react.default.createElement("div", {
192
+ className: style.download
193
+ }, /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
194
+ content: /*#__PURE__*/_react.default.createElement("span", null, t(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["Copy URL"])))),
195
+ placement: "bottom"
196
+ }, /*#__PURE__*/_react.default.createElement(_Button.IconButton, {
197
+ onClick: function onClick() {
198
+ navigator.clipboard.writeText(file.src);
199
+ showSnackbar(t(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["URL copied successfully."]))));
200
+ },
201
+ icon: /*#__PURE__*/_react.default.createElement(_content_copy.ReactComponent, {
202
+ style: {
203
+ margin: "0 8px 0 0"
204
+ }
205
+ })
206
+ })), actions.map(function (Component, index) {
207
+ return /*#__PURE__*/_react.default.createElement(Component, {
208
+ key: index,
209
+ file: file
210
+ });
211
+ }), /*#__PURE__*/_react.default.createElement(_DeleteImageAction.DeleteImageAction, null), /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
212
+ content: t(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["Toggle background"]))),
213
+ placement: "bottom"
214
+ }, /*#__PURE__*/_react.default.createElement(_Button.IconButton, {
215
+ icon: /*#__PURE__*/_react.default.createElement(_highlight.ReactComponent, null),
216
+ onClick: function onClick() {
217
+ return setDarkImageBackground(!darkImageBackground);
218
+ },
219
+ className: (0, _classnames.default)({
220
+ "icon--active": darkImageBackground
221
+ })
222
+ })))), /*#__PURE__*/_react.default.createElement(_Drawer.DrawerContent, {
223
+ dir: "ltr",
224
+ className: style.drawerContent
225
+ }, /*#__PURE__*/_react.default.createElement("ul", {
226
+ className: style.list
227
+ }, /*#__PURE__*/_react.default.createElement("li", null, /*#__PURE__*/_react.default.createElement(_Name.default, null)), /*#__PURE__*/_react.default.createElement("li", null, /*#__PURE__*/_react.default.createElement("li-title", null, /*#__PURE__*/_react.default.createElement(_Icon.Icon, {
228
+ className: "list-item__icon",
229
+ icon: fileTypeIcon
230
+ }), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_Typography.Typography, {
231
+ use: "subtitle1"
232
+ }, file.type), " ", " - ", /*#__PURE__*/_react.default.createElement(_Typography.Typography, {
233
+ use: "subtitle1"
234
+ }, _bytes.default.format(file.size, {
235
+ unitSeparator: " "
236
+ }))))), /*#__PURE__*/_react.default.createElement("li", null, /*#__PURE__*/_react.default.createElement("li-title", null, /*#__PURE__*/_react.default.createElement(_Icon.Icon, {
237
+ className: "list-item__icon",
238
+ icon: /*#__PURE__*/_react.default.createElement(_today.ReactComponent, null)
239
+ }), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_Typography.Typography, {
240
+ use: "subtitle1"
241
+ }, (0, _dayjs.default)(file.createdOn).format("DD MMM YYYY [at] HH:mm"))))), /*#__PURE__*/_react.default.createElement("li", null, /*#__PURE__*/_react.default.createElement(_Tags.default, null)), /*#__PURE__*/_react.default.createElement("li", null, /*#__PURE__*/_react.default.createElement(_Aliases.Aliases, null)))))));
242
+ };
243
+ exports.FileDetails = FileDetails;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["t","i18n","ns","fileDetailsSidebar","css","width","CloseButton","styled","IconButton","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","FileDetails","file","onClose","filePlugin","getFileTypePlugin","useState","darkImageBackground","setDarkImageBackground","useSnackbar","showSnackbar","useHotkeys","zIndex","disabled","keys","esc","actions","get","fileTypeIcon","useMemo","type","includes","Boolean","classNames","dark","render","navigator","clipboard","writeText","src","map","Component","index","bytes","format","size","unitSeparator","dayjs","createdOn"],"sources":["FileDetails.tsx"],"sourcesContent":["export { useFile } from \"./FileDetails/FileProvider\";\nimport React, { useMemo, useState } from \"react\";\nimport bytes from \"bytes\";\nimport classNames from \"classnames\";\nimport { css } from \"emotion\";\nimport styled from \"@emotion/styled\";\nimport { Drawer, DrawerContent } from \"@webiny/ui/Drawer\";\nimport { IconButton } from \"@webiny/ui/Button\";\nimport dayjs from \"dayjs\";\nimport get from \"lodash/get\";\nimport Tags from \"./FileDetails/Tags\";\nimport Name from \"./FileDetails/Name\";\nimport { Aliases } from \"./FileDetails/Aliases\";\nimport { Tooltip } from \"@webiny/ui/Tooltip\";\nimport { Icon } from \"@webiny/ui/Icon\";\nimport { Typography } from \"@webiny/ui/Typography\";\n// @ts-ignore\nimport { useHotkeys } from \"react-hotkeyz\";\nimport { ReactComponent as CloseIcon } from \"@material-design-icons/svg/outlined/close.svg\";\nimport { ReactComponent as CopyContentIcon } from \"@material-design-icons/svg/outlined/content_copy.svg\";\nimport { ReactComponent as ImageIcon } from \"@material-design-icons/svg/outlined/insert_photo.svg\";\nimport { ReactComponent as FileIcon } from \"@material-design-icons/svg/outlined/insert_drive_file.svg\";\nimport { ReactComponent as CalendarIcon } from \"@material-design-icons/svg/outlined/today.svg\";\nimport { ReactComponent as HighlightIcon } from \"@material-design-icons/svg/outlined/highlight.svg\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { FileProvider } from \"./FileDetails/FileProvider\";\nimport { DeleteImageAction } from \"./FileDetails/DeleteImageAction\";\nimport { FileItem } from \"@webiny/app-admin/types\";\nimport { useSnackbar } from \"@webiny/app-admin\";\nimport getFileTypePlugin from \"~/getFileTypePlugin\";\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 CloseButton = styled(IconButton)`\n position: absolute;\n right: 10px;\n top: 8px;\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};\n\nexport interface FileDetailsProps {\n file: FileItem;\n onClose: () => void;\n}\n\nexport const FileDetails: React.FC<FileDetailsProps> = ({ file, onClose }) => {\n const filePlugin = getFileTypePlugin(file);\n\n const [darkImageBackground, setDarkImageBackground] = useState(false);\n const { showSnackbar } = useSnackbar();\n\n useHotkeys({\n zIndex: 55,\n disabled: !file,\n keys: {\n esc: onClose\n }\n });\n\n const actions: React.FC[] =\n get(filePlugin, \"fileDetails.actions\") || get(filePlugin, \"actions\") || [];\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={onClose}\n data-testid={\"fm.file-details.drawer\"}\n >\n {file && (\n <FileProvider file={file}>\n <div className={style.wrapper} dir=\"ltr\">\n <div className={style.header}>\n <Typography use={\"headline5\"}>{t`File details`}</Typography>\n <CloseButton icon={<CloseIcon />} onClick={onClose} />\n </div>\n\n <div\n className={classNames(style.preview, {\n dark: darkImageBackground\n })}\n >\n {filePlugin && filePlugin.render({ file })}\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(\n (Component: React.FC<{ file: FileItem }>, index: number) => (\n <Component key={index} file={file} />\n )\n )}\n <DeleteImageAction />\n {/* Render background switcher */}\n <Tooltip content={t`Toggle background`} placement={\"bottom\"}>\n <IconButton\n icon={<HighlightIcon />}\n onClick={() => setDarkImageBackground(!darkImageBackground)}\n className={classNames({\n \"icon--active\": darkImageBackground\n })}\n />\n </Tooltip>\n </>\n </div>\n <DrawerContent dir=\"ltr\" className={style.drawerContent}>\n <ul className={style.list}>\n <li>\n <Name />\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\n className={\"list-item__icon\"}\n icon={<CalendarIcon />}\n />\n <div>\n <Typography use={\"subtitle1\"}>\n {dayjs(file.createdOn).format(\n \"DD MMM YYYY [at] HH:mm\"\n )}\n </Typography>\n </div>\n </li-title>\n </li>\n <li>\n <Tags />\n </li>\n <li>\n <Aliases />\n </li>\n </ul>\n </DrawerContent>\n </div>\n </FileProvider>\n )}\n </Drawer>\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { FileItem } from "@webiny/app/types";
2
+ import { AdminFileManagerFileTypePlugin } from "@webiny/app-admin/types";
3
+ import { FileManagerFileTypePlugin } from "./index";
4
+ export default function getFileTypePlugin(file: FileItem): AdminFileManagerFileTypePlugin | FileManagerFileTypePlugin | null;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = getFileTypePlugin;
8
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
+ var _invariant = _interopRequireDefault(require("invariant"));
10
+ var _minimatch = _interopRequireDefault(require("minimatch"));
11
+ var _plugins = require("@webiny/plugins");
12
+ var _index = require("./index");
13
+ function getFileTypePlugin(file) {
14
+ if (!file) {
15
+ return null;
16
+ }
17
+ var fileTypePlugins = [].concat((0, _toConsumableArray2.default)(_plugins.plugins.byType("admin-file-manager-file-type")), (0, _toConsumableArray2.default)(_plugins.plugins.byType(_index.FileManagerFileTypePlugin.type))).filter(function (value, index, self) {
18
+ return self.indexOf(value) === index;
19
+ });
20
+
21
+ // Group by types, but only one plugin per group. Last in wins. This allows you to add plugins to the system
22
+ // and not worry about the order of plugin registration.
23
+ var byTypes = fileTypePlugins.reduce(function (acc, plugin) {
24
+ plugin.types.forEach(function (type) {
25
+ return acc[type] = plugin;
26
+ });
27
+ return acc;
28
+ }, {});
29
+
30
+ // Sort by type and by priority. More occurrences of `*` means lower priority.
31
+ var regExMatch = /\*/g;
32
+ var types = Object.keys(byTypes).sort(function (a, b) {
33
+ var countA = (a.match(regExMatch) || []).length;
34
+ var countB = (b.match(regExMatch) || []).length;
35
+ if (countB > countA) {
36
+ return -1;
37
+ } else if (countB < countA) {
38
+ return 1;
39
+ }
40
+ return 0;
41
+ });
42
+
43
+ // Find first matching type
44
+ var type = types.find(function (type) {
45
+ return (0, _minimatch.default)(file.type, type);
46
+ });
47
+ (0, _invariant.default)(type, "Missing plugin to handle \"".concat(file.type, "\"!"));
48
+
49
+ // return the plugin
50
+ return byTypes[type];
51
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getFileTypePlugin","file","fileTypePlugins","plugins","byType","FileManagerFileTypePlugin","type","filter","value","index","self","indexOf","byTypes","reduce","acc","plugin","types","forEach","regExMatch","Object","keys","sort","a","b","countA","match","length","countB","find","minimatch","invariant"],"sources":["getFileTypePlugin.ts"],"sourcesContent":["import invariant from \"invariant\";\nimport minimatch from \"minimatch\";\nimport { plugins } from \"@webiny/plugins\";\nimport { FileItem } from \"@webiny/app/types\";\nimport { AdminFileManagerFileTypePlugin } from \"@webiny/app-admin/types\";\nimport { FileManagerFileTypePlugin } from \"~/index\";\n\nexport default function getFileTypePlugin(\n file: FileItem\n): AdminFileManagerFileTypePlugin | FileManagerFileTypePlugin | null {\n if (!file) {\n return null;\n }\n\n const fileTypePlugins = [\n ...plugins.byType<AdminFileManagerFileTypePlugin>(\"admin-file-manager-file-type\"),\n ...plugins.byType<FileManagerFileTypePlugin>(FileManagerFileTypePlugin.type)\n ].filter((value, index, self) => self.indexOf(value) === index);\n\n // Group by types, but only one plugin per group. Last in wins. This allows you to add plugins to the system\n // and not worry about the order of plugin registration.\n const byTypes = fileTypePlugins.reduce<\n Record<string, AdminFileManagerFileTypePlugin | FileManagerFileTypePlugin>\n >((acc, plugin) => {\n plugin.types.forEach(type => (acc[type] = plugin));\n return acc;\n }, {});\n\n // Sort by type and by priority. More occurrences of `*` means lower priority.\n const regExMatch = /\\*/g;\n const types = Object.keys(byTypes).sort((a, b) => {\n const countA = (a.match(regExMatch) || []).length;\n const countB = (b.match(regExMatch) || []).length;\n if (countB > countA) {\n return -1;\n } else if (countB < countA) {\n return 1;\n }\n return 0;\n });\n\n // Find first matching type\n const type = types.find(type => minimatch(file.type, type));\n\n invariant(type, `Missing plugin to handle \"${file.type}\"!`);\n\n // return the plugin\n return byTypes[type];\n}\n"],"mappings":";;;;;;;;AAAA;AACA;AACA;AAGA;AAEe,SAASA,iBAAiB,CACrCC,IAAc,EACmD;EACjE,IAAI,CAACA,IAAI,EAAE;IACP,OAAO,IAAI;EACf;EAEA,IAAMC,eAAe,GAAG,2CACjBC,gBAAO,CAACC,MAAM,CAAiC,8BAA8B,CAAC,oCAC9ED,gBAAO,CAACC,MAAM,CAA4BC,gCAAyB,CAACC,IAAI,CAAC,GAC9EC,MAAM,CAAC,UAACC,KAAK,EAAEC,KAAK,EAAEC,IAAI;IAAA,OAAKA,IAAI,CAACC,OAAO,CAACH,KAAK,CAAC,KAAKC,KAAK;EAAA,EAAC;;EAE/D;EACA;EACA,IAAMG,OAAO,GAAGV,eAAe,CAACW,MAAM,CAEpC,UAACC,GAAG,EAAEC,MAAM,EAAK;IACfA,MAAM,CAACC,KAAK,CAACC,OAAO,CAAC,UAAAX,IAAI;MAAA,OAAKQ,GAAG,CAACR,IAAI,CAAC,GAAGS,MAAM;IAAA,CAAC,CAAC;IAClD,OAAOD,GAAG;EACd,CAAC,EAAE,CAAC,CAAC,CAAC;;EAEN;EACA,IAAMI,UAAU,GAAG,KAAK;EACxB,IAAMF,KAAK,GAAGG,MAAM,CAACC,IAAI,CAACR,OAAO,CAAC,CAACS,IAAI,CAAC,UAACC,CAAC,EAAEC,CAAC,EAAK;IAC9C,IAAMC,MAAM,GAAG,CAACF,CAAC,CAACG,KAAK,CAACP,UAAU,CAAC,IAAI,EAAE,EAAEQ,MAAM;IACjD,IAAMC,MAAM,GAAG,CAACJ,CAAC,CAACE,KAAK,CAACP,UAAU,CAAC,IAAI,EAAE,EAAEQ,MAAM;IACjD,IAAIC,MAAM,GAAGH,MAAM,EAAE;MACjB,OAAO,CAAC,CAAC;IACb,CAAC,MAAM,IAAIG,MAAM,GAAGH,MAAM,EAAE;MACxB,OAAO,CAAC;IACZ;IACA,OAAO,CAAC;EACZ,CAAC,CAAC;;EAEF;EACA,IAAMlB,IAAI,GAAGU,KAAK,CAACY,IAAI,CAAC,UAAAtB,IAAI;IAAA,OAAI,IAAAuB,kBAAS,EAAC5B,IAAI,CAACK,IAAI,EAAEA,IAAI,CAAC;EAAA,EAAC;EAE3D,IAAAwB,kBAAS,EAACxB,IAAI,uCAA+BL,IAAI,CAACK,IAAI,SAAK;;EAE3D;EACA,OAAOM,OAAO,CAACN,IAAI,CAAC;AACxB"}
package/index.d.ts CHANGED
@@ -1,2 +1,4 @@
1
- import React from "react";
2
- export declare const FileManager: React.FC;
1
+ export { useFile } from "./components/FileDetails";
2
+ export { useFileManagerApi } from "./modules/FileManagerApiProvider/FileManagerApiContext";
3
+ export { useFileManagerView } from "./modules/FileManagerRenderer/FileManagerViewProvider";
4
+ export * from "./FileManagerFileTypePlugin";