decap-cms-core 2.56.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +9 -0
  3. package/dist/decap-cms-core.js +47 -0
  4. package/dist/decap-cms-core.js.LICENSE.txt +109 -0
  5. package/dist/decap-cms-core.js.map +1 -0
  6. package/dist/esm/actions/auth.js +118 -0
  7. package/dist/esm/actions/collections.js +23 -0
  8. package/dist/esm/actions/config.js +482 -0
  9. package/dist/esm/actions/deploys.js +89 -0
  10. package/dist/esm/actions/editorialWorkflow.js +511 -0
  11. package/dist/esm/actions/entries.js +940 -0
  12. package/dist/esm/actions/media.js +168 -0
  13. package/dist/esm/actions/mediaLibrary.js +606 -0
  14. package/dist/esm/actions/notifications.js +32 -0
  15. package/dist/esm/actions/search.js +156 -0
  16. package/dist/esm/actions/status.js +93 -0
  17. package/dist/esm/actions/waitUntil.js +39 -0
  18. package/dist/esm/backend.js +1073 -0
  19. package/dist/esm/bootstrap.js +107 -0
  20. package/dist/esm/components/App/App.js +301 -0
  21. package/dist/esm/components/App/Header.js +162 -0
  22. package/dist/esm/components/App/NotFoundPage.js +27 -0
  23. package/dist/esm/components/Collection/Collection.js +210 -0
  24. package/dist/esm/components/Collection/CollectionControls.js +54 -0
  25. package/dist/esm/components/Collection/CollectionSearch.js +235 -0
  26. package/dist/esm/components/Collection/CollectionTop.js +77 -0
  27. package/dist/esm/components/Collection/ControlButton.js +23 -0
  28. package/dist/esm/components/Collection/Entries/Entries.js +74 -0
  29. package/dist/esm/components/Collection/Entries/EntriesCollection.js +193 -0
  30. package/dist/esm/components/Collection/Entries/EntriesSearch.js +117 -0
  31. package/dist/esm/components/Collection/Entries/EntryCard.js +134 -0
  32. package/dist/esm/components/Collection/Entries/EntryListing.js +120 -0
  33. package/dist/esm/components/Collection/FilterControl.js +41 -0
  34. package/dist/esm/components/Collection/GroupControl.js +41 -0
  35. package/dist/esm/components/Collection/NestedCollection.js +311 -0
  36. package/dist/esm/components/Collection/Sidebar.js +102 -0
  37. package/dist/esm/components/Collection/SortControl.js +67 -0
  38. package/dist/esm/components/Collection/ViewStyleControl.js +47 -0
  39. package/dist/esm/components/Editor/Editor.js +479 -0
  40. package/dist/esm/components/Editor/EditorControlPane/EditorControl.js +393 -0
  41. package/dist/esm/components/Editor/EditorControlPane/EditorControlPane.js +259 -0
  42. package/dist/esm/components/Editor/EditorControlPane/Widget.js +355 -0
  43. package/dist/esm/components/Editor/EditorInterface.js +401 -0
  44. package/dist/esm/components/Editor/EditorPreviewPane/EditorPreview.js +56 -0
  45. package/dist/esm/components/Editor/EditorPreviewPane/EditorPreviewContent.js +34 -0
  46. package/dist/esm/components/Editor/EditorPreviewPane/EditorPreviewPane.js +252 -0
  47. package/dist/esm/components/Editor/EditorPreviewPane/PreviewHOC.js +39 -0
  48. package/dist/esm/components/Editor/EditorToolbar.js +551 -0
  49. package/dist/esm/components/Editor/withWorkflow.js +64 -0
  50. package/dist/esm/components/EditorWidgets/Unknown/UnknownControl.js +26 -0
  51. package/dist/esm/components/EditorWidgets/Unknown/UnknownPreview.js +28 -0
  52. package/dist/esm/components/EditorWidgets/index.js +7 -0
  53. package/dist/esm/components/MediaLibrary/EmptyMessage.js +30 -0
  54. package/dist/esm/components/MediaLibrary/MediaLibrary.js +444 -0
  55. package/dist/esm/components/MediaLibrary/MediaLibraryButtons.js +110 -0
  56. package/dist/esm/components/MediaLibrary/MediaLibraryCard.js +108 -0
  57. package/dist/esm/components/MediaLibrary/MediaLibraryCardGrid.js +211 -0
  58. package/dist/esm/components/MediaLibrary/MediaLibraryHeader.js +40 -0
  59. package/dist/esm/components/MediaLibrary/MediaLibraryModal.js +163 -0
  60. package/dist/esm/components/MediaLibrary/MediaLibrarySearch.js +60 -0
  61. package/dist/esm/components/MediaLibrary/MediaLibraryTop.js +134 -0
  62. package/dist/esm/components/UI/DragDrop.js +84 -0
  63. package/dist/esm/components/UI/ErrorBoundary.js +184 -0
  64. package/dist/esm/components/UI/FileUploadButton.js +34 -0
  65. package/dist/esm/components/UI/Modal.js +113 -0
  66. package/dist/esm/components/UI/Notifications.js +74 -0
  67. package/dist/esm/components/UI/SettingsDropdown.js +118 -0
  68. package/dist/esm/components/UI/index.js +60 -0
  69. package/dist/esm/components/Workflow/Workflow.js +144 -0
  70. package/dist/esm/components/Workflow/WorkflowCard.js +137 -0
  71. package/dist/esm/components/Workflow/WorkflowList.js +219 -0
  72. package/dist/esm/constants/collectionTypes.js +10 -0
  73. package/dist/esm/constants/collectionViews.js +10 -0
  74. package/dist/esm/constants/commitProps.js +10 -0
  75. package/dist/esm/constants/configSchema.js +594 -0
  76. package/dist/esm/constants/fieldInference.js +67 -0
  77. package/dist/esm/constants/publishModes.js +28 -0
  78. package/dist/esm/constants/validationErrorTypes.js +13 -0
  79. package/dist/esm/formats/formats.js +82 -0
  80. package/dist/esm/formats/frontmatter.js +163 -0
  81. package/dist/esm/formats/helpers.js +18 -0
  82. package/dist/esm/formats/json.js +15 -0
  83. package/dist/esm/formats/toml.js +40 -0
  84. package/dist/esm/formats/yaml.js +63 -0
  85. package/dist/esm/index.js +20 -0
  86. package/dist/esm/integrations/index.js +37 -0
  87. package/dist/esm/integrations/providers/algolia/implementation.js +184 -0
  88. package/dist/esm/integrations/providers/assetStore/implementation.js +175 -0
  89. package/dist/esm/lib/consoleError.js +9 -0
  90. package/dist/esm/lib/formatters.js +204 -0
  91. package/dist/esm/lib/i18n.js +381 -0
  92. package/dist/esm/lib/phrases.js +13 -0
  93. package/dist/esm/lib/registry.js +322 -0
  94. package/dist/esm/lib/serializeEntryValues.js +74 -0
  95. package/dist/esm/lib/textHelper.js +15 -0
  96. package/dist/esm/lib/urlHelper.js +128 -0
  97. package/dist/esm/mediaLibrary.js +42 -0
  98. package/dist/esm/reducers/auth.js +35 -0
  99. package/dist/esm/reducers/collections.js +424 -0
  100. package/dist/esm/reducers/combinedReducer.js +19 -0
  101. package/dist/esm/reducers/config.js +42 -0
  102. package/dist/esm/reducers/cursors.js +38 -0
  103. package/dist/esm/reducers/deploys.js +53 -0
  104. package/dist/esm/reducers/editorialWorkflow.js +98 -0
  105. package/dist/esm/reducers/entries.js +591 -0
  106. package/dist/esm/reducers/entryDraft.js +184 -0
  107. package/dist/esm/reducers/globalUI.js +32 -0
  108. package/dist/esm/reducers/index.js +84 -0
  109. package/dist/esm/reducers/integrations.js +68 -0
  110. package/dist/esm/reducers/mediaLibrary.js +265 -0
  111. package/dist/esm/reducers/medias.js +76 -0
  112. package/dist/esm/reducers/notifications.js +36 -0
  113. package/dist/esm/reducers/search.js +89 -0
  114. package/dist/esm/reducers/status.js +37 -0
  115. package/dist/esm/redux/index.js +14 -0
  116. package/dist/esm/redux/middleware/waitUntilAction.js +56 -0
  117. package/dist/esm/routing/history.js +21 -0
  118. package/dist/esm/types/diacritics.d.js +1 -0
  119. package/dist/esm/types/global.d.js +5 -0
  120. package/dist/esm/types/immutable.js +5 -0
  121. package/dist/esm/types/redux.js +16 -0
  122. package/dist/esm/types/tomlify-j0.4.d.js +1 -0
  123. package/dist/esm/valueObjects/AssetProxy.js +60 -0
  124. package/dist/esm/valueObjects/EditorComponent.js +48 -0
  125. package/dist/esm/valueObjects/Entry.js +27 -0
  126. package/index.d.ts +587 -0
  127. package/package.json +102 -0
  128. package/src/__tests__/backend.spec.js +934 -0
  129. package/src/actions/__tests__/config.spec.js +1009 -0
  130. package/src/actions/__tests__/editorialWorkflow.spec.js +216 -0
  131. package/src/actions/__tests__/entries.spec.js +575 -0
  132. package/src/actions/__tests__/media.spec.ts +171 -0
  133. package/src/actions/__tests__/mediaLibrary.spec.js +327 -0
  134. package/src/actions/__tests__/search.spec.js +209 -0
  135. package/src/actions/auth.ts +127 -0
  136. package/src/actions/collections.ts +18 -0
  137. package/src/actions/config.ts +538 -0
  138. package/src/actions/deploys.ts +104 -0
  139. package/src/actions/editorialWorkflow.ts +567 -0
  140. package/src/actions/entries.ts +1041 -0
  141. package/src/actions/media.ts +139 -0
  142. package/src/actions/mediaLibrary.ts +574 -0
  143. package/src/actions/notifications.ts +36 -0
  144. package/src/actions/search.ts +194 -0
  145. package/src/actions/status.ts +99 -0
  146. package/src/actions/waitUntil.ts +49 -0
  147. package/src/backend.ts +1342 -0
  148. package/src/bootstrap.js +102 -0
  149. package/src/components/App/App.js +280 -0
  150. package/src/components/App/Header.js +236 -0
  151. package/src/components/App/NotFoundPage.js +23 -0
  152. package/src/components/Collection/Collection.js +205 -0
  153. package/src/components/Collection/CollectionControls.js +58 -0
  154. package/src/components/Collection/CollectionSearch.js +238 -0
  155. package/src/components/Collection/CollectionTop.js +81 -0
  156. package/src/components/Collection/ControlButton.js +27 -0
  157. package/src/components/Collection/Entries/Entries.js +73 -0
  158. package/src/components/Collection/Entries/EntriesCollection.js +165 -0
  159. package/src/components/Collection/Entries/EntriesSearch.js +91 -0
  160. package/src/components/Collection/Entries/EntryCard.js +167 -0
  161. package/src/components/Collection/Entries/EntryListing.js +86 -0
  162. package/src/components/Collection/Entries/__tests__/EntriesCollection.spec.js +155 -0
  163. package/src/components/Collection/Entries/__tests__/__snapshots__/EntriesCollection.spec.js.snap +49 -0
  164. package/src/components/Collection/FilterControl.js +39 -0
  165. package/src/components/Collection/GroupControl.js +39 -0
  166. package/src/components/Collection/NestedCollection.js +309 -0
  167. package/src/components/Collection/Sidebar.js +130 -0
  168. package/src/components/Collection/SortControl.js +68 -0
  169. package/src/components/Collection/ViewStyleControl.js +50 -0
  170. package/src/components/Collection/__tests__/Collection.spec.js +75 -0
  171. package/src/components/Collection/__tests__/NestedCollection.spec.js +442 -0
  172. package/src/components/Collection/__tests__/Sidebar.spec.js +87 -0
  173. package/src/components/Collection/__tests__/__snapshots__/Collection.spec.js.snap +144 -0
  174. package/src/components/Collection/__tests__/__snapshots__/NestedCollection.spec.js.snap +550 -0
  175. package/src/components/Collection/__tests__/__snapshots__/Sidebar.spec.js.snap +308 -0
  176. package/src/components/Editor/Editor.js +494 -0
  177. package/src/components/Editor/EditorControlPane/EditorControl.js +428 -0
  178. package/src/components/Editor/EditorControlPane/EditorControlPane.js +256 -0
  179. package/src/components/Editor/EditorControlPane/Widget.js +351 -0
  180. package/src/components/Editor/EditorInterface.js +434 -0
  181. package/src/components/Editor/EditorPreviewPane/EditorPreview.js +40 -0
  182. package/src/components/Editor/EditorPreviewPane/EditorPreviewContent.js +34 -0
  183. package/src/components/Editor/EditorPreviewPane/EditorPreviewPane.js +278 -0
  184. package/src/components/Editor/EditorPreviewPane/PreviewHOC.js +33 -0
  185. package/src/components/Editor/EditorToolbar.js +678 -0
  186. package/src/components/Editor/__tests__/Editor.spec.js +219 -0
  187. package/src/components/Editor/__tests__/EditorToolbar.spec.js +120 -0
  188. package/src/components/Editor/__tests__/__snapshots__/Editor.spec.js.snap +45 -0
  189. package/src/components/Editor/__tests__/__snapshots__/EditorToolbar.spec.js.snap +4020 -0
  190. package/src/components/Editor/withWorkflow.js +61 -0
  191. package/src/components/EditorWidgets/Unknown/UnknownControl.js +17 -0
  192. package/src/components/EditorWidgets/Unknown/UnknownPreview.js +19 -0
  193. package/src/components/EditorWidgets/index.js +5 -0
  194. package/src/components/MediaLibrary/EmptyMessage.js +28 -0
  195. package/src/components/MediaLibrary/MediaLibrary.js +407 -0
  196. package/src/components/MediaLibrary/MediaLibraryButtons.js +136 -0
  197. package/src/components/MediaLibrary/MediaLibraryCard.js +128 -0
  198. package/src/components/MediaLibrary/MediaLibraryCardGrid.js +199 -0
  199. package/src/components/MediaLibrary/MediaLibraryHeader.js +48 -0
  200. package/src/components/MediaLibrary/MediaLibraryModal.js +200 -0
  201. package/src/components/MediaLibrary/MediaLibrarySearch.js +61 -0
  202. package/src/components/MediaLibrary/MediaLibraryTop.js +143 -0
  203. package/src/components/MediaLibrary/__tests__/MediaLibraryButtons.spec.js +45 -0
  204. package/src/components/MediaLibrary/__tests__/MediaLibraryCard.spec.js +49 -0
  205. package/src/components/MediaLibrary/__tests__/__snapshots__/MediaLibraryCard.spec.js.snap +216 -0
  206. package/src/components/UI/DragDrop.js +66 -0
  207. package/src/components/UI/ErrorBoundary.js +209 -0
  208. package/src/components/UI/FileUploadButton.js +24 -0
  209. package/src/components/UI/Modal.js +109 -0
  210. package/src/components/UI/Notifications.tsx +83 -0
  211. package/src/components/UI/SettingsDropdown.js +103 -0
  212. package/src/components/UI/__tests__/ErrorBoundary.spec.js +57 -0
  213. package/src/components/UI/index.js +6 -0
  214. package/src/components/Workflow/Workflow.js +166 -0
  215. package/src/components/Workflow/WorkflowCard.js +177 -0
  216. package/src/components/Workflow/WorkflowList.js +269 -0
  217. package/src/constants/__tests__/configSchema.spec.js +511 -0
  218. package/src/constants/collectionTypes.ts +2 -0
  219. package/src/constants/collectionViews.js +2 -0
  220. package/src/constants/commitProps.ts +2 -0
  221. package/src/constants/configSchema.js +399 -0
  222. package/src/constants/fieldInference.tsx +78 -0
  223. package/src/constants/publishModes.ts +22 -0
  224. package/src/constants/validationErrorTypes.js +6 -0
  225. package/src/formats/__tests__/frontmatter.spec.js +429 -0
  226. package/src/formats/__tests__/toml.spec.js +9 -0
  227. package/src/formats/__tests__/yaml.spec.js +162 -0
  228. package/src/formats/formats.ts +86 -0
  229. package/src/formats/frontmatter.ts +150 -0
  230. package/src/formats/helpers.ts +14 -0
  231. package/src/formats/json.ts +9 -0
  232. package/src/formats/toml.ts +33 -0
  233. package/src/formats/yaml.ts +58 -0
  234. package/src/index.js +8 -0
  235. package/src/integrations/index.js +35 -0
  236. package/src/integrations/providers/algolia/implementation.js +176 -0
  237. package/src/integrations/providers/assetStore/implementation.js +147 -0
  238. package/src/lib/__tests__/formatters.spec.js +723 -0
  239. package/src/lib/__tests__/i18n.spec.js +792 -0
  240. package/src/lib/__tests__/phrases.spec.js +119 -0
  241. package/src/lib/__tests__/registry.spec.js +246 -0
  242. package/src/lib/__tests__/serializeEntryValues.spec.js +22 -0
  243. package/src/lib/__tests__/urlHelper.spec.js +138 -0
  244. package/src/lib/consoleError.js +7 -0
  245. package/src/lib/formatters.ts +267 -0
  246. package/src/lib/i18n.ts +427 -0
  247. package/src/lib/phrases.js +8 -0
  248. package/src/lib/registry.js +282 -0
  249. package/src/lib/serializeEntryValues.js +75 -0
  250. package/src/lib/textHelper.js +11 -0
  251. package/src/lib/urlHelper.ts +125 -0
  252. package/src/mediaLibrary.ts +51 -0
  253. package/src/reducers/__tests__/auth.spec.ts +38 -0
  254. package/src/reducers/__tests__/collections.spec.js +571 -0
  255. package/src/reducers/__tests__/config.spec.js +38 -0
  256. package/src/reducers/__tests__/entries.spec.js +694 -0
  257. package/src/reducers/__tests__/entryDraft.spec.js +198 -0
  258. package/src/reducers/__tests__/globalUI.js +43 -0
  259. package/src/reducers/__tests__/integrations.spec.ts +76 -0
  260. package/src/reducers/__tests__/mediaLibrary.spec.js +154 -0
  261. package/src/reducers/__tests__/medias.spec.ts +49 -0
  262. package/src/reducers/auth.ts +46 -0
  263. package/src/reducers/collections.ts +483 -0
  264. package/src/reducers/combinedReducer.ts +11 -0
  265. package/src/reducers/config.ts +38 -0
  266. package/src/reducers/cursors.js +36 -0
  267. package/src/reducers/deploys.ts +52 -0
  268. package/src/reducers/editorialWorkflow.ts +163 -0
  269. package/src/reducers/entries.ts +806 -0
  270. package/src/reducers/entryDraft.js +218 -0
  271. package/src/reducers/globalUI.ts +45 -0
  272. package/src/reducers/index.ts +82 -0
  273. package/src/reducers/integrations.ts +59 -0
  274. package/src/reducers/mediaLibrary.ts +296 -0
  275. package/src/reducers/medias.ts +66 -0
  276. package/src/reducers/notifications.ts +53 -0
  277. package/src/reducers/search.ts +89 -0
  278. package/src/reducers/status.ts +40 -0
  279. package/src/redux/index.ts +18 -0
  280. package/src/redux/middleware/waitUntilAction.ts +64 -0
  281. package/src/routing/__tests__/history.spec.ts +49 -0
  282. package/src/routing/history.ts +17 -0
  283. package/src/types/diacritics.d.ts +1 -0
  284. package/src/types/global.d.ts +8 -0
  285. package/src/types/immutable.ts +39 -0
  286. package/src/types/redux.ts +810 -0
  287. package/src/types/tomlify-j0.4.d.ts +13 -0
  288. package/src/valueObjects/AssetProxy.ts +48 -0
  289. package/src/valueObjects/EditorComponent.js +38 -0
  290. package/src/valueObjects/Entry.ts +63 -0
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.DEPLOY_PREVIEW_SUCCESS = exports.DEPLOY_PREVIEW_REQUEST = exports.DEPLOY_PREVIEW_FAILURE = void 0;
7
+ exports.loadDeployPreview = loadDeployPreview;
8
+ var _backend = require("../backend");
9
+ var _reducers = require("../reducers");
10
+ var _notifications = require("./notifications");
11
+ const DEPLOY_PREVIEW_REQUEST = 'DEPLOY_PREVIEW_REQUEST';
12
+ exports.DEPLOY_PREVIEW_REQUEST = DEPLOY_PREVIEW_REQUEST;
13
+ const DEPLOY_PREVIEW_SUCCESS = 'DEPLOY_PREVIEW_SUCCESS';
14
+ exports.DEPLOY_PREVIEW_SUCCESS = DEPLOY_PREVIEW_SUCCESS;
15
+ const DEPLOY_PREVIEW_FAILURE = 'DEPLOY_PREVIEW_FAILURE';
16
+ exports.DEPLOY_PREVIEW_FAILURE = DEPLOY_PREVIEW_FAILURE;
17
+ function deployPreviewLoading(collection, slug) {
18
+ return {
19
+ type: DEPLOY_PREVIEW_REQUEST,
20
+ payload: {
21
+ collection,
22
+ slug
23
+ }
24
+ };
25
+ }
26
+ function deployPreviewLoaded(collection, slug, deploy) {
27
+ const {
28
+ url,
29
+ status
30
+ } = deploy;
31
+ return {
32
+ type: DEPLOY_PREVIEW_SUCCESS,
33
+ payload: {
34
+ collection,
35
+ slug,
36
+ url,
37
+ status
38
+ }
39
+ };
40
+ }
41
+ function deployPreviewError(collection, slug) {
42
+ return {
43
+ type: DEPLOY_PREVIEW_FAILURE,
44
+ payload: {
45
+ collection,
46
+ slug
47
+ }
48
+ };
49
+ }
50
+
51
+ /**
52
+ * Requests a deploy preview object from the registered backend.
53
+ */
54
+ function loadDeployPreview(collection, slug, entry, published, opts) {
55
+ return async (dispatch, getState) => {
56
+ const state = getState();
57
+ const backend = (0, _backend.currentBackend)(state.config);
58
+ const collectionName = collection.get('name');
59
+
60
+ // Exit if currently fetching
61
+ const deployState = (0, _reducers.selectDeployPreview)(state, collectionName, slug);
62
+ if (deployState && deployState.isFetching) {
63
+ return;
64
+ }
65
+ dispatch(deployPreviewLoading(collectionName, slug));
66
+ try {
67
+ /**
68
+ * `getDeploy` is for published entries, while `getDeployPreview` is for
69
+ * unpublished entries.
70
+ */
71
+ const deploy = published ? backend.getDeploy(collection, slug, entry) : await backend.getDeployPreview(collection, slug, entry, opts);
72
+ if (deploy) {
73
+ return dispatch(deployPreviewLoaded(collectionName, slug, deploy));
74
+ }
75
+ return dispatch(deployPreviewError(collectionName, slug));
76
+ } catch (error) {
77
+ console.error(error);
78
+ dispatch((0, _notifications.addNotification)({
79
+ message: {
80
+ details: error.message,
81
+ key: 'ui.toast.onFailToLoadDeployPreview'
82
+ },
83
+ type: 'error',
84
+ dismissAfter: 8000
85
+ }));
86
+ dispatch(deployPreviewError(collectionName, slug));
87
+ }
88
+ };
89
+ }
@@ -0,0 +1,511 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.UNPUBLISHED_ENTRY_SUCCESS = exports.UNPUBLISHED_ENTRY_STATUS_CHANGE_SUCCESS = exports.UNPUBLISHED_ENTRY_STATUS_CHANGE_REQUEST = exports.UNPUBLISHED_ENTRY_STATUS_CHANGE_FAILURE = exports.UNPUBLISHED_ENTRY_REQUEST = exports.UNPUBLISHED_ENTRY_REDIRECT = exports.UNPUBLISHED_ENTRY_PUBLISH_SUCCESS = exports.UNPUBLISHED_ENTRY_PUBLISH_REQUEST = exports.UNPUBLISHED_ENTRY_PUBLISH_FAILURE = exports.UNPUBLISHED_ENTRY_PERSIST_SUCCESS = exports.UNPUBLISHED_ENTRY_PERSIST_REQUEST = exports.UNPUBLISHED_ENTRY_PERSIST_FAILURE = exports.UNPUBLISHED_ENTRY_DELETE_SUCCESS = exports.UNPUBLISHED_ENTRY_DELETE_REQUEST = exports.UNPUBLISHED_ENTRY_DELETE_FAILURE = exports.UNPUBLISHED_ENTRIES_SUCCESS = exports.UNPUBLISHED_ENTRIES_REQUEST = exports.UNPUBLISHED_ENTRIES_FAILURE = void 0;
7
+ exports.deleteUnpublishedEntry = deleteUnpublishedEntry;
8
+ exports.loadUnpublishedEntries = loadUnpublishedEntries;
9
+ exports.loadUnpublishedEntry = loadUnpublishedEntry;
10
+ exports.persistUnpublishedEntry = persistUnpublishedEntry;
11
+ exports.publishUnpublishedEntry = publishUnpublishedEntry;
12
+ exports.unpublishPublishedEntry = unpublishPublishedEntry;
13
+ exports.updateUnpublishedEntryStatus = updateUnpublishedEntryStatus;
14
+ var _get2 = _interopRequireDefault(require("lodash/get"));
15
+ var _immutable = require("immutable");
16
+ var _decapCmsLibUtil = require("decap-cms-lib-util");
17
+ var _backend = require("../backend");
18
+ var _reducers = require("../reducers");
19
+ var _entries = require("../reducers/entries");
20
+ var _publishModes = require("../constants/publishModes");
21
+ var _entries2 = require("./entries");
22
+ var _AssetProxy = require("../valueObjects/AssetProxy");
23
+ var _media = require("./media");
24
+ var _mediaLibrary = require("./mediaLibrary");
25
+ var _validationErrorTypes = _interopRequireDefault(require("../constants/validationErrorTypes"));
26
+ var _history = require("../routing/history");
27
+ var _notifications = require("./notifications");
28
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
+ /*
30
+ * Constant Declarations
31
+ */
32
+ const UNPUBLISHED_ENTRY_REQUEST = 'UNPUBLISHED_ENTRY_REQUEST';
33
+ exports.UNPUBLISHED_ENTRY_REQUEST = UNPUBLISHED_ENTRY_REQUEST;
34
+ const UNPUBLISHED_ENTRY_SUCCESS = 'UNPUBLISHED_ENTRY_SUCCESS';
35
+ exports.UNPUBLISHED_ENTRY_SUCCESS = UNPUBLISHED_ENTRY_SUCCESS;
36
+ const UNPUBLISHED_ENTRY_REDIRECT = 'UNPUBLISHED_ENTRY_REDIRECT';
37
+ exports.UNPUBLISHED_ENTRY_REDIRECT = UNPUBLISHED_ENTRY_REDIRECT;
38
+ const UNPUBLISHED_ENTRIES_REQUEST = 'UNPUBLISHED_ENTRIES_REQUEST';
39
+ exports.UNPUBLISHED_ENTRIES_REQUEST = UNPUBLISHED_ENTRIES_REQUEST;
40
+ const UNPUBLISHED_ENTRIES_SUCCESS = 'UNPUBLISHED_ENTRIES_SUCCESS';
41
+ exports.UNPUBLISHED_ENTRIES_SUCCESS = UNPUBLISHED_ENTRIES_SUCCESS;
42
+ const UNPUBLISHED_ENTRIES_FAILURE = 'UNPUBLISHED_ENTRIES_FAILURE';
43
+ exports.UNPUBLISHED_ENTRIES_FAILURE = UNPUBLISHED_ENTRIES_FAILURE;
44
+ const UNPUBLISHED_ENTRY_PERSIST_REQUEST = 'UNPUBLISHED_ENTRY_PERSIST_REQUEST';
45
+ exports.UNPUBLISHED_ENTRY_PERSIST_REQUEST = UNPUBLISHED_ENTRY_PERSIST_REQUEST;
46
+ const UNPUBLISHED_ENTRY_PERSIST_SUCCESS = 'UNPUBLISHED_ENTRY_PERSIST_SUCCESS';
47
+ exports.UNPUBLISHED_ENTRY_PERSIST_SUCCESS = UNPUBLISHED_ENTRY_PERSIST_SUCCESS;
48
+ const UNPUBLISHED_ENTRY_PERSIST_FAILURE = 'UNPUBLISHED_ENTRY_PERSIST_FAILURE';
49
+ exports.UNPUBLISHED_ENTRY_PERSIST_FAILURE = UNPUBLISHED_ENTRY_PERSIST_FAILURE;
50
+ const UNPUBLISHED_ENTRY_STATUS_CHANGE_REQUEST = 'UNPUBLISHED_ENTRY_STATUS_CHANGE_REQUEST';
51
+ exports.UNPUBLISHED_ENTRY_STATUS_CHANGE_REQUEST = UNPUBLISHED_ENTRY_STATUS_CHANGE_REQUEST;
52
+ const UNPUBLISHED_ENTRY_STATUS_CHANGE_SUCCESS = 'UNPUBLISHED_ENTRY_STATUS_CHANGE_SUCCESS';
53
+ exports.UNPUBLISHED_ENTRY_STATUS_CHANGE_SUCCESS = UNPUBLISHED_ENTRY_STATUS_CHANGE_SUCCESS;
54
+ const UNPUBLISHED_ENTRY_STATUS_CHANGE_FAILURE = 'UNPUBLISHED_ENTRY_STATUS_CHANGE_FAILURE';
55
+ exports.UNPUBLISHED_ENTRY_STATUS_CHANGE_FAILURE = UNPUBLISHED_ENTRY_STATUS_CHANGE_FAILURE;
56
+ const UNPUBLISHED_ENTRY_PUBLISH_REQUEST = 'UNPUBLISHED_ENTRY_PUBLISH_REQUEST';
57
+ exports.UNPUBLISHED_ENTRY_PUBLISH_REQUEST = UNPUBLISHED_ENTRY_PUBLISH_REQUEST;
58
+ const UNPUBLISHED_ENTRY_PUBLISH_SUCCESS = 'UNPUBLISHED_ENTRY_PUBLISH_SUCCESS';
59
+ exports.UNPUBLISHED_ENTRY_PUBLISH_SUCCESS = UNPUBLISHED_ENTRY_PUBLISH_SUCCESS;
60
+ const UNPUBLISHED_ENTRY_PUBLISH_FAILURE = 'UNPUBLISHED_ENTRY_PUBLISH_FAILURE';
61
+ exports.UNPUBLISHED_ENTRY_PUBLISH_FAILURE = UNPUBLISHED_ENTRY_PUBLISH_FAILURE;
62
+ const UNPUBLISHED_ENTRY_DELETE_REQUEST = 'UNPUBLISHED_ENTRY_DELETE_REQUEST';
63
+ exports.UNPUBLISHED_ENTRY_DELETE_REQUEST = UNPUBLISHED_ENTRY_DELETE_REQUEST;
64
+ const UNPUBLISHED_ENTRY_DELETE_SUCCESS = 'UNPUBLISHED_ENTRY_DELETE_SUCCESS';
65
+ exports.UNPUBLISHED_ENTRY_DELETE_SUCCESS = UNPUBLISHED_ENTRY_DELETE_SUCCESS;
66
+ const UNPUBLISHED_ENTRY_DELETE_FAILURE = 'UNPUBLISHED_ENTRY_DELETE_FAILURE';
67
+
68
+ /*
69
+ * Simple Action Creators (Internal)
70
+ */
71
+ exports.UNPUBLISHED_ENTRY_DELETE_FAILURE = UNPUBLISHED_ENTRY_DELETE_FAILURE;
72
+ function unpublishedEntryLoading(collection, slug) {
73
+ return {
74
+ type: UNPUBLISHED_ENTRY_REQUEST,
75
+ payload: {
76
+ collection: collection.get('name'),
77
+ slug
78
+ }
79
+ };
80
+ }
81
+ function unpublishedEntryLoaded(collection, entry) {
82
+ return {
83
+ type: UNPUBLISHED_ENTRY_SUCCESS,
84
+ payload: {
85
+ collection: collection.get('name'),
86
+ entry
87
+ }
88
+ };
89
+ }
90
+ function unpublishedEntryRedirected(collection, slug) {
91
+ return {
92
+ type: UNPUBLISHED_ENTRY_REDIRECT,
93
+ payload: {
94
+ collection: collection.get('name'),
95
+ slug
96
+ }
97
+ };
98
+ }
99
+ function unpublishedEntriesLoading() {
100
+ return {
101
+ type: UNPUBLISHED_ENTRIES_REQUEST
102
+ };
103
+ }
104
+ function unpublishedEntriesLoaded(entries, pagination) {
105
+ return {
106
+ type: UNPUBLISHED_ENTRIES_SUCCESS,
107
+ payload: {
108
+ entries,
109
+ pages: pagination
110
+ }
111
+ };
112
+ }
113
+ function unpublishedEntriesFailed(error) {
114
+ return {
115
+ type: UNPUBLISHED_ENTRIES_FAILURE,
116
+ error: 'Failed to load entries',
117
+ payload: error
118
+ };
119
+ }
120
+ function unpublishedEntryPersisting(collection, slug) {
121
+ return {
122
+ type: UNPUBLISHED_ENTRY_PERSIST_REQUEST,
123
+ payload: {
124
+ collection: collection.get('name'),
125
+ slug
126
+ }
127
+ };
128
+ }
129
+ function unpublishedEntryPersisted(collection, entry) {
130
+ return {
131
+ type: UNPUBLISHED_ENTRY_PERSIST_SUCCESS,
132
+ payload: {
133
+ collection: collection.get('name'),
134
+ entry
135
+ }
136
+ };
137
+ }
138
+ function unpublishedEntryPersistedFail(error, collection, slug) {
139
+ return {
140
+ type: UNPUBLISHED_ENTRY_PERSIST_FAILURE,
141
+ payload: {
142
+ error,
143
+ collection: collection.get('name'),
144
+ slug
145
+ },
146
+ error
147
+ };
148
+ }
149
+ function unpublishedEntryStatusChangeRequest(collection, slug) {
150
+ return {
151
+ type: UNPUBLISHED_ENTRY_STATUS_CHANGE_REQUEST,
152
+ payload: {
153
+ collection,
154
+ slug
155
+ }
156
+ };
157
+ }
158
+ function unpublishedEntryStatusChangePersisted(collection, slug, newStatus) {
159
+ return {
160
+ type: UNPUBLISHED_ENTRY_STATUS_CHANGE_SUCCESS,
161
+ payload: {
162
+ collection,
163
+ slug,
164
+ newStatus
165
+ }
166
+ };
167
+ }
168
+ function unpublishedEntryStatusChangeError(collection, slug) {
169
+ return {
170
+ type: UNPUBLISHED_ENTRY_STATUS_CHANGE_FAILURE,
171
+ payload: {
172
+ collection,
173
+ slug
174
+ }
175
+ };
176
+ }
177
+ function unpublishedEntryPublishRequest(collection, slug) {
178
+ return {
179
+ type: UNPUBLISHED_ENTRY_PUBLISH_REQUEST,
180
+ payload: {
181
+ collection,
182
+ slug
183
+ }
184
+ };
185
+ }
186
+ function unpublishedEntryPublished(collection, slug) {
187
+ return {
188
+ type: UNPUBLISHED_ENTRY_PUBLISH_SUCCESS,
189
+ payload: {
190
+ collection,
191
+ slug
192
+ }
193
+ };
194
+ }
195
+ function unpublishedEntryPublishError(collection, slug) {
196
+ return {
197
+ type: UNPUBLISHED_ENTRY_PUBLISH_FAILURE,
198
+ payload: {
199
+ collection,
200
+ slug
201
+ }
202
+ };
203
+ }
204
+ function unpublishedEntryDeleteRequest(collection, slug) {
205
+ return {
206
+ type: UNPUBLISHED_ENTRY_DELETE_REQUEST,
207
+ payload: {
208
+ collection,
209
+ slug
210
+ }
211
+ };
212
+ }
213
+ function unpublishedEntryDeleted(collection, slug) {
214
+ return {
215
+ type: UNPUBLISHED_ENTRY_DELETE_SUCCESS,
216
+ payload: {
217
+ collection,
218
+ slug
219
+ }
220
+ };
221
+ }
222
+ function unpublishedEntryDeleteError(collection, slug) {
223
+ return {
224
+ type: UNPUBLISHED_ENTRY_DELETE_FAILURE,
225
+ payload: {
226
+ collection,
227
+ slug
228
+ }
229
+ };
230
+ }
231
+
232
+ /*
233
+ * Exported Thunk Action Creators
234
+ */
235
+
236
+ function loadUnpublishedEntry(collection, slug) {
237
+ return async (dispatch, getState) => {
238
+ const state = getState();
239
+ const backend = (0, _backend.currentBackend)(state.config);
240
+ const entriesLoaded = (0, _get2.default)(state.editorialWorkflow.toJS(), 'pages.ids', false);
241
+ //run possible unpublishedEntries migration
242
+ if (!entriesLoaded) {
243
+ try {
244
+ const {
245
+ entries,
246
+ pagination
247
+ } = await backend.unpublishedEntries(state.collections);
248
+ dispatch(unpublishedEntriesLoaded(entries, pagination));
249
+ // eslint-disable-next-line no-empty
250
+ } catch (e) {}
251
+ }
252
+ dispatch(unpublishedEntryLoading(collection, slug));
253
+ try {
254
+ const entry = await backend.unpublishedEntry(state, collection, slug);
255
+ const assetProxies = await Promise.all(entry.mediaFiles.filter(file => file.draft).map(({
256
+ url,
257
+ file,
258
+ path
259
+ }) => (0, _AssetProxy.createAssetProxy)({
260
+ path,
261
+ url,
262
+ file
263
+ })));
264
+ dispatch((0, _media.addAssets)(assetProxies));
265
+ dispatch(unpublishedEntryLoaded(collection, entry));
266
+ dispatch((0, _entries2.createDraftFromEntry)(entry));
267
+ } catch (error) {
268
+ if (error.name === _decapCmsLibUtil.EDITORIAL_WORKFLOW_ERROR && error.notUnderEditorialWorkflow) {
269
+ dispatch(unpublishedEntryRedirected(collection, slug));
270
+ dispatch((0, _entries2.loadEntry)(collection, slug));
271
+ } else {
272
+ dispatch((0, _notifications.addNotification)({
273
+ message: {
274
+ key: 'ui.toast.onFailToLoadEntries',
275
+ details: error
276
+ },
277
+ type: 'error',
278
+ dismissAfter: 8000
279
+ }));
280
+ }
281
+ }
282
+ };
283
+ }
284
+ function loadUnpublishedEntries(collections) {
285
+ return (dispatch, getState) => {
286
+ const state = getState();
287
+ const backend = (0, _backend.currentBackend)(state.config);
288
+ const entriesLoaded = (0, _get2.default)(state.editorialWorkflow.toJS(), 'pages.ids', false);
289
+ if (state.config.publish_mode !== _publishModes.EDITORIAL_WORKFLOW || entriesLoaded) {
290
+ return;
291
+ }
292
+ dispatch(unpublishedEntriesLoading());
293
+ backend.unpublishedEntries(collections).then(response => dispatch(unpublishedEntriesLoaded(response.entries, response.pagination))).catch(error => {
294
+ dispatch((0, _notifications.addNotification)({
295
+ message: {
296
+ key: 'ui.toast.onFailToLoadEntries',
297
+ details: error
298
+ },
299
+ type: 'error',
300
+ dismissAfter: 8000
301
+ }));
302
+ dispatch(unpublishedEntriesFailed(error));
303
+ Promise.reject(error);
304
+ });
305
+ };
306
+ }
307
+ function persistUnpublishedEntry(collection, existingUnpublishedEntry) {
308
+ return async (dispatch, getState) => {
309
+ const state = getState();
310
+ const entryDraft = state.entryDraft;
311
+ const fieldsErrors = entryDraft.get('fieldsErrors');
312
+ const unpublishedSlugs = (0, _reducers.selectUnpublishedSlugs)(state, collection.get('name'));
313
+ const publishedSlugs = (0, _reducers.selectPublishedSlugs)(state, collection.get('name'));
314
+ const usedSlugs = publishedSlugs.concat(unpublishedSlugs);
315
+ const entriesLoaded = (0, _get2.default)(state.editorialWorkflow.toJS(), 'pages.ids', false);
316
+
317
+ //load unpublishedEntries
318
+ !entriesLoaded && dispatch(loadUnpublishedEntries(state.collections));
319
+
320
+ // Early return if draft contains validation errors
321
+ if (!fieldsErrors.isEmpty()) {
322
+ const hasPresenceErrors = fieldsErrors.some(errors => errors.some(error => error.type && error.type === _validationErrorTypes.default.PRESENCE));
323
+ if (hasPresenceErrors) {
324
+ dispatch((0, _notifications.addNotification)({
325
+ message: {
326
+ key: 'ui.toast.missingRequiredField'
327
+ },
328
+ type: 'error',
329
+ dismissAfter: 8000
330
+ }));
331
+ }
332
+ return Promise.reject();
333
+ }
334
+ const backend = (0, _backend.currentBackend)(state.config);
335
+ const entry = entryDraft.get('entry');
336
+ const assetProxies = (0, _entries2.getMediaAssets)({
337
+ entry
338
+ });
339
+ const serializedEntry = (0, _entries2.getSerializedEntry)(collection, entry);
340
+ const serializedEntryDraft = entryDraft.set('entry', serializedEntry);
341
+ dispatch(unpublishedEntryPersisting(collection, entry.get('slug')));
342
+ const persistAction = existingUnpublishedEntry ? backend.persistUnpublishedEntry : backend.persistEntry;
343
+ try {
344
+ const newSlug = await persistAction.call(backend, {
345
+ config: state.config,
346
+ collection,
347
+ entryDraft: serializedEntryDraft,
348
+ assetProxies,
349
+ usedSlugs
350
+ });
351
+ dispatch((0, _notifications.addNotification)({
352
+ message: {
353
+ key: 'ui.toast.entrySaved'
354
+ },
355
+ type: 'success',
356
+ dismissAfter: 4000
357
+ }));
358
+ dispatch(unpublishedEntryPersisted(collection, serializedEntry));
359
+ if (entry.get('slug') !== newSlug) {
360
+ dispatch(loadUnpublishedEntry(collection, newSlug));
361
+ (0, _history.navigateToEntry)(collection.get('name'), newSlug);
362
+ }
363
+ } catch (error) {
364
+ dispatch((0, _notifications.addNotification)({
365
+ message: {
366
+ key: 'ui.toast.onFailToPersist',
367
+ details: error
368
+ },
369
+ type: 'error',
370
+ dismissAfter: 8000
371
+ }));
372
+ return Promise.reject(dispatch(unpublishedEntryPersistedFail(error, collection, entry.get('slug'))));
373
+ }
374
+ };
375
+ }
376
+ function updateUnpublishedEntryStatus(collection, slug, oldStatus, newStatus) {
377
+ return (dispatch, getState) => {
378
+ if (oldStatus === newStatus) return;
379
+ const state = getState();
380
+ const backend = (0, _backend.currentBackend)(state.config);
381
+ dispatch(unpublishedEntryStatusChangeRequest(collection, slug));
382
+ backend.updateUnpublishedEntryStatus(collection, slug, newStatus).then(() => {
383
+ dispatch((0, _notifications.addNotification)({
384
+ message: {
385
+ key: 'ui.toast.entryUpdated'
386
+ },
387
+ type: 'success',
388
+ dismissAfter: 4000
389
+ }));
390
+ dispatch(unpublishedEntryStatusChangePersisted(collection, slug, newStatus));
391
+ }).catch(error => {
392
+ dispatch((0, _notifications.addNotification)({
393
+ message: {
394
+ key: 'ui.toast.onFailToUpdateStatus',
395
+ details: error
396
+ },
397
+ type: 'error',
398
+ dismissAfter: 8000
399
+ }));
400
+ dispatch(unpublishedEntryStatusChangeError(collection, slug));
401
+ });
402
+ };
403
+ }
404
+ function deleteUnpublishedEntry(collection, slug) {
405
+ return (dispatch, getState) => {
406
+ const state = getState();
407
+ const backend = (0, _backend.currentBackend)(state.config);
408
+ dispatch(unpublishedEntryDeleteRequest(collection, slug));
409
+ return backend.deleteUnpublishedEntry(collection, slug).then(() => {
410
+ dispatch((0, _notifications.addNotification)({
411
+ message: {
412
+ key: 'ui.toast.onDeleteUnpublishedChanges'
413
+ },
414
+ type: 'success',
415
+ dismissAfter: 4000
416
+ }));
417
+ dispatch(unpublishedEntryDeleted(collection, slug));
418
+ }).catch(error => {
419
+ dispatch((0, _notifications.addNotification)({
420
+ message: {
421
+ key: 'ui.toast.onDeleteUnpublishedChanges',
422
+ details: error
423
+ },
424
+ type: 'error',
425
+ dismissAfter: 8000
426
+ }));
427
+ dispatch(unpublishedEntryDeleteError(collection, slug));
428
+ });
429
+ };
430
+ }
431
+ function publishUnpublishedEntry(collectionName, slug) {
432
+ return async (dispatch, getState) => {
433
+ const state = getState();
434
+ const collections = state.collections;
435
+ const backend = (0, _backend.currentBackend)(state.config);
436
+ const entry = (0, _reducers.selectUnpublishedEntry)(state, collectionName, slug);
437
+ dispatch(unpublishedEntryPublishRequest(collectionName, slug));
438
+ try {
439
+ await backend.publishUnpublishedEntry(entry);
440
+ // re-load media after entry was published
441
+ dispatch((0, _mediaLibrary.loadMedia)());
442
+ dispatch((0, _notifications.addNotification)({
443
+ message: {
444
+ key: 'ui.toast.entryPublished'
445
+ },
446
+ type: 'success',
447
+ dismissAfter: 4000
448
+ }));
449
+ dispatch(unpublishedEntryPublished(collectionName, slug));
450
+ const collection = collections.get(collectionName);
451
+ if (collection.has('nested')) {
452
+ dispatch((0, _entries2.loadEntries)(collection));
453
+ const newSlug = (0, _backend.slugFromCustomPath)(collection, entry.get('path'));
454
+ (0, _entries2.loadEntry)(collection, newSlug);
455
+ if (slug !== newSlug && (0, _entries.selectEditingDraft)(state.entryDraft)) {
456
+ (0, _history.navigateToEntry)(collection.get('name'), newSlug);
457
+ }
458
+ } else {
459
+ return dispatch((0, _entries2.loadEntry)(collection, slug));
460
+ }
461
+ } catch (error) {
462
+ dispatch((0, _notifications.addNotification)({
463
+ message: {
464
+ key: 'ui.toast.onFailToPublishEntry',
465
+ details: error
466
+ },
467
+ type: 'error',
468
+ dismissAfter: 8000
469
+ }));
470
+ dispatch(unpublishedEntryPublishError(collectionName, slug));
471
+ }
472
+ };
473
+ }
474
+ function unpublishPublishedEntry(collection, slug) {
475
+ return (dispatch, getState) => {
476
+ const state = getState();
477
+ const backend = (0, _backend.currentBackend)(state.config);
478
+ const entry = (0, _reducers.selectEntry)(state, collection.get('name'), slug);
479
+ const entryDraft = (0, _immutable.Map)().set('entry', entry);
480
+ dispatch(unpublishedEntryPersisting(collection, slug));
481
+ return backend.deleteEntry(state, collection, slug).then(() => backend.persistEntry({
482
+ config: state.config,
483
+ collection,
484
+ entryDraft,
485
+ assetProxies: [],
486
+ usedSlugs: (0, _immutable.List)(),
487
+ status: _publishModes.status.get('PENDING_PUBLISH')
488
+ })).then(() => {
489
+ dispatch(unpublishedEntryPersisted(collection, entry));
490
+ dispatch((0, _entries2.entryDeleted)(collection, slug));
491
+ dispatch(loadUnpublishedEntry(collection, slug));
492
+ dispatch((0, _notifications.addNotification)({
493
+ message: {
494
+ key: 'ui.toast.entryUnpublished'
495
+ },
496
+ type: 'success',
497
+ dismissAfter: 4000
498
+ }));
499
+ }).catch(error => {
500
+ dispatch((0, _notifications.addNotification)({
501
+ message: {
502
+ key: 'ui.toast.onFailToUnpublishEntry',
503
+ details: error
504
+ },
505
+ type: 'error',
506
+ dismissAfter: 8000
507
+ }));
508
+ dispatch(unpublishedEntryPersistedFail(error, collection, entry.get('slug')));
509
+ });
510
+ };
511
+ }