@wordpress/core-data 4.0.5 → 4.0.10-next.33ec3857e2.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/CHANGELOG.md +6 -0
- package/build/actions.js +269 -244
- package/build/actions.js.map +1 -1
- package/build/batch/create-batch.js +17 -9
- package/build/batch/create-batch.js.map +1 -1
- package/build/entities.js +22 -10
- package/build/entities.js.map +1 -1
- package/build/entity-provider.js +18 -13
- package/build/entity-provider.js.map +1 -1
- package/build/fetch/__experimental-fetch-link-suggestions.js +3 -1
- package/build/fetch/__experimental-fetch-link-suggestions.js.map +1 -1
- package/build/fetch/__experimental-fetch-url-data.js +2 -1
- package/build/fetch/__experimental-fetch-url-data.js.map +1 -1
- package/build/index.js +25 -5
- package/build/index.js.map +1 -1
- package/build/locks/actions.js +4 -3
- package/build/locks/actions.js.map +1 -1
- package/build/locks/reducer.js +4 -1
- package/build/locks/reducer.js.map +1 -1
- package/build/locks/selectors.js +4 -3
- package/build/locks/selectors.js.map +1 -1
- package/build/locks/utils.js +7 -5
- package/build/locks/utils.js.map +1 -1
- package/build/queried-data/actions.js +6 -3
- package/build/queried-data/actions.js.map +1 -1
- package/build/queried-data/get-query-parts.js +1 -1
- package/build/queried-data/reducer.js +17 -6
- package/build/queried-data/reducer.js.map +1 -1
- package/build/queried-data/selectors.js +2 -1
- package/build/queried-data/selectors.js.map +1 -1
- package/build/reducer.js +77 -28
- package/build/reducer.js.map +1 -1
- package/build/resolvers.js +186 -158
- package/build/resolvers.js.map +1 -1
- package/build/selectors.js +31 -36
- package/build/selectors.js.map +1 -1
- package/build/utils/forward-resolver.js +11 -4
- package/build/utils/forward-resolver.js.map +1 -1
- package/build/utils/index.js +8 -8
- package/build/utils/on-sub-key.js +4 -2
- package/build/utils/on-sub-key.js.map +1 -1
- package/build-module/actions.js +257 -235
- package/build-module/actions.js.map +1 -1
- package/build-module/batch/create-batch.js +17 -9
- package/build-module/batch/create-batch.js.map +1 -1
- package/build-module/entities.js +21 -9
- package/build-module/entities.js.map +1 -1
- package/build-module/entity-provider.js +17 -12
- package/build-module/entity-provider.js.map +1 -1
- package/build-module/fetch/__experimental-fetch-link-suggestions.js +3 -1
- package/build-module/fetch/__experimental-fetch-link-suggestions.js.map +1 -1
- package/build-module/fetch/__experimental-fetch-url-data.js +2 -1
- package/build-module/fetch/__experimental-fetch-url-data.js.map +1 -1
- package/build-module/index.js +21 -3
- package/build-module/index.js.map +1 -1
- package/build-module/locks/actions.js +4 -3
- package/build-module/locks/actions.js.map +1 -1
- package/build-module/locks/reducer.js +4 -1
- package/build-module/locks/reducer.js.map +1 -1
- package/build-module/locks/selectors.js +4 -3
- package/build-module/locks/selectors.js.map +1 -1
- package/build-module/locks/utils.js +5 -3
- package/build-module/locks/utils.js.map +1 -1
- package/build-module/queried-data/actions.js +5 -2
- package/build-module/queried-data/actions.js.map +1 -1
- package/build-module/queried-data/reducer.js +15 -4
- package/build-module/queried-data/reducer.js.map +1 -1
- package/build-module/queried-data/selectors.js +2 -1
- package/build-module/queried-data/selectors.js.map +1 -1
- package/build-module/reducer.js +68 -20
- package/build-module/reducer.js.map +1 -1
- package/build-module/resolvers.js +185 -157
- package/build-module/resolvers.js.map +1 -1
- package/build-module/selectors.js +2 -15
- package/build-module/selectors.js.map +1 -1
- package/build-module/utils/forward-resolver.js +11 -4
- package/build-module/utils/forward-resolver.js.map +1 -1
- package/build-module/utils/on-sub-key.js +3 -1
- package/build-module/utils/on-sub-key.js.map +1 -1
- package/package.json +12 -12
- package/src/entities.js +12 -4
- package/src/resolvers.js +5 -0
- package/src/selectors.js +2 -15
- package/src/test/actions.js +2 -2
- package/src/test/selectors.js +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 4.0.9-next.0 (2021-12-20)
|
|
6
|
+
|
|
7
|
+
### Bug Fixes
|
|
8
|
+
|
|
9
|
+
- `getEntityRecords` no longer returns an empty array for unknown entities but returns `null` instead. `hasEntityRecords` now also returns `false` when the entity configuration is unknown. ([#36984](https://github.com/WordPress/gutenberg/pull/36984))
|
|
10
|
+
|
|
5
11
|
## 4.0.0 (2021-07-29)
|
|
6
12
|
|
|
7
13
|
### Breaking Change
|
package/build/actions.js
CHANGED
|
@@ -5,20 +5,23 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.
|
|
9
|
-
exports.receiveCurrentUser = receiveCurrentUser;
|
|
10
|
-
exports.addEntities = addEntities;
|
|
11
|
-
exports.receiveEntityRecords = receiveEntityRecords;
|
|
12
|
-
exports.receiveCurrentTheme = receiveCurrentTheme;
|
|
8
|
+
exports.__experimentalBatch = void 0;
|
|
13
9
|
exports.__experimentalReceiveCurrentGlobalStylesId = __experimentalReceiveCurrentGlobalStylesId;
|
|
14
10
|
exports.__experimentalReceiveThemeBaseGlobalStyles = __experimentalReceiveThemeBaseGlobalStyles;
|
|
15
|
-
exports.
|
|
16
|
-
exports.receiveEmbedPreview = receiveEmbedPreview;
|
|
11
|
+
exports.__experimentalSaveSpecifiedEntityEdits = void 0;
|
|
17
12
|
exports.__unstableCreateUndoLevel = __unstableCreateUndoLevel;
|
|
13
|
+
exports.addEntities = addEntities;
|
|
14
|
+
exports.editEntityRecord = exports.deleteEntityRecord = void 0;
|
|
15
|
+
exports.receiveAutosaves = receiveAutosaves;
|
|
16
|
+
exports.receiveCurrentTheme = receiveCurrentTheme;
|
|
17
|
+
exports.receiveCurrentUser = receiveCurrentUser;
|
|
18
|
+
exports.receiveEmbedPreview = receiveEmbedPreview;
|
|
19
|
+
exports.receiveEntityRecords = receiveEntityRecords;
|
|
20
|
+
exports.receiveThemeSupports = receiveThemeSupports;
|
|
18
21
|
exports.receiveUploadPermissions = receiveUploadPermissions;
|
|
19
22
|
exports.receiveUserPermission = receiveUserPermission;
|
|
20
|
-
exports.
|
|
21
|
-
exports.
|
|
23
|
+
exports.receiveUserQuery = receiveUserQuery;
|
|
24
|
+
exports.undo = exports.saveEntityRecord = exports.saveEditedEntityRecord = exports.redo = void 0;
|
|
22
25
|
|
|
23
26
|
var _lodash = require("lodash");
|
|
24
27
|
|
|
@@ -108,7 +111,10 @@ function addEntities(entities) {
|
|
|
108
111
|
*/
|
|
109
112
|
|
|
110
113
|
|
|
111
|
-
function receiveEntityRecords(kind, name, records, query
|
|
114
|
+
function receiveEntityRecords(kind, name, records, query) {
|
|
115
|
+
let invalidateCache = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
|
116
|
+
let edits = arguments.length > 5 ? arguments[5] : undefined;
|
|
117
|
+
|
|
112
118
|
// Auto drafts should not have titles, but some plugins rely on them so we can't filter this
|
|
113
119
|
// on the server.
|
|
114
120
|
if (kind === 'postType') {
|
|
@@ -228,62 +234,66 @@ function receiveEmbedPreview(url, preview) {
|
|
|
228
234
|
*/
|
|
229
235
|
|
|
230
236
|
|
|
231
|
-
const deleteEntityRecord = (kind, name, recordId, query
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
}
|
|
237
|
+
const deleteEntityRecord = function (kind, name, recordId, query) {
|
|
238
|
+
let {
|
|
239
|
+
__unstableFetch = _apiFetch.default
|
|
240
|
+
} = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
|
|
241
|
+
return async _ref => {
|
|
242
|
+
let {
|
|
243
|
+
dispatch
|
|
244
|
+
} = _ref;
|
|
245
|
+
const entities = await dispatch((0, _entities.getKindEntities)(kind));
|
|
246
|
+
const entity = (0, _lodash.find)(entities, {
|
|
247
|
+
kind,
|
|
248
|
+
name
|
|
249
|
+
});
|
|
250
|
+
let error;
|
|
251
|
+
let deletedRecord = false;
|
|
247
252
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
253
|
+
if (!entity || entity !== null && entity !== void 0 && entity.__experimentalNoFetch) {
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
251
256
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
type: 'DELETE_ENTITY_RECORD_START',
|
|
255
|
-
kind,
|
|
256
|
-
name,
|
|
257
|
-
recordId
|
|
257
|
+
const lock = await dispatch.__unstableAcquireStoreLock(_name.STORE_NAME, ['entities', 'data', kind, name, recordId], {
|
|
258
|
+
exclusive: true
|
|
258
259
|
});
|
|
259
260
|
|
|
260
261
|
try {
|
|
261
|
-
|
|
262
|
+
dispatch({
|
|
263
|
+
type: 'DELETE_ENTITY_RECORD_START',
|
|
264
|
+
kind,
|
|
265
|
+
name,
|
|
266
|
+
recordId
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
try {
|
|
270
|
+
let path = `${entity.baseURL}/${recordId}`;
|
|
262
271
|
|
|
263
|
-
|
|
264
|
-
|
|
272
|
+
if (query) {
|
|
273
|
+
path = (0, _url.addQueryArgs)(path, query);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
deletedRecord = await __unstableFetch({
|
|
277
|
+
path,
|
|
278
|
+
method: 'DELETE'
|
|
279
|
+
});
|
|
280
|
+
await dispatch((0, _queriedData.removeItems)(kind, name, recordId, true));
|
|
281
|
+
} catch (_error) {
|
|
282
|
+
error = _error;
|
|
265
283
|
}
|
|
266
284
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
285
|
+
dispatch({
|
|
286
|
+
type: 'DELETE_ENTITY_RECORD_FINISH',
|
|
287
|
+
kind,
|
|
288
|
+
name,
|
|
289
|
+
recordId,
|
|
290
|
+
error
|
|
270
291
|
});
|
|
271
|
-
|
|
272
|
-
}
|
|
273
|
-
|
|
292
|
+
return deletedRecord;
|
|
293
|
+
} finally {
|
|
294
|
+
dispatch.__unstableReleaseStoreLock(lock);
|
|
274
295
|
}
|
|
275
|
-
|
|
276
|
-
dispatch({
|
|
277
|
-
type: 'DELETE_ENTITY_RECORD_FINISH',
|
|
278
|
-
kind,
|
|
279
|
-
name,
|
|
280
|
-
recordId,
|
|
281
|
-
error
|
|
282
|
-
});
|
|
283
|
-
return deletedRecord;
|
|
284
|
-
} finally {
|
|
285
|
-
dispatch.__unstableReleaseStoreLock(lock);
|
|
286
|
-
}
|
|
296
|
+
};
|
|
287
297
|
};
|
|
288
298
|
/**
|
|
289
299
|
* Returns an action object that triggers an
|
|
@@ -302,52 +312,56 @@ const deleteEntityRecord = (kind, name, recordId, query, {
|
|
|
302
312
|
|
|
303
313
|
exports.deleteEntityRecord = deleteEntityRecord;
|
|
304
314
|
|
|
305
|
-
const editEntityRecord = (kind, name, recordId, edits
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
315
|
+
const editEntityRecord = function (kind, name, recordId, edits) {
|
|
316
|
+
let options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
|
|
317
|
+
return _ref2 => {
|
|
318
|
+
let {
|
|
319
|
+
select,
|
|
320
|
+
dispatch
|
|
321
|
+
} = _ref2;
|
|
322
|
+
const entity = select.getEntity(kind, name);
|
|
323
|
+
|
|
324
|
+
if (!entity) {
|
|
325
|
+
throw new Error(`The entity being edited (${kind}, ${name}) does not have a loaded config.`);
|
|
326
|
+
}
|
|
314
327
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
328
|
+
const {
|
|
329
|
+
transientEdits = {},
|
|
330
|
+
mergedEdits = {}
|
|
331
|
+
} = entity;
|
|
332
|
+
const record = select.getRawEntityRecord(kind, name, recordId);
|
|
333
|
+
const editedRecord = select.getEditedEntityRecord(kind, name, recordId);
|
|
334
|
+
const edit = {
|
|
335
|
+
kind,
|
|
336
|
+
name,
|
|
337
|
+
recordId,
|
|
338
|
+
// Clear edits when they are equal to their persisted counterparts
|
|
339
|
+
// so that the property is not considered dirty.
|
|
340
|
+
edits: Object.keys(edits).reduce((acc, key) => {
|
|
341
|
+
const recordValue = record[key];
|
|
342
|
+
const editedRecordValue = editedRecord[key];
|
|
343
|
+
const value = mergedEdits[key] ? { ...editedRecordValue,
|
|
344
|
+
...edits[key]
|
|
345
|
+
} : edits[key];
|
|
346
|
+
acc[key] = (0, _lodash.isEqual)(recordValue, value) ? undefined : value;
|
|
347
|
+
return acc;
|
|
348
|
+
}, {}),
|
|
349
|
+
transientEdits
|
|
350
|
+
};
|
|
351
|
+
dispatch({
|
|
352
|
+
type: 'EDIT_ENTITY_RECORD',
|
|
353
|
+
...edit,
|
|
354
|
+
meta: {
|
|
355
|
+
undo: !options.undoIgnore && { ...edit,
|
|
356
|
+
// Send the current values for things like the first undo stack entry.
|
|
357
|
+
edits: Object.keys(edits).reduce((acc, key) => {
|
|
358
|
+
acc[key] = editedRecord[key];
|
|
359
|
+
return acc;
|
|
360
|
+
}, {})
|
|
361
|
+
}
|
|
348
362
|
}
|
|
349
|
-
}
|
|
350
|
-
}
|
|
363
|
+
});
|
|
364
|
+
};
|
|
351
365
|
};
|
|
352
366
|
/**
|
|
353
367
|
* Action triggered to undo the last edit to
|
|
@@ -359,10 +373,11 @@ const editEntityRecord = (kind, name, recordId, edits, options = {}) => ({
|
|
|
359
373
|
|
|
360
374
|
exports.editEntityRecord = editEntityRecord;
|
|
361
375
|
|
|
362
|
-
const undo = () =>
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
376
|
+
const undo = () => _ref3 => {
|
|
377
|
+
let {
|
|
378
|
+
select,
|
|
379
|
+
dispatch
|
|
380
|
+
} = _ref3;
|
|
366
381
|
const undoEdit = select.getUndoEdit();
|
|
367
382
|
|
|
368
383
|
if (!undoEdit) {
|
|
@@ -387,10 +402,11 @@ const undo = () => ({
|
|
|
387
402
|
|
|
388
403
|
exports.undo = undo;
|
|
389
404
|
|
|
390
|
-
const redo = () =>
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
405
|
+
const redo = () => _ref4 => {
|
|
406
|
+
let {
|
|
407
|
+
select,
|
|
408
|
+
dispatch
|
|
409
|
+
} = _ref4;
|
|
394
410
|
const redoEdit = select.getRedoEdit();
|
|
395
411
|
|
|
396
412
|
if (!redoEdit) {
|
|
@@ -433,148 +449,152 @@ function __unstableCreateUndoLevel() {
|
|
|
433
449
|
*/
|
|
434
450
|
|
|
435
451
|
|
|
436
|
-
const saveEntityRecord = (kind, name, record
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
const entityIdKey = entity.key || _entities.DEFAULT_ENTITY_KEY;
|
|
455
|
-
const recordId = record[entityIdKey];
|
|
456
|
-
const lock = await dispatch.__unstableAcquireStoreLock(_name.STORE_NAME, ['entities', 'data', kind, name, recordId || (0, _uuid.v4)()], {
|
|
457
|
-
exclusive: true
|
|
458
|
-
});
|
|
452
|
+
const saveEntityRecord = function (kind, name, record) {
|
|
453
|
+
let {
|
|
454
|
+
isAutosave = false,
|
|
455
|
+
__unstableFetch = _apiFetch.default
|
|
456
|
+
} = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
457
|
+
return async _ref5 => {
|
|
458
|
+
let {
|
|
459
|
+
select,
|
|
460
|
+
resolveSelect,
|
|
461
|
+
dispatch
|
|
462
|
+
} = _ref5;
|
|
463
|
+
const entities = await dispatch((0, _entities.getKindEntities)(kind));
|
|
464
|
+
const entity = (0, _lodash.find)(entities, {
|
|
465
|
+
kind,
|
|
466
|
+
name
|
|
467
|
+
});
|
|
459
468
|
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
// (Function edits that should be evaluated on save to avoid expensive computations on every edit.)
|
|
463
|
-
for (const [key, value] of Object.entries(record)) {
|
|
464
|
-
if (typeof value === 'function') {
|
|
465
|
-
const evaluatedValue = value(select.getEditedEntityRecord(kind, name, recordId));
|
|
466
|
-
dispatch.editEntityRecord(kind, name, recordId, {
|
|
467
|
-
[key]: evaluatedValue
|
|
468
|
-
}, {
|
|
469
|
-
undoIgnore: true
|
|
470
|
-
});
|
|
471
|
-
record[key] = evaluatedValue;
|
|
472
|
-
}
|
|
469
|
+
if (!entity || entity !== null && entity !== void 0 && entity.__experimentalNoFetch) {
|
|
470
|
+
return;
|
|
473
471
|
}
|
|
474
472
|
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
recordId,
|
|
480
|
-
isAutosave
|
|
473
|
+
const entityIdKey = entity.key || _entities.DEFAULT_ENTITY_KEY;
|
|
474
|
+
const recordId = record[entityIdKey];
|
|
475
|
+
const lock = await dispatch.__unstableAcquireStoreLock(_name.STORE_NAME, ['entities', 'data', kind, name, recordId || (0, _uuid.v4)()], {
|
|
476
|
+
exclusive: true
|
|
481
477
|
});
|
|
482
|
-
let updatedRecord;
|
|
483
|
-
let error;
|
|
484
478
|
|
|
485
479
|
try {
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
// have a value.
|
|
500
|
-
|
|
501
|
-
let data = { ...persistedRecord,
|
|
502
|
-
...autosavePost,
|
|
503
|
-
...record
|
|
504
|
-
};
|
|
505
|
-
data = Object.keys(data).reduce((acc, key) => {
|
|
506
|
-
if (['title', 'excerpt', 'content'].includes(key)) {
|
|
507
|
-
acc[key] = data[key];
|
|
508
|
-
}
|
|
480
|
+
// Evaluate optimized edits.
|
|
481
|
+
// (Function edits that should be evaluated on save to avoid expensive computations on every edit.)
|
|
482
|
+
for (const [key, value] of Object.entries(record)) {
|
|
483
|
+
if (typeof value === 'function') {
|
|
484
|
+
const evaluatedValue = value(select.getEditedEntityRecord(kind, name, recordId));
|
|
485
|
+
dispatch.editEntityRecord(kind, name, recordId, {
|
|
486
|
+
[key]: evaluatedValue
|
|
487
|
+
}, {
|
|
488
|
+
undoIgnore: true
|
|
489
|
+
});
|
|
490
|
+
record[key] = evaluatedValue;
|
|
491
|
+
}
|
|
492
|
+
}
|
|
509
493
|
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
494
|
+
dispatch({
|
|
495
|
+
type: 'SAVE_ENTITY_RECORD_START',
|
|
496
|
+
kind,
|
|
497
|
+
name,
|
|
498
|
+
recordId,
|
|
499
|
+
isAutosave
|
|
500
|
+
});
|
|
501
|
+
let updatedRecord;
|
|
502
|
+
let error;
|
|
503
|
+
|
|
504
|
+
try {
|
|
505
|
+
const path = `${entity.baseURL}${recordId ? '/' + recordId : ''}`;
|
|
506
|
+
const persistedRecord = select.getRawEntityRecord(kind, name, recordId);
|
|
507
|
+
|
|
508
|
+
if (isAutosave) {
|
|
509
|
+
// Most of this autosave logic is very specific to posts.
|
|
510
|
+
// This is fine for now as it is the only supported autosave,
|
|
511
|
+
// but ideally this should all be handled in the back end,
|
|
512
|
+
// so the client just sends and receives objects.
|
|
513
|
+
const currentUser = select.getCurrentUser();
|
|
514
|
+
const currentUserId = currentUser ? currentUser.id : undefined;
|
|
515
|
+
const autosavePost = resolveSelect.getAutosave(persistedRecord.type, persistedRecord.id, currentUserId); // Autosaves need all expected fields to be present.
|
|
516
|
+
// So we fallback to the previous autosave and then
|
|
517
|
+
// to the actual persisted entity if the edits don't
|
|
518
|
+
// have a value.
|
|
519
|
+
|
|
520
|
+
let data = { ...persistedRecord,
|
|
521
|
+
...autosavePost,
|
|
522
|
+
...record
|
|
526
523
|
};
|
|
527
|
-
|
|
528
|
-
// These properties are persisted in autosaves.
|
|
524
|
+
data = Object.keys(data).reduce((acc, key) => {
|
|
529
525
|
if (['title', 'excerpt', 'content'].includes(key)) {
|
|
530
|
-
acc[key] =
|
|
531
|
-
} else if (key === 'status') {
|
|
532
|
-
// Status is only persisted in autosaves when going from
|
|
533
|
-
// "auto-draft" to "draft".
|
|
534
|
-
acc[key] = persistedRecord.status === 'auto-draft' && newRecord.status === 'draft' ? newRecord.status : persistedRecord.status;
|
|
535
|
-
} else {
|
|
536
|
-
// These properties are not persisted in autosaves.
|
|
537
|
-
acc[key] = persistedRecord[key];
|
|
526
|
+
acc[key] = data[key];
|
|
538
527
|
}
|
|
539
528
|
|
|
540
529
|
return acc;
|
|
541
|
-
}, {
|
|
542
|
-
|
|
530
|
+
}, {
|
|
531
|
+
status: data.status === 'auto-draft' ? 'draft' : data.status
|
|
532
|
+
});
|
|
533
|
+
updatedRecord = await __unstableFetch({
|
|
534
|
+
path: `${path}/autosaves`,
|
|
535
|
+
method: 'POST',
|
|
536
|
+
data
|
|
537
|
+
}); // An autosave may be processed by the server as a regular save
|
|
538
|
+
// when its update is requested by the author and the post had
|
|
539
|
+
// draft or auto-draft status.
|
|
540
|
+
|
|
541
|
+
if (persistedRecord.id === updatedRecord.id) {
|
|
542
|
+
let newRecord = { ...persistedRecord,
|
|
543
|
+
...data,
|
|
544
|
+
...updatedRecord
|
|
545
|
+
};
|
|
546
|
+
newRecord = Object.keys(newRecord).reduce((acc, key) => {
|
|
547
|
+
// These properties are persisted in autosaves.
|
|
548
|
+
if (['title', 'excerpt', 'content'].includes(key)) {
|
|
549
|
+
acc[key] = newRecord[key];
|
|
550
|
+
} else if (key === 'status') {
|
|
551
|
+
// Status is only persisted in autosaves when going from
|
|
552
|
+
// "auto-draft" to "draft".
|
|
553
|
+
acc[key] = persistedRecord.status === 'auto-draft' && newRecord.status === 'draft' ? newRecord.status : persistedRecord.status;
|
|
554
|
+
} else {
|
|
555
|
+
// These properties are not persisted in autosaves.
|
|
556
|
+
acc[key] = persistedRecord[key];
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
return acc;
|
|
560
|
+
}, {});
|
|
561
|
+
dispatch.receiveEntityRecords(kind, name, newRecord, undefined, true);
|
|
562
|
+
} else {
|
|
563
|
+
dispatch.receiveAutosaves(persistedRecord.id, updatedRecord);
|
|
564
|
+
}
|
|
543
565
|
} else {
|
|
544
|
-
|
|
545
|
-
}
|
|
546
|
-
} else {
|
|
547
|
-
let edits = record;
|
|
566
|
+
let edits = record;
|
|
548
567
|
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
568
|
+
if (entity.__unstablePrePersist) {
|
|
569
|
+
edits = { ...edits,
|
|
570
|
+
...entity.__unstablePrePersist(persistedRecord, edits)
|
|
571
|
+
};
|
|
572
|
+
}
|
|
554
573
|
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
574
|
+
updatedRecord = await __unstableFetch({
|
|
575
|
+
path,
|
|
576
|
+
method: recordId ? 'PUT' : 'POST',
|
|
577
|
+
data: edits
|
|
578
|
+
});
|
|
579
|
+
dispatch.receiveEntityRecords(kind, name, updatedRecord, undefined, true, edits);
|
|
580
|
+
}
|
|
581
|
+
} catch (_error) {
|
|
582
|
+
error = _error;
|
|
561
583
|
}
|
|
562
|
-
} catch (_error) {
|
|
563
|
-
error = _error;
|
|
564
|
-
}
|
|
565
584
|
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
585
|
+
dispatch({
|
|
586
|
+
type: 'SAVE_ENTITY_RECORD_FINISH',
|
|
587
|
+
kind,
|
|
588
|
+
name,
|
|
589
|
+
recordId,
|
|
590
|
+
error,
|
|
591
|
+
isAutosave
|
|
592
|
+
});
|
|
593
|
+
return updatedRecord;
|
|
594
|
+
} finally {
|
|
595
|
+
dispatch.__unstableReleaseStoreLock(lock);
|
|
596
|
+
}
|
|
597
|
+
};
|
|
578
598
|
};
|
|
579
599
|
/**
|
|
580
600
|
* Runs multiple core-data actions at the same time using one API request.
|
|
@@ -602,9 +622,10 @@ const saveEntityRecord = (kind, name, record, {
|
|
|
602
622
|
|
|
603
623
|
exports.saveEntityRecord = saveEntityRecord;
|
|
604
624
|
|
|
605
|
-
const __experimentalBatch = requests => async
|
|
606
|
-
|
|
607
|
-
|
|
625
|
+
const __experimentalBatch = requests => async _ref6 => {
|
|
626
|
+
let {
|
|
627
|
+
dispatch
|
|
628
|
+
} = _ref6;
|
|
608
629
|
const batch = (0, _batch.createBatch)();
|
|
609
630
|
const api = {
|
|
610
631
|
saveEntityRecord(kind, name, record, options) {
|
|
@@ -642,10 +663,12 @@ const __experimentalBatch = requests => async ({
|
|
|
642
663
|
|
|
643
664
|
exports.__experimentalBatch = __experimentalBatch;
|
|
644
665
|
|
|
645
|
-
const saveEditedEntityRecord = (kind, name, recordId, options) => async
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
666
|
+
const saveEditedEntityRecord = (kind, name, recordId, options) => async _ref7 => {
|
|
667
|
+
let {
|
|
668
|
+
select,
|
|
669
|
+
dispatch
|
|
670
|
+
} = _ref7;
|
|
671
|
+
|
|
649
672
|
if (!select.hasEditsForEntityRecord(kind, name, recordId)) {
|
|
650
673
|
return;
|
|
651
674
|
}
|
|
@@ -681,10 +704,12 @@ const saveEditedEntityRecord = (kind, name, recordId, options) => async ({
|
|
|
681
704
|
|
|
682
705
|
exports.saveEditedEntityRecord = saveEditedEntityRecord;
|
|
683
706
|
|
|
684
|
-
const __experimentalSaveSpecifiedEntityEdits = (kind, name, recordId, itemsToSave, options) => async
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
707
|
+
const __experimentalSaveSpecifiedEntityEdits = (kind, name, recordId, itemsToSave, options) => async _ref8 => {
|
|
708
|
+
let {
|
|
709
|
+
select,
|
|
710
|
+
dispatch
|
|
711
|
+
} = _ref8;
|
|
712
|
+
|
|
688
713
|
if (!select.hasEditsForEntityRecord(kind, name, recordId)) {
|
|
689
714
|
return;
|
|
690
715
|
}
|