decap-cms-core 3.5.0 → 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/decap-cms-core.js +9 -9
- package/dist/decap-cms-core.js.map +1 -1
- package/dist/esm/actions/auth.js +22 -37
- package/dist/esm/actions/collections.js +9 -17
- package/dist/esm/actions/config.js +58 -74
- package/dist/esm/actions/deploys.js +10 -17
- package/dist/esm/actions/editorialWorkflow.js +87 -101
- package/dist/esm/actions/entries.js +161 -211
- package/dist/esm/actions/media.js +31 -46
- package/dist/esm/actions/mediaLibrary.js +94 -126
- package/dist/esm/actions/notifications.js +5 -13
- package/dist/esm/actions/search.js +30 -47
- package/dist/esm/actions/status.js +13 -23
- package/dist/esm/actions/waitUntil.js +4 -11
- package/dist/esm/backend.js +132 -148
- package/dist/esm/bootstrap.js +37 -44
- package/dist/esm/components/App/App.js +82 -89
- package/dist/esm/components/App/Header.js +46 -52
- package/dist/esm/components/App/NotFoundPage.js +11 -18
- package/dist/esm/components/Collection/Collection.js +55 -63
- package/dist/esm/components/Collection/CollectionControls.js +15 -22
- package/dist/esm/components/Collection/CollectionSearch.js +35 -42
- package/dist/esm/components/Collection/CollectionTop.js +23 -30
- package/dist/esm/components/Collection/ControlButton.js +10 -16
- package/dist/esm/components/Collection/Entries/Entries.js +24 -31
- package/dist/esm/components/Collection/Entries/EntriesCollection.js +52 -62
- package/dist/esm/components/Collection/Entries/EntriesSearch.js +26 -33
- package/dist/esm/components/Collection/Entries/EntryCard.js +38 -45
- package/dist/esm/components/Collection/Entries/EntryListing.js +24 -32
- package/dist/esm/components/Collection/FilterControl.js +9 -16
- package/dist/esm/components/Collection/GroupControl.js +9 -16
- package/dist/esm/components/Collection/NestedCollection.js +54 -65
- package/dist/esm/components/Collection/Sidebar.js +36 -43
- package/dist/esm/components/Collection/SortControl.js +19 -26
- package/dist/esm/components/Collection/ViewStyleControl.js +17 -24
- package/dist/esm/components/Editor/Editor.js +100 -108
- package/dist/esm/components/Editor/EditorControlPane/EditorControl.js +105 -112
- package/dist/esm/components/Editor/EditorControlPane/EditorControlPane.js +68 -62
- package/dist/esm/components/Editor/EditorControlPane/Widget.js +87 -73
- package/dist/esm/components/Editor/EditorInterface.js +95 -98
- package/dist/esm/components/Editor/EditorPreviewPane/EditorPreview.js +13 -21
- package/dist/esm/components/Editor/EditorPreviewPane/EditorPreviewContent.js +64 -23
- package/dist/esm/components/Editor/EditorPreviewPane/EditorPreviewPane.js +94 -78
- package/dist/esm/components/Editor/EditorPreviewPane/PreviewHOC.js +9 -16
- package/dist/esm/components/Editor/EditorToolbar.js +133 -140
- package/dist/esm/components/Editor/withWorkflow.js +15 -22
- package/dist/esm/components/EditorWidgets/Unknown/UnknownControl.js +9 -16
- package/dist/esm/components/EditorWidgets/Unknown/UnknownPreview.js +9 -16
- package/dist/esm/components/EditorWidgets/index.js +4 -7
- package/dist/esm/components/MediaLibrary/EmptyMessage.js +12 -19
- package/dist/esm/components/MediaLibrary/MediaLibrary.js +55 -62
- package/dist/esm/components/MediaLibrary/MediaLibraryButtons.js +28 -35
- package/dist/esm/components/MediaLibrary/MediaLibraryCard.js +36 -43
- package/dist/esm/components/MediaLibrary/MediaLibraryCardGrid.js +50 -57
- package/dist/esm/components/MediaLibrary/MediaLibraryHeader.js +16 -23
- package/dist/esm/components/MediaLibrary/MediaLibraryModal.js +59 -64
- package/dist/esm/components/MediaLibrary/MediaLibrarySearch.js +18 -25
- package/dist/esm/components/MediaLibrary/MediaLibraryTop.js +39 -46
- package/dist/esm/components/UI/DragDrop.js +21 -30
- package/dist/esm/components/UI/ErrorBoundary.js +35 -43
- package/dist/esm/components/UI/FileUploadButton.js +11 -18
- package/dist/esm/components/UI/Modal.js +19 -26
- package/dist/esm/components/UI/Notifications.js +21 -28
- package/dist/esm/components/UI/SettingsDropdown.js +28 -34
- package/dist/esm/components/UI/index.js +6 -60
- package/dist/esm/components/Workflow/Workflow.js +52 -61
- package/dist/esm/components/Workflow/WorkflowCard.js +45 -51
- package/dist/esm/components/Workflow/WorkflowList.js +43 -49
- package/dist/esm/constants/collectionTypes.js +2 -8
- package/dist/esm/constants/collectionViews.js +2 -8
- package/dist/esm/constants/commitProps.js +2 -8
- package/dist/esm/constants/configSchema.js +20 -27
- package/dist/esm/constants/fieldInference.js +8 -15
- package/dist/esm/constants/publishModes.js +6 -11
- package/dist/esm/constants/validationErrorTypes.js +1 -7
- package/dist/esm/formats/formats.js +32 -41
- package/dist/esm/formats/frontmatter.js +18 -30
- package/dist/esm/formats/helpers.js +1 -7
- package/dist/esm/formats/json.js +1 -7
- package/dist/esm/formats/toml.js +11 -18
- package/dist/esm/formats/yaml.js +7 -14
- package/dist/esm/index.js +5 -12
- package/dist/esm/integrations/index.js +8 -16
- package/dist/esm/integrations/providers/algolia/implementation.js +14 -22
- package/dist/esm/integrations/providers/assetStore/implementation.js +10 -18
- package/dist/esm/lib/consoleError.js +1 -7
- package/dist/esm/lib/formatters.js +34 -47
- package/dist/esm/lib/i18n.js +37 -66
- package/dist/esm/lib/phrases.js +4 -11
- package/dist/esm/lib/registry.js +40 -75
- package/dist/esm/lib/serializeEntryValues.js +11 -18
- package/dist/esm/lib/textHelper.js +1 -7
- package/dist/esm/lib/urlHelper.js +28 -43
- package/dist/esm/mediaLibrary.js +12 -16
- package/dist/esm/reducers/auth.js +10 -16
- package/dist/esm/reducers/collections.js +70 -102
- package/dist/esm/reducers/combinedReducer.js +4 -11
- package/dist/esm/reducers/config.js +11 -19
- package/dist/esm/reducers/cursors.js +12 -18
- package/dist/esm/reducers/deploys.js +8 -15
- package/dist/esm/reducers/editorialWorkflow.js +37 -47
- package/dist/esm/reducers/entries.js +107 -132
- package/dist/esm/reducers/entryDraft.js +64 -72
- package/dist/esm/reducers/globalUI.js +5 -11
- package/dist/esm/reducers/index.js +43 -64
- package/dist/esm/reducers/integrations.js +8 -16
- package/dist/esm/reducers/mediaLibrary.js +43 -52
- package/dist/esm/reducers/medias.js +11 -18
- package/dist/esm/reducers/notifications.js +9 -15
- package/dist/esm/reducers/search.js +12 -18
- package/dist/esm/reducers/status.js +7 -13
- package/dist/esm/redux/index.js +7 -13
- package/dist/esm/redux/middleware/waitUntilAction.js +3 -10
- package/dist/esm/routing/history.js +7 -15
- package/dist/esm/types/diacritics.d.js +0 -1
- package/dist/esm/types/global.d.js +1 -5
- package/dist/esm/types/immutable.js +1 -5
- package/dist/esm/types/redux.js +7 -8
- package/dist/esm/types/tomlify-j0.4.d.js +0 -1
- package/dist/esm/valueObjects/AssetProxy.js +2 -10
- package/dist/esm/valueObjects/EditorComponent.js +5 -12
- package/dist/esm/valueObjects/Entry.js +3 -10
- package/package.json +3 -2
- package/src/components/Collection/Entries/EntriesCollection.js +7 -8
- package/src/components/Collection/Entries/__tests__/EntriesCollection.spec.js +3 -5
- package/src/components/Collection/Entries/__tests__/__snapshots__/EntriesCollection.spec.js.snap +8 -8
- package/src/components/Collection/NestedCollection.js +2 -2
- package/src/components/Collection/__tests__/__snapshots__/NestedCollection.spec.js.snap +68 -0
- package/src/components/Editor/EditorControlPane/EditorControl.js +0 -3
- package/src/components/Editor/EditorControlPane/EditorControlPane.js +21 -8
- package/src/components/Editor/EditorControlPane/Widget.js +22 -1
- package/src/components/Editor/EditorInterface.js +6 -1
- package/src/components/Editor/EditorPreviewPane/EditorPreviewContent.js +51 -11
- package/src/components/Editor/EditorPreviewPane/EditorPreviewPane.js +33 -1
- package/dist/esm/actions/editorControl.js +0 -14
- package/dist/esm/reducers/editorComponent.js +0 -1
- package/dist/esm/reducers/editorControl.js +0 -17
|
@@ -1,53 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
exports.selectEditingDraft = selectEditingDraft;
|
|
8
|
-
exports.selectEntries = selectEntries;
|
|
9
|
-
exports.selectEntriesFilter = selectEntriesFilter;
|
|
10
|
-
exports.selectEntriesFilterFields = selectEntriesFilterFields;
|
|
11
|
-
exports.selectEntriesGroup = selectEntriesGroup;
|
|
12
|
-
exports.selectEntriesGroupField = selectEntriesGroupField;
|
|
13
|
-
exports.selectEntriesLoaded = selectEntriesLoaded;
|
|
14
|
-
exports.selectEntriesSort = selectEntriesSort;
|
|
15
|
-
exports.selectEntriesSortFields = selectEntriesSortFields;
|
|
16
|
-
exports.selectEntry = selectEntry;
|
|
17
|
-
exports.selectEntryByPath = selectEntryByPath;
|
|
18
|
-
exports.selectGroups = selectGroups;
|
|
19
|
-
exports.selectIsFetching = selectIsFetching;
|
|
20
|
-
exports.selectMediaFilePath = selectMediaFilePath;
|
|
21
|
-
exports.selectMediaFilePublicPath = selectMediaFilePublicPath;
|
|
22
|
-
exports.selectMediaFolder = selectMediaFolder;
|
|
23
|
-
exports.selectPublishedSlugs = selectPublishedSlugs;
|
|
24
|
-
exports.selectViewStyle = selectViewStyle;
|
|
25
|
-
var _groupBy2 = _interopRequireDefault(require("lodash/groupBy"));
|
|
26
|
-
var _orderBy2 = _interopRequireDefault(require("lodash/orderBy"));
|
|
27
|
-
var _set2 = _interopRequireDefault(require("lodash/set"));
|
|
28
|
-
var _sortBy2 = _interopRequireDefault(require("lodash/sortBy"));
|
|
29
|
-
var _once2 = _interopRequireDefault(require("lodash/once"));
|
|
30
|
-
var _trim2 = _interopRequireDefault(require("lodash/trim"));
|
|
31
|
-
var _immutable = require("immutable");
|
|
32
|
-
var _path = require("path");
|
|
33
|
-
var _decapCmsLibUtil = require("decap-cms-lib-util");
|
|
34
|
-
var _decapCmsLibWidgets = require("decap-cms-lib-widgets");
|
|
35
|
-
var _redux = require("../types/redux");
|
|
36
|
-
var _formatters = require("../lib/formatters");
|
|
37
|
-
var _collections = require("./collections");
|
|
38
|
-
var _search = require("../actions/search");
|
|
39
|
-
var _entries = require("../actions/entries");
|
|
40
|
-
var _collectionViews = require("../constants/collectionViews");
|
|
41
|
-
var _urlHelper = require("../lib/urlHelper");
|
|
42
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
1
|
+
import _groupBy from "lodash/groupBy";
|
|
2
|
+
import _orderBy from "lodash/orderBy";
|
|
3
|
+
import _set from "lodash/set";
|
|
4
|
+
import _sortBy from "lodash/sortBy";
|
|
5
|
+
import _once from "lodash/once";
|
|
6
|
+
import _trim from "lodash/trim";
|
|
43
7
|
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; }
|
|
44
8
|
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; }
|
|
45
9
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
46
10
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
|
|
47
11
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
12
|
+
import { Map, List, fromJS, OrderedMap, Set } from 'immutable';
|
|
13
|
+
import { dirname, join } from 'path';
|
|
14
|
+
import { isAbsolutePath, basename } from 'decap-cms-lib-util';
|
|
15
|
+
import { stringTemplate } from 'decap-cms-lib-widgets';
|
|
16
|
+
import { SortDirection } from '../types/redux';
|
|
17
|
+
import { folderFormatter } from '../lib/formatters';
|
|
18
|
+
import { selectSortDataPath } from './collections';
|
|
19
|
+
import { SEARCH_ENTRIES_SUCCESS } from '../actions/search';
|
|
20
|
+
import { ENTRY_REQUEST, ENTRY_SUCCESS, ENTRY_FAILURE, ENTRIES_REQUEST, ENTRIES_SUCCESS, ENTRIES_FAILURE, ENTRY_DELETE_SUCCESS, SORT_ENTRIES_REQUEST, SORT_ENTRIES_SUCCESS, SORT_ENTRIES_FAILURE, FILTER_ENTRIES_REQUEST, FILTER_ENTRIES_SUCCESS, FILTER_ENTRIES_FAILURE, GROUP_ENTRIES_REQUEST, GROUP_ENTRIES_SUCCESS, GROUP_ENTRIES_FAILURE, CHANGE_VIEW_STYLE } from '../actions/entries';
|
|
21
|
+
import { VIEW_STYLE_LIST } from '../constants/collectionViews';
|
|
22
|
+
import { joinUrlPath } from '../lib/urlHelper';
|
|
48
23
|
const {
|
|
49
24
|
keyToPathArray
|
|
50
|
-
} =
|
|
25
|
+
} = stringTemplate;
|
|
51
26
|
let collection;
|
|
52
27
|
let loadedEntries;
|
|
53
28
|
let append;
|
|
@@ -55,20 +30,20 @@ let page;
|
|
|
55
30
|
let slug;
|
|
56
31
|
const storageSortKey = 'decap-cms.entries.sort';
|
|
57
32
|
const viewStyleKey = 'decap-cms.entries.viewStyle';
|
|
58
|
-
const loadSort = (
|
|
33
|
+
const loadSort = _once(() => {
|
|
59
34
|
const sortString = localStorage.getItem(storageSortKey);
|
|
60
35
|
if (sortString) {
|
|
61
36
|
try {
|
|
62
37
|
const sort = JSON.parse(sortString);
|
|
63
|
-
let map =
|
|
38
|
+
let map = Map();
|
|
64
39
|
Object.entries(sort).forEach(([collection, sort]) => {
|
|
65
|
-
let orderedMap =
|
|
66
|
-
(
|
|
40
|
+
let orderedMap = OrderedMap();
|
|
41
|
+
_sortBy(Object.values(sort), ['index']).forEach(value => {
|
|
67
42
|
const {
|
|
68
43
|
key,
|
|
69
44
|
direction
|
|
70
45
|
} = value;
|
|
71
|
-
orderedMap = orderedMap.set(key,
|
|
46
|
+
orderedMap = orderedMap.set(key, fromJS({
|
|
72
47
|
key,
|
|
73
48
|
direction
|
|
74
49
|
}));
|
|
@@ -77,10 +52,10 @@ const loadSort = (0, _once2.default)(() => {
|
|
|
77
52
|
});
|
|
78
53
|
return map;
|
|
79
54
|
} catch (e) {
|
|
80
|
-
return
|
|
55
|
+
return Map();
|
|
81
56
|
}
|
|
82
57
|
}
|
|
83
|
-
return
|
|
58
|
+
return Map();
|
|
84
59
|
});
|
|
85
60
|
function clearSort() {
|
|
86
61
|
localStorage.removeItem(storageSortKey);
|
|
@@ -94,7 +69,7 @@ function persistSort(sort) {
|
|
|
94
69
|
index
|
|
95
70
|
}));
|
|
96
71
|
sortObjects.forEach(value => {
|
|
97
|
-
(
|
|
72
|
+
_set(storageSort, [collection, value.key], value);
|
|
98
73
|
});
|
|
99
74
|
});
|
|
100
75
|
localStorage.setItem(storageSortKey, JSON.stringify(storageSort));
|
|
@@ -102,13 +77,13 @@ function persistSort(sort) {
|
|
|
102
77
|
clearSort();
|
|
103
78
|
}
|
|
104
79
|
}
|
|
105
|
-
const loadViewStyle = (
|
|
80
|
+
const loadViewStyle = _once(() => {
|
|
106
81
|
const viewStyle = localStorage.getItem(viewStyleKey);
|
|
107
82
|
if (viewStyle) {
|
|
108
83
|
return viewStyle;
|
|
109
84
|
}
|
|
110
|
-
localStorage.setItem(viewStyleKey,
|
|
111
|
-
return
|
|
85
|
+
localStorage.setItem(viewStyleKey, VIEW_STYLE_LIST);
|
|
86
|
+
return VIEW_STYLE_LIST;
|
|
112
87
|
});
|
|
113
88
|
function clearViewStyle() {
|
|
114
89
|
localStorage.removeItem(viewStyleKey);
|
|
@@ -120,32 +95,32 @@ function persistViewStyle(viewStyle) {
|
|
|
120
95
|
clearViewStyle();
|
|
121
96
|
}
|
|
122
97
|
}
|
|
123
|
-
function entries(state =
|
|
124
|
-
entities:
|
|
125
|
-
pages:
|
|
98
|
+
function entries(state = Map({
|
|
99
|
+
entities: Map(),
|
|
100
|
+
pages: Map(),
|
|
126
101
|
sort: loadSort(),
|
|
127
102
|
viewStyle: loadViewStyle()
|
|
128
103
|
}), action) {
|
|
129
104
|
switch (action.type) {
|
|
130
|
-
case
|
|
105
|
+
case ENTRY_REQUEST:
|
|
131
106
|
{
|
|
132
107
|
const payload = action.payload;
|
|
133
108
|
return state.setIn(['entities', `${payload.collection}.${payload.slug}`, 'isFetching'], true);
|
|
134
109
|
}
|
|
135
|
-
case
|
|
110
|
+
case ENTRY_SUCCESS:
|
|
136
111
|
{
|
|
137
112
|
const payload = action.payload;
|
|
138
113
|
collection = payload.collection;
|
|
139
114
|
slug = payload.entry.slug;
|
|
140
115
|
return state.withMutations(map => {
|
|
141
|
-
map.setIn(['entities', `${collection}.${slug}`],
|
|
142
|
-
const ids = map.getIn(['pages', collection, 'ids'],
|
|
116
|
+
map.setIn(['entities', `${collection}.${slug}`], fromJS(payload.entry));
|
|
117
|
+
const ids = map.getIn(['pages', collection, 'ids'], List());
|
|
143
118
|
if (!ids.includes(slug)) {
|
|
144
119
|
map.setIn(['pages', collection, 'ids'], ids.unshift(slug));
|
|
145
120
|
}
|
|
146
121
|
});
|
|
147
122
|
}
|
|
148
|
-
case
|
|
123
|
+
case ENTRIES_REQUEST:
|
|
149
124
|
{
|
|
150
125
|
const payload = action.payload;
|
|
151
126
|
const newState = state.withMutations(map => {
|
|
@@ -153,7 +128,7 @@ function entries(state = (0, _immutable.Map)({
|
|
|
153
128
|
});
|
|
154
129
|
return newState;
|
|
155
130
|
}
|
|
156
|
-
case
|
|
131
|
+
case ENTRIES_SUCCESS:
|
|
157
132
|
{
|
|
158
133
|
const payload = action.payload;
|
|
159
134
|
collection = payload.collection;
|
|
@@ -161,17 +136,17 @@ function entries(state = (0, _immutable.Map)({
|
|
|
161
136
|
append = payload.append;
|
|
162
137
|
page = payload.page;
|
|
163
138
|
return state.withMutations(map => {
|
|
164
|
-
loadedEntries.forEach(entry => map.setIn(['entities', `${collection}.${entry.slug}`],
|
|
165
|
-
const ids =
|
|
166
|
-
map.setIn(['pages', collection],
|
|
139
|
+
loadedEntries.forEach(entry => map.setIn(['entities', `${collection}.${entry.slug}`], fromJS(entry).set('isFetching', false)));
|
|
140
|
+
const ids = List(loadedEntries.map(entry => entry.slug));
|
|
141
|
+
map.setIn(['pages', collection], Map({
|
|
167
142
|
page,
|
|
168
|
-
ids: append ? map.getIn(['pages', collection, 'ids'],
|
|
143
|
+
ids: append ? map.getIn(['pages', collection, 'ids'], List()).concat(ids) : ids
|
|
169
144
|
}));
|
|
170
145
|
});
|
|
171
146
|
}
|
|
172
|
-
case
|
|
147
|
+
case ENTRIES_FAILURE:
|
|
173
148
|
return state.setIn(['pages', action.meta.collection, 'isFetching'], false);
|
|
174
|
-
case
|
|
149
|
+
case ENTRY_FAILURE:
|
|
175
150
|
{
|
|
176
151
|
const payload = action.payload;
|
|
177
152
|
return state.withMutations(map => {
|
|
@@ -179,15 +154,15 @@ function entries(state = (0, _immutable.Map)({
|
|
|
179
154
|
map.setIn(['entities', `${payload.collection}.${payload.slug}`, 'error'], payload.error.message);
|
|
180
155
|
});
|
|
181
156
|
}
|
|
182
|
-
case
|
|
157
|
+
case SEARCH_ENTRIES_SUCCESS:
|
|
183
158
|
{
|
|
184
159
|
const payload = action.payload;
|
|
185
160
|
loadedEntries = payload.entries;
|
|
186
161
|
return state.withMutations(map => {
|
|
187
|
-
loadedEntries.forEach(entry => map.setIn(['entities', `${entry.collection}.${entry.slug}`],
|
|
162
|
+
loadedEntries.forEach(entry => map.setIn(['entities', `${entry.collection}.${entry.slug}`], fromJS(entry).set('isFetching', false)));
|
|
188
163
|
});
|
|
189
164
|
}
|
|
190
|
-
case
|
|
165
|
+
case ENTRY_DELETE_SUCCESS:
|
|
191
166
|
{
|
|
192
167
|
const payload = action.payload;
|
|
193
168
|
return state.withMutations(map => {
|
|
@@ -195,7 +170,7 @@ function entries(state = (0, _immutable.Map)({
|
|
|
195
170
|
map.updateIn(['pages', payload.collectionName, 'ids'], ids => ids.filter(id => id !== payload.entrySlug));
|
|
196
171
|
});
|
|
197
172
|
}
|
|
198
|
-
case
|
|
173
|
+
case SORT_ENTRIES_REQUEST:
|
|
199
174
|
{
|
|
200
175
|
const payload = action.payload;
|
|
201
176
|
const {
|
|
@@ -204,8 +179,8 @@ function entries(state = (0, _immutable.Map)({
|
|
|
204
179
|
direction
|
|
205
180
|
} = payload;
|
|
206
181
|
const newState = state.withMutations(map => {
|
|
207
|
-
const sort =
|
|
208
|
-
[key]:
|
|
182
|
+
const sort = OrderedMap({
|
|
183
|
+
[key]: Map({
|
|
209
184
|
key,
|
|
210
185
|
direction
|
|
211
186
|
})
|
|
@@ -217,9 +192,9 @@ function entries(state = (0, _immutable.Map)({
|
|
|
217
192
|
persistSort(newState.get('sort'));
|
|
218
193
|
return newState;
|
|
219
194
|
}
|
|
220
|
-
case
|
|
221
|
-
case
|
|
222
|
-
case
|
|
195
|
+
case GROUP_ENTRIES_SUCCESS:
|
|
196
|
+
case FILTER_ENTRIES_SUCCESS:
|
|
197
|
+
case SORT_ENTRIES_SUCCESS:
|
|
223
198
|
{
|
|
224
199
|
const payload = action.payload;
|
|
225
200
|
const {
|
|
@@ -228,17 +203,17 @@ function entries(state = (0, _immutable.Map)({
|
|
|
228
203
|
} = payload;
|
|
229
204
|
loadedEntries = entries;
|
|
230
205
|
const newState = state.withMutations(map => {
|
|
231
|
-
loadedEntries.forEach(entry => map.setIn(['entities', `${entry.collection}.${entry.slug}`],
|
|
206
|
+
loadedEntries.forEach(entry => map.setIn(['entities', `${entry.collection}.${entry.slug}`], fromJS(entry).set('isFetching', false)));
|
|
232
207
|
map.setIn(['pages', collection, 'isFetching'], false);
|
|
233
|
-
const ids =
|
|
234
|
-
map.setIn(['pages', collection],
|
|
208
|
+
const ids = List(loadedEntries.map(entry => entry.slug));
|
|
209
|
+
map.setIn(['pages', collection], Map({
|
|
235
210
|
page: 1,
|
|
236
211
|
ids
|
|
237
212
|
}));
|
|
238
213
|
});
|
|
239
214
|
return newState;
|
|
240
215
|
}
|
|
241
|
-
case
|
|
216
|
+
case SORT_ENTRIES_FAILURE:
|
|
242
217
|
{
|
|
243
218
|
const payload = action.payload;
|
|
244
219
|
const {
|
|
@@ -252,7 +227,7 @@ function entries(state = (0, _immutable.Map)({
|
|
|
252
227
|
persistSort(newState.get('sort'));
|
|
253
228
|
return newState;
|
|
254
229
|
}
|
|
255
|
-
case
|
|
230
|
+
case FILTER_ENTRIES_REQUEST:
|
|
256
231
|
{
|
|
257
232
|
const payload = action.payload;
|
|
258
233
|
const {
|
|
@@ -260,12 +235,12 @@ function entries(state = (0, _immutable.Map)({
|
|
|
260
235
|
filter
|
|
261
236
|
} = payload;
|
|
262
237
|
const newState = state.withMutations(map => {
|
|
263
|
-
const current = map.getIn(['filter', collection, filter.id],
|
|
238
|
+
const current = map.getIn(['filter', collection, filter.id], fromJS(filter));
|
|
264
239
|
map.setIn(['filter', collection, current.get('id')], current.set('active', !current.get('active')));
|
|
265
240
|
});
|
|
266
241
|
return newState;
|
|
267
242
|
}
|
|
268
|
-
case
|
|
243
|
+
case FILTER_ENTRIES_FAILURE:
|
|
269
244
|
{
|
|
270
245
|
const payload = action.payload;
|
|
271
246
|
const {
|
|
@@ -278,7 +253,7 @@ function entries(state = (0, _immutable.Map)({
|
|
|
278
253
|
});
|
|
279
254
|
return newState;
|
|
280
255
|
}
|
|
281
|
-
case
|
|
256
|
+
case GROUP_ENTRIES_REQUEST:
|
|
282
257
|
{
|
|
283
258
|
const payload = action.payload;
|
|
284
259
|
const {
|
|
@@ -286,13 +261,13 @@ function entries(state = (0, _immutable.Map)({
|
|
|
286
261
|
group
|
|
287
262
|
} = payload;
|
|
288
263
|
const newState = state.withMutations(map => {
|
|
289
|
-
const current = map.getIn(['group', collection, group.id],
|
|
264
|
+
const current = map.getIn(['group', collection, group.id], fromJS(group));
|
|
290
265
|
map.deleteIn(['group', collection]);
|
|
291
266
|
map.setIn(['group', collection, current.get('id')], current.set('active', !current.get('active')));
|
|
292
267
|
});
|
|
293
268
|
return newState;
|
|
294
269
|
}
|
|
295
|
-
case
|
|
270
|
+
case GROUP_ENTRIES_FAILURE:
|
|
296
271
|
{
|
|
297
272
|
const payload = action.payload;
|
|
298
273
|
const {
|
|
@@ -305,7 +280,7 @@ function entries(state = (0, _immutable.Map)({
|
|
|
305
280
|
});
|
|
306
281
|
return newState;
|
|
307
282
|
}
|
|
308
|
-
case
|
|
283
|
+
case CHANGE_VIEW_STYLE:
|
|
309
284
|
{
|
|
310
285
|
const payload = action.payload;
|
|
311
286
|
const {
|
|
@@ -321,55 +296,55 @@ function entries(state = (0, _immutable.Map)({
|
|
|
321
296
|
return state;
|
|
322
297
|
}
|
|
323
298
|
}
|
|
324
|
-
function selectEntriesSort(entries, collection) {
|
|
299
|
+
export function selectEntriesSort(entries, collection) {
|
|
325
300
|
const sort = entries.get('sort');
|
|
326
301
|
return sort === null || sort === void 0 ? void 0 : sort.get(collection);
|
|
327
302
|
}
|
|
328
|
-
function selectEntriesFilter(entries, collection) {
|
|
303
|
+
export function selectEntriesFilter(entries, collection) {
|
|
329
304
|
const filter = entries.get('filter');
|
|
330
|
-
return (filter === null || filter === void 0 ? void 0 : filter.get(collection)) ||
|
|
305
|
+
return (filter === null || filter === void 0 ? void 0 : filter.get(collection)) || Map();
|
|
331
306
|
}
|
|
332
|
-
function selectEntriesGroup(entries, collection) {
|
|
307
|
+
export function selectEntriesGroup(entries, collection) {
|
|
333
308
|
const group = entries.get('group');
|
|
334
|
-
return (group === null || group === void 0 ? void 0 : group.get(collection)) ||
|
|
309
|
+
return (group === null || group === void 0 ? void 0 : group.get(collection)) || Map();
|
|
335
310
|
}
|
|
336
|
-
function selectEntriesGroupField(entries, collection) {
|
|
311
|
+
export function selectEntriesGroupField(entries, collection) {
|
|
337
312
|
const groups = selectEntriesGroup(entries, collection);
|
|
338
313
|
const value = groups === null || groups === void 0 ? void 0 : groups.valueSeq().find(v => (v === null || v === void 0 ? void 0 : v.get('active')) === true);
|
|
339
314
|
return value;
|
|
340
315
|
}
|
|
341
|
-
function selectEntriesSortFields(entries, collection) {
|
|
316
|
+
export function selectEntriesSortFields(entries, collection) {
|
|
342
317
|
const sort = selectEntriesSort(entries, collection);
|
|
343
|
-
const values = (sort === null || sort === void 0 ? void 0 : sort.valueSeq().filter(v => (v === null || v === void 0 ? void 0 : v.get('direction')) !==
|
|
318
|
+
const values = (sort === null || sort === void 0 ? void 0 : sort.valueSeq().filter(v => (v === null || v === void 0 ? void 0 : v.get('direction')) !== SortDirection.None).toArray()) || [];
|
|
344
319
|
return values;
|
|
345
320
|
}
|
|
346
|
-
function selectEntriesFilterFields(entries, collection) {
|
|
321
|
+
export function selectEntriesFilterFields(entries, collection) {
|
|
347
322
|
const filter = selectEntriesFilter(entries, collection);
|
|
348
323
|
const values = (filter === null || filter === void 0 ? void 0 : filter.valueSeq().filter(v => (v === null || v === void 0 ? void 0 : v.get('active')) === true).toArray()) || [];
|
|
349
324
|
return values;
|
|
350
325
|
}
|
|
351
|
-
function selectViewStyle(entries) {
|
|
326
|
+
export function selectViewStyle(entries) {
|
|
352
327
|
return entries.get('viewStyle');
|
|
353
328
|
}
|
|
354
|
-
function selectEntry(state, collection, slug) {
|
|
329
|
+
export function selectEntry(state, collection, slug) {
|
|
355
330
|
return state.getIn(['entities', `${collection}.${slug}`]);
|
|
356
331
|
}
|
|
357
|
-
function selectPublishedSlugs(state, collection) {
|
|
358
|
-
return state.getIn(['pages', collection, 'ids'],
|
|
332
|
+
export function selectPublishedSlugs(state, collection) {
|
|
333
|
+
return state.getIn(['pages', collection, 'ids'], List());
|
|
359
334
|
}
|
|
360
335
|
function getPublishedEntries(state, collectionName) {
|
|
361
336
|
const slugs = selectPublishedSlugs(state, collectionName);
|
|
362
337
|
const entries = slugs && slugs.map(slug => selectEntry(state, collectionName, slug));
|
|
363
338
|
return entries;
|
|
364
339
|
}
|
|
365
|
-
function selectEntries(state, collection) {
|
|
340
|
+
export function selectEntries(state, collection) {
|
|
366
341
|
const collectionName = collection.get('name');
|
|
367
342
|
let entries = getPublishedEntries(state, collectionName);
|
|
368
343
|
const sortFields = selectEntriesSortFields(state, collectionName);
|
|
369
344
|
if (sortFields && sortFields.length > 0) {
|
|
370
|
-
const keys = sortFields.map(v =>
|
|
371
|
-
const orders = sortFields.map(v => v.get('direction') ===
|
|
372
|
-
entries =
|
|
345
|
+
const keys = sortFields.map(v => selectSortDataPath(collection, v.get('key')));
|
|
346
|
+
const orders = sortFields.map(v => v.get('direction') === SortDirection.Ascending ? 'asc' : 'desc');
|
|
347
|
+
entries = fromJS(_orderBy(entries.toJS(), keys, orders));
|
|
373
348
|
}
|
|
374
349
|
const filters = selectEntriesFilterFields(state, collectionName);
|
|
375
350
|
if (filters && filters.length > 0) {
|
|
@@ -377,7 +352,7 @@ function selectEntries(state, collection) {
|
|
|
377
352
|
const allMatched = filters.every(f => {
|
|
378
353
|
const pattern = f.get('pattern');
|
|
379
354
|
const field = f.get('field');
|
|
380
|
-
const data = e.get('data') ||
|
|
355
|
+
const data = e.get('data') || Map();
|
|
381
356
|
const toMatch = data.getIn(keyToPathArray(field));
|
|
382
357
|
const matched = toMatch !== undefined && new RegExp(String(pattern)).test(String(toMatch));
|
|
383
358
|
return matched;
|
|
@@ -423,7 +398,7 @@ function getGroup(entry, selectedGroup) {
|
|
|
423
398
|
value: typeof fieldData === 'boolean' ? fieldData : dataAsString
|
|
424
399
|
};
|
|
425
400
|
}
|
|
426
|
-
function selectGroups(state, collection) {
|
|
401
|
+
export function selectGroups(state, collection) {
|
|
427
402
|
const collectionName = collection.get('name');
|
|
428
403
|
const entries = getPublishedEntries(state, collectionName);
|
|
429
404
|
const selectedGroup = selectEntriesGroupField(state, collectionName);
|
|
@@ -431,7 +406,7 @@ function selectGroups(state, collection) {
|
|
|
431
406
|
return [];
|
|
432
407
|
}
|
|
433
408
|
let groups = {};
|
|
434
|
-
const groupedEntries = (
|
|
409
|
+
const groupedEntries = _groupBy(entries.toArray(), entry => {
|
|
435
410
|
const group = getGroup(entry, selectedGroup);
|
|
436
411
|
groups = _objectSpread(_objectSpread({}, groups), {}, {
|
|
437
412
|
[group.id]: group
|
|
@@ -440,20 +415,20 @@ function selectGroups(state, collection) {
|
|
|
440
415
|
});
|
|
441
416
|
const groupsArray = Object.entries(groupedEntries).map(([id, entries]) => {
|
|
442
417
|
return _objectSpread(_objectSpread({}, groups[id]), {}, {
|
|
443
|
-
paths:
|
|
418
|
+
paths: Set(entries.map(entry => entry.get('path')))
|
|
444
419
|
});
|
|
445
420
|
});
|
|
446
421
|
return groupsArray;
|
|
447
422
|
}
|
|
448
|
-
function selectEntryByPath(state, collection, path) {
|
|
423
|
+
export function selectEntryByPath(state, collection, path) {
|
|
449
424
|
const slugs = selectPublishedSlugs(state, collection);
|
|
450
425
|
const entries = slugs && slugs.map(slug => selectEntry(state, collection, slug));
|
|
451
426
|
return entries && entries.find(e => (e === null || e === void 0 ? void 0 : e.get('path')) === path);
|
|
452
427
|
}
|
|
453
|
-
function selectEntriesLoaded(state, collection) {
|
|
428
|
+
export function selectEntriesLoaded(state, collection) {
|
|
454
429
|
return !!state.getIn(['pages', collection]);
|
|
455
430
|
}
|
|
456
|
-
function selectIsFetching(state, collection) {
|
|
431
|
+
export function selectIsFetching(state, collection) {
|
|
457
432
|
return state.getIn(['pages', collection, 'isFetching'], false);
|
|
458
433
|
}
|
|
459
434
|
const DRAFT_MEDIA_FILES = 'DRAFT_MEDIA_FILES';
|
|
@@ -482,14 +457,14 @@ function hasCustomFolder(folderKey, collection, slug, field) {
|
|
|
482
457
|
function traverseFields(folderKey, config, collection, entryMap, field, fields, currentFolder) {
|
|
483
458
|
const matchedField = fields.filter(f => f === field)[0];
|
|
484
459
|
if (matchedField) {
|
|
485
|
-
return
|
|
460
|
+
return folderFormatter(matchedField.has(folderKey) ? matchedField.get(folderKey) : `{{${folderKey}}}`, entryMap, collection, currentFolder, folderKey, config.slug);
|
|
486
461
|
}
|
|
487
462
|
for (let f of fields) {
|
|
488
463
|
if (!f.has(folderKey)) {
|
|
489
464
|
// add identity template if doesn't exist
|
|
490
465
|
f = f.set(folderKey, `{{${folderKey}}}`);
|
|
491
466
|
}
|
|
492
|
-
const folder =
|
|
467
|
+
const folder = folderFormatter(f.get(folderKey), entryMap, collection, currentFolder, folderKey, config.slug);
|
|
493
468
|
let fieldFolder = null;
|
|
494
469
|
if (f.has('fields')) {
|
|
495
470
|
fieldFolder = traverseFields(folderKey, config, collection, entryMap, field, f.get('fields').toArray(), folder);
|
|
@@ -514,7 +489,7 @@ function evaluateFolder(folderKey, config, collection, entryMap, field) {
|
|
|
514
489
|
if (collection.has('files')) {
|
|
515
490
|
// files collection evaluate the collection template
|
|
516
491
|
// then move on to the specific file configuration denoted by the slug
|
|
517
|
-
currentFolder =
|
|
492
|
+
currentFolder = folderFormatter(collection.get(folderKey), entryMap, collection, currentFolder, folderKey, config.slug);
|
|
518
493
|
let file = getFileField(collection.get('files'), entryMap === null || entryMap === void 0 ? void 0 : entryMap.get('slug'));
|
|
519
494
|
if (file) {
|
|
520
495
|
if (!file.has(folderKey)) {
|
|
@@ -523,7 +498,7 @@ function evaluateFolder(folderKey, config, collection, entryMap, field) {
|
|
|
523
498
|
}
|
|
524
499
|
|
|
525
500
|
// evaluate the file template and keep evaluating until we match our field
|
|
526
|
-
currentFolder =
|
|
501
|
+
currentFolder = folderFormatter(file.get(folderKey), entryMap, collection, currentFolder, folderKey, config.slug);
|
|
527
502
|
if (field) {
|
|
528
503
|
const fieldFolder = traverseFields(folderKey, config, collection, entryMap, field, file.get('fields').toArray(), currentFolder);
|
|
529
504
|
if (fieldFolder !== null) {
|
|
@@ -534,7 +509,7 @@ function evaluateFolder(folderKey, config, collection, entryMap, field) {
|
|
|
534
509
|
} else {
|
|
535
510
|
// folder collection, evaluate the collection template
|
|
536
511
|
// and keep evaluating until we match our field
|
|
537
|
-
currentFolder =
|
|
512
|
+
currentFolder = folderFormatter(collection.get(folderKey), entryMap, collection, currentFolder, folderKey, config.slug);
|
|
538
513
|
if (field) {
|
|
539
514
|
const fieldFolder = traverseFields(folderKey, config, collection, entryMap, field, collection.get('fields').toArray(), currentFolder);
|
|
540
515
|
if (fieldFolder !== null) {
|
|
@@ -544,7 +519,7 @@ function evaluateFolder(folderKey, config, collection, entryMap, field) {
|
|
|
544
519
|
}
|
|
545
520
|
return currentFolder;
|
|
546
521
|
}
|
|
547
|
-
function selectMediaFolder(config, collection, entryMap, field) {
|
|
522
|
+
export function selectMediaFolder(config, collection, entryMap, field) {
|
|
548
523
|
const name = 'media_folder';
|
|
549
524
|
let mediaFolder = config[name];
|
|
550
525
|
const customFolder = hasCustomFolder(name, collection, entryMap === null || entryMap === void 0 ? void 0 : entryMap.get('slug'), field);
|
|
@@ -552,23 +527,23 @@ function selectMediaFolder(config, collection, entryMap, field) {
|
|
|
552
527
|
const folder = evaluateFolder(name, config, collection, entryMap, field);
|
|
553
528
|
if (folder.startsWith('/')) {
|
|
554
529
|
// return absolute paths as is
|
|
555
|
-
mediaFolder =
|
|
530
|
+
mediaFolder = join(folder);
|
|
556
531
|
} else {
|
|
557
532
|
const entryPath = entryMap === null || entryMap === void 0 ? void 0 : entryMap.get('path');
|
|
558
|
-
mediaFolder = entryPath ?
|
|
533
|
+
mediaFolder = entryPath ? join(dirname(entryPath), folder) : join(collection.get('folder'), DRAFT_MEDIA_FILES);
|
|
559
534
|
}
|
|
560
535
|
}
|
|
561
|
-
return (
|
|
536
|
+
return _trim(mediaFolder, '/');
|
|
562
537
|
}
|
|
563
|
-
function selectMediaFilePath(config, collection, entryMap, mediaPath, field) {
|
|
564
|
-
if (
|
|
538
|
+
export function selectMediaFilePath(config, collection, entryMap, mediaPath, field) {
|
|
539
|
+
if (isAbsolutePath(mediaPath)) {
|
|
565
540
|
return mediaPath;
|
|
566
541
|
}
|
|
567
542
|
const mediaFolder = selectMediaFolder(config, collection, entryMap, field);
|
|
568
|
-
return
|
|
543
|
+
return join(mediaFolder, basename(mediaPath));
|
|
569
544
|
}
|
|
570
|
-
function selectMediaFilePublicPath(config, collection, mediaPath, entryMap, field) {
|
|
571
|
-
if (
|
|
545
|
+
export function selectMediaFilePublicPath(config, collection, mediaPath, entryMap, field) {
|
|
546
|
+
if (isAbsolutePath(mediaPath)) {
|
|
572
547
|
return mediaPath;
|
|
573
548
|
}
|
|
574
549
|
const name = 'public_folder';
|
|
@@ -577,14 +552,14 @@ function selectMediaFilePublicPath(config, collection, mediaPath, entryMap, fiel
|
|
|
577
552
|
if (customFolder) {
|
|
578
553
|
publicFolder = evaluateFolder(name, config, collection, entryMap, field);
|
|
579
554
|
}
|
|
580
|
-
if (
|
|
581
|
-
return
|
|
555
|
+
if (isAbsolutePath(publicFolder)) {
|
|
556
|
+
return joinUrlPath(publicFolder, basename(mediaPath));
|
|
582
557
|
}
|
|
583
|
-
return
|
|
558
|
+
return join(publicFolder, basename(mediaPath));
|
|
584
559
|
}
|
|
585
|
-
function selectEditingDraft(state) {
|
|
560
|
+
export function selectEditingDraft(state) {
|
|
586
561
|
const entry = state.get('entry');
|
|
587
562
|
const workflowDraft = entry && !entry.isEmpty();
|
|
588
563
|
return workflowDraft;
|
|
589
564
|
}
|
|
590
|
-
|
|
565
|
+
export default entries;
|