decap-cms-core 3.6.2 → 3.7.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 +26 -26
- package/dist/decap-cms-core.js.LICENSE.txt +22 -4
- package/dist/decap-cms-core.js.map +1 -1
- package/dist/esm/actions/config.js +57 -49
- package/dist/esm/actions/editorialWorkflow.js +4 -4
- package/dist/esm/actions/entries.js +8 -14
- package/dist/esm/actions/mediaLibrary.js +6 -11
- package/dist/esm/actions/search.js +2 -2
- package/dist/esm/actions/status.js +2 -8
- package/dist/esm/backend.js +70 -79
- package/dist/esm/bootstrap.js +2 -2
- package/dist/esm/components/App/App.js +28 -34
- package/dist/esm/components/App/Header.js +32 -39
- package/dist/esm/components/Collection/Collection.js +45 -48
- package/dist/esm/components/Collection/CollectionSearch.js +76 -81
- package/dist/esm/components/Collection/CollectionTop.js +1 -2
- package/dist/esm/components/Collection/Entries/Entries.js +2 -4
- package/dist/esm/components/Collection/Entries/EntriesCollection.js +25 -29
- package/dist/esm/components/Collection/Entries/EntriesSearch.js +34 -38
- package/dist/esm/components/Collection/Entries/EntryCard.js +8 -13
- package/dist/esm/components/Collection/Entries/EntryListing.js +72 -76
- package/dist/esm/components/Collection/FilterControl.js +1 -1
- package/dist/esm/components/Collection/GroupControl.js +1 -1
- package/dist/esm/components/Collection/NestedCollection.js +50 -53
- package/dist/esm/components/Collection/Sidebar.js +35 -38
- package/dist/esm/components/Collection/SortControl.js +3 -3
- package/dist/esm/components/Collection/ViewStyleControl.js +1 -2
- package/dist/esm/components/Editor/Editor.js +197 -201
- package/dist/esm/components/Editor/EditorControlPane/EditorControl.js +79 -87
- package/dist/esm/components/Editor/EditorControlPane/EditorControlPane.js +75 -86
- package/dist/esm/components/Editor/EditorControlPane/Widget.js +226 -228
- package/dist/esm/components/Editor/EditorInterface.js +69 -80
- package/dist/esm/components/Editor/EditorPreviewPane/EditorPreview.js +1 -2
- package/dist/esm/components/Editor/EditorPreviewPane/EditorPreviewContent.js +20 -28
- package/dist/esm/components/Editor/EditorPreviewPane/EditorPreviewPane.js +163 -161
- package/dist/esm/components/Editor/EditorPreviewPane/PreviewHOC.js +4 -8
- package/dist/esm/components/Editor/EditorToolbar.js +335 -347
- package/dist/esm/components/Editor/withWorkflow.js +5 -6
- package/dist/esm/components/MediaLibrary/MediaLibrary.js +304 -294
- package/dist/esm/components/MediaLibrary/MediaLibraryButtons.js +40 -46
- package/dist/esm/components/MediaLibrary/MediaLibraryCard.js +1 -2
- package/dist/esm/components/MediaLibrary/MediaLibraryCardGrid.js +8 -13
- package/dist/esm/components/MediaLibrary/MediaLibraryModal.js +3 -3
- package/dist/esm/components/MediaLibrary/MediaLibrarySearch.js +1 -2
- package/dist/esm/components/MediaLibrary/MediaLibraryTop.js +3 -6
- package/dist/esm/components/UI/DragDrop.js +15 -23
- package/dist/esm/components/UI/ErrorBoundary.js +23 -25
- package/dist/esm/components/UI/Modal.js +10 -12
- package/dist/esm/components/UI/Notifications.js +4 -8
- package/dist/esm/components/UI/SettingsDropdown.js +4 -8
- package/dist/esm/components/Workflow/Workflow.js +19 -20
- package/dist/esm/components/Workflow/WorkflowCard.js +2 -4
- package/dist/esm/components/Workflow/WorkflowList.js +105 -113
- package/dist/esm/constants/configSchema.js +18 -16
- package/dist/esm/formats/formats.js +11 -12
- package/dist/esm/formats/frontmatter.js +17 -21
- package/dist/esm/formats/yaml.js +2 -6
- package/dist/esm/index.js +3 -7
- package/dist/esm/integrations/providers/algolia/implementation.js +12 -14
- package/dist/esm/integrations/providers/assetStore/implementation.js +10 -12
- package/dist/esm/lib/formatters.js +13 -17
- package/dist/esm/lib/i18n.js +35 -33
- package/dist/esm/lib/phrases.js +2 -2
- package/dist/esm/lib/registry.js +35 -35
- package/dist/esm/lib/serializeEntryValues.js +3 -3
- package/dist/esm/lib/stega.js +142 -0
- package/dist/esm/lib/urlHelper.js +16 -18
- package/dist/esm/mediaLibrary.js +3 -4
- package/dist/esm/reducers/collections.js +26 -42
- package/dist/esm/reducers/combinedReducer.js +3 -6
- package/dist/esm/reducers/config.js +3 -7
- package/dist/esm/reducers/editorialWorkflow.js +5 -9
- package/dist/esm/reducers/entries.js +33 -35
- package/dist/esm/reducers/entryDraft.js +2 -2
- package/dist/esm/reducers/integrations.js +8 -14
- package/dist/esm/reducers/mediaLibrary.js +18 -20
- package/dist/esm/reducers/notifications.js +4 -8
- package/dist/esm/types/immutable.js +7 -1
- package/dist/esm/valueObjects/AssetProxy.js +1 -9
- package/dist/esm/valueObjects/EditorComponent.js +18 -25
- package/dist/esm/valueObjects/Entry.js +2 -2
- package/index.d.ts +2 -0
- package/package.json +8 -11
- package/src/actions/__tests__/config.spec.js +3 -3
- package/src/actions/config.ts +3 -1
- package/src/actions/editorialWorkflow.ts +1 -1
- package/src/actions/entries.ts +1 -1
- package/src/actions/search.ts +1 -1
- package/src/backend.ts +8 -1
- package/src/components/App/App.js +5 -0
- package/src/components/App/Header.js +3 -0
- package/src/components/Collection/Collection.js +5 -0
- package/src/components/Collection/CollectionSearch.js +5 -0
- package/src/components/Collection/Entries/EntriesCollection.js +4 -1
- package/src/components/Collection/Entries/EntriesSearch.js +4 -1
- package/src/components/Collection/Entries/EntryListing.js +5 -0
- package/src/components/Collection/Entries/__tests__/__snapshots__/EntriesCollection.spec.js.snap +0 -4
- package/src/components/Collection/NestedCollection.js +6 -1
- package/src/components/Collection/Sidebar.js +5 -0
- package/src/components/Editor/Editor.js +4 -1
- package/src/components/Editor/EditorControlPane/EditorControl.js +7 -1
- package/src/components/Editor/EditorControlPane/Widget.js +5 -0
- package/src/components/Editor/EditorPreviewPane/EditorPreviewPane.js +1 -1
- package/src/components/Editor/EditorToolbar.js +6 -3
- package/src/components/Editor/__tests__/Editor.spec.js +3 -4
- package/src/components/Editor/__tests__/__snapshots__/Editor.spec.js.snap +5 -5
- package/src/components/Editor/__tests__/__snapshots__/EditorToolbar.spec.js.snap +708 -393
- package/src/components/MediaLibrary/MediaLibrary.js +5 -1
- package/src/components/MediaLibrary/MediaLibraryModal.js +1 -1
- package/src/components/UI/ErrorBoundary.js +6 -1
- package/src/components/UI/Modal.js +3 -0
- package/src/components/Workflow/Workflow.js +3 -0
- package/src/components/Workflow/WorkflowList.js +5 -0
- package/src/constants/__tests__/configSchema.spec.js +1 -1
- package/src/formats/formats.ts +1 -1
- package/src/integrations/providers/algolia/implementation.js +2 -2
- package/src/integrations/providers/assetStore/implementation.js +2 -1
- package/src/lib/formatters.ts +4 -1
- package/src/lib/i18n.ts +3 -1
- package/src/lib/phrases.js +1 -1
- package/src/lib/serializeEntryValues.js +1 -1
- package/src/lib/stega.ts +145 -0
- package/src/lib/urlHelper.ts +4 -1
- package/src/mediaLibrary.ts +1 -1
- package/src/reducers/collections.ts +2 -1
- package/src/reducers/editorialWorkflow.ts +1 -1
- package/src/reducers/entries.ts +6 -1
- package/src/reducers/entryDraft.js +1 -1
- package/src/types/immutable.ts +10 -0
- package/src/types/redux.ts +2 -0
- package/src/valueObjects/EditorComponent.js +1 -1
- package/src/valueObjects/Entry.ts +1 -1
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
import _startsWith from "lodash/startsWith";
|
|
2
|
-
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
|
-
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
|
-
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; }
|
|
5
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
|
|
6
|
-
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); }
|
|
7
1
|
import { Map, List, fromJS } from 'immutable';
|
|
2
|
+
import startsWith from 'lodash/startsWith';
|
|
8
3
|
import { EDITORIAL_WORKFLOW } from '../constants/publishModes';
|
|
9
4
|
import { UNPUBLISHED_ENTRY_REQUEST, UNPUBLISHED_ENTRY_REDIRECT, UNPUBLISHED_ENTRY_SUCCESS, UNPUBLISHED_ENTRIES_REQUEST, UNPUBLISHED_ENTRIES_SUCCESS, UNPUBLISHED_ENTRY_PERSIST_REQUEST, UNPUBLISHED_ENTRY_PERSIST_SUCCESS, UNPUBLISHED_ENTRY_PERSIST_FAILURE, UNPUBLISHED_ENTRY_STATUS_CHANGE_REQUEST, UNPUBLISHED_ENTRY_STATUS_CHANGE_SUCCESS, UNPUBLISHED_ENTRY_STATUS_CHANGE_FAILURE, UNPUBLISHED_ENTRY_PUBLISH_REQUEST, UNPUBLISHED_ENTRY_PUBLISH_SUCCESS, UNPUBLISHED_ENTRY_PUBLISH_FAILURE, UNPUBLISHED_ENTRY_DELETE_SUCCESS } from '../actions/editorialWorkflow';
|
|
10
5
|
import { CONFIG_SUCCESS } from '../actions/config';
|
|
@@ -33,9 +28,10 @@ function unpublishedEntries(state = Map(), action) {
|
|
|
33
28
|
case UNPUBLISHED_ENTRIES_SUCCESS:
|
|
34
29
|
return state.withMutations(map => {
|
|
35
30
|
action.payload.entries.forEach(entry => map.setIn(['entities', `${entry.collection}.${entry.slug}`], fromJS(entry).set('isFetching', false)));
|
|
36
|
-
map.set('pages', Map(
|
|
31
|
+
map.set('pages', Map({
|
|
32
|
+
...action.payload.pages,
|
|
37
33
|
ids: List(action.payload.entries.map(entry => entry.slug))
|
|
38
|
-
}))
|
|
34
|
+
}));
|
|
39
35
|
});
|
|
40
36
|
case UNPUBLISHED_ENTRY_PERSIST_REQUEST:
|
|
41
37
|
{
|
|
@@ -82,6 +78,6 @@ export function selectUnpublishedEntriesByStatus(state, status) {
|
|
|
82
78
|
export function selectUnpublishedSlugs(state, collection) {
|
|
83
79
|
if (!state.get('entities')) return null;
|
|
84
80
|
const entities = state.get('entities');
|
|
85
|
-
return entities.filter((_v, k) =>
|
|
81
|
+
return entities.filter((_v, k) => startsWith(k, `${collection}.`)).map(entry => entry.get('slug')).valueSeq();
|
|
86
82
|
}
|
|
87
83
|
export default unpublishedEntries;
|
|
@@ -1,17 +1,12 @@
|
|
|
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";
|
|
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; }
|
|
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; }
|
|
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; }
|
|
10
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
|
|
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
1
|
import { Map, List, fromJS, OrderedMap, Set } from 'immutable';
|
|
13
2
|
import { dirname, join } from 'path';
|
|
14
3
|
import { isAbsolutePath, basename } from 'decap-cms-lib-util';
|
|
4
|
+
import trim from 'lodash/trim';
|
|
5
|
+
import once from 'lodash/once';
|
|
6
|
+
import sortBy from 'lodash/sortBy';
|
|
7
|
+
import set from 'lodash/set';
|
|
8
|
+
import orderBy from 'lodash/orderBy';
|
|
9
|
+
import groupBy from 'lodash/groupBy';
|
|
15
10
|
import { stringTemplate } from 'decap-cms-lib-widgets';
|
|
16
11
|
import { SortDirection } from '../types/redux';
|
|
17
12
|
import { folderFormatter } from '../lib/formatters';
|
|
@@ -30,7 +25,7 @@ let page;
|
|
|
30
25
|
let slug;
|
|
31
26
|
const storageSortKey = 'decap-cms.entries.sort';
|
|
32
27
|
const viewStyleKey = 'decap-cms.entries.viewStyle';
|
|
33
|
-
const loadSort =
|
|
28
|
+
const loadSort = once(() => {
|
|
34
29
|
const sortString = localStorage.getItem(storageSortKey);
|
|
35
30
|
if (sortString) {
|
|
36
31
|
try {
|
|
@@ -38,7 +33,7 @@ const loadSort = _once(() => {
|
|
|
38
33
|
let map = Map();
|
|
39
34
|
Object.entries(sort).forEach(([collection, sort]) => {
|
|
40
35
|
let orderedMap = OrderedMap();
|
|
41
|
-
|
|
36
|
+
sortBy(Object.values(sort), ['index']).forEach(value => {
|
|
42
37
|
const {
|
|
43
38
|
key,
|
|
44
39
|
direction
|
|
@@ -65,11 +60,12 @@ function persistSort(sort) {
|
|
|
65
60
|
const storageSort = {};
|
|
66
61
|
sort.keySeq().forEach(key => {
|
|
67
62
|
const collection = key;
|
|
68
|
-
const sortObjects = sort.get(collection).valueSeq().toJS().map((value, index) =>
|
|
63
|
+
const sortObjects = sort.get(collection).valueSeq().toJS().map((value, index) => ({
|
|
64
|
+
...value,
|
|
69
65
|
index
|
|
70
66
|
}));
|
|
71
67
|
sortObjects.forEach(value => {
|
|
72
|
-
|
|
68
|
+
set(storageSort, [collection, value.key], value);
|
|
73
69
|
});
|
|
74
70
|
});
|
|
75
71
|
localStorage.setItem(storageSortKey, JSON.stringify(storageSort));
|
|
@@ -77,7 +73,7 @@ function persistSort(sort) {
|
|
|
77
73
|
clearSort();
|
|
78
74
|
}
|
|
79
75
|
}
|
|
80
|
-
const loadViewStyle =
|
|
76
|
+
const loadViewStyle = once(() => {
|
|
81
77
|
const viewStyle = localStorage.getItem(viewStyleKey);
|
|
82
78
|
if (viewStyle) {
|
|
83
79
|
return viewStyle;
|
|
@@ -298,29 +294,29 @@ function entries(state = Map({
|
|
|
298
294
|
}
|
|
299
295
|
export function selectEntriesSort(entries, collection) {
|
|
300
296
|
const sort = entries.get('sort');
|
|
301
|
-
return sort
|
|
297
|
+
return sort?.get(collection);
|
|
302
298
|
}
|
|
303
299
|
export function selectEntriesFilter(entries, collection) {
|
|
304
300
|
const filter = entries.get('filter');
|
|
305
|
-
return
|
|
301
|
+
return filter?.get(collection) || Map();
|
|
306
302
|
}
|
|
307
303
|
export function selectEntriesGroup(entries, collection) {
|
|
308
304
|
const group = entries.get('group');
|
|
309
|
-
return
|
|
305
|
+
return group?.get(collection) || Map();
|
|
310
306
|
}
|
|
311
307
|
export function selectEntriesGroupField(entries, collection) {
|
|
312
308
|
const groups = selectEntriesGroup(entries, collection);
|
|
313
|
-
const value = groups
|
|
309
|
+
const value = groups?.valueSeq().find(v => v?.get('active') === true);
|
|
314
310
|
return value;
|
|
315
311
|
}
|
|
316
312
|
export function selectEntriesSortFields(entries, collection) {
|
|
317
313
|
const sort = selectEntriesSort(entries, collection);
|
|
318
|
-
const values =
|
|
314
|
+
const values = sort?.valueSeq().filter(v => v?.get('direction') !== SortDirection.None).toArray() || [];
|
|
319
315
|
return values;
|
|
320
316
|
}
|
|
321
317
|
export function selectEntriesFilterFields(entries, collection) {
|
|
322
318
|
const filter = selectEntriesFilter(entries, collection);
|
|
323
|
-
const values =
|
|
319
|
+
const values = filter?.valueSeq().filter(v => v?.get('active') === true).toArray() || [];
|
|
324
320
|
return values;
|
|
325
321
|
}
|
|
326
322
|
export function selectViewStyle(entries) {
|
|
@@ -344,7 +340,7 @@ export function selectEntries(state, collection) {
|
|
|
344
340
|
if (sortFields && sortFields.length > 0) {
|
|
345
341
|
const keys = sortFields.map(v => selectSortDataPath(collection, v.get('key')));
|
|
346
342
|
const orders = sortFields.map(v => v.get('direction') === SortDirection.Ascending ? 'asc' : 'desc');
|
|
347
|
-
entries = fromJS(
|
|
343
|
+
entries = fromJS(orderBy(entries.toJS(), keys, orders));
|
|
348
344
|
}
|
|
349
345
|
const filters = selectEntriesFilterFields(state, collectionName);
|
|
350
346
|
if (filters && filters.length > 0) {
|
|
@@ -406,24 +402,26 @@ export function selectGroups(state, collection) {
|
|
|
406
402
|
return [];
|
|
407
403
|
}
|
|
408
404
|
let groups = {};
|
|
409
|
-
const groupedEntries =
|
|
405
|
+
const groupedEntries = groupBy(entries.toArray(), entry => {
|
|
410
406
|
const group = getGroup(entry, selectedGroup);
|
|
411
|
-
groups =
|
|
407
|
+
groups = {
|
|
408
|
+
...groups,
|
|
412
409
|
[group.id]: group
|
|
413
|
-
}
|
|
410
|
+
};
|
|
414
411
|
return group.id;
|
|
415
412
|
});
|
|
416
413
|
const groupsArray = Object.entries(groupedEntries).map(([id, entries]) => {
|
|
417
|
-
return
|
|
414
|
+
return {
|
|
415
|
+
...groups[id],
|
|
418
416
|
paths: Set(entries.map(entry => entry.get('path')))
|
|
419
|
-
}
|
|
417
|
+
};
|
|
420
418
|
});
|
|
421
419
|
return groupsArray;
|
|
422
420
|
}
|
|
423
421
|
export function selectEntryByPath(state, collection, path) {
|
|
424
422
|
const slugs = selectPublishedSlugs(state, collection);
|
|
425
423
|
const entries = slugs && slugs.map(slug => selectEntry(state, collection, slug));
|
|
426
|
-
return entries && entries.find(e =>
|
|
424
|
+
return entries && entries.find(e => e?.get('path') === path);
|
|
427
425
|
}
|
|
428
426
|
export function selectEntriesLoaded(state, collection) {
|
|
429
427
|
return !!state.getIn(['pages', collection]);
|
|
@@ -433,7 +431,7 @@ export function selectIsFetching(state, collection) {
|
|
|
433
431
|
}
|
|
434
432
|
const DRAFT_MEDIA_FILES = 'DRAFT_MEDIA_FILES';
|
|
435
433
|
function getFileField(collectionFiles, slug) {
|
|
436
|
-
const file = collectionFiles.find(f =>
|
|
434
|
+
const file = collectionFiles.find(f => f?.get('name') === slug);
|
|
437
435
|
return file;
|
|
438
436
|
}
|
|
439
437
|
function hasCustomFolder(folderKey, collection, slug, field) {
|
|
@@ -490,7 +488,7 @@ function evaluateFolder(folderKey, config, collection, entryMap, field) {
|
|
|
490
488
|
// files collection evaluate the collection template
|
|
491
489
|
// then move on to the specific file configuration denoted by the slug
|
|
492
490
|
currentFolder = folderFormatter(collection.get(folderKey), entryMap, collection, currentFolder, folderKey, config.slug);
|
|
493
|
-
let file = getFileField(collection.get('files'), entryMap
|
|
491
|
+
let file = getFileField(collection.get('files'), entryMap?.get('slug'));
|
|
494
492
|
if (file) {
|
|
495
493
|
if (!file.has(folderKey)) {
|
|
496
494
|
// add identity template if doesn't exist
|
|
@@ -522,18 +520,18 @@ function evaluateFolder(folderKey, config, collection, entryMap, field) {
|
|
|
522
520
|
export function selectMediaFolder(config, collection, entryMap, field) {
|
|
523
521
|
const name = 'media_folder';
|
|
524
522
|
let mediaFolder = config[name];
|
|
525
|
-
const customFolder = hasCustomFolder(name, collection, entryMap
|
|
523
|
+
const customFolder = hasCustomFolder(name, collection, entryMap?.get('slug'), field);
|
|
526
524
|
if (customFolder) {
|
|
527
525
|
const folder = evaluateFolder(name, config, collection, entryMap, field);
|
|
528
526
|
if (folder.startsWith('/')) {
|
|
529
527
|
// return absolute paths as is
|
|
530
528
|
mediaFolder = join(folder);
|
|
531
529
|
} else {
|
|
532
|
-
const entryPath = entryMap
|
|
530
|
+
const entryPath = entryMap?.get('path');
|
|
533
531
|
mediaFolder = entryPath ? join(dirname(entryPath), folder) : join(collection.get('folder'), DRAFT_MEDIA_FILES);
|
|
534
532
|
}
|
|
535
533
|
}
|
|
536
|
-
return
|
|
534
|
+
return trim(mediaFolder, '/');
|
|
537
535
|
}
|
|
538
536
|
export function selectMediaFilePath(config, collection, entryMap, mediaPath, field) {
|
|
539
537
|
if (isAbsolutePath(mediaPath)) {
|
|
@@ -548,7 +546,7 @@ export function selectMediaFilePublicPath(config, collection, mediaPath, entryMa
|
|
|
548
546
|
}
|
|
549
547
|
const name = 'public_folder';
|
|
550
548
|
let publicFolder = config[name];
|
|
551
|
-
const customFolder = hasCustomFolder(name, collection, entryMap
|
|
549
|
+
const customFolder = hasCustomFolder(name, collection, entryMap?.get('slug'), field);
|
|
552
550
|
if (customFolder) {
|
|
553
551
|
publicFolder = evaluateFolder(name, config, collection, entryMap, field);
|
|
554
552
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import _get from "lodash/get";
|
|
2
1
|
import { Map, List, fromJS } from 'immutable';
|
|
3
2
|
import { v4 as uuid } from 'uuid';
|
|
3
|
+
import get from 'lodash/get';
|
|
4
4
|
import { join } from 'path';
|
|
5
5
|
import { DRAFT_CREATE_FROM_ENTRY, DRAFT_CREATE_EMPTY, DRAFT_DISCARD, DRAFT_CHANGE_FIELD, DRAFT_VALIDATION_ERRORS, DRAFT_CLEAR_ERRORS, DRAFT_LOCAL_BACKUP_RETRIEVED, DRAFT_CREATE_FROM_LOCAL_BACKUP, DRAFT_CREATE_DUPLICATE_FROM_ENTRY, ENTRY_PERSIST_REQUEST, ENTRY_PERSIST_SUCCESS, ENTRY_PERSIST_FAILURE, ENTRY_DELETE_SUCCESS, ADD_DRAFT_ENTRY_MEDIA_FILE, REMOVE_DRAFT_ENTRY_MEDIA_FILE } from '../actions/entries';
|
|
6
6
|
import { UNPUBLISHED_ENTRY_PERSIST_REQUEST, UNPUBLISHED_ENTRY_PERSIST_SUCCESS, UNPUBLISHED_ENTRY_PERSIST_FAILURE, UNPUBLISHED_ENTRY_STATUS_CHANGE_REQUEST, UNPUBLISHED_ENTRY_STATUS_CHANGE_SUCCESS, UNPUBLISHED_ENTRY_STATUS_CHANGE_FAILURE, UNPUBLISHED_ENTRY_PUBLISH_REQUEST, UNPUBLISHED_ENTRY_PUBLISH_SUCCESS, UNPUBLISHED_ENTRY_PUBLISH_FAILURE } from '../actions/editorialWorkflow';
|
|
@@ -170,7 +170,7 @@ export function selectCustomPath(collection, entryDraft) {
|
|
|
170
170
|
}
|
|
171
171
|
const meta = entryDraft.getIn(['entry', 'meta']);
|
|
172
172
|
const path = meta && meta.get('path');
|
|
173
|
-
const indexFile =
|
|
173
|
+
const indexFile = get(collection.toJS(), ['meta', 'path', 'index_file']);
|
|
174
174
|
const extension = selectFolderEntryExtension(collection);
|
|
175
175
|
const customPath = path && join(collection.get('folder'), path, `${indexFile}.${extension}`);
|
|
176
176
|
return customPath;
|
|
@@ -1,23 +1,17 @@
|
|
|
1
|
-
const _excluded = ["hooks", "collections", "provider"];
|
|
2
|
-
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
|
-
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
|
-
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; }
|
|
5
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
|
|
6
|
-
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); }
|
|
7
|
-
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
8
|
-
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
9
1
|
import { fromJS } from 'immutable';
|
|
10
2
|
import { CONFIG_SUCCESS } from '../actions/config';
|
|
11
3
|
export function getIntegrations(config) {
|
|
12
4
|
const integrations = config.integrations || [];
|
|
13
5
|
const newState = integrations.reduce((acc, integration) => {
|
|
14
6
|
const {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
acc.providers[provider] =
|
|
7
|
+
hooks,
|
|
8
|
+
collections,
|
|
9
|
+
provider,
|
|
10
|
+
...providerData
|
|
11
|
+
} = integration;
|
|
12
|
+
acc.providers[provider] = {
|
|
13
|
+
...providerData
|
|
14
|
+
};
|
|
21
15
|
if (!collections) {
|
|
22
16
|
hooks.forEach(hook => {
|
|
23
17
|
acc.hooks[hook] = provider;
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
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; }
|
|
2
|
-
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; }
|
|
3
|
-
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; }
|
|
4
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
|
|
5
|
-
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); }
|
|
6
1
|
import { Map, List } from 'immutable';
|
|
7
2
|
import { v4 as uuid } from 'uuid';
|
|
8
3
|
import { dirname } from 'path';
|
|
@@ -53,14 +48,14 @@ function mediaLibrary(state = Map(defaultState), action) {
|
|
|
53
48
|
}
|
|
54
49
|
return state.withMutations(map => {
|
|
55
50
|
map.set('isVisible', true);
|
|
56
|
-
map.set('forImage', forImage
|
|
57
|
-
map.set('controlID', controlID
|
|
51
|
+
map.set('forImage', forImage ?? false);
|
|
52
|
+
map.set('controlID', controlID ?? '');
|
|
58
53
|
map.set('canInsert', !!controlID);
|
|
59
54
|
map.set('privateUpload', privateUpload);
|
|
60
55
|
map.set('config', libConfig);
|
|
61
|
-
map.set('field', field
|
|
62
|
-
map.set('value', value == '' && libConfig.get('multiple') ? [] : value
|
|
63
|
-
map.set('replaceIndex', replaceIndex
|
|
56
|
+
map.set('field', field ?? '');
|
|
57
|
+
map.set('value', value == '' && libConfig.get('multiple') ? [] : value ?? '');
|
|
58
|
+
map.set('replaceIndex', replaceIndex ?? false);
|
|
64
59
|
});
|
|
65
60
|
}
|
|
66
61
|
case MEDIA_LIBRARY_CLOSE:
|
|
@@ -113,16 +108,17 @@ function mediaLibrary(state = Map(defaultState), action) {
|
|
|
113
108
|
if (privateUploadChanged) {
|
|
114
109
|
return state;
|
|
115
110
|
}
|
|
116
|
-
const filesWithKeys = files.map(file =>
|
|
111
|
+
const filesWithKeys = files.map(file => ({
|
|
112
|
+
...file,
|
|
117
113
|
key: uuid()
|
|
118
114
|
}));
|
|
119
115
|
return state.withMutations(map => {
|
|
120
116
|
map.set('isLoading', false);
|
|
121
117
|
map.set('isPaginating', false);
|
|
122
|
-
map.set('page', page
|
|
118
|
+
map.set('page', page ?? 1);
|
|
123
119
|
map.set('hasNextPage', !!(canPaginate && files.length > 0));
|
|
124
|
-
map.set('dynamicSearch', dynamicSearch
|
|
125
|
-
map.set('dynamicSearchQuery', dynamicSearchQuery
|
|
120
|
+
map.set('dynamicSearch', dynamicSearch ?? false);
|
|
121
|
+
map.set('dynamicSearchQuery', dynamicSearchQuery ?? '');
|
|
126
122
|
map.set('dynamicSearchActive', !!dynamicSearchQuery);
|
|
127
123
|
if (page && page > 1) {
|
|
128
124
|
const updatedFiles = map.get('files').concat(filesWithKeys);
|
|
@@ -153,9 +149,10 @@ function mediaLibrary(state = Map(defaultState), action) {
|
|
|
153
149
|
return state;
|
|
154
150
|
}
|
|
155
151
|
return state.withMutations(map => {
|
|
156
|
-
const fileWithKey =
|
|
152
|
+
const fileWithKey = {
|
|
153
|
+
...file,
|
|
157
154
|
key: uuid()
|
|
158
|
-
}
|
|
155
|
+
};
|
|
159
156
|
const files = map.get('files');
|
|
160
157
|
const updatedFiles = [fileWithKey, ...files];
|
|
161
158
|
map.set('files', updatedFiles);
|
|
@@ -232,11 +229,12 @@ export function selectMediaFiles(state, field) {
|
|
|
232
229
|
if (editingDraft && !integration) {
|
|
233
230
|
const entryFiles = entryDraft.getIn(['entry', 'mediaFiles'], List()).toJS();
|
|
234
231
|
const entry = entryDraft.get('entry');
|
|
235
|
-
const collection = state.collections.get(entry
|
|
232
|
+
const collection = state.collections.get(entry?.get('collection'));
|
|
236
233
|
const mediaFolder = selectMediaFolder(state.config, collection, entry, field);
|
|
237
|
-
files = entryFiles.filter(f => dirname(f.path) === mediaFolder).map(file =>
|
|
238
|
-
key: file.id
|
|
239
|
-
|
|
234
|
+
files = entryFiles.filter(f => dirname(f.path) === mediaFolder).map(file => ({
|
|
235
|
+
key: file.id,
|
|
236
|
+
...file
|
|
237
|
+
}));
|
|
240
238
|
} else {
|
|
241
239
|
files = mediaLibrary.get('files') || [];
|
|
242
240
|
}
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
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; }
|
|
2
|
-
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; }
|
|
3
|
-
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; }
|
|
4
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
|
|
5
|
-
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); }
|
|
6
1
|
import { produce } from 'immer';
|
|
7
2
|
import { v4 as uuid } from 'uuid';
|
|
8
3
|
import { NOTIFICATION_SEND, NOTIFICATION_DISMISS, NOTIFICATIONS_CLEAR } from '../actions/notifications';
|
|
@@ -18,9 +13,10 @@ const notifications = produce((state, action) => {
|
|
|
18
13
|
state.notifications = state.notifications.filter(n => n.id !== action.id);
|
|
19
14
|
break;
|
|
20
15
|
case NOTIFICATION_SEND:
|
|
21
|
-
state.notifications = [...state.notifications,
|
|
22
|
-
id: uuid()
|
|
23
|
-
|
|
16
|
+
state.notifications = [...state.notifications, {
|
|
17
|
+
id: uuid(),
|
|
18
|
+
...action.payload
|
|
19
|
+
}];
|
|
24
20
|
break;
|
|
25
21
|
}
|
|
26
22
|
}, defaultState);
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
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; }
|
|
2
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
|
|
3
|
-
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); }
|
|
4
1
|
export default class AssetProxy {
|
|
5
2
|
constructor({
|
|
6
3
|
url,
|
|
@@ -8,10 +5,6 @@ export default class AssetProxy {
|
|
|
8
5
|
path,
|
|
9
6
|
field
|
|
10
7
|
}) {
|
|
11
|
-
_defineProperty(this, "url", void 0);
|
|
12
|
-
_defineProperty(this, "fileObj", void 0);
|
|
13
|
-
_defineProperty(this, "path", void 0);
|
|
14
|
-
_defineProperty(this, "field", void 0);
|
|
15
8
|
this.url = url ? url : file ? window.URL.createObjectURL(file) : '';
|
|
16
9
|
this.fileObj = file;
|
|
17
10
|
this.path = path;
|
|
@@ -28,8 +21,7 @@ export default class AssetProxy {
|
|
|
28
21
|
const result = await new Promise(resolve => {
|
|
29
22
|
const fr = new FileReader();
|
|
30
23
|
fr.onload = readerEvt => {
|
|
31
|
-
|
|
32
|
-
const binaryString = ((_readerEvt$target = readerEvt.target) === null || _readerEvt$target === void 0 ? void 0 : _readerEvt$target.result) || '';
|
|
24
|
+
const binaryString = readerEvt.target?.result || '';
|
|
33
25
|
resolve(binaryString.toString().split('base64,')[1]);
|
|
34
26
|
};
|
|
35
27
|
fr.readAsDataURL(blob);
|
|
@@ -1,32 +1,24 @@
|
|
|
1
|
-
import _isFunction from "lodash/isFunction";
|
|
2
|
-
const _excluded = ["id", "label", "icon", "type", "widget", "pattern", "fields", "fromBlock", "toBlock", "toPreview"];
|
|
3
|
-
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; }
|
|
4
|
-
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; }
|
|
5
|
-
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; }
|
|
6
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
|
|
7
|
-
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); }
|
|
8
|
-
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
9
|
-
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
10
1
|
import { fromJS } from 'immutable';
|
|
2
|
+
import isFunction from 'lodash/isFunction';
|
|
11
3
|
const catchesNothing = /.^/;
|
|
12
4
|
function bind(fn) {
|
|
13
|
-
return
|
|
5
|
+
return isFunction(fn) && fn.bind(null);
|
|
14
6
|
}
|
|
15
7
|
export default function createEditorComponent(config) {
|
|
16
8
|
const {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
return
|
|
9
|
+
id = null,
|
|
10
|
+
label = 'unnamed component',
|
|
11
|
+
icon = 'exclamation-triangle',
|
|
12
|
+
type = 'shortcode',
|
|
13
|
+
widget = 'object',
|
|
14
|
+
pattern = catchesNothing,
|
|
15
|
+
fields = [],
|
|
16
|
+
fromBlock,
|
|
17
|
+
toBlock,
|
|
18
|
+
toPreview,
|
|
19
|
+
...remainingConfig
|
|
20
|
+
} = config;
|
|
21
|
+
return {
|
|
30
22
|
id: id || label.replace(/[^A-Z0-9]+/gi, '_'),
|
|
31
23
|
label,
|
|
32
24
|
type,
|
|
@@ -36,6 +28,7 @@ export default function createEditorComponent(config) {
|
|
|
36
28
|
fromBlock: bind(fromBlock) || (() => ({})),
|
|
37
29
|
toBlock: bind(toBlock) || (() => 'Plugin'),
|
|
38
30
|
toPreview: bind(toPreview) || !widget && (bind(toBlock) || (() => 'Plugin')),
|
|
39
|
-
fields: fromJS(fields)
|
|
40
|
-
|
|
31
|
+
fields: fromJS(fields),
|
|
32
|
+
...remainingConfig
|
|
33
|
+
};
|
|
41
34
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import isBoolean from 'lodash/isBoolean';
|
|
2
2
|
export function createEntry(collection, slug = '', path = '', options = {}) {
|
|
3
3
|
const returnObj = {
|
|
4
4
|
collection,
|
|
@@ -8,7 +8,7 @@ export function createEntry(collection, slug = '', path = '', options = {}) {
|
|
|
8
8
|
raw: options.raw || '',
|
|
9
9
|
data: options.data || {},
|
|
10
10
|
label: options.label || null,
|
|
11
|
-
isModification:
|
|
11
|
+
isModification: isBoolean(options.isModification) ? options.isModification : null,
|
|
12
12
|
mediaFiles: options.mediaFiles || [],
|
|
13
13
|
author: options.author || '',
|
|
14
14
|
updatedOn: options.updatedOn || '',
|
package/index.d.ts
CHANGED
|
@@ -233,6 +233,7 @@ declare module 'decap-cms-core' {
|
|
|
233
233
|
// This is the default widget, so declaring its type is optional.
|
|
234
234
|
widget?: 'string' | 'text';
|
|
235
235
|
default?: string;
|
|
236
|
+
visualEditing?: boolean;
|
|
236
237
|
}
|
|
237
238
|
|
|
238
239
|
export interface CmsFieldMeta {
|
|
@@ -306,6 +307,7 @@ declare module 'decap-cms-core' {
|
|
|
306
307
|
hide?: boolean;
|
|
307
308
|
editor?: {
|
|
308
309
|
preview?: boolean;
|
|
310
|
+
visualEditing?: boolean;
|
|
309
311
|
};
|
|
310
312
|
publish?: boolean;
|
|
311
313
|
nested?: {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "decap-cms-core",
|
|
3
3
|
"description": "Decap CMS core application, see decap-cms package for the main distribution.",
|
|
4
|
-
"version": "3.
|
|
4
|
+
"version": "3.7.0",
|
|
5
5
|
"repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-core",
|
|
6
6
|
"bugs": "https://github.com/decaporg/decap-cms/issues",
|
|
7
7
|
"module": "dist/esm/index.js",
|
|
@@ -27,10 +27,7 @@
|
|
|
27
27
|
"@iarna/toml": "2.2.5",
|
|
28
28
|
"@reduxjs/toolkit": "^1.9.1",
|
|
29
29
|
"@vercel/stega": "^0.1.2",
|
|
30
|
-
"
|
|
31
|
-
"ajv-errors": "^3.0.0",
|
|
32
|
-
"ajv-keywords": "^5.0.0",
|
|
33
|
-
"clean-stack": "^4.1.0",
|
|
30
|
+
"clean-stack": "^5.2.0",
|
|
34
31
|
"copy-text-to-clipboard": "^3.0.0",
|
|
35
32
|
"dayjs": "^1.11.10",
|
|
36
33
|
"deepmerge": "^4.2.2",
|
|
@@ -44,10 +41,10 @@
|
|
|
44
41
|
"jwt-decode": "^3.0.0",
|
|
45
42
|
"node-polyglot": "^2.3.0",
|
|
46
43
|
"prop-types": "^15.7.2",
|
|
47
|
-
"react": "^
|
|
44
|
+
"react": "^19.1.0",
|
|
48
45
|
"react-dnd": "^14.0.0",
|
|
49
46
|
"react-dnd-html5-backend": "^14.0.0",
|
|
50
|
-
"react-dom": "^
|
|
47
|
+
"react-dom": "^19.1.0",
|
|
51
48
|
"react-frame-component": "^5.2.1",
|
|
52
49
|
"react-immutable-proptypes": "^2.1.0",
|
|
53
50
|
"react-is": "16.13.1",
|
|
@@ -56,7 +53,7 @@
|
|
|
56
53
|
"react-polyglot": "^0.7.0",
|
|
57
54
|
"react-redux": "^7.2.0",
|
|
58
55
|
"react-router-dom": "^5.2.0",
|
|
59
|
-
"react-scroll-sync": "^0.
|
|
56
|
+
"react-scroll-sync": "^0.11.2",
|
|
60
57
|
"react-split-pane": "^0.1.85",
|
|
61
58
|
"react-toastify": "^9.1.1",
|
|
62
59
|
"react-topbar-progress-indicator": "^4.0.0",
|
|
@@ -87,8 +84,8 @@
|
|
|
87
84
|
"immutable": "^3.7.6",
|
|
88
85
|
"lodash": "^4.17.11",
|
|
89
86
|
"prop-types": "^15.7.2",
|
|
90
|
-
"react": "^
|
|
91
|
-
"react-dom": "^
|
|
87
|
+
"react": "^19.1.0",
|
|
88
|
+
"react-dom": "^19.1.0",
|
|
92
89
|
"react-immutable-proptypes": "^2.1.0"
|
|
93
90
|
},
|
|
94
91
|
"devDependencies": {
|
|
@@ -97,5 +94,5 @@
|
|
|
97
94
|
"@types/url-join": "^4.0.0",
|
|
98
95
|
"redux-mock-store": "^1.5.3"
|
|
99
96
|
},
|
|
100
|
-
"gitHead": "
|
|
97
|
+
"gitHead": "ed7e99318007b83f4c57f3237bf92b931676820a"
|
|
101
98
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { stripIndent } from 'common-tags';
|
|
2
|
-
import
|
|
2
|
+
import { dump } from 'js-yaml';
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
loadConfig,
|
|
@@ -934,7 +934,7 @@ describe('config', () => {
|
|
|
934
934
|
|
|
935
935
|
global.fetch.mockResolvedValue({
|
|
936
936
|
status: 200,
|
|
937
|
-
text: () => Promise.resolve(
|
|
937
|
+
text: () => Promise.resolve(dump({ backend: { repo: 'test-repo' } })),
|
|
938
938
|
headers: new Headers(),
|
|
939
939
|
});
|
|
940
940
|
await loadConfig()(dispatch);
|
|
@@ -962,7 +962,7 @@ describe('config', () => {
|
|
|
962
962
|
document.querySelector.mockReturnValue({ type: 'text/yaml', href: 'custom-config.yml' });
|
|
963
963
|
global.fetch.mockResolvedValue({
|
|
964
964
|
status: 200,
|
|
965
|
-
text: () => Promise.resolve(
|
|
965
|
+
text: () => Promise.resolve(dump({ backend: { repo: 'github' } })),
|
|
966
966
|
headers: new Headers(),
|
|
967
967
|
});
|
|
968
968
|
await loadConfig()(dispatch);
|
package/src/actions/config.ts
CHANGED
|
@@ -2,7 +2,9 @@ import yaml from 'yaml';
|
|
|
2
2
|
import { fromJS } from 'immutable';
|
|
3
3
|
import deepmerge from 'deepmerge';
|
|
4
4
|
import { produce } from 'immer';
|
|
5
|
-
import
|
|
5
|
+
import trimStart from 'lodash/trimStart';
|
|
6
|
+
import trim from 'lodash/trim';
|
|
7
|
+
import isEmpty from 'lodash/isEmpty';
|
|
6
8
|
|
|
7
9
|
import { SIMPLE as SIMPLE_PUBLISH_MODE } from '../constants/publishModes';
|
|
8
10
|
import { validateConfig } from '../constants/configSchema';
|
package/src/actions/entries.ts
CHANGED
package/src/actions/search.ts
CHANGED