@blaze-cms/plugin-media-ui 0.146.0-node18-tooltips.32 → 0.146.0-node18-tooltips.33

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 (47) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/lib/components/CardMedia/CardMedia.js +5 -1
  3. package/lib/components/CardMedia/CardMedia.js.map +1 -1
  4. package/lib/components/EditMediaFile/EditMediaFile.js +80 -37
  5. package/lib/components/EditMediaFile/EditMediaFile.js.map +1 -1
  6. package/lib/components/EditMediaFile/EditMediaFilePage.js +46 -22
  7. package/lib/components/EditMediaFile/EditMediaFilePage.js.map +1 -1
  8. package/lib/components/FilePreview/PDF/PDF.js +19 -4
  9. package/lib/components/FilePreview/PDF/PDF.js.map +1 -1
  10. package/lib/components/FilePreview/index.js +14 -3
  11. package/lib/components/FilePreview/index.js.map +1 -1
  12. package/lib/components/FilePreview/previewDefault/PreviewDefault.js +18 -4
  13. package/lib/components/FilePreview/previewDefault/PreviewDefault.js.map +1 -1
  14. package/lib/components/FileUploadModal/FileUploadModal.js +57 -21
  15. package/lib/components/FileUploadModal/FileUploadModal.js.map +1 -1
  16. package/lib/components/ListingContainer/Listing/MediaListing/MediaFileList/MediaFileList.js +6 -2
  17. package/lib/components/ListingContainer/Listing/MediaListing/MediaFileList/MediaFileList.js.map +1 -1
  18. package/lib/utils/bustUrl.js +18 -0
  19. package/lib/utils/bustUrl.js.map +1 -0
  20. package/lib-es/components/CardMedia/CardMedia.js +5 -1
  21. package/lib-es/components/CardMedia/CardMedia.js.map +1 -1
  22. package/lib-es/components/EditMediaFile/EditMediaFile.js +72 -37
  23. package/lib-es/components/EditMediaFile/EditMediaFile.js.map +1 -1
  24. package/lib-es/components/EditMediaFile/EditMediaFilePage.js +35 -13
  25. package/lib-es/components/EditMediaFile/EditMediaFilePage.js.map +1 -1
  26. package/lib-es/components/FilePreview/PDF/PDF.js +19 -4
  27. package/lib-es/components/FilePreview/PDF/PDF.js.map +1 -1
  28. package/lib-es/components/FilePreview/index.js +10 -3
  29. package/lib-es/components/FilePreview/index.js.map +1 -1
  30. package/lib-es/components/FilePreview/previewDefault/PreviewDefault.js +18 -4
  31. package/lib-es/components/FilePreview/previewDefault/PreviewDefault.js.map +1 -1
  32. package/lib-es/components/FileUploadModal/FileUploadModal.js +49 -7
  33. package/lib-es/components/FileUploadModal/FileUploadModal.js.map +1 -1
  34. package/lib-es/components/ListingContainer/Listing/MediaListing/MediaFileList/MediaFileList.js +6 -2
  35. package/lib-es/components/ListingContainer/Listing/MediaListing/MediaFileList/MediaFileList.js.map +1 -1
  36. package/lib-es/utils/bustUrl.js +7 -0
  37. package/lib-es/utils/bustUrl.js.map +1 -0
  38. package/package.json +5 -5
  39. package/src/components/CardMedia/CardMedia.js +5 -1
  40. package/src/components/EditMediaFile/EditMediaFile.js +66 -40
  41. package/src/components/EditMediaFile/EditMediaFilePage.js +33 -8
  42. package/src/components/FilePreview/PDF/PDF.js +17 -4
  43. package/src/components/FilePreview/index.js +9 -3
  44. package/src/components/FilePreview/previewDefault/PreviewDefault.js +16 -3
  45. package/src/components/FileUploadModal/FileUploadModal.js +35 -14
  46. package/src/components/ListingContainer/Listing/MediaListing/MediaFileList/MediaFileList.js +3 -1
  47. package/src/utils/bustUrl.js +6 -0
@@ -1,12 +1,16 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
+ import Button from '@blaze-react/button';
3
4
  import { DefaultIcon } from './icons';
4
5
  const PreviewDefault = ({
5
6
  url,
6
7
  name,
7
- children
8
+ children,
9
+ handleChangeFile,
10
+ showChangeButton
8
11
  }) => /*#__PURE__*/React.createElement("div", {
9
- className: "preview"
12
+ className: "preview",
13
+ key: `default-${url}`
10
14
  }, /*#__PURE__*/React.createElement("div", {
11
15
  className: "preview__file preview__file--default"
12
16
  }, /*#__PURE__*/React.createElement("div", {
@@ -17,11 +21,21 @@ const PreviewDefault = ({
17
21
  href: url,
18
22
  rel: "noopener noreferrer",
19
23
  target: "_blank"
20
- }, "Original")))), children);
24
+ }, "Original")), showChangeButton && /*#__PURE__*/React.createElement("div", {
25
+ className: "preview__change-button"
26
+ }, /*#__PURE__*/React.createElement(Button, {
27
+ onClick: handleChangeFile
28
+ }, "Change file")))), children);
21
29
  PreviewDefault.propTypes = {
22
30
  url: PropTypes.string.isRequired,
23
31
  name: PropTypes.string.isRequired,
24
- children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired
32
+ children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,
33
+ handleChangeFile: PropTypes.func,
34
+ showChangeButton: PropTypes.bool
35
+ };
36
+ PreviewDefault.defaultProps = {
37
+ handleChangeFile: () => {},
38
+ showChangeButton: false
25
39
  };
26
40
  export { PreviewDefault };
