@webiny/app-admin 0.0.0-unstable.9e825fd5fb → 0.0.0-unstable.aa00eecd97

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 (98) hide show
  1. package/base/ui/FileManager.d.ts +1 -1
  2. package/base/ui/FileManager.js.map +1 -1
  3. package/package.json +29 -29
  4. package/types.d.ts +2 -0
  5. package/types.js.map +1 -1
  6. package/assets/images/icons.png +0 -0
  7. package/assets/images/icons_retina.png +0 -0
  8. package/assets/images/swich.png +0 -0
  9. package/components/FileManager/BottomInfoBar/SupportedFileTypes.d.ts +0 -6
  10. package/components/FileManager/BottomInfoBar/SupportedFileTypes.js +0 -55
  11. package/components/FileManager/BottomInfoBar/SupportedFileTypes.js.map +0 -1
  12. package/components/FileManager/BottomInfoBar/UploadStatus.d.ts +0 -6
  13. package/components/FileManager/BottomInfoBar/UploadStatus.js +0 -60
  14. package/components/FileManager/BottomInfoBar/UploadStatus.js.map +0 -1
  15. package/components/FileManager/BottomInfoBar.d.ts +0 -5
  16. package/components/FileManager/BottomInfoBar.js +0 -60
  17. package/components/FileManager/BottomInfoBar.js.map +0 -1
  18. package/components/FileManager/DropFilesHere.d.ts +0 -10
  19. package/components/FileManager/DropFilesHere.js +0 -76
  20. package/components/FileManager/DropFilesHere.js.map +0 -1
  21. package/components/FileManager/File.d.ts +0 -17
  22. package/components/FileManager/File.js +0 -155
  23. package/components/FileManager/File.js.map +0 -1
  24. package/components/FileManager/FileDetails/Name.d.ts +0 -8
  25. package/components/FileManager/FileDetails/Name.js +0 -138
  26. package/components/FileManager/FileDetails/Name.js.map +0 -1
  27. package/components/FileManager/FileDetails/Tags.d.ts +0 -10
  28. package/components/FileManager/FileDetails/Tags.js +0 -339
  29. package/components/FileManager/FileDetails/Tags.js.map +0 -1
  30. package/components/FileManager/FileDetails.d.ts +0 -24
  31. package/components/FileManager/FileDetails.js +0 -474
  32. package/components/FileManager/FileDetails.js.map +0 -1
  33. package/components/FileManager/FileManagerContext.d.ts +0 -42
  34. package/components/FileManager/FileManagerContext.js +0 -224
  35. package/components/FileManager/FileManagerContext.js.map +0 -1
  36. package/components/FileManager/FileManagerView.d.ts +0 -18
  37. package/components/FileManager/FileManagerView.js +0 -721
  38. package/components/FileManager/FileManagerView.js.map +0 -1
  39. package/components/FileManager/LeftSidebar.d.ts +0 -10
  40. package/components/FileManager/LeftSidebar.js +0 -127
  41. package/components/FileManager/LeftSidebar.js.map +0 -1
  42. package/components/FileManager/NoPermissionView.d.ts +0 -3
  43. package/components/FileManager/NoPermissionView.js +0 -87
  44. package/components/FileManager/NoPermissionView.js.map +0 -1
  45. package/components/FileManager/NoResults.d.ts +0 -3
  46. package/components/FileManager/NoResults.js +0 -28
  47. package/components/FileManager/NoResults.js.map +0 -1
  48. package/components/FileManager/getFileTypePlugin.d.ts +0 -4
  49. package/components/FileManager/getFileTypePlugin.js +0 -57
  50. package/components/FileManager/getFileTypePlugin.js.map +0 -1
  51. package/components/FileManager/getFileUploader.d.ts +0 -3
  52. package/components/FileManager/getFileUploader.js +0 -20
  53. package/components/FileManager/getFileUploader.js.map +0 -1
  54. package/components/FileManager/graphql.d.ts +0 -96
  55. package/components/FileManager/graphql.js +0 -58
  56. package/components/FileManager/graphql.js.map +0 -1
  57. package/components/FileManager/icons/content_copy-black-24px.svg +0 -1
  58. package/components/FileManager/icons/delete.svg +0 -12
  59. package/components/FileManager/icons/privacy_tip-24px.svg +0 -10
  60. package/components/FileManager/icons/round-check_box-24px.svg +0 -4
  61. package/components/FileManager/icons/round-check_box_outline_blank-24px.svg +0 -4
  62. package/components/FileManager/icons/round-cloud_download-24px.svg +0 -4
  63. package/components/FileManager/icons/round-cloud_upload-24px.svg +0 -4
  64. package/components/FileManager/icons/round-description-24px.svg +0 -4
  65. package/components/FileManager/icons/round-edit-24px.svg +0 -4
  66. package/components/FileManager/icons/round-info-24px.svg +0 -4
  67. package/components/FileManager/icons/round-label-24px.svg +0 -4
  68. package/components/FileManager/icons/round-more_vert-24px.svg +0 -4
  69. package/components/FileManager/icons/round-search-24px.svg +0 -20
  70. package/components/FileManager/outputFileSelectionError.d.ts +0 -7
  71. package/components/FileManager/outputFileSelectionError.js +0 -54
  72. package/components/FileManager/outputFileSelectionError.js.map +0 -1
  73. package/components/FileManager/types.d.ts +0 -21
  74. package/components/FileManager/types.js +0 -5
  75. package/components/FileManager/types.js.map +0 -1
  76. package/components/FileManager.d.ts +0 -67
  77. package/components/FileManager.js +0 -144
  78. package/components/FileManager.js.map +0 -1
  79. package/plugins/FileManagerFileTypePlugin.d.ts +0 -33
  80. package/plugins/FileManagerFileTypePlugin.js +0 -63
  81. package/plugins/FileManagerFileTypePlugin.js.map +0 -1
  82. package/plugins/fileManager/fileDefault.d.ts +0 -2
  83. package/plugins/fileManager/fileDefault.js +0 -34
  84. package/plugins/fileManager/fileDefault.js.map +0 -1
  85. package/plugins/fileManager/fileImage/DeleteAction.d.ts +0 -7
  86. package/plugins/fileManager/fileImage/DeleteAction.js +0 -83
  87. package/plugins/fileManager/fileImage/DeleteAction.js.map +0 -1
  88. package/plugins/fileManager/fileImage/EditAction.d.ts +0 -10
  89. package/plugins/fileManager/fileImage/EditAction.js +0 -179
  90. package/plugins/fileManager/fileImage/EditAction.js.map +0 -1
  91. package/plugins/fileManager/fileImage/index.d.ts +0 -2
  92. package/plugins/fileManager/fileImage/index.js +0 -46
  93. package/plugins/fileManager/fileImage/index.js.map +0 -1
  94. package/plugins/fileManager/icons/edit.svg +0 -17
  95. package/plugins/fileManager/icons/round-description-24px.svg +0 -1
  96. package/plugins/fileManager/index.d.ts +0 -2
  97. package/plugins/fileManager/index.js +0 -21
  98. package/plugins/fileManager/index.js.map +0 -1
