@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.
- package/FileManagerFileTypePlugin.d.ts +20 -0
- package/FileManagerFileTypePlugin.js +48 -0
- package/FileManagerFileTypePlugin.js.map +1 -0
- package/app.d.ts +2 -0
- package/app.js +16 -0
- package/app.js.map +1 -0
- package/components/FileDetails/Aliases.d.ts +3 -0
- package/components/FileDetails/Aliases.js +228 -0
- package/components/FileDetails/Aliases.js.map +1 -0
- package/components/FileDetails/DeleteImageAction.d.ts +2 -0
- package/components/FileDetails/DeleteImageAction.js +82 -0
- package/components/FileDetails/DeleteImageAction.js.map +1 -0
- package/components/FileDetails/FileProvider.d.ts +13 -0
- package/components/FileDetails/FileProvider.js +29 -0
- package/components/FileDetails/FileProvider.js.map +1 -0
- package/components/FileDetails/Name.d.ts +3 -0
- package/components/FileDetails/Name.js +81 -0
- package/components/FileDetails/Name.js.map +1 -0
- package/components/FileDetails/Tags.d.ts +3 -0
- package/components/FileDetails/Tags.js +176 -0
- package/components/FileDetails/Tags.js.map +1 -0
- package/components/FileDetails.d.ts +20 -0
- package/components/FileDetails.js +243 -0
- package/components/FileDetails.js.map +1 -0
- package/getFileTypePlugin.d.ts +4 -0
- package/getFileTypePlugin.js +51 -0
- package/getFileTypePlugin.js.map +1 -0
- package/index.d.ts +4 -2
- package/index.js +37 -31
- package/index.js.map +1 -1
- package/modules/FileManagerApiProvider/FileManagerApiContext/FileManagerApiContext.d.ts +37 -0
- package/modules/FileManagerApiProvider/FileManagerApiContext/FileManagerApiContext.js +293 -0
- package/modules/FileManagerApiProvider/FileManagerApiContext/FileManagerApiContext.js.map +1 -0
- package/modules/FileManagerApiProvider/FileManagerApiContext/getFileUploader.d.ts +2 -0
- package/modules/FileManagerApiProvider/FileManagerApiContext/getFileUploader.js +15 -0
- package/modules/FileManagerApiProvider/FileManagerApiContext/getFileUploader.js.map +1 -0
- package/modules/FileManagerApiProvider/FileManagerApiContext/index.d.ts +2 -0
- package/modules/FileManagerApiProvider/FileManagerApiContext/index.js +19 -0
- package/modules/FileManagerApiProvider/FileManagerApiContext/index.js.map +1 -0
- package/modules/FileManagerApiProvider/FileManagerApiContext/useFileManagerApi.d.ts +3 -0
- package/modules/FileManagerApiProvider/FileManagerApiContext/useFileManagerApi.js +16 -0
- package/modules/FileManagerApiProvider/FileManagerApiContext/useFileManagerApi.js.map +1 -0
- package/modules/FileManagerApiProvider/graphql.d.ts +103 -0
- package/modules/FileManagerApiProvider/graphql.js +24 -0
- package/modules/FileManagerApiProvider/graphql.js.map +1 -0
- package/modules/FileManagerApiProvider/index.d.ts +2 -0
- package/modules/FileManagerApiProvider/index.js +22 -0
- package/modules/FileManagerApiProvider/index.js.map +1 -0
- package/modules/FileManagerRenderer/DefaultRenderer/BottomInfoBar/SupportedFileTypes.d.ts +6 -0
- package/modules/FileManagerRenderer/DefaultRenderer/BottomInfoBar/SupportedFileTypes.js +41 -0
- package/modules/FileManagerRenderer/DefaultRenderer/BottomInfoBar/SupportedFileTypes.js.map +1 -0
- package/modules/FileManagerRenderer/DefaultRenderer/BottomInfoBar/UploadStatus.d.ts +6 -0
- package/modules/FileManagerRenderer/DefaultRenderer/BottomInfoBar/UploadStatus.js +51 -0
- package/modules/FileManagerRenderer/DefaultRenderer/BottomInfoBar/UploadStatus.js.map +1 -0
- package/modules/FileManagerRenderer/DefaultRenderer/BottomInfoBar.d.ts +5 -0
- package/modules/FileManagerRenderer/DefaultRenderer/BottomInfoBar.js +48 -0
- package/modules/FileManagerRenderer/DefaultRenderer/BottomInfoBar.js.map +1 -0
- package/modules/FileManagerRenderer/DefaultRenderer/DropFilesHere.d.ts +11 -0
- package/modules/FileManagerRenderer/DefaultRenderer/DropFilesHere.js +68 -0
- package/modules/FileManagerRenderer/DefaultRenderer/DropFilesHere.js.map +1 -0
- package/modules/FileManagerRenderer/DefaultRenderer/EmptyView.d.ts +7 -0
- package/modules/FileManagerRenderer/DefaultRenderer/EmptyView.js +32 -0
- package/modules/FileManagerRenderer/DefaultRenderer/EmptyView.js.map +1 -0
- package/modules/FileManagerRenderer/DefaultRenderer/File.d.ts +16 -0
- package/modules/FileManagerRenderer/DefaultRenderer/File.js +131 -0
- package/modules/FileManagerRenderer/DefaultRenderer/File.js.map +1 -0
- package/modules/FileManagerRenderer/DefaultRenderer/FileManagerView.d.ts +18 -0
- package/modules/FileManagerRenderer/DefaultRenderer/FileManagerView.js +443 -0
- package/modules/FileManagerRenderer/DefaultRenderer/FileManagerView.js.map +1 -0
- package/modules/FileManagerRenderer/DefaultRenderer/LeftSidebar.d.ts +6 -0
- package/modules/FileManagerRenderer/DefaultRenderer/LeftSidebar.js +96 -0
- package/modules/FileManagerRenderer/DefaultRenderer/LeftSidebar.js.map +1 -0
- package/modules/FileManagerRenderer/DefaultRenderer/NoPermissionView.d.ts +3 -0
- package/modules/FileManagerRenderer/DefaultRenderer/NoPermissionView.js +74 -0
- package/modules/FileManagerRenderer/DefaultRenderer/NoPermissionView.js.map +1 -0
- package/modules/FileManagerRenderer/DefaultRenderer/NoResults.d.ts +3 -0
- package/modules/FileManagerRenderer/DefaultRenderer/NoResults.js +22 -0
- package/modules/FileManagerRenderer/DefaultRenderer/NoResults.js.map +1 -0
- package/modules/FileManagerRenderer/DefaultRenderer/index.d.ts +2 -0
- package/modules/FileManagerRenderer/DefaultRenderer/index.js +70 -0
- package/modules/FileManagerRenderer/DefaultRenderer/index.js.map +1 -0
- package/modules/FileManagerRenderer/DefaultRenderer/outputFileSelectionError.d.ts +2 -0
- package/modules/FileManagerRenderer/DefaultRenderer/outputFileSelectionError.js +40 -0
- package/modules/FileManagerRenderer/DefaultRenderer/outputFileSelectionError.js.map +1 -0
- package/modules/FileManagerRenderer/FileManagerViewProvider/FileManagerViewContext.d.ts +47 -0
- package/modules/FileManagerRenderer/FileManagerViewProvider/FileManagerViewContext.js +448 -0
- package/modules/FileManagerRenderer/FileManagerViewProvider/FileManagerViewContext.js.map +1 -0
- package/modules/FileManagerRenderer/FileManagerViewProvider/index.d.ts +2 -0
- package/modules/FileManagerRenderer/FileManagerViewProvider/index.js +27 -0
- package/modules/FileManagerRenderer/FileManagerViewProvider/index.js.map +1 -0
- package/modules/FileManagerRenderer/FileManagerViewProvider/stateReducer.d.ts +63 -0
- package/modules/FileManagerRenderer/FileManagerViewProvider/stateReducer.js +100 -0
- package/modules/FileManagerRenderer/FileManagerViewProvider/stateReducer.js.map +1 -0
- package/modules/FileManagerRenderer/FileManagerViewProvider/useFileManagerView.d.ts +3 -0
- package/modules/FileManagerRenderer/FileManagerViewProvider/useFileManagerView.js +15 -0
- package/modules/FileManagerRenderer/FileManagerViewProvider/useFileManagerView.js.map +1 -0
- package/modules/FileManagerRenderer/index.d.ts +2 -0
- package/modules/FileManagerRenderer/index.js +13 -0
- package/modules/FileManagerRenderer/index.js.map +1 -0
- package/modules/FileTypes/fileDefault.d.ts +2 -0
- package/modules/FileTypes/fileDefault.js +28 -0
- package/modules/FileTypes/fileDefault.js.map +1 -0
- package/modules/FileTypes/fileImage/EditAction.d.ts +7 -0
- package/modules/FileTypes/fileImage/EditAction.js +123 -0
- package/modules/FileTypes/fileImage/EditAction.js.map +1 -0
- package/modules/FileTypes/fileImage/index.d.ts +2 -0
- package/modules/FileTypes/fileImage/index.js +37 -0
- package/modules/FileTypes/fileImage/index.js.map +1 -0
- package/modules/FileTypes/icons/edit.svg +17 -0
- package/modules/FileTypes/icons/round-description-24px.svg +1 -0
- package/modules/FileTypes/index.d.ts +1 -0
- package/modules/FileTypes/index.js +32 -0
- package/modules/FileTypes/index.js.map +1 -0
- package/modules/Settings/assets/icons/folder-open.svg +1 -0
- package/modules/Settings/graphql.d.ts +5 -0
- package/modules/Settings/graphql.js +17 -0
- package/modules/Settings/graphql.js.map +1 -0
- package/modules/Settings/index.d.ts +2 -0
- package/modules/Settings/index.js +35 -0
- package/modules/Settings/index.js.map +1 -0
- package/modules/Settings/plugins/installation.d.ts +3 -0
- package/modules/Settings/plugins/installation.js +103 -0
- package/modules/Settings/plugins/installation.js.map +1 -0
- package/modules/Settings/plugins/permissionRenderer/FileManagerPermissions.d.ts +14 -0
- package/modules/Settings/plugins/permissionRenderer/FileManagerPermissions.js +217 -0
- package/modules/Settings/plugins/permissionRenderer/FileManagerPermissions.js.map +1 -0
- package/modules/Settings/plugins/permissionRenderer/index.d.ts +3 -0
- package/modules/Settings/plugins/permissionRenderer/index.js +28 -0
- package/modules/Settings/plugins/permissionRenderer/index.js.map +1 -0
- package/modules/Settings/views/FileManagerSettings.d.ts +2 -0
- package/modules/Settings/views/FileManagerSettings.js +132 -0
- package/modules/Settings/views/FileManagerSettings.js.map +1 -0
- 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
|
-
|
|
2
|
-
export
|
|
1
|
+
export { useFile } from "./components/FileDetails";
|
|
2
|
+
export { useFileManagerApi } from "./modules/FileManagerApiProvider/FileManagerApiContext";
|
|
3
|
+
export { useFileManagerView } from "./modules/FileManagerRenderer/FileManagerViewProvider";
|
|
4
|
+
export * from "./FileManagerFileTypePlugin";
|