27
41
  //# sourceMappingURL=PreviewDefault.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PreviewDefault.js","names":["React","PropTypes","DefaultIcon","PreviewDefault","url","name","children","createElement","className","href","rel","target","propTypes","string","isRequired","oneOfType","arrayOf","node"],"sources":["../../../../src/components/FilePreview/previewDefault/PreviewDefault.js"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { DefaultIcon } from './icons';\n\nconst PreviewDefault = ({ url, name, children }) => (\n <div className=\"preview\">\n <div className=\"preview__file preview__file--default\">\n <div className=\"preview__file--icon\">\n <DefaultIcon />\n <span>Preview not available</span>\n </div>\n <div className=\"preview__details preview__details--file\">\n <p>\n <strong>File details</strong>\n <a href={url} rel=\"noopener noreferrer\" target=\"_blank\">\n Original\n </a>\n </p>\n </div>\n </div>\n {children}\n </div>\n);\n\nPreviewDefault.propTypes = {\n url: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired\n};\n\nexport { PreviewDefault };\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,SAAS,MAAM,YAAY;AAClC,SAASC,WAAW,QAAQ,SAAS;AAErC,MAAMC,cAAc,GAAGA,CAAC;EAAEC,GAAG;EAAEC,IAAI;EAAEC;AAAS,CAAC,kBAC7CN,KAAA,CAAAO,aAAA;EAAKC,SAAS,EAAC;AAAS,gBACtBR,KAAA,CAAAO,aAAA;EAAKC,SAAS,EAAC;AAAsC,gBACnDR,KAAA,CAAAO,aAAA;EAAKC,SAAS,EAAC;AAAqB,gBAClCR,KAAA,CAAAO,aAAA,CAACL,WAAW,MAAE,CAAC,eACfF,KAAA,CAAAO,aAAA,eAAM,uBAA2B,CAC9B,CAAC,eACNP,KAAA,CAAAO,aAAA;EAAKC,SAAS,EAAC;AAAyC,gBACtDR,KAAA,CAAAO,aAAA,yBACEP,KAAA,CAAAO,aAAA,iBAAQ,cAAoB,CAAC,eAC7BP,KAAA,CAAAO,aAAA;EAAGE,IAAI,EAAEL,GAAI;EAACM,GAAG,EAAC,qBAAqB;EAACC,MAAM,EAAC;AAAQ,GAAC,UAErD,CACF,CACA,CACF,CAAC,EACLL,QACE,CACN;AAEDH,cAAc,CAACS,SAAS,GAAG;EACzBR,GAAG,EAAEH,SAAS,CAACY,MAAM,CAACC,UAAU;EAChCT,IAAI,EAAEJ,SAAS,CAACY,MAAM,CAACC,UAAU;EACjCR,QAAQ,EAAEL,SAAS,CAACc,SAAS,CAAC,CAACd,SAAS,CAACe,OAAO,CAACf,SAAS,CAACgB,IAAI,CAAC,EAAEhB,SAAS,CAACgB,IAAI,CAAC,CAAC,CAACH;AACrF,CAAC;AAED,SAASX,cAAc","ignoreList":[]}
