@webiny/app-admin 0.0.0-unstable.d7f521b032 → 0.0.0-unstable.ecd8734205
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/components/AppInstaller/AppInstaller.js +2 -34
- package/components/AppInstaller/AppInstaller.js.map +1 -1
- package/components/AppInstaller/Sidebar.js +2 -12
- package/components/AppInstaller/Sidebar.js.map +1 -1
- package/components/AppInstaller/useInstaller.d.ts +1 -7
- package/components/AppInstaller/useInstaller.js +16 -71
- package/components/AppInstaller/useInstaller.js.map +1 -1
- package/components/FileManager/File.d.ts +2 -2
- package/components/FileManager/File.js.map +1 -1
- package/components/FileManager/FileDetails/Aliases.d.ts +3 -0
- package/components/FileManager/FileDetails/Aliases.js +244 -0
- package/components/FileManager/FileDetails/Aliases.js.map +1 -0
- package/components/FileManager/FileDetails/FileProvider.d.ts +15 -0
- package/components/FileManager/FileDetails/FileProvider.js +30 -0
- package/components/FileManager/FileDetails/FileProvider.js.map +1 -0
- package/components/FileManager/FileDetails/Name.js +50 -57
- package/components/FileManager/FileDetails/Name.js.map +1 -1
- package/components/FileManager/FileDetails/Tags.js +86 -101
- package/components/FileManager/FileDetails/Tags.js.map +1 -1
- package/components/FileManager/FileDetails/useUpdateFile.d.ts +8 -0
- package/components/FileManager/FileDetails/useUpdateFile.js +56 -0
- package/components/FileManager/FileDetails/useUpdateFile.js.map +1 -0
- package/components/FileManager/FileDetails.d.ts +1 -1
- package/components/FileManager/FileDetails.js +11 -13
- package/components/FileManager/FileDetails.js.map +1 -1
- package/components/FileManager/FileManagerView.js.map +1 -1
- package/components/FileManager/graphql.js +3 -3
- package/components/FileManager/graphql.js.map +1 -1
- package/components/FileManager/types.d.ts +1 -0
- package/components/FileManager/types.js.map +1 -1
- package/package.json +16 -16
- package/plugins/FileManagerFileTypePlugin.d.ts +2 -15
- package/plugins/FileManagerFileTypePlugin.js.map +1 -1
- package/types.d.ts +2 -27
- package/types.js.map +1 -1
|
@@ -28,6 +28,7 @@ var _FileManagerContext = require("./../FileManagerContext");
|
|
|
28
28
|
var _graphql = require("./../graphql");
|
|
29
29
|
var _roundEdit24px = require("./../icons/round-edit-24px.svg");
|
|
30
30
|
var _roundLabel24px = require("./../icons/round-label-24px.svg");
|
|
31
|
+
var _useUpdateFile2 = require("./useUpdateFile");
|
|
31
32
|
var _excluded = ["value"];
|
|
32
33
|
var SCOPE_SEPARATOR = ":";
|
|
33
34
|
var formatTagAsLabel = function formatTagAsLabel(tag, scope) {
|
|
@@ -77,19 +78,17 @@ var actionWrapperStyle = /*#__PURE__*/(0, _emotion.css)({
|
|
|
77
78
|
var Tags = function Tags(_ref) {
|
|
78
79
|
var file = _ref.file,
|
|
79
80
|
canEdit = _ref.canEdit;
|
|
80
|
-
var
|
|
81
|
+
var _useUpdateFile = (0, _useUpdateFile2.useUpdateFile)(file),
|
|
82
|
+
updateFile = _useUpdateFile.updateFile,
|
|
83
|
+
updateInProgress = _useUpdateFile.updateInProgress;
|
|
81
84
|
var _useState = (0, _react.useState)(false),
|
|
82
85
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
83
86
|
editing = _useState2[0],
|
|
84
87
|
setEdit = _useState2[1];
|
|
85
|
-
var _useState3 = (0, _react.useState)(
|
|
88
|
+
var _useState3 = (0, _react.useState)(Array.isArray(file.tags) ? (0, _toConsumableArray2.default)(file.tags) : []),
|
|
86
89
|
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
var _useState5 = (0, _react.useState)(Array.isArray(file.tags) ? (0, _toConsumableArray2.default)(file.tags) : []),
|
|
90
|
-
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
|
|
91
|
-
initialTags = _useState6[0],
|
|
92
|
-
setInitialTags = _useState6[1];
|
|
90
|
+
initialTags = _useState4[0],
|
|
91
|
+
setInitialTags = _useState4[1];
|
|
93
92
|
var _useSnackbar = (0, _useSnackbar2.useSnackbar)(),
|
|
94
93
|
showSnackbar = _useSnackbar.showSnackbar;
|
|
95
94
|
var _useFileManager = (0, _FileManagerContext.useFileManager)(),
|
|
@@ -118,10 +117,9 @@ var Tags = function Tags(_ref) {
|
|
|
118
117
|
}, data.tags.filter(function (tag) {
|
|
119
118
|
return tag !== queryParams.scope;
|
|
120
119
|
}).map(function (tag, index) {
|
|
121
|
-
var label = typeof tag === "string" ? tag : tag.name;
|
|
122
120
|
return /*#__PURE__*/_react.default.createElement(_Chips.Chip, {
|
|
123
|
-
key:
|
|
124
|
-
label: formatTagAsLabel(
|
|
121
|
+
key: tag + index,
|
|
122
|
+
label: formatTagAsLabel(tag, queryParams.scope)
|
|
125
123
|
});
|
|
126
124
|
})), isEditingAllowed && /*#__PURE__*/_react.default.createElement(_Button.IconButton, {
|
|
127
125
|
className: iconButtonStyle,
|
|
@@ -137,94 +135,85 @@ var Tags = function Tags(_ref) {
|
|
|
137
135
|
"data-testid": "fm.tags.add"
|
|
138
136
|
}, "Add tags...");
|
|
139
137
|
}, [editing, isEditingAllowed]);
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
tags
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
variables:
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
138
|
+
var onSubmit = /*#__PURE__*/function () {
|
|
139
|
+
var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(_ref3) {
|
|
140
|
+
var tags;
|
|
141
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
|
|
142
|
+
while (1) switch (_context.prev = _context.next) {
|
|
143
|
+
case 0:
|
|
144
|
+
tags = _ref3.tags;
|
|
145
|
+
_context.next = 3;
|
|
146
|
+
return updateFile({
|
|
147
|
+
tags: tags
|
|
148
|
+
}, function (cache) {
|
|
149
|
+
// 1. Update files list cache
|
|
150
|
+
var data = (0, _cloneDeep.default)(cache.readQuery({
|
|
151
|
+
query: _graphql.LIST_FILES,
|
|
152
|
+
variables: queryParams
|
|
153
|
+
}));
|
|
154
|
+
if (data) {
|
|
155
|
+
data.fileManager.listFiles.data.forEach(function (item) {
|
|
156
|
+
if (item.key === file.key) {
|
|
157
|
+
item.tags = tags;
|
|
158
158
|
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
});
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
cache.writeQuery({
|
|
162
|
+
query: _graphql.LIST_FILES,
|
|
163
|
+
variables: queryParams,
|
|
164
|
+
data: data
|
|
165
|
+
});
|
|
166
|
+
// 2. Update "LIST_TAGS" cache
|
|
167
|
+
if (Array.isArray(tags)) {
|
|
168
|
+
// Get list tags data
|
|
169
|
+
var listTagsData = (0, _cloneDeep.default)(cache.readQuery({
|
|
170
|
+
query: _graphql.LIST_TAGS,
|
|
171
|
+
variables: {
|
|
172
|
+
where: (0, _FileManagerContext.getWhere)(queryParams.scope)
|
|
174
173
|
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
variables: {
|
|
186
|
-
where: (0, _FileManagerContext.getWhere)(queryParams.scope)
|
|
187
|
-
}
|
|
188
|
-
}));
|
|
189
|
-
if (!listTagsData) {
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
// Add new tag in list
|
|
193
|
-
var updatedTagsList = (0, _toConsumableArray2.default)(newFileData.tags);
|
|
194
|
-
if (Array.isArray(listTagsData.fileManager.listTags)) {
|
|
195
|
-
listTagsData.fileManager.listTags.forEach(function (tag) {
|
|
196
|
-
if (!updatedTagsList.includes(tag)) {
|
|
197
|
-
updatedTagsList.push(tag);
|
|
198
|
-
}
|
|
199
|
-
});
|
|
174
|
+
}));
|
|
175
|
+
if (!listTagsData) {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
// Add new tag in list
|
|
179
|
+
var updatedTagsList = (0, _toConsumableArray2.default)(tags);
|
|
180
|
+
if (Array.isArray(listTagsData.fileManager.listTags)) {
|
|
181
|
+
listTagsData.fileManager.listTags.forEach(function (tag) {
|
|
182
|
+
if (!updatedTagsList.includes(tag)) {
|
|
183
|
+
updatedTagsList.push(tag);
|
|
200
184
|
}
|
|
201
|
-
|
|
202
|
-
// Write it to cache
|
|
203
|
-
cache.writeQuery({
|
|
204
|
-
query: _graphql.LIST_TAGS,
|
|
205
|
-
variables: {
|
|
206
|
-
where: (0, _FileManagerContext.getWhere)(queryParams.scope)
|
|
207
|
-
},
|
|
208
|
-
data: listTagsData
|
|
209
|
-
});
|
|
210
|
-
}
|
|
185
|
+
});
|
|
211
186
|
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
187
|
+
(0, _set.default)(listTagsData, "fileManager.listTags", updatedTagsList);
|
|
188
|
+
// Write it to cache
|
|
189
|
+
cache.writeQuery({
|
|
190
|
+
query: _graphql.LIST_TAGS,
|
|
191
|
+
variables: {
|
|
192
|
+
where: (0, _FileManagerContext.getWhere)(queryParams.scope)
|
|
193
|
+
},
|
|
194
|
+
data: listTagsData
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
case 3:
|
|
199
|
+
setInitialTags(tags);
|
|
200
|
+
setEdit(false);
|
|
201
|
+
showSnackbar("Tags successfully updated.");
|
|
202
|
+
case 6:
|
|
203
|
+
case "end":
|
|
204
|
+
return _context.stop();
|
|
205
|
+
}
|
|
206
|
+
}, _callee);
|
|
207
|
+
}));
|
|
208
|
+
return function onSubmit(_x) {
|
|
209
|
+
return _ref4.apply(this, arguments);
|
|
210
|
+
};
|
|
211
|
+
}();
|
|
212
|
+
return /*#__PURE__*/_react.default.createElement(_form.Form, {
|
|
213
|
+
data: {
|
|
214
|
+
tags: initialTags
|
|
215
|
+
},
|
|
216
|
+
onSubmit: onSubmit
|
|
228
217
|
}, function (_ref5) {
|
|
229
218
|
var Bind = _ref5.Bind,
|
|
230
219
|
data = _ref5.data,
|
|
@@ -234,8 +223,6 @@ var Tags = function Tags(_ref) {
|
|
|
234
223
|
className: "list-item__icon",
|
|
235
224
|
icon: /*#__PURE__*/_react.default.createElement(_roundLabel24px.ReactComponent, null)
|
|
236
225
|
}), renderHeaderContent({
|
|
237
|
-
// TODO @ts-refactor
|
|
238
|
-
// @ts-ignore
|
|
239
226
|
data: data
|
|
240
227
|
})), editing && /*#__PURE__*/_react.default.createElement("li-content", null, /*#__PURE__*/_react.default.createElement(Bind, {
|
|
241
228
|
name: "tags",
|
|
@@ -263,15 +250,13 @@ var Tags = function Tags(_ref) {
|
|
|
263
250
|
unique: true,
|
|
264
251
|
allowFreeInput: true,
|
|
265
252
|
useSimpleValues: true,
|
|
266
|
-
disabled:
|
|
253
|
+
disabled: updateInProgress
|
|
267
254
|
}));
|
|
268
255
|
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
269
256
|
className: actionWrapperStyle
|
|
270
257
|
}, /*#__PURE__*/_react.default.createElement(_Button.ButtonPrimary, {
|
|
271
258
|
small: true,
|
|
272
|
-
onClick:
|
|
273
|
-
submit(ev);
|
|
274
|
-
},
|
|
259
|
+
onClick: submit,
|
|
275
260
|
"data-testid": "fm.tags.submit"
|
|
276
261
|
}, "Submit"), /*#__PURE__*/_react.default.createElement(_Button.ButtonSecondary, {
|
|
277
262
|
small: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["SCOPE_SEPARATOR","formatTagAsLabel","tag","scope","replace","tagWithoutScopePrefix","tags","filter","map","chipsStyle","css","padding","marginLeft","backgroundColor","iconButtonStyle","width","height","addTagsStyle","color","textTransform","letterSpacing","actionWrapperStyle","marginTop","marginRight","Tags","file","canEdit","client","useApolloClient","useState","editing","setEdit","saving","setSaving","Array","isArray","initialTags","setInitialTags","useSnackbar","showSnackbar","useFileManager","queryParams","handleEdit","useCallback","listTagsQuery","useQuery","LIST_TAGS","variables","where","getWhere","listTags","get","allTags","isEditingAllowed","renderHeaderContent","data","hasTags","length","classNames","index","label","name","mutate","mutation","UPDATE_FILE","id","update","cache","updated","newFileData","cloneDeep","readQuery","query","LIST_FILES","fileManager","listFiles","forEach","item","key","writeQuery","listTagsData","updatedTagsList","includes","push","set","then","Bind","setValue","submit","baseOnChange","formattedTags","tagInLowerCase","toLowerCase","startsWith","value","bindProps","ev"],"sources":["Tags.tsx"],"sourcesContent":["import React, { useCallback, useState } from \"react\";\nimport classNames from \"classnames\";\nimport { css } from \"emotion\";\nimport { useApolloClient, useQuery } from \"@apollo/react-hooks\";\nimport set from \"lodash/set\";\nimport get from \"lodash/get\";\nimport cloneDeep from \"lodash/cloneDeep\";\nimport { Chips, Chip } from \"@webiny/ui/Chips\";\nimport { ButtonSecondary, ButtonPrimary, ButtonDefault, IconButton } from \"@webiny/ui/Button\";\nimport { MultiAutoComplete } from \"@webiny/ui/AutoComplete\";\nimport { Icon } from \"@webiny/ui/Icon\";\nimport { Form } from \"@webiny/form\";\nimport { useSnackbar } from \"~/hooks/useSnackbar\";\nimport { getWhere, useFileManager } from \"./../FileManagerContext\";\nimport {\n UPDATE_FILE,\n LIST_FILES,\n LIST_TAGS,\n ListFilesQueryResponse,\n ListFileTagsQueryResponse\n} from \"./../graphql\";\nimport { ReactComponent as EditIcon } from \"./../icons/round-edit-24px.svg\";\nimport { ReactComponent as LabelIcon } from \"./../icons/round-label-24px.svg\";\nimport { FileItem } from \"../types\";\n\nconst SCOPE_SEPARATOR = \":\";\n\nexport const formatTagAsLabel = (tag: string, scope: string | undefined) => {\n if (!scope) {\n return tag;\n }\n return tag.replace(`${scope}${SCOPE_SEPARATOR}`, \"\");\n};\n\nexport const tagWithoutScopePrefix = (tags: string[], scope: string) => {\n return tags.filter(tag => tag !== scope).map(tag => formatTagAsLabel(tag, scope));\n};\n\nconst chipsStyle = css({\n \"&.mdc-chip-set\": {\n padding: 0,\n marginLeft: -4,\n \"& .mdc-chip\": {\n backgroundColor: \"var(--mdc-theme-background)\"\n }\n }\n});\nconst iconButtonStyle = css({\n \"&.mdc-icon-button svg\": {\n width: 20,\n height: 20\n }\n});\nconst addTagsStyle = css({\n \"&.mdc-button:not(:disabled)\": {\n color: \"var(--mdc-theme-text-secondary-on-background)\",\n textTransform: \"capitalize\",\n letterSpacing: \"initial\",\n marginLeft: -8\n }\n});\nconst actionWrapperStyle = css({\n marginTop: 16,\n \"& button:first-child\": {\n marginRight: 16\n }\n});\n\ninterface TagsProps {\n file: FileItem;\n canEdit: (file: FileItem) => boolean;\n}\n\nconst Tags: React.FC<TagsProps> = ({ file, canEdit }) => {\n const client = useApolloClient();\n\n const [editing, setEdit] = useState(false);\n const [saving, setSaving] = useState(false);\n const [initialTags, setInitialTags] = useState(Array.isArray(file.tags) ? [...file.tags] : []);\n const { showSnackbar } = useSnackbar();\n const { queryParams } = useFileManager();\n const handleEdit = useCallback(() => setEdit(true), []);\n const listTagsQuery = useQuery(LIST_TAGS, {\n variables: { where: getWhere(queryParams.scope) }\n });\n const listTags = get(listTagsQuery, \"data.fileManager.listTags\", []);\n const allTags = tagWithoutScopePrefix(listTags, queryParams.scope);\n\n const isEditingAllowed = canEdit(file);\n\n const renderHeaderContent = useCallback(\n ({ data }: { data: { tags: { name: string }[] } }) => {\n if (editing) {\n return null;\n }\n const hasTags = data.tags.length > 0;\n\n if (hasTags) {\n // Render existing tags and \"edit tags\" action.\n return (\n <>\n <Chips className={classNames(\"list-item__content\", chipsStyle)}>\n {data.tags\n .filter(tag => tag !== queryParams.scope)\n .map((tag, index) => {\n const label = typeof tag === \"string\" ? tag : tag.name;\n return (\n <Chip\n key={label + index}\n label={formatTagAsLabel(label, queryParams.scope)}\n />\n );\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 return (\n <Form\n data={{\n tags: initialTags\n }}\n onSubmit={async ({ tags }) => {\n setSaving(true);\n client\n .mutate({\n mutation: UPDATE_FILE,\n variables: {\n id: file.id,\n data: { tags }\n },\n update: (cache, updated) => {\n const newFileData: FileItem = get(\n updated,\n \"data.fileManager.updateFile.data\"\n );\n\n // 1. Update files list cache\n const data = cloneDeep(\n cache.readQuery<ListFilesQueryResponse>({\n query: LIST_FILES,\n variables: queryParams\n })\n );\n\n if (data) {\n data.fileManager.listFiles.data.forEach(item => {\n if (item.key === newFileData.key) {\n item.tags = newFileData.tags;\n }\n });\n }\n\n cache.writeQuery({\n query: LIST_FILES,\n variables: queryParams,\n data\n });\n // 2. Update \"LIST_TAGS\" cache\n if (Array.isArray(newFileData.tags)) {\n // Get list tags data\n const listTagsData = cloneDeep(\n cache.readQuery<ListFileTagsQueryResponse>({\n query: LIST_TAGS,\n variables: { where: getWhere(queryParams.scope) }\n })\n );\n if (!listTagsData) {\n return;\n }\n // Add new tag in list\n const updatedTagsList = [...newFileData.tags];\n\n if (Array.isArray(listTagsData.fileManager.listTags)) {\n listTagsData.fileManager.listTags.forEach(tag => {\n if (!updatedTagsList.includes(tag)) {\n updatedTagsList.push(tag);\n }\n });\n }\n\n set(listTagsData, \"fileManager.listTags\", updatedTagsList);\n // Write it to cache\n cache.writeQuery({\n query: LIST_TAGS,\n variables: { where: getWhere(queryParams.scope) },\n data: listTagsData\n });\n }\n }\n })\n .then(() => {\n setInitialTags(tags);\n setSaving(false);\n setEdit(false);\n showSnackbar(\"Tags successfully updated.\");\n });\n }}\n >\n {({ Bind, data, setValue, submit }) => (\n <React.Fragment>\n <li-title>\n <Icon className={\"list-item__icon\"} icon={<LabelIcon />} />\n {renderHeaderContent({\n // TODO @ts-refactor\n // @ts-ignore\n data\n })}\n </li-title>\n {editing && (\n <li-content>\n <Bind\n name={\"tags\"}\n beforeChange={(\n tags: string[],\n baseOnChange: (tags: string[]) => void\n ) => {\n const formattedTags = tags.map(tag => {\n const tagInLowerCase = tag.toLowerCase();\n /**\n * If \"scope\" exists, prefix tag with \"scope\" if not already.\n */\n if (\n queryParams.scope &&\n !tagInLowerCase.startsWith(queryParams.scope)\n ) {\n return `${queryParams.scope}${SCOPE_SEPARATOR}${tagInLowerCase}`;\n }\n return tagInLowerCase;\n });\n baseOnChange(formattedTags);\n }}\n >\n {({ value, ...bindProps }) => (\n <MultiAutoComplete\n {...bindProps}\n value={tagWithoutScopePrefix(value, queryParams.scope)}\n options={allTags}\n placeholder={\"homepage asset\"}\n description={\"Type in a new tag or select an existing one.\"}\n unique={true}\n allowFreeInput={true}\n useSimpleValues={true}\n disabled={saving}\n />\n )}\n </Bind>\n <div className={actionWrapperStyle}>\n <ButtonPrimary\n small\n onClick={ev => {\n submit(ev);\n }}\n data-testid={\"fm.tags.submit\"}\n >\n Submit\n </ButtonPrimary>\n <ButtonSecondary\n small\n onClick={() => {\n setValue(\"tags\", initialTags);\n setEdit(false);\n }}\n >\n Cancel\n </ButtonSecondary>\n </div>\n </li-content>\n )}\n </React.Fragment>\n )}\n </Form>\n );\n};\n\nexport default Tags;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["SCOPE_SEPARATOR","formatTagAsLabel","tag","scope","replace","tagWithoutScopePrefix","tags","filter","map","chipsStyle","css","padding","marginLeft","backgroundColor","iconButtonStyle","width","height","addTagsStyle","color","textTransform","letterSpacing","actionWrapperStyle","marginTop","marginRight","Tags","file","canEdit","useUpdateFile","updateFile","updateInProgress","useState","editing","setEdit","Array","isArray","initialTags","setInitialTags","useSnackbar","showSnackbar","useFileManager","queryParams","handleEdit","useCallback","listTagsQuery","useQuery","LIST_TAGS","variables","where","getWhere","listTags","get","allTags","isEditingAllowed","renderHeaderContent","data","hasTags","length","classNames","index","onSubmit","cache","cloneDeep","readQuery","query","LIST_FILES","fileManager","listFiles","forEach","item","key","writeQuery","listTagsData","updatedTagsList","includes","push","set","Bind","setValue","submit","baseOnChange","formattedTags","tagInLowerCase","toLowerCase","startsWith","value","bindProps"],"sources":["Tags.tsx"],"sourcesContent":["import React, { useCallback, useState } from \"react\";\nimport classNames from \"classnames\";\nimport { css } from \"emotion\";\nimport { useQuery } from \"@apollo/react-hooks\";\nimport set from \"lodash/set\";\nimport get from \"lodash/get\";\nimport cloneDeep from \"lodash/cloneDeep\";\nimport { Chips, Chip } from \"@webiny/ui/Chips\";\nimport { ButtonSecondary, ButtonPrimary, ButtonDefault, IconButton } from \"@webiny/ui/Button\";\nimport { MultiAutoComplete } from \"@webiny/ui/AutoComplete\";\nimport { Icon } from \"@webiny/ui/Icon\";\nimport { Form, FormOnSubmit } from \"@webiny/form\";\nimport { useSnackbar } from \"~/hooks/useSnackbar\";\nimport { getWhere, useFileManager } from \"./../FileManagerContext\";\nimport {\n LIST_FILES,\n LIST_TAGS,\n ListFilesQueryResponse,\n ListFileTagsQueryResponse\n} from \"./../graphql\";\nimport { ReactComponent as EditIcon } from \"./../icons/round-edit-24px.svg\";\nimport { ReactComponent as LabelIcon } from \"./../icons/round-label-24px.svg\";\nimport { FileItem } from \"../types\";\nimport { useUpdateFile } from \"./useUpdateFile\";\n\nconst SCOPE_SEPARATOR = \":\";\n\nexport const formatTagAsLabel = (tag: string, scope: string | undefined) => {\n if (!scope) {\n return tag;\n }\n return tag.replace(`${scope}${SCOPE_SEPARATOR}`, \"\");\n};\n\nexport const tagWithoutScopePrefix = (tags: string[], scope: string) => {\n return tags.filter(tag => tag !== scope).map(tag => formatTagAsLabel(tag, scope));\n};\n\nconst chipsStyle = css({\n \"&.mdc-chip-set\": {\n padding: 0,\n marginLeft: -4,\n \"& .mdc-chip\": {\n backgroundColor: \"var(--mdc-theme-background)\"\n }\n }\n});\nconst iconButtonStyle = css({\n \"&.mdc-icon-button svg\": {\n width: 20,\n height: 20\n }\n});\nconst addTagsStyle = css({\n \"&.mdc-button:not(:disabled)\": {\n color: \"var(--mdc-theme-text-secondary-on-background)\",\n textTransform: \"capitalize\",\n letterSpacing: \"initial\",\n marginLeft: -8\n }\n});\nconst actionWrapperStyle = css({\n marginTop: 16,\n \"& button:first-child\": {\n marginRight: 16\n }\n});\n\ninterface TagsProps {\n file: FileItem;\n canEdit: (file: FileItem) => boolean;\n}\n\ninterface TagsFormData {\n tags: string[];\n}\n\nconst Tags: React.FC<TagsProps> = ({ file, canEdit }) => {\n const { updateFile, updateInProgress } = useUpdateFile(file);\n const [editing, setEdit] = useState(false);\n const [initialTags, setInitialTags] = useState(Array.isArray(file.tags) ? [...file.tags] : []);\n const { showSnackbar } = useSnackbar();\n const { queryParams } = useFileManager();\n const handleEdit = useCallback(() => setEdit(true), []);\n const listTagsQuery = useQuery(LIST_TAGS, {\n variables: { where: getWhere(queryParams.scope) }\n });\n const listTags = get(listTagsQuery, \"data.fileManager.listTags\", []);\n const allTags = tagWithoutScopePrefix(listTags, queryParams.scope);\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 {data.tags\n .filter(tag => tag !== queryParams.scope)\n .map((tag, index) => {\n return (\n <Chip\n key={tag + index}\n label={formatTagAsLabel(tag, queryParams.scope)}\n />\n );\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 await updateFile({ tags }, cache => {\n // 1. Update files list cache\n const data = cloneDeep(\n cache.readQuery<ListFilesQueryResponse>({\n query: LIST_FILES,\n variables: queryParams\n })\n );\n\n if (data) {\n data.fileManager.listFiles.data.forEach(item => {\n if (item.key === file.key) {\n item.tags = tags;\n }\n });\n }\n\n cache.writeQuery({\n query: LIST_FILES,\n variables: queryParams,\n data\n });\n // 2. Update \"LIST_TAGS\" cache\n if (Array.isArray(tags)) {\n // Get list tags data\n const listTagsData = cloneDeep(\n cache.readQuery<ListFileTagsQueryResponse>({\n query: LIST_TAGS,\n variables: { where: getWhere(queryParams.scope) }\n })\n );\n if (!listTagsData) {\n return;\n }\n // Add new tag in list\n const updatedTagsList = [...tags];\n\n if (Array.isArray(listTagsData.fileManager.listTags)) {\n listTagsData.fileManager.listTags.forEach(tag => {\n if (!updatedTagsList.includes(tag)) {\n updatedTagsList.push(tag);\n }\n });\n }\n\n set(listTagsData, \"fileManager.listTags\", updatedTagsList);\n // Write it to cache\n cache.writeQuery({\n query: LIST_TAGS,\n variables: { where: getWhere(queryParams.scope) },\n data: listTagsData\n });\n }\n });\n\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\n name={\"tags\"}\n beforeChange={(\n tags: TagsFormData[\"tags\"],\n baseOnChange: (tags: TagsFormData[\"tags\"]) => void\n ) => {\n const formattedTags = tags.map(tag => {\n const tagInLowerCase = tag.toLowerCase();\n /**\n * If \"scope\" exists, prefix tag with \"scope\" if not already.\n */\n if (\n queryParams.scope &&\n !tagInLowerCase.startsWith(queryParams.scope)\n ) {\n return `${queryParams.scope}${SCOPE_SEPARATOR}${tagInLowerCase}`;\n }\n return tagInLowerCase;\n });\n baseOnChange(formattedTags);\n }}\n >\n {({ value, ...bindProps }) => (\n <MultiAutoComplete\n {...bindProps}\n value={tagWithoutScopePrefix(value, queryParams.scope)}\n options={allTags}\n placeholder={\"homepage asset\"}\n description={\"Type in a new tag or select an existing one.\"}\n unique={true}\n allowFreeInput={true}\n useSimpleValues={true}\n disabled={updateInProgress}\n />\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,8 @@
|
|
|
1
|
+
import { useApolloClient } from "@apollo/react-hooks";
|
|
2
|
+
import { FileItem } from "../types";
|
|
3
|
+
declare type UpdateApolloCache = Parameters<ReturnType<typeof useApolloClient>["mutate"]>[0]["update"];
|
|
4
|
+
export declare const useUpdateFile: (file: FileItem) => {
|
|
5
|
+
updateFile: (data: Partial<FileItem>, updateCache?: UpdateApolloCache) => Promise<void>;
|
|
6
|
+
updateInProgress: boolean;
|
|
7
|
+
};
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.useUpdateFile = void 0;
|
|
8
|
+
var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
|
|
9
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
|
+
var _react = require("react");
|
|
12
|
+
var _reactHooks = require("@apollo/react-hooks");
|
|
13
|
+
var _graphql = require("../graphql");
|
|
14
|
+
var useUpdateFile = function useUpdateFile(file) {
|
|
15
|
+
var client = (0, _reactHooks.useApolloClient)();
|
|
16
|
+
var _useState = (0, _react.useState)(false),
|
|
17
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
18
|
+
saving = _useState2[0],
|
|
19
|
+
setSaving = _useState2[1];
|
|
20
|
+
var updateFile = /*#__PURE__*/function () {
|
|
21
|
+
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(data, updateCache) {
|
|
22
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
|
|
23
|
+
while (1) switch (_context.prev = _context.next) {
|
|
24
|
+
case 0:
|
|
25
|
+
setSaving(true);
|
|
26
|
+
_context.next = 3;
|
|
27
|
+
return client.mutate({
|
|
28
|
+
mutation: _graphql.UPDATE_FILE,
|
|
29
|
+
variables: {
|
|
30
|
+
id: file.id,
|
|
31
|
+
data: data
|
|
32
|
+
},
|
|
33
|
+
update: function update(cache, result) {
|
|
34
|
+
if (updateCache) {
|
|
35
|
+
updateCache(cache, result);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
case 3:
|
|
40
|
+
setSaving(false);
|
|
41
|
+
case 4:
|
|
42
|
+
case "end":
|
|
43
|
+
return _context.stop();
|
|
44
|
+
}
|
|
45
|
+
}, _callee);
|
|
46
|
+
}));
|
|
47
|
+
return function updateFile(_x, _x2) {
|
|
48
|
+
return _ref.apply(this, arguments);
|
|
49
|
+
};
|
|
50
|
+
}();
|
|
51
|
+
return {
|
|
52
|
+
updateFile: updateFile,
|
|
53
|
+
updateInProgress: saving
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
exports.useUpdateFile = useUpdateFile;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useUpdateFile","file","client","useApolloClient","useState","saving","setSaving","updateFile","data","updateCache","mutate","mutation","UPDATE_FILE","variables","id","update","cache","result","updateInProgress"],"sources":["useUpdateFile.ts"],"sourcesContent":["import { useState } from \"react\";\nimport { useApolloClient } from \"@apollo/react-hooks\";\nimport { FileItem } from \"../types\";\nimport { UPDATE_FILE } from \"~/components/FileManager/graphql\";\n\ntype UpdateApolloCache = Parameters<ReturnType<typeof useApolloClient>[\"mutate\"]>[0][\"update\"];\n\nexport const useUpdateFile = (file: FileItem) => {\n const client = useApolloClient();\n const [saving, setSaving] = useState(false);\n\n const updateFile = async (data: Partial<FileItem>, updateCache?: UpdateApolloCache) => {\n setSaving(true);\n await client.mutate({\n mutation: UPDATE_FILE,\n variables: {\n id: file.id,\n data\n },\n update(cache, result) {\n if (updateCache) {\n updateCache(cache, result);\n }\n }\n });\n setSaving(false);\n };\n\n return { updateFile, updateInProgress: saving };\n};\n"],"mappings":";;;;;;;;;;AAAA;AACA;AAEA;AAIO,IAAMA,aAAa,GAAG,SAAhBA,aAAa,CAAIC,IAAc,EAAK;EAC7C,IAAMC,MAAM,GAAG,IAAAC,2BAAe,GAAE;EAChC,gBAA4B,IAAAC,eAAQ,EAAC,KAAK,CAAC;IAAA;IAApCC,MAAM;IAAEC,SAAS;EAExB,IAAMC,UAAU;IAAA,kGAAG,iBAAOC,IAAuB,EAAEC,WAA+B;MAAA;QAAA;UAAA;YAC9EH,SAAS,CAAC,IAAI,CAAC;YAAC;YAAA,OACVJ,MAAM,CAACQ,MAAM,CAAC;cAChBC,QAAQ,EAAEC,oBAAW;cACrBC,SAAS,EAAE;gBACPC,EAAE,EAAEb,IAAI,CAACa,EAAE;gBACXN,IAAI,EAAJA;cACJ,CAAC;cACDO,MAAM,kBAACC,KAAK,EAAEC,MAAM,EAAE;gBAClB,IAAIR,WAAW,EAAE;kBACbA,WAAW,CAACO,KAAK,EAAEC,MAAM,CAAC;gBAC9B;cACJ;YACJ,CAAC,CAAC;UAAA;YACFX,SAAS,CAAC,KAAK,CAAC;UAAC;UAAA;YAAA;QAAA;MAAA;IAAA,CACpB;IAAA,gBAfKC,UAAU;MAAA;IAAA;EAAA,GAef;EAED,OAAO;IAAEA,UAAU,EAAVA,UAAU;IAAEW,gBAAgB,EAAEb;EAAO,CAAC;AACnD,CAAC;AAAC"}
|
|
@@ -23,6 +23,7 @@ var _set = _interopRequireDefault(require("lodash/set"));
|
|
|
23
23
|
var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
|
|
24
24
|
var _Tags = _interopRequireDefault(require("./FileDetails/Tags"));
|
|
25
25
|
var _Name = _interopRequireDefault(require("./FileDetails/Name"));
|
|
26
|
+
var _Aliases = require("./FileDetails/Aliases");
|
|
26
27
|
var _Tooltip = require("@webiny/ui/Tooltip");
|
|
27
28
|
var _Icon = require("@webiny/ui/Icon");
|
|
28
29
|
var _Typography = require("@webiny/ui/Typography");
|
|
@@ -41,6 +42,7 @@ var _ConfirmationDialog = require("@webiny/ui/ConfirmationDialog");
|
|
|
41
42
|
var _graphql = require("./graphql");
|
|
42
43
|
var _i18n = require("@webiny/app/i18n");
|
|
43
44
|
var _mime = _interopRequireDefault(require("mime"));
|
|
45
|
+
var _FileProvider = require("./FileDetails/FileProvider");
|
|
44
46
|
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9;
|
|
45
47
|
var t = _i18n.i18n.ns("app-admin/file-manager/file-details");
|
|
46
48
|
var fileDetailsSidebar = /*#__PURE__*/(0, _emotion.css)({
|
|
@@ -143,9 +145,7 @@ var isImage = function isImage(file) {
|
|
|
143
145
|
return false;
|
|
144
146
|
};
|
|
145
147
|
var FileDetails = function FileDetails(props) {
|
|
146
|
-
var file = props.file
|
|
147
|
-
uploadFile = props.uploadFile,
|
|
148
|
-
validateFiles = props.validateFiles;
|
|
148
|
+
var file = props.file;
|
|
149
149
|
var filePlugin = (0, _getFileTypePlugin.default)(file);
|
|
150
150
|
var actions = (0, _get.default)(filePlugin, "fileDetails.actions") || (0, _get.default)(filePlugin, "actions") || [];
|
|
151
151
|
var _useFileManager = (0, _FileManagerContext.useFileManager)(),
|
|
@@ -330,7 +330,10 @@ var FileDetails = function FileDetails(props) {
|
|
|
330
330
|
open: Boolean(file),
|
|
331
331
|
onClose: hideFileDetails,
|
|
332
332
|
"data-testid": "fm.file-details.drawer"
|
|
333
|
-
}, file && /*#__PURE__*/_react.default.createElement(
|
|
333
|
+
}, file && /*#__PURE__*/_react.default.createElement(_FileProvider.FileProvider, {
|
|
334
|
+
file: file,
|
|
335
|
+
canEdit: props.canEdit
|
|
336
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
334
337
|
className: style.wrapper,
|
|
335
338
|
dir: "ltr"
|
|
336
339
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
@@ -342,14 +345,7 @@ var FileDetails = function FileDetails(props) {
|
|
|
342
345
|
dark: darkImageBackground
|
|
343
346
|
})
|
|
344
347
|
}, filePlugin && filePlugin.render({
|
|
345
|
-
|
|
346
|
-
* TODO: @ts-refactor
|
|
347
|
-
* Figure out which type is the file
|
|
348
|
-
*/
|
|
349
|
-
// @ts-ignore
|
|
350
|
-
file: file,
|
|
351
|
-
uploadFile: uploadFile,
|
|
352
|
-
validateFiles: validateFiles
|
|
348
|
+
file: file
|
|
353
349
|
})), /*#__PURE__*/_react.default.createElement("div", {
|
|
354
350
|
className: style.download
|
|
355
351
|
}, /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
|
|
@@ -401,7 +397,9 @@ var FileDetails = function FileDetails(props) {
|
|
|
401
397
|
use: "subtitle1"
|
|
402
398
|
}, (0, _dayjs.default)(file.createdOn).format("DD MMM YYYY [at] HH:mm"))))), /*#__PURE__*/_react.default.createElement("li", null, /*#__PURE__*/_react.default.createElement(_Tags.default, Object.assign({
|
|
403
399
|
key: props.file.id
|
|
404
|
-
}, props)))
|
|
400
|
+
}, props))), /*#__PURE__*/_react.default.createElement("li", null, /*#__PURE__*/_react.default.createElement(_Aliases.Aliases, Object.assign({
|
|
401
|
+
key: props.file.id
|
|
402
|
+
}, props))))))));
|
|
405
403
|
};
|
|
406
404
|
var _default = FileDetails;
|
|
407
405
|
exports.default = _default;
|