@@ -1,339 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
6
-
7
- Object.defineProperty(exports, "__esModule", {
8
- value: true
9
- });
10
- exports.tagWithoutScopePrefix = exports.formatTagAsLabel = exports.default = void 0;
11
-
12
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
13
-
14
- var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
15
-
16
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
17
-
18
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
19
-
20
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
21
-
22
- var _react = _interopRequireWildcard(require("react"));
23
-
24
- var _classnames = _interopRequireDefault(require("classnames"));
25
-
26
- var _emotion = require("emotion");
27
-
28
- var _reactHooks = require("@apollo/react-hooks");
29
-
30
- var _set = _interopRequireDefault(require("lodash/set"));
31
-
32
- var _get = _interopRequireDefault(require("lodash/get"));
33
-
34
- var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
35
-
36
- var _Chips = require("@webiny/ui/Chips");
37
-
38
- var _Button = require("@webiny/ui/Button");
39
-
40
- var _AutoComplete = require("@webiny/ui/AutoComplete");
41
-
42
- var _Icon = require("@webiny/ui/Icon");
43
-
44
- var _form = require("@webiny/form");
45
-
46
- var _useSnackbar2 = require("../../../hooks/useSnackbar");
47
-
48
- var _FileManagerContext = require("./../FileManagerContext");
49
-
50
- var _graphql = require("./../graphql");
51
-
52
- var _roundEdit24px = require("./../icons/round-edit-24px.svg");
53
-
54
- var _roundLabel24px = require("./../icons/round-label-24px.svg");
55
-
56
- var _excluded = ["value"];
57
- var SCOPE_SEPARATOR = ":";
58
-
59
- var formatTagAsLabel = function formatTagAsLabel(tag, scope) {
60
- if (!scope) {
61
- return tag;
62
- }
63
-
64
- return tag.replace("".concat(scope).concat(SCOPE_SEPARATOR), "");
65
- };
66
-
67
- exports.formatTagAsLabel = formatTagAsLabel;
68
-
69
- var tagWithoutScopePrefix = function tagWithoutScopePrefix(tags, scope) {
70
- return tags.filter(function (tag) {
71
- return tag !== scope;
72
- }).map(function (tag) {
73
- return formatTagAsLabel(tag, scope);
74
- });
75
- };
76
-
77
- exports.tagWithoutScopePrefix = tagWithoutScopePrefix;
78
- var chipsStyle = /*#__PURE__*/(0, _emotion.css)({
79
- "&.mdc-chip-set": {
80
- padding: 0,
81
- marginLeft: -4,
82
- "& .mdc-chip": {
83
- backgroundColor: "var(--mdc-theme-background)"
84
- }
85
- }
86
- }, "label:chipsStyle;");
87
- var iconButtonStyle = /*#__PURE__*/(0, _emotion.css)({
88
- "&.mdc-icon-button svg": {
89
- width: 20,
90
- height: 20
91
- }
92
- }, "label:iconButtonStyle;");
93
- var addTagsStyle = /*#__PURE__*/(0, _emotion.css)({
94
- "&.mdc-button:not(:disabled)": {
95
- color: "var(--mdc-theme-text-secondary-on-background)",
96
- textTransform: "capitalize",
97
- letterSpacing: "initial",
98
- marginLeft: -8
99
- }
100
- }, "label:addTagsStyle;");
101
- var actionWrapperStyle = /*#__PURE__*/(0, _emotion.css)({
102
- marginTop: 16,
103
- "& button:first-child": {
104
- marginRight: 16
105
- }
106
- }, "label:actionWrapperStyle;");
107
-
108
- var Tags = function Tags(_ref) {
109
- var file = _ref.file,
110
- canEdit = _ref.canEdit;
111
- var client = (0, _reactHooks.useApolloClient)();
112
-
113
- var _useState = (0, _react.useState)(false),
114
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
115
- editing = _useState2[0],
116
- setEdit = _useState2[1];
117
-
118
- var _useState3 = (0, _react.useState)(false),
119
- _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
120
- saving = _useState4[0],
121
- setSaving = _useState4[1];
122
-
123
- var _useState5 = (0, _react.useState)(Array.isArray(file.tags) ? (0, _toConsumableArray2.default)(file.tags) : []),
124
- _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
125
- initialTags = _useState6[0],
126
- setInitialTags = _useState6[1];
127
-
128
- var _useSnackbar = (0, _useSnackbar2.useSnackbar)(),
129
- showSnackbar = _useSnackbar.showSnackbar;
130
-
131
- var _useFileManager = (0, _FileManagerContext.useFileManager)(),
132
- queryParams = _useFileManager.queryParams;
133
-
134
- var handleEdit = (0, _react.useCallback)(function () {
135
- return setEdit(true);
136
- }, []);
137
- var listTagsQuery = (0, _reactHooks.useQuery)(_graphql.LIST_TAGS, {
138
- variables: {
139
- where: (0, _FileManagerContext.getWhere)(queryParams.scope)
140
- }
141
- });
142
- var listTags = (0, _get.default)(listTagsQuery, "data.fileManager.listTags", []);
143
- var allTags = tagWithoutScopePrefix(listTags, queryParams.scope);
144
- var isEditingAllowed = canEdit(file);
145
- var renderHeaderContent = (0, _react.useCallback)(function (_ref2) {
146
- var data = _ref2.data;
147
-
148
- if (editing) {
149
- return null;
150
- }
151
-
152
- var hasTags = data.tags.length > 0;
153
-
154
- if (hasTags) {
155
- // Render existing tags and "edit tags" action.
156
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Chips.Chips, {
157
- className: (0, _classnames.default)("list-item__content", chipsStyle)
158
- }, data.tags.filter(function (tag) {
159
- return tag !== queryParams.scope;
160
- }).map(function (tag, index) {
161
- var label = typeof tag === "string" ? tag : tag.name;
162
- return /*#__PURE__*/_react.default.createElement(_Chips.Chip, {
163
- key: label + index,
164
- label: formatTagAsLabel(label, queryParams.scope)
165
- });
166
- })), isEditingAllowed && /*#__PURE__*/_react.default.createElement(_Button.IconButton, {
167
- className: iconButtonStyle,
168
- icon: /*#__PURE__*/_react.default.createElement(_roundEdit24px.ReactComponent, null),
169
- onClick: handleEdit
170
- }));
171
- } // Render "add tags" action.
172
-
173
-
174
- return /*#__PURE__*/_react.default.createElement(_Button.ButtonDefault, {
175
- className: addTagsStyle,
176
- onClick: handleEdit,
177
- disabled: !isEditingAllowed,
178
- "data-testid": "fm.tags.add"
179
- }, "Add tags...");
180
- }, [editing, isEditingAllowed]);
181
- return /*#__PURE__*/_react.default.createElement(_form.Form, {
182
- data: {
183
- tags: initialTags
184
- },
185
- onSubmit: /*#__PURE__*/function () {
186
- var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(_ref3) {
187
- var tags;
188
- return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
189
- while (1) {
190
- switch (_context.prev = _context.next) {
191
- case 0:
192
- tags = _ref3.tags;
193
- setSaving(true);
194
- client.mutate({
195
- mutation: _graphql.UPDATE_FILE,
196
- variables: {
197
- id: file.id,
198
- data: {
199
- tags: tags
200
- }
201
- },
202
- update: function update(cache, updated) {
203
- var newFileData = (0, _get.default)(updated, "data.fileManager.updateFile.data"); // 1. Update files list cache
204
-
205
- var data = (0, _cloneDeep.default)(cache.readQuery({
206
- query: _graphql.LIST_FILES,
207
- variables: queryParams
208
- }));
209
-
210
- if (data) {
211
- data.fileManager.listFiles.data.forEach(function (item) {
212
- if (item.key === newFileData.key) {
213
- item.tags = newFileData.tags;
214
- }
215
- });
216
- }
217
-
218
- cache.writeQuery({
219
- query: _graphql.LIST_FILES,
220
- variables: queryParams,
221
- data: data
222
- }); // 2. Update "LIST_TAGS" cache
223
-
224
- if (Array.isArray(newFileData.tags)) {
225
- // Get list tags data
226
- var listTagsData = (0, _cloneDeep.default)(cache.readQuery({
227
- query: _graphql.LIST_TAGS,
228
- variables: {
229
- where: (0, _FileManagerContext.getWhere)(queryParams.scope)
230
- }
231
- }));
232
-
233
- if (!listTagsData) {
234
- return;
235
- } // Add new tag in list
236
-
237
-
238
- var updatedTagsList = (0, _toConsumableArray2.default)(newFileData.tags);
239
-
240
- if (Array.isArray(listTagsData.fileManager.listTags)) {
241
- listTagsData.fileManager.listTags.forEach(function (tag) {
242
- if (!updatedTagsList.includes(tag)) {
243
- updatedTagsList.push(tag);
244
- }
245
- });
246
- }
247
-
248
- (0, _set.default)(listTagsData, "fileManager.listTags", updatedTagsList); // Write it to cache
249
-
250
- cache.writeQuery({
251
- query: _graphql.LIST_TAGS,
252
- variables: {
253
- where: (0, _FileManagerContext.getWhere)(queryParams.scope)
254
- },
255
- data: listTagsData
256
- });
257
- }
258
- }
259
- }).then(function () {
260
- setInitialTags(tags);
261
- setSaving(false);
262
- setEdit(false);
263
- showSnackbar("Tags successfully updated.");
264
- });
265
-
266
- case 3:
267
- case "end":
268
- return _context.stop();
269
- }
270
- }
271
- }, _callee);
272
- }));
273
-
274
- return function (_x) {
275
- return _ref4.apply(this, arguments);
276
- };
277
- }()
278
- }, function (_ref5) {
279
- var Bind = _ref5.Bind,
280
- data = _ref5.data,
281
- setValue = _ref5.setValue,
282
- submit = _ref5.submit;
283
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("li-title", null, /*#__PURE__*/_react.default.createElement(_Icon.Icon, {
284
- className: "list-item__icon",
285
- icon: /*#__PURE__*/_react.default.createElement(_roundLabel24px.ReactComponent, null)
286
- }), renderHeaderContent({
287
- // TODO @ts-refactor
288
- // @ts-ignore
289
- data: data
290
- })), editing && /*#__PURE__*/_react.default.createElement("li-content", null, /*#__PURE__*/_react.default.createElement(Bind, {
291
- name: "tags",
292
- beforeChange: function beforeChange(tags, baseOnChange) {
293
- var formattedTags = tags.map(function (tag) {
294
- var tagInLowerCase = tag.toLowerCase();
295
- /**
296
- * If "scope" exists, prefix tag with "scope" if not already.
297
- */
298
-
299
- if (queryParams.scope && !tagInLowerCase.startsWith(queryParams.scope)) {
300
- return "".concat(queryParams.scope).concat(SCOPE_SEPARATOR).concat(tagInLowerCase);
301
- }
302
-
303
- return tagInLowerCase;
304
- });
305
- baseOnChange(formattedTags);
306
- }
307
- }, function (_ref6) {
308
- var value = _ref6.value,
309
- bindProps = (0, _objectWithoutProperties2.default)(_ref6, _excluded);
310
- return /*#__PURE__*/_react.default.createElement(_AutoComplete.MultiAutoComplete, Object.assign({}, bindProps, {
311
- value: tagWithoutScopePrefix(value, queryParams.scope),
312
- options: allTags,
313
- placeholder: "homepage asset",
314
- description: "Type in a new tag or select an existing one.",
315
- unique: true,
316
- allowFreeInput: true,
317
- useSimpleValues: true,
318
- disabled: saving
319
- }));
320
- }), /*#__PURE__*/_react.default.createElement("div", {
321
- className: actionWrapperStyle
322
- }, /*#__PURE__*/_react.default.createElement(_Button.ButtonPrimary, {
323
- small: true,
324
- onClick: function onClick(ev) {
325
- submit(ev);
326
- },
327
- "data-testid": "fm.tags.submit"
328
- }, "Submit"), /*#__PURE__*/_react.default.createElement(_Button.ButtonSecondary, {
329
- small: true,
330
- onClick: function onClick() {
331
- setValue("tags", initialTags);
332
- setEdit(false);
333
- }
334
- }, "Cancel"))));
335
- });
336
- };
337
-
338
- var _default = Tags;
339
- exports.default = _default;
@@ -1 +0,0 @@
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,24 +0,0 @@
1
- import React from "react";
2
- import { FileItem } from "./types";
3
- import { FilesRenderChildren } from "react-butterfiles";
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
- interface FileDetailsProps {
17
- canEdit: (item: any) => boolean;
18
- file: FileItem;
19
- uploadFile: (files: FileItem[] | FileItem) => Promise<number | null>;
20
- validateFiles: FilesRenderChildren["validateFiles"];
21
- [key: string]: any;
22
- }
23
- declare const FileDetails: React.FC<FileDetailsProps>;
24
- export default FileDetails;