1
+ {"version":3,"file":"PreviewDefault.js","names":["React","PropTypes","Button","DefaultIcon","PreviewDefault","url","name","children","handleChangeFile","showChangeButton","createElement","className","key","href","rel","target","onClick","propTypes","string","isRequired","oneOfType","arrayOf","node","func","bool","defaultProps"],"sources":["../../../../src/components/FilePreview/previewDefault/PreviewDefault.js"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Button from '@blaze-react/button';\nimport { DefaultIcon } from './icons';\n\nconst PreviewDefault = ({ url, name, children, handleChangeFile, showChangeButton }) => (\n <div className=\"preview\" key={`default-${url}`}>\n <div className=\"preview__file preview__file--default\">\n <div className=\"preview__file--icon\">\n <DefaultIcon />\n <span>Preview not available</span>\n </div>\n <div className=\"preview__details preview__details--file\">\n <p>\n <strong>File details</strong>\n <a href={url} rel=\"noopener noreferrer\" target=\"_blank\">\n Original\n </a>\n </p>\n {showChangeButton && (\n <div className=\"preview__change-button\">\n <Button onClick={handleChangeFile}>Change file</Button>\n </div>\n )}\n </div>\n </div>\n {children}\n </div>\n);\n\nPreviewDefault.propTypes = {\n url: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n handleChangeFile: PropTypes.func,\n showChangeButton: PropTypes.bool\n};\n\nPreviewDefault.defaultProps = {\n handleChangeFile: () => {},\n showChangeButton: false\n};\n\nexport { PreviewDefault };\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,SAAS,MAAM,YAAY;AAClC,OAAOC,MAAM,MAAM,qBAAqB;AACxC,SAASC,WAAW,QAAQ,SAAS;AAErC,MAAMC,cAAc,GAAGA,CAAC;EAAEC,GAAG;EAAEC,IAAI;EAAEC,QAAQ;EAAEC,gBAAgB;EAAEC;AAAiB,CAAC,kBACjFT,KAAA,CAAAU,aAAA;EAAKC,SAAS,EAAC,SAAS;EAACC,GAAG,EAAE,WAAWP,GAAG;AAAG,gBAC7CL,KAAA,CAAAU,aAAA;EAAKC,SAAS,EAAC;AAAsC,gBACnDX,KAAA,CAAAU,aAAA;EAAKC,SAAS,EAAC;AAAqB,gBAClCX,KAAA,CAAAU,aAAA,CAACP,WAAW,MAAE,CAAC,eACfH,KAAA,CAAAU,aAAA,eAAM,uBAA2B,CAC9B,CAAC,eACNV,KAAA,CAAAU,aAAA;EAAKC,SAAS,EAAC;AAAyC,gBACtDX,KAAA,CAAAU,aAAA,yBACEV,KAAA,CAAAU,aAAA,iBAAQ,cAAoB,CAAC,eAC7BV,KAAA,CAAAU,aAAA;EAAGG,IAAI,EAAER,GAAI;EAACS,GAAG,EAAC,qBAAqB;EAACC,MAAM,EAAC;AAAQ,GAAC,UAErD,CACF,CAAC,EACHN,gBAAgB,iBACfT,KAAA,CAAAU,aAAA;EAAKC,SAAS,EAAC;AAAwB,gBACrCX,KAAA,CAAAU,aAAA,CAACR,MAAM;EAACc,OAAO,EAAER;AAAiB,GAAC,aAAmB,CACnD,CAEJ,CACF,CAAC,EACLD,QACE,CACN;AAEDH,cAAc,CAACa,SAAS,GAAG;EACzBZ,GAAG,EAAEJ,SAAS,CAACiB,MAAM,CAACC,UAAU;EAChCb,IAAI,EAAEL,SAAS,CAACiB,MAAM,CAACC,UAAU;EACjCZ,QAAQ,EAAEN,SAAS,CAACmB,SAAS,CAAC,CAACnB,SAAS,CAACoB,OAAO,CAACpB,SAAS,CAACqB,IAAI,CAAC,EAAErB,SAAS,CAACqB,IAAI,CAAC,CAAC,CAACH,UAAU;EAC7FX,gBAAgB,EAAEP,SAAS,CAACsB,IAAI;EAChCd,gBAAgB,EAAER,SAAS,CAACuB;AAC9B,CAAC;AAEDpB,cAAc,CAACqB,YAAY,GAAG;EAC5BjB,gBAAgB,EAAEA,CAAA,KAAM,CAAC,CAAC;EAC1BC,gBAAgB,EAAE;AACpB,CAAC;AAED,SAASL,cAAc","ignoreList":[]}
@@ -1,4 +1,7 @@
1
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
1
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
+ const _excluded = ["message"],
4
+ _excluded2 = ["message"];
2
5
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
6
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
7
  import React, { useState } from 'react';
@@ -36,10 +39,15 @@ const FileUploadModal = ({
36
39
  }
37
40
  });
38
41
  const handleFiles = filesToUpload => {
42
+ if (fileId && filesToUpload && filesToUpload.length) {
43
+ setFiles([filesToUpload[0]]);
44
+ return;
45
+ }
39
46
  setFiles(filesToUpload);
40
47
  };
41
48
  const uploadFiles = async () => {
42
- const response = await Promise.all(files.map(({
49
+ const filesToProcess = fileId && files.length ? [files[0]] : files;
50
+ const response = await Promise.all(filesToProcess.map(({
43
51
  file,
44
52
  name,
45
53
  data,
@@ -47,7 +55,7 @@ const FileUploadModal = ({
47
55
  }) => {
48
56
  const payload = {
49
57
  name,
50
- storeKey: fileStoreKey,
58
+ storeKey: fileStoreKey || selectedStoreKey || storeKey,
51
59
  data
52
60
  };
53
61
  if (fileId) {
@@ -68,23 +76,57 @@ const FileUploadModal = ({
68
76
  appearance: 'error',
69
77
  autoDismiss: true
70
78
  });
79
+ return [];
71
80
  });
72
81
  const parsedResponse = response.map(({
73
82
  data: {
74
83
  file
75
84
  }
76
- }) => file.result);
85
+ }) => {
86
+ const _ref = file.result || {},
87
+ {
88
+ message
89
+ } = _ref,
90
+ rest = _objectWithoutProperties(_ref, _excluded);
91
+ return rest;
92
+ });
77
93
  const fileNames = files.map(({
78
94
  file
79
95
  }) => file.name);
80
- addNewFile && addNewFile(parsedResponse);
81
- const toastMessage = `Uploaded: ${fileNames.join(', ')}`;
82
96
  if (simpleLayout) {
83
- const filesToSelect = parsedResponse.map(file => file.id);
97
+ if (fileId && parsedResponse && parsedResponse.length) {
98
+ const _parsedResponse$ = parsedResponse[0],
99
+ {
100
+ message
101
+ } = _parsedResponse$,
102
+ updatedFile = _objectWithoutProperties(_parsedResponse$, _excluded2);
103
+ try {
104
+ client.writeQuery({
105
+ query: getQuery('GET_FILE_BY_ID'),
106
+ variables: {
107
+ id: fileId
108
+ },
109
+ data: {
110
+ file: updatedFile
111
+ }
112
+ });
113
+ } catch (e) {
114
+ console.error(e); //eslint-disable-line
115
+ }
116
+ const updateMessage = `Updated: ${updatedFile.filename || fileNames[0]}`;
117
+ closeModalAndSetValue(simpleLayout, updatedFile, updateMessage);
118
+ return;
119
+ }
120
+ const filesToSelect = parsedResponse.map(({
121
+ id
122
+ }) => id);
123
+ const uploadMessage = `Uploaded: ${fileNames.join(', ')}`;
84
124
  getSelectedFiles(null, filesToSelect);
85
- closeModalAndSetValue(simpleLayout, filesToSelect, toastMessage);
125
+ closeModalAndSetValue(simpleLayout, filesToSelect, uploadMessage);
86
126
  return;
87
127
  }
128
+ addNewFile && addNewFile(parsedResponse);
129
+ const toastMessage = fileId ? `Updated: ${fileNames[0]}` : `Uploaded: ${fileNames.join(', ')}`;
88
130
  addToast(toastMessage, {
89
131
  appearance: 'success',
90
132
  autoDismiss: true
@@ -1 +1 @@
1
- {"version":3,"file":"FileUploadModal.js","names":["React","useState","ModalAdapter","Modal","getMutation","getQuery","FileUpload","PropTypes","useToasts","useApolloClient","useQuery","useFileList","FileUploadModal","onClose","getSelectedFiles","closeModalAndSetValue","simpleLayout","fileId","storeKey","selectedStoreKey","files","setFiles","addToast","client","addNewFile","fileStoresType","data","getFileStores","storeType","variables","visibleInAdmin","handleFiles","filesToUpload","uploadFiles","response","Promise","all","map","file","name","fileStoreKey","payload","id","filename","mutate","mutation","input","_objectSpread","catch","error","message","appearance","autoDismiss","parsedResponse","result","fileNames","toastMessage","join","filesToSelect","handleOnSave","length","storeOptions","type","key","filter","createElement","title","actions","textButton","callback","modifiers","upload","onChange","selectOptions","propTypes","string","func","isRequired","bool","defaultProps"],"sources":["../../../src/components/FileUploadModal/FileUploadModal.js"],"sourcesContent":["import React, { useState } from 'react';\nimport { ModalAdapter as Modal, getMutation, getQuery } from '@blaze-cms/admin-ui-utils';\nimport FileUpload from '@blaze-react/file-upload';\nimport PropTypes from 'prop-types';\nimport { useToasts } from '@blaze-react/toaster';\nimport { useApolloClient, useQuery } from '@apollo/client';\nimport useFileList from '../FileList/useFileList';\n\nconst FileUploadModal = ({\n onClose,\n getSelectedFiles,\n closeModalAndSetValue,\n simpleLayout,\n fileId,\n storeKey,\n selectedStoreKey\n}) => {\n const [files, setFiles] = useState([]);\n const { addToast } = useToasts();\n const client = useApolloClient();\n const { addNewFile } = useFileList();\n\n const fileStoresType = getQuery('GET_FILE_STORES');\n\n const { data: { getFileStores: storeType = [] } = {} } = useQuery(fileStoresType, {\n variables: { visibleInAdmin: true }\n });\n\n const handleFiles = filesToUpload => {\n setFiles(filesToUpload);\n };\n\n const uploadFiles = async () => {\n const response = await Promise.all(\n files.map(({ file, name, data, storeKey: fileStoreKey }) => {\n const payload = {\n name,\n storeKey: fileStoreKey,\n data\n };\n if (fileId) {\n payload.id = fileId;\n } else if (!name) {\n payload.name = file.filename;\n }\n return client.mutate({\n mutation: getMutation('UPLOAD_FILE'),\n variables: {\n input: {\n file,\n ...payload\n }\n }\n });\n })\n ).catch(error => {\n addToast(error.message, {\n appearance: 'error',\n autoDismiss: true\n });\n });\n\n const parsedResponse = response.map(({ data: { file } }) => file.result);\n\n const fileNames = files.map(({ file }) => file.name);\n addNewFile && addNewFile(parsedResponse);\n const toastMessage = `Uploaded: ${fileNames.join(', ')}`;\n\n if (simpleLayout) {\n const filesToSelect = parsedResponse.map(file => file.id);\n getSelectedFiles(null, filesToSelect);\n closeModalAndSetValue(simpleLayout, filesToSelect, toastMessage);\n return;\n }\n\n addToast(toastMessage, {\n appearance: 'success',\n autoDismiss: true\n });\n };\n\n const handleOnSave = async () => {\n if (files.length) await uploadFiles();\n onClose();\n };\n\n let storeOptions = storeType.map(type => [type.key, type.name]);\n storeOptions = storeKey ? storeOptions.filter(([key]) => key === storeKey) : storeOptions;\n\n return (\n <Modal\n onClose={onClose}\n title=\"Add media\"\n actions={[\n {\n textButton: 'Cancel',\n callback: onClose,\n modifiers: ['cancel']\n },\n {\n textButton: 'Upload',\n callback: handleOnSave,\n modifiers: []\n }\n ]}\n upload>\n <FileUpload\n storeKey={selectedStoreKey || storeKey}\n onChange={handleFiles}\n selectOptions={storeOptions}\n />\n </Modal>\n );\n};\n\nFileUploadModal.propTypes = {\n fileId: PropTypes.string,\n getSelectedFiles: PropTypes.func.isRequired,\n onClose: PropTypes.func,\n simpleLayout: PropTypes.bool,\n closeModalAndSetValue: PropTypes.func,\n storeKey: PropTypes.string,\n selectedStoreKey: PropTypes.string\n};\n\nFileUploadModal.defaultProps = {\n onClose: () => { },\n closeModalAndSetValue: () => { },\n simpleLayout: false,\n fileId: null,\n storeKey: null,\n selectedStoreKey: null\n};\n\nexport default FileUploadModal;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"FileUploadModal.js","names":["React","useState","ModalAdapter","Modal","getMutation","getQuery","FileUpload","PropTypes","useToasts","useApolloClient","useQuery","useFileList","FileUploadModal","onClose","getSelectedFiles","closeModalAndSetValue","simpleLayout","fileId","storeKey","selectedStoreKey","files","setFiles","addToast","client","addNewFile","fileStoresType","data","getFileStores","storeType","variables","visibleInAdmin","handleFiles","filesToUpload","length","uploadFiles","filesToProcess","response","Promise","all","map","file","name","fileStoreKey","payload","id","filename","mutate","mutation","input","_objectSpread","catch","error","message","appearance","autoDismiss","parsedResponse","_ref","result","rest","_objectWithoutProperties","_excluded","fileNames","_parsedResponse$","updatedFile","_excluded2","writeQuery","query","e","console","updateMessage","filesToSelect","uploadMessage","join","toastMessage","handleOnSave","storeOptions","type","key","filter","createElement","title","actions","textButton","callback","modifiers","upload","onChange","selectOptions","propTypes","string","func","isRequired","bool","defaultProps"],"sources":["../../../src/components/FileUploadModal/FileUploadModal.js"],"sourcesContent":["import React, { useState } from 'react';\nimport { ModalAdapter as Modal, getMutation, getQuery } from '@blaze-cms/admin-ui-utils';\nimport FileUpload from '@blaze-react/file-upload';\nimport PropTypes from 'prop-types';\nimport { useToasts } from '@blaze-react/toaster';\nimport { useApolloClient, useQuery } from '@apollo/client';\nimport useFileList from '../FileList/useFileList';\n\nconst FileUploadModal = ({\n onClose,\n getSelectedFiles,\n closeModalAndSetValue,\n simpleLayout,\n fileId,\n storeKey,\n selectedStoreKey\n}) => {\n const [files, setFiles] = useState([]);\n const { addToast } = useToasts();\n const client = useApolloClient();\n const { addNewFile } = useFileList();\n\n const fileStoresType = getQuery('GET_FILE_STORES');\n const { data: { getFileStores: storeType = [] } = {} } = useQuery(fileStoresType, {\n variables: { visibleInAdmin: true }\n });\n\n const handleFiles = filesToUpload => {\n if (fileId && filesToUpload && filesToUpload.length) {\n setFiles([filesToUpload[0]]);\n return;\n }\n setFiles(filesToUpload);\n };\n\n const uploadFiles = async () => {\n const filesToProcess = fileId && files.length ? [files[0]] : files;\n\n const response = await Promise.all(\n filesToProcess.map(({ file, name, data, storeKey: fileStoreKey }) => {\n const payload = {\n name,\n storeKey: fileStoreKey || selectedStoreKey || storeKey,\n data\n };\n if (fileId) {\n payload.id = fileId;\n } else if (!name) {\n payload.name = file.filename;\n }\n return client.mutate({\n mutation: getMutation('UPLOAD_FILE'),\n variables: { input: { file, ...payload } }\n });\n })\n ).catch(error => {\n addToast(error.message, {\n appearance: 'error',\n autoDismiss: true\n });\n return [];\n });\n\n const parsedResponse = response.map(({ data: { file } }) => {\n const { message, ...rest } = file.result || {};\n return rest;\n });\n\n const fileNames = files.map(({ file }) => file.name);\n\n if (simpleLayout) {\n if (fileId && parsedResponse && parsedResponse.length) {\n const { message, ...updatedFile } = parsedResponse[0];\n try {\n client.writeQuery({\n query: getQuery('GET_FILE_BY_ID'),\n variables: { id: fileId },\n data: { file: updatedFile }\n });\n } catch (e) {\n console.error(e); //eslint-disable-line\n }\n const updateMessage = `Updated: ${updatedFile.filename || fileNames[0]}`;\n closeModalAndSetValue(simpleLayout, updatedFile, updateMessage);\n return;\n }\n const filesToSelect = parsedResponse.map(({ id }) => id);\n const uploadMessage = `Uploaded: ${fileNames.join(', ')}`;\n getSelectedFiles(null, filesToSelect);\n closeModalAndSetValue(simpleLayout, filesToSelect, uploadMessage);\n return;\n }\n\n addNewFile && addNewFile(parsedResponse);\n const toastMessage = fileId ? `Updated: ${fileNames[0]}` : `Uploaded: ${fileNames.join(', ')}`;\n\n addToast(toastMessage, {\n appearance: 'success',\n autoDismiss: true\n });\n };\n\n const handleOnSave = async () => {\n if (files.length) await uploadFiles();\n onClose();\n };\n\n let storeOptions = storeType.map(type => [type.key, type.name]);\n storeOptions = storeKey ? storeOptions.filter(([key]) => key === storeKey) : storeOptions;\n\n return (\n <Modal\n onClose={onClose}\n title=\"Add media\"\n actions={[\n {\n textButton: 'Cancel',\n callback: onClose,\n modifiers: ['cancel']\n },\n {\n textButton: 'Upload',\n callback: handleOnSave,\n modifiers: []\n }\n ]}\n upload>\n <FileUpload\n storeKey={selectedStoreKey || storeKey}\n onChange={handleFiles}\n selectOptions={storeOptions}\n />\n </Modal>\n );\n};\n\nFileUploadModal.propTypes = {\n fileId: PropTypes.string,\n getSelectedFiles: PropTypes.func.isRequired,\n onClose: PropTypes.func,\n simpleLayout: PropTypes.bool,\n closeModalAndSetValue: PropTypes.func,\n storeKey: PropTypes.string,\n selectedStoreKey: PropTypes.string\n};\n\nFileUploadModal.defaultProps = {\n onClose: () => { },\n closeModalAndSetValue: () => { },\n simpleLayout: false,\n fileId: null,\n storeKey: null,\n selectedStoreKey: null\n};\n\nexport default FileUploadModal;\n"],"mappings":"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","ignoreList":[]}
@@ -103,7 +103,9 @@ const MediaFileList = ({
103
103
  name,
104
104
  url,
105
105
  mimetype,
106
- id
106
+ id,
107
+ data: fileData,
108
+ updated
107
109
  } = data.files[index];
108
110
  const isSelected = existPrevious(selectedFiles, id);
109
111
  return /*#__PURE__*/React.createElement("div", {
@@ -125,7 +127,9 @@ const MediaFileList = ({
125
127
  id: id,
126
128
  index: index,
127
129
  removeFile: removeFile,
128
- openEditInModal: openEditInModal
130
+ openEditInModal: openEditInModal,
131
+ data: fileData,
132
+ updated: updated
129
133
  }));
130
134
  }
131
135
  })), displayCardPrompt && /*#__PURE__*/React.createElement(CardPrompt, null, /*#__PURE__*/React.createElement(Button, {
@@ -1 +1 @@
1
- {"version":3,"file":"MediaFileList.js","names":["React","useState","useEffect","PropTypes","CardPrompt","Button","VirtualList","useMediaContext","MediaContext","CardMedia","existPrevious","useFileList","MEDIA_LIST_ITEM_SIZE","MEDIA_OVER_SCAN_COUNT","AVAILABLE_FILTER_TYPES","MediaFileList","displayCardPrompt","setDisplayCardPrompt","displayLayout","wrapperRef","modalTargetRef","openEditInModal","currentListIndex","setCurrentListIndex","verifiedRanges","setVerifiedRanges","listHeight","setListHeight","queryParams","data","loading","setQueryParams","clearList","removeFile","updateFile","onClickPrompt","getSelectedFiles","selectedFiles","selectedFilter","hasFiles","files","length","where","_objectSpread","filter","storeKey","isSearch","searchTerm","handleRenderedItems","startIndex","rowsLength","loadIndex","Math","floor","includes","offset","handleListHeight","current","clientHeight","window","addEventListener","removeEventListener","searchedTerm","createElement","Fragment","className","width","height","itemCount","itemSize","overscanCount","scrollToIndex","onItemsRendered","renderItem","index","style","name","url","mimetype","id","isSelected","key","latestQueryToRefetchParams","onSelected","selected","onClick","propTypes","func","isRequired","bool","string","object","defaultProps"],"sources":["../../../../../../src/components/ListingContainer/Listing/MediaListing/MediaFileList/MediaFileList.js"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { CardPrompt } from '@blaze-cms/admin';\nimport Button from '@blaze-react/button';\nimport VirtualList from 'react-tiny-virtual-list';\nimport { useMediaContext, MediaContext } from '../../../../../utils/media-context';\nimport CardMedia from '../../../../CardMedia';\nimport { existPrevious } from '../../../mappers';\nimport useFileList from '../../../../FileList/useFileList';\nimport {\n MEDIA_LIST_ITEM_SIZE,\n MEDIA_OVER_SCAN_COUNT,\n AVAILABLE_FILTER_TYPES\n} from '../../../../../constants';\n\nconst MediaFileList = ({\n displayCardPrompt,\n setDisplayCardPrompt,\n displayLayout,\n wrapperRef,\n modalTargetRef,\n openEditInModal\n}) => {\n const [currentListIndex, setCurrentListIndex] = useState(1);\n const [verifiedRanges, setVerifiedRanges] = useState([]);\n const [listHeight, setListHeight] = useState(null);\n const { queryParams, data, loading, setQueryParams, clearList, removeFile, updateFile } =\n useFileList();\n\n const { onClickPrompt, getSelectedFiles, selectedFiles, selectedFilter } =\n useMediaContext(MediaContext);\n\n const hasFiles = !!data.files && !!data.files.length;\n\n useEffect(() => {\n if (!loading && !hasFiles) setDisplayCardPrompt(true);\n }, [loading, hasFiles, setDisplayCardPrompt]);\n\n useEffect(\n () => {\n setVerifiedRanges([]);\n setCurrentListIndex(0);\n setQueryParams({\n where: {\n ...AVAILABLE_FILTER_TYPES[selectedFilter.filter],\n storeKey: selectedFilter.storeKey\n },\n isSearch: selectedFilter.isSearch,\n searchTerm: selectedFilter.searchTerm\n });\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n selectedFilter.filter,\n selectedFilter.storeKey,\n selectedFilter.isSearch,\n selectedFilter.searchTerm\n ]\n );\n\n const handleRenderedItems = ({ startIndex }) => {\n const rowsLength = data.files.length;\n const loadIndex = Math.floor(rowsLength / 3) - MEDIA_OVER_SCAN_COUNT;\n\n if (loadIndex > 0 && loadIndex < startIndex && !verifiedRanges.includes(loadIndex)) {\n setQueryParams({\n offset: data.files.length,\n where: {\n ...AVAILABLE_FILTER_TYPES[selectedFilter.filter],\n storeKey: selectedFilter.storeKey\n },\n isSearch: selectedFilter.isSearch,\n searchTerm: selectedFilter.searchTerm\n });\n setVerifiedRanges([...verifiedRanges, loadIndex]);\n setCurrentListIndex(startIndex + MEDIA_OVER_SCAN_COUNT);\n }\n };\n\n useEffect(() => {\n const handleListHeight = () => {\n setListHeight(wrapperRef.current.clientHeight - 40);\n };\n\n if (wrapperRef.current) {\n handleListHeight();\n window.addEventListener('resize', handleListHeight);\n }\n return () => {\n window.removeEventListener('resize', handleListHeight);\n };\n }, [listHeight, wrapperRef]);\n\n const searchedTerm = queryParams.searchTerm && `${queryParams.searchTerm} -`;\n\n return (\n <>\n {hasFiles && (\n <>\n <p className=\"media__fileList-counter\">\n {searchedTerm} {data[selectedFilter.filter]} items\n </p>\n <VirtualList\n width=\"100%\"\n height={listHeight}\n itemCount={data.files.length}\n itemSize={MEDIA_LIST_ITEM_SIZE}\n overscanCount={MEDIA_OVER_SCAN_COUNT}\n scrollToIndex={currentListIndex}\n onItemsRendered={handleRenderedItems}\n renderItem={({ index, style }) => {\n const { name, url, mimetype, id } = data.files[index];\n const isSelected = existPrevious(selectedFiles, id);\n return (\n <div key={index} style={style} className=\"list__item--resultWrapper\">\n <CardMedia\n updateFile={updateFile}\n clearList={clearList}\n latestQueryToRefetchParams={queryParams}\n modalTargetRef={modalTargetRef}\n onSelected={getSelectedFiles}\n key={id}\n displayLayout={displayLayout}\n selected={!!isSelected}\n name={name}\n url={url}\n mimetype={mimetype}\n id={id}\n index={index}\n removeFile={removeFile}\n openEditInModal={openEditInModal}\n />\n </div>\n );\n }}\n />\n </>\n )}\n {displayCardPrompt && (\n <CardPrompt>\n <Button onClick={onClickPrompt} className=\"button button--rounded button--cta\">\n Upload\n </Button>\n </CardPrompt>\n )}\n </>\n );\n};\n\nMediaFileList.propTypes = {\n setDisplayCardPrompt: PropTypes.func.isRequired,\n displayCardPrompt: PropTypes.bool,\n displayLayout: PropTypes.string.isRequired,\n wrapperRef: PropTypes.object.isRequired,\n modalTargetRef: PropTypes.object.isRequired,\n openEditInModal: PropTypes.bool\n};\n\nMediaFileList.defaultProps = {\n displayCardPrompt: true,\n openEditInModal: false\n};\n\nexport default MediaFileList;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"MediaFileList.js","names":["React","useState","useEffect","PropTypes","CardPrompt","Button","VirtualList","useMediaContext","MediaContext","CardMedia","existPrevious","useFileList","MEDIA_LIST_ITEM_SIZE","MEDIA_OVER_SCAN_COUNT","AVAILABLE_FILTER_TYPES","MediaFileList","displayCardPrompt","setDisplayCardPrompt","displayLayout","wrapperRef","modalTargetRef","openEditInModal","currentListIndex","setCurrentListIndex","verifiedRanges","setVerifiedRanges","listHeight","setListHeight","queryParams","data","loading","setQueryParams","clearList","removeFile","updateFile","onClickPrompt","getSelectedFiles","selectedFiles","selectedFilter","hasFiles","files","length","where","_objectSpread","filter","storeKey","isSearch","searchTerm","handleRenderedItems","startIndex","rowsLength","loadIndex","Math","floor","includes","offset","handleListHeight","current","clientHeight","window","addEventListener","removeEventListener","searchedTerm","createElement","Fragment","className","width","height","itemCount","itemSize","overscanCount","scrollToIndex","onItemsRendered","renderItem","index","style","name","url","mimetype","id","fileData","updated","isSelected","key","latestQueryToRefetchParams","onSelected","selected","onClick","propTypes","func","isRequired","bool","string","object","defaultProps"],"sources":["../../../../../../src/components/ListingContainer/Listing/MediaListing/MediaFileList/MediaFileList.js"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { CardPrompt } from '@blaze-cms/admin';\nimport Button from '@blaze-react/button';\nimport VirtualList from 'react-tiny-virtual-list';\nimport { useMediaContext, MediaContext } from '../../../../../utils/media-context';\nimport CardMedia from '../../../../CardMedia';\nimport { existPrevious } from '../../../mappers';\nimport useFileList from '../../../../FileList/useFileList';\nimport {\n MEDIA_LIST_ITEM_SIZE,\n MEDIA_OVER_SCAN_COUNT,\n AVAILABLE_FILTER_TYPES\n} from '../../../../../constants';\n\nconst MediaFileList = ({\n displayCardPrompt,\n setDisplayCardPrompt,\n displayLayout,\n wrapperRef,\n modalTargetRef,\n openEditInModal\n}) => {\n const [currentListIndex, setCurrentListIndex] = useState(1);\n const [verifiedRanges, setVerifiedRanges] = useState([]);\n const [listHeight, setListHeight] = useState(null);\n const { queryParams, data, loading, setQueryParams, clearList, removeFile, updateFile } =\n useFileList();\n\n const { onClickPrompt, getSelectedFiles, selectedFiles, selectedFilter } =\n useMediaContext(MediaContext);\n\n const hasFiles = !!data.files && !!data.files.length;\n\n useEffect(() => {\n if (!loading && !hasFiles) setDisplayCardPrompt(true);\n }, [loading, hasFiles, setDisplayCardPrompt]);\n\n useEffect(\n () => {\n setVerifiedRanges([]);\n setCurrentListIndex(0);\n setQueryParams({\n where: {\n ...AVAILABLE_FILTER_TYPES[selectedFilter.filter],\n storeKey: selectedFilter.storeKey\n },\n isSearch: selectedFilter.isSearch,\n searchTerm: selectedFilter.searchTerm\n });\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n selectedFilter.filter,\n selectedFilter.storeKey,\n selectedFilter.isSearch,\n selectedFilter.searchTerm\n ]\n );\n\n const handleRenderedItems = ({ startIndex }) => {\n const rowsLength = data.files.length;\n const loadIndex = Math.floor(rowsLength / 3) - MEDIA_OVER_SCAN_COUNT;\n\n if (loadIndex > 0 && loadIndex < startIndex && !verifiedRanges.includes(loadIndex)) {\n setQueryParams({\n offset: data.files.length,\n where: {\n ...AVAILABLE_FILTER_TYPES[selectedFilter.filter],\n storeKey: selectedFilter.storeKey\n },\n isSearch: selectedFilter.isSearch,\n searchTerm: selectedFilter.searchTerm\n });\n setVerifiedRanges([...verifiedRanges, loadIndex]);\n setCurrentListIndex(startIndex + MEDIA_OVER_SCAN_COUNT);\n }\n };\n\n useEffect(() => {\n const handleListHeight = () => {\n setListHeight(wrapperRef.current.clientHeight - 40);\n };\n\n if (wrapperRef.current) {\n handleListHeight();\n window.addEventListener('resize', handleListHeight);\n }\n return () => {\n window.removeEventListener('resize', handleListHeight);\n };\n }, [listHeight, wrapperRef]);\n\n const searchedTerm = queryParams.searchTerm && `${queryParams.searchTerm} -`;\n\n return (\n <>\n {hasFiles && (\n <>\n <p className=\"media__fileList-counter\">\n {searchedTerm} {data[selectedFilter.filter]} items\n </p>\n <VirtualList\n width=\"100%\"\n height={listHeight}\n itemCount={data.files.length}\n itemSize={MEDIA_LIST_ITEM_SIZE}\n overscanCount={MEDIA_OVER_SCAN_COUNT}\n scrollToIndex={currentListIndex}\n onItemsRendered={handleRenderedItems}\n renderItem={({ index, style }) => {\n const { name, url, mimetype, id, data: fileData, updated } = data.files[index];\n const isSelected = existPrevious(selectedFiles, id);\n return (\n <div key={index} style={style} className=\"list__item--resultWrapper\">\n <CardMedia\n updateFile={updateFile}\n clearList={clearList}\n latestQueryToRefetchParams={queryParams}\n modalTargetRef={modalTargetRef}\n onSelected={getSelectedFiles}\n key={id}\n displayLayout={displayLayout}\n selected={!!isSelected}\n name={name}\n url={url}\n mimetype={mimetype}\n id={id}\n index={index}\n removeFile={removeFile}\n openEditInModal={openEditInModal}\n data={fileData}\n updated={updated}\n />\n </div>\n );\n }}\n />\n </>\n )}\n {displayCardPrompt && (\n <CardPrompt>\n <Button onClick={onClickPrompt} className=\"button button--rounded button--cta\">\n Upload\n </Button>\n </CardPrompt>\n )}\n </>\n );\n};\n\nMediaFileList.propTypes = {\n setDisplayCardPrompt: PropTypes.func.isRequired,\n displayCardPrompt: PropTypes.bool,\n displayLayout: PropTypes.string.isRequired,\n wrapperRef: PropTypes.object.isRequired,\n modalTargetRef: PropTypes.object.isRequired,\n openEditInModal: PropTypes.bool\n};\n\nMediaFileList.defaultProps = {\n displayCardPrompt: true,\n openEditInModal: false\n};\n\nexport default MediaFileList;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ export default function bustUrl(url, updated) {
2
+ if (!url) return url;
3
+ const separator = url.includes('?') ? '&' : '?';
4
+ const version = updated || Date.now();
5
+ return `${url}${separator}v=${version}`;
6
+ }
7
+ //# sourceMappingURL=bustUrl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bustUrl.js","names":["bustUrl","url","updated","separator","includes","version","Date","now"],"sources":["../../src/utils/bustUrl.js"],"sourcesContent":["export default function bustUrl(url, updated) {\n if (!url) return url;\n const separator = url.includes('?') ? '&' : '?';\n const version = updated || Date.now();\n return `${url}${separator}v=${version}`;\n}\n"],"mappings":"AAAA,eAAe,SAASA,OAAOA,CAACC,GAAG,EAAEC,OAAO,EAAE;EAC5C,IAAI,CAACD,GAAG,EAAE,OAAOA,GAAG;EACpB,MAAME,SAAS,GAAGF,GAAG,CAACG,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG;EAC/C,MAAMC,OAAO,GAAGH,OAAO,IAAII,IAAI,CAACC,GAAG,CAAC,CAAC;EACrC,OAAO,GAAGN,GAAG,GAAGE,SAAS,KAAKE,OAAO,EAAE;AACzC","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blaze-cms/plugin-media-ui",
3
- "version": "0.146.0-node18-tooltips.32",
3
+ "version": "0.146.0-node18-tooltips.33",
4
4
  "description": "Blaze plugin media ui",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-es/index.js",
@@ -27,10 +27,10 @@
27
27
  },
28
28
  "license": "GPL-3.0",
29
29
  "dependencies": {
30
- "@blaze-cms/admin-ui-utils": "0.146.0-node18-tooltips.32",
30
+ "@blaze-cms/admin-ui-utils": "0.146.0-node18-tooltips.33",
31
31
  "@blaze-cms/core-errors": "0.146.0-node18-tooltips.0",
32
- "@blaze-cms/plugin-search-ui": "0.146.0-node18-tooltips.32",
33
- "@blaze-cms/react-form-builder": "0.146.0-node18-tooltips.32",
32
+ "@blaze-cms/plugin-search-ui": "0.146.0-node18-tooltips.33",
33
+ "@blaze-cms/react-form-builder": "0.146.0-node18-tooltips.33",
34
34
  "@blaze-cms/setup-ui": "0.146.0-node18-tooltips.0",
35
35
  "@blaze-react/button": "0.8.0-alpha.82",
36
36
  "@blaze-react/dnd": "^0.7.0",
@@ -60,5 +60,5 @@
60
60
  "lib/*",
61
61
  "lib-es/*"
62
62
  ],
63
- "gitHead": "1955dabbe3de0e3617e06d605753571807161240"
63
+ "gitHead": "716b7ae2c9ac96e4515eaf2d64f9c85f6d0458d1"
64
64
  }
@@ -11,6 +11,7 @@ import Modal from '@blaze-react/modal';
11
11
  import { createPortal } from 'react-dom';
12
12
  import { Link } from 'react-router-dom';
13
13
  import EditMediaFile from '../EditMediaFile';
14
+ import bustUrl from '../../utils/bustUrl';
14
15
 
15
16
  const CardMedia = ({
16
17
  onSelected,
@@ -21,6 +22,7 @@ const CardMedia = ({
21
22
  selected,
22
23
  displayLayout,
23
24
  data,
25
+ updated,
24
26
  modalTargetRef,
25
27
  updateFile,
26
28
  removeFile,
@@ -153,7 +155,7 @@ const CardMedia = ({
153
155
 
154
156
  {type === 'image' ? (
155
157
  <div className={`card__image card__image--media-${displayLayout}`}>
156
- <img src={url} alt={name} />
158
+ <img src={bustUrl(url, updated)} alt={name} />
157
159
  </div>
158
160
  ) : (
159
161
  <div className="card__image card__image--media-list-document">
@@ -220,6 +222,7 @@ CardMedia.propTypes = {
220
222
  mimetype: PropTypes.string.isRequired,
221
223
  displayLayout: PropTypes.string.isRequired,
222
224
  data: PropTypes.object,
225
+ updated: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
223
226
  onSelected: PropTypes.func,
224
227
  updateFile: PropTypes.func.isRequired,
225
228
  removeFile: PropTypes.func.isRequired,
@@ -233,6 +236,7 @@ CardMedia.defaultProps = {
233
236
  onSelected: () => {},
234
237
  selected: false,
235
238
  data: {},
239
+ updated: null,
236
240
  openEditInModal: false
237
241
  };
238
242
 
@@ -10,9 +10,9 @@ import { STORE_KEY, NAME } from '../../constants';
10
10
  const EditMediaFile = ({
11
11
  onChange,
12
12
  handleSaveButtonStatus,
13
- enableSaveButton,
14
13
  fileId,
15
- showChangeButton
14
+ showChangeButton,
15
+ fileUpdated
16
16
  }) => {
17
17
  const [formValues, setFormValues] = useState(null);
18
18
  const [displayFileUploadModal, setDisplayFileUploadModal] = useState(false);
@@ -25,7 +25,7 @@ const EditMediaFile = ({
25
25
  refetch: refetchFile
26
26
  } = useQuery(fileQuery, {
27
27
  variables: { id: fileId },
28
- fetchPolicy: 'network-only'
28
+ fetchPolicy: 'cache-and-network'
29
29
  });
30
30
 
31
31
  const fileStoresType = getQuery('GET_FILE_STORES');
@@ -34,12 +34,24 @@ const EditMediaFile = ({
34
34
  });
35
35
 
36
36
  useEffect(() => {
37
- if (!formValues && file) {
38
- setFormValues(file);
37
+ if (file) {
38
+ setFormValues(prevFormValues => {
39
+ if (!prevFormValues || prevFormValues.updated !== file.updated) {
40
+ return file;
41
+ }
42
+ return prevFormValues;
43
+ });
39
44
  }
40
- }, [file, formValues, storeType]);
45
+ }, [file]);
46
+
47
+ useEffect(() => {
48
+ if (fileUpdated && fileUpdated.updated) {
49
+ setFormValues(fileUpdated);
50
+ }
51
+ }, [fileUpdated]);
41
52
 
42
53
  const handleFormChange = ({ isValid, isNewValueSet, valuesChecked }) => {
54
+ const baseFile = formValues || file;
43
55
  const valuesCheckedWithoutName = valuesChecked.filter(
44
56
  ({ id }) => id !== NAME && id !== STORE_KEY
45
57
  );
@@ -53,52 +65,67 @@ const EditMediaFile = ({
53
65
  const { value: storeKey } = valuesChecked.find(({ id }) => id === STORE_KEY) || {};
54
66
 
55
67
  const shouldEnableSaveButton = isNewValueSet && isValid;
56
- handleSaveButtonStatus(false);
57
- if (shouldEnableSaveButton && shouldEnableSaveButton !== enableSaveButton) {
58
- handleSaveButtonStatus(shouldEnableSaveButton);
59
- }
68
+ handleSaveButtonStatus(shouldEnableSaveButton);
60
69
 
61
70
  const updatedFile = {
62
- id: file.id,
63
- name: newFileName,
64
- storeKey,
65
- data: dataValues
71
+ ...baseFile,
72
+ name: newFileName || baseFile.name,
73
+ storeKey: storeKey || baseFile.storeKey,
74
+ data: { ...(baseFile.data || {}), ...dataValues }
66
75
  };
67
76
 
68
77
  setFormValues(updatedFile);
69
- onChange(updatedFile);
78
+ // Strip GraphQL metadata field __typename before passing data to onChange.
79
+ const { __typename, ...cleanData } = updatedFile.data || {};
80
+ onChange({ id: updatedFile.id, name: updatedFile.name, data: cleanData });
70
81
  };
71
82
 
72
- const getFileWithStoreType = () => {
73
- if (storeType && file) {
83
+ const getFileWithStoreType = sourceFile => {
84
+ const base = sourceFile || file;
85
+ if (storeType && base) {
74
86
  const storeOptions = storeType.map(type => [type.key, type.name]);
75
87
  const defaultStore = storeType.find(type => type.isDefault) || null;
76
- return { ...file, store: { defaultStore, storeOptions } };
88
+ return { ...base, store: { defaultStore, storeOptions } };
77
89
  }
78
- return file;
90
+ return base;
79
91
  };
80
92
 
81
93
  const closeModalAndSetValue = async (isSaving, values, toastMessage) => {
82
94
  if (toastMessage) {
83
- addToast(toastMessage, {
84
- appearance: 'success',
85
- autoDismiss: true
95
+ addToast(toastMessage, { appearance: 'success', autoDismiss: true });
96
+ }
97
+
98
+ if (values) {
99
+ const updated =
100
+ values.id === fileId
101
+ ? values
102
+ : {
103
+ ...(formValues || file),
104
+ ...values,
105
+ url: values.url || (formValues || file).url
106
+ };
107
+ setFormValues(updated);
108
+ onChange(updated);
109
+ handleSaveButtonStatus(true);
110
+ } else {
111
+ const { data: { file: refreshedFile } = {} } = await refetchFile({
112
+ id: fileId,
113
+ timestamp: Date.now()
86
114
  });
115
+ if (refreshedFile) {
116
+ setFormValues(refreshedFile);
117
+ onChange(refreshedFile);
118
+ handleSaveButtonStatus(true);
119
+ }
87
120
  }
88
- await refetchFile({
89
- id: fileId,
90
- timestamp: Date.now()
91
- });
92
- setDisplayFileUploadModal(false);
93
- };
94
121
 
95
- const handleChangeFile = () => {
96
- setDisplayFileUploadModal(true);
122
+ setDisplayFileUploadModal(false);
97
123
  };
98
124
 
99
125
  if (loading) return <div>loading...</div>;
100
126
 
101
- const fileWithStoreType = getFileWithStoreType();
127
+ const fileToRender = formValues || file;
128
+ const fileWithStoreType = getFileWithStoreType(fileToRender);
102
129
 
103
130
  return !loading ? (
104
131
  <>
@@ -106,7 +133,7 @@ const EditMediaFile = ({
106
133
  <FilePreview
107
134
  file={fileWithStoreType}
108
135
  handleFormChange={handleFormChange}
109
- handleChangeFile={handleChangeFile}
136
+ handleChangeFile={() => setDisplayFileUploadModal(true)}
110
137
  displayForm
111
138
  showChangeButton={showChangeButton}
112
139
  />
@@ -114,13 +141,12 @@ const EditMediaFile = ({
114
141
  {displayFileUploadModal && (
115
142
  <div className="file-upload-modal-wrapper">
116
143
  <FileUploadModal
117
- onClose={() => {
118
- setDisplayFileUploadModal(false);
119
- }}
144
+ onClose={() => setDisplayFileUploadModal(false)}
120
145
  closeModalAndSetValue={closeModalAndSetValue}
121
146
  simpleLayout
122
147
  fileId={fileId}
123
- getSelectedFiles={() => {}}
148
+ storeKey={file && file.storeKey}
149
+ getSelectedFiles={() => { }}
124
150
  />
125
151
  </div>
126
152
  )}
@@ -134,13 +160,13 @@ EditMediaFile.propTypes = {
134
160
  fileId: PropTypes.string.isRequired,
135
161
  onChange: PropTypes.func.isRequired,
136
162
  handleSaveButtonStatus: PropTypes.func.isRequired,
137
- enableSaveButton: PropTypes.bool,
138
- showChangeButton: PropTypes.bool
163
+ showChangeButton: PropTypes.bool,
164
+ fileUpdated: PropTypes.object
139
165
  };
140
166
 
141
167
  EditMediaFile.defaultProps = {
142
- enableSaveButton: false,
143
- showChangeButton: false
168
+ showChangeButton: false,
169
+ fileUpdated: null
144
170
  };
145
171
 
146
172
  export default EditMediaFile;
@@ -20,19 +20,44 @@ const EditMediaFilePage = ({ match, history }) => {
20
20
  };
21
21
 
22
22
  const handleFormSave = async () => {
23
+ if (!file) {
24
+ addToast('No file data to update', {
25
+ appearance: 'error',
26
+ autoDismiss: true
27
+ });
28
+ return;
29
+ }
30
+
23
31
  try {
24
- await client.mutate({
32
+ const inputData = {
33
+ id: file.id,
34
+ name: file.name,
35
+ data: file.data,
36
+ storeKey: file.storeKey
37
+ };
38
+
39
+ const {
40
+ data: { updateFile: updatedFile }
41
+ } = await client.mutate({
25
42
  mutation: getMutation('UPDATE_FILE'),
26
- variables: { input: file },
43
+ variables: {
44
+ input: inputData
45
+ },
27
46
  update(cache, { data: { updateFile: fileUpdated } }) {
28
- cache.writeQuery({
29
- query: getQuery('GET_FILE_BY_ID'),
30
- variables: { id: match.params.fileId },
31
- data: { file: fileUpdated.result }
32
- });
47
+ try {
48
+ cache.writeQuery({
49
+ query: getQuery('GET_FILE_BY_ID'),
50
+ variables: { id: match.params.fileId },
51
+ data: { file: fileUpdated.result }
52
+ });
53
+ } catch (e) {
54
+ console.error(e); //eslint-disable-line
55
+ }
33
56
  }
34
57
  });
35
58
 
59
+ setFile(updatedFile.result);
60
+
36
61
  addToast(`File: ${file.name} has been updated`, {
37
62
  appearance: 'success',
38
63
  autoDismiss: true
@@ -42,7 +67,6 @@ const EditMediaFilePage = ({ match, history }) => {
42
67
  appearance: 'error',
43
68
  autoDismiss: true
44
69
  });
45
- console.error(e); //eslint-disable-line
46
70
  }
47
71
  setShouldEnableSaveButton(false);
48
72
  };
@@ -61,6 +85,7 @@ const EditMediaFilePage = ({ match, history }) => {
61
85
  handleSaveButtonStatus={handleSaveButtonStatus}
62
86
  handleFormSave={handleFormSave}
63
87
  showChangeButton
88
+ fileUpdated={file}
64
89
  />
65
90
  <div className="page__content__mediaWrapperActions">
66
91
  <Button onClick={pushBack}>Cancel</Button>