@wordpress/core-data 4.0.3 → 4.0.7
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/README.md +2 -4
- package/build/actions.js +321 -247
- 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 +58 -14
- 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 +3 -2
- 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 +90 -43
- package/build/reducer.js.map +1 -1
- package/build/resolvers.js +216 -163
- package/build/resolvers.js.map +1 -1
- package/build/selectors.js +75 -22
- package/build/selectors.js.map +1 -1
- package/build/utils/forward-resolver.js +30 -0
- package/build/utils/forward-resolver.js.map +1 -0
- package/build/utils/index.js +9 -9
- package/build/utils/index.js.map +1 -1
- package/build/utils/on-sub-key.js +4 -2
- package/build/utils/on-sub-key.js.map +1 -1
- package/build-module/actions.js +306 -240
- 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 +57 -13
- 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 +3 -2
- 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 +80 -34
- package/build-module/reducer.js.map +1 -1
- package/build-module/resolvers.js +211 -161
- package/build-module/resolvers.js.map +1 -1
- package/build-module/selectors.js +44 -3
- package/build-module/selectors.js.map +1 -1
- package/build-module/utils/forward-resolver.js +22 -0
- package/build-module/utils/forward-resolver.js.map +1 -0
- package/build-module/utils/index.js +1 -1
- package/build-module/utils/index.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/actions.js +51 -5
- package/src/entities.js +35 -6
- package/src/fetch/__experimental-fetch-url-data.js +1 -1
- package/src/reducer.js +14 -17
- package/src/resolvers.js +57 -20
- package/src/selectors.js +43 -4
- package/src/test/actions.js +89 -0
- package/src/test/selectors.js +56 -1
- package/src/utils/forward-resolver.js +14 -0
- package/src/utils/index.js +1 -1
- package/build/utils/if-not-resolved.js +0 -31
- package/build/utils/if-not-resolved.js.map +0 -1
- package/build-module/utils/if-not-resolved.js +0 -23
- package/build-module/utils/if-not-resolved.js.map +0 -1
- package/src/utils/if-not-resolved.js +0 -22
- package/src/utils/test/if-not-resolved.js +0 -76
package/build/actions.js
CHANGED
|
@@ -5,18 +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.
|
|
8
|
+
exports.__experimentalBatch = void 0;
|
|
9
|
+
exports.__experimentalReceiveCurrentGlobalStylesId = __experimentalReceiveCurrentGlobalStylesId;
|
|
10
|
+
exports.__experimentalReceiveThemeBaseGlobalStyles = __experimentalReceiveThemeBaseGlobalStyles;
|
|
11
|
+
exports.__experimentalSaveSpecifiedEntityEdits = void 0;
|
|
12
|
+
exports.__unstableCreateUndoLevel = __unstableCreateUndoLevel;
|
|
10
13
|
exports.addEntities = addEntities;
|
|
11
|
-
exports.
|
|
14
|
+
exports.editEntityRecord = exports.deleteEntityRecord = void 0;
|
|
15
|
+
exports.receiveAutosaves = receiveAutosaves;
|
|
12
16
|
exports.receiveCurrentTheme = receiveCurrentTheme;
|
|
13
|
-
exports.
|
|
17
|
+
exports.receiveCurrentUser = receiveCurrentUser;
|
|
14
18
|
exports.receiveEmbedPreview = receiveEmbedPreview;
|
|
15
|
-
exports.
|
|
19
|
+
exports.receiveEntityRecords = receiveEntityRecords;
|
|
20
|
+
exports.receiveThemeSupports = receiveThemeSupports;
|
|
16
21
|
exports.receiveUploadPermissions = receiveUploadPermissions;
|
|
17
22
|
exports.receiveUserPermission = receiveUserPermission;
|
|
18
|
-
exports.
|
|
19
|
-
exports.
|
|
23
|
+
exports.receiveUserQuery = receiveUserQuery;
|
|
24
|
+
exports.undo = exports.saveEntityRecord = exports.saveEditedEntityRecord = exports.redo = void 0;
|
|
20
25
|
|
|
21
26
|
var _lodash = require("lodash");
|
|
22
27
|
|
|
@@ -26,6 +31,8 @@ var _apiFetch = _interopRequireDefault(require("@wordpress/api-fetch"));
|
|
|
26
31
|
|
|
27
32
|
var _url = require("@wordpress/url");
|
|
28
33
|
|
|
34
|
+
var _deprecated = _interopRequireDefault(require("@wordpress/deprecated"));
|
|
35
|
+
|
|
29
36
|
var _queriedData = require("./queried-data");
|
|
30
37
|
|
|
31
38
|
var _entities = require("./entities");
|
|
@@ -104,7 +111,10 @@ function addEntities(entities) {
|
|
|
104
111
|
*/
|
|
105
112
|
|
|
106
113
|
|
|
107
|
-
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
|
+
|
|
108
118
|
// Auto drafts should not have titles, but some plugins rely on them so we can't filter this
|
|
109
119
|
// on the server.
|
|
110
120
|
if (kind === 'postType') {
|
|
@@ -142,19 +152,53 @@ function receiveCurrentTheme(currentTheme) {
|
|
|
142
152
|
currentTheme
|
|
143
153
|
};
|
|
144
154
|
}
|
|
155
|
+
/**
|
|
156
|
+
* Returns an action object used in signalling that the current global styles id has been received.
|
|
157
|
+
*
|
|
158
|
+
* @param {string} currentGlobalStylesId The current global styles id.
|
|
159
|
+
*
|
|
160
|
+
* @return {Object} Action object.
|
|
161
|
+
*/
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
function __experimentalReceiveCurrentGlobalStylesId(currentGlobalStylesId) {
|
|
165
|
+
return {
|
|
166
|
+
type: 'RECEIVE_CURRENT_GLOBAL_STYLES_ID',
|
|
167
|
+
id: currentGlobalStylesId
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Returns an action object used in signalling that the theme base global styles have been received
|
|
172
|
+
*
|
|
173
|
+
* @param {string} stylesheet The theme's identifier
|
|
174
|
+
* @param {Object} globalStyles The global styles object.
|
|
175
|
+
*
|
|
176
|
+
* @return {Object} Action object.
|
|
177
|
+
*/
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
function __experimentalReceiveThemeBaseGlobalStyles(stylesheet, globalStyles) {
|
|
181
|
+
return {
|
|
182
|
+
type: 'RECEIVE_THEME_GLOBAL_STYLES',
|
|
183
|
+
stylesheet,
|
|
184
|
+
globalStyles
|
|
185
|
+
};
|
|
186
|
+
}
|
|
145
187
|
/**
|
|
146
188
|
* Returns an action object used in signalling that the index has been received.
|
|
147
189
|
*
|
|
148
|
-
* @
|
|
190
|
+
* @deprecated since WP 5.9, this is not useful anymore, use the selector direclty.
|
|
149
191
|
*
|
|
150
192
|
* @return {Object} Action object.
|
|
151
193
|
*/
|
|
152
194
|
|
|
153
195
|
|
|
154
|
-
function receiveThemeSupports(
|
|
196
|
+
function receiveThemeSupports() {
|
|
197
|
+
(0, _deprecated.default)("wp.data.dispatch( 'core' ).receiveThemeSupports", {
|
|
198
|
+
since: '5.9'
|
|
199
|
+
});
|
|
155
200
|
return {
|
|
156
|
-
type: '
|
|
157
|
-
themeSupports
|
|
201
|
+
type: 'DO_NOTHING'
|
|
158
202
|
};
|
|
159
203
|
}
|
|
160
204
|
/**
|
|
@@ -190,62 +234,66 @@ function receiveEmbedPreview(url, preview) {
|
|
|
190
234
|
*/
|
|
191
235
|
|
|
192
236
|
|
|
193
|
-
const deleteEntityRecord = (kind, name, recordId, query
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
}
|
|
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;
|
|
209
252
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
253
|
+
if (!entity || entity !== null && entity !== void 0 && entity.__experimentalNoFetch) {
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
213
256
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
type: 'DELETE_ENTITY_RECORD_START',
|
|
217
|
-
kind,
|
|
218
|
-
name,
|
|
219
|
-
recordId
|
|
257
|
+
const lock = await dispatch.__unstableAcquireStoreLock(_name.STORE_NAME, ['entities', 'data', kind, name, recordId], {
|
|
258
|
+
exclusive: true
|
|
220
259
|
});
|
|
221
260
|
|
|
222
261
|
try {
|
|
223
|
-
|
|
262
|
+
dispatch({
|
|
263
|
+
type: 'DELETE_ENTITY_RECORD_START',
|
|
264
|
+
kind,
|
|
265
|
+
name,
|
|
266
|
+
recordId
|
|
267
|
+
});
|
|
224
268
|
|
|
225
|
-
|
|
226
|
-
path =
|
|
269
|
+
try {
|
|
270
|
+
let path = `${entity.baseURL}/${recordId}`;
|
|
271
|
+
|
|
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;
|
|
227
283
|
}
|
|
228
284
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
285
|
+
dispatch({
|
|
286
|
+
type: 'DELETE_ENTITY_RECORD_FINISH',
|
|
287
|
+
kind,
|
|
288
|
+
name,
|
|
289
|
+
recordId,
|
|
290
|
+
error
|
|
232
291
|
});
|
|
233
|
-
|
|
234
|
-
}
|
|
235
|
-
|
|
292
|
+
return deletedRecord;
|
|
293
|
+
} finally {
|
|
294
|
+
dispatch.__unstableReleaseStoreLock(lock);
|
|
236
295
|
}
|
|
237
|
-
|
|
238
|
-
dispatch({
|
|
239
|
-
type: 'DELETE_ENTITY_RECORD_FINISH',
|
|
240
|
-
kind,
|
|
241
|
-
name,
|
|
242
|
-
recordId,
|
|
243
|
-
error
|
|
244
|
-
});
|
|
245
|
-
return deletedRecord;
|
|
246
|
-
} finally {
|
|
247
|
-
dispatch.__unstableReleaseStoreLock(lock);
|
|
248
|
-
}
|
|
296
|
+
};
|
|
249
297
|
};
|
|
250
298
|
/**
|
|
251
299
|
* Returns an action object that triggers an
|
|
@@ -264,52 +312,56 @@ const deleteEntityRecord = (kind, name, recordId, query, {
|
|
|
264
312
|
|
|
265
313
|
exports.deleteEntityRecord = deleteEntityRecord;
|
|
266
314
|
|
|
267
|
-
const editEntityRecord = (kind, name, recordId, edits
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
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
|
+
}
|
|
276
327
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
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
|
+
}
|
|
310
362
|
}
|
|
311
|
-
}
|
|
312
|
-
}
|
|
363
|
+
});
|
|
364
|
+
};
|
|
313
365
|
};
|
|
314
366
|
/**
|
|
315
367
|
* Action triggered to undo the last edit to
|
|
@@ -321,10 +373,11 @@ const editEntityRecord = (kind, name, recordId, edits, options = {}) => ({
|
|
|
321
373
|
|
|
322
374
|
exports.editEntityRecord = editEntityRecord;
|
|
323
375
|
|
|
324
|
-
const undo = () =>
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
376
|
+
const undo = () => _ref3 => {
|
|
377
|
+
let {
|
|
378
|
+
select,
|
|
379
|
+
dispatch
|
|
380
|
+
} = _ref3;
|
|
328
381
|
const undoEdit = select.getUndoEdit();
|
|
329
382
|
|
|
330
383
|
if (!undoEdit) {
|
|
@@ -349,10 +402,11 @@ const undo = () => ({
|
|
|
349
402
|
|
|
350
403
|
exports.undo = undo;
|
|
351
404
|
|
|
352
|
-
const redo = () =>
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
405
|
+
const redo = () => _ref4 => {
|
|
406
|
+
let {
|
|
407
|
+
select,
|
|
408
|
+
dispatch
|
|
409
|
+
} = _ref4;
|
|
356
410
|
const redoEdit = select.getRedoEdit();
|
|
357
411
|
|
|
358
412
|
if (!redoEdit) {
|
|
@@ -395,148 +449,152 @@ function __unstableCreateUndoLevel() {
|
|
|
395
449
|
*/
|
|
396
450
|
|
|
397
451
|
|
|
398
|
-
const saveEntityRecord = (kind, name, record
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
const entityIdKey = entity.key || _entities.DEFAULT_ENTITY_KEY;
|
|
417
|
-
const recordId = record[entityIdKey];
|
|
418
|
-
const lock = await dispatch.__unstableAcquireStoreLock(_name.STORE_NAME, ['entities', 'data', kind, name, recordId || (0, _uuid.v4)()], {
|
|
419
|
-
exclusive: true
|
|
420
|
-
});
|
|
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
|
+
});
|
|
421
468
|
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
// (Function edits that should be evaluated on save to avoid expensive computations on every edit.)
|
|
425
|
-
for (const [key, value] of Object.entries(record)) {
|
|
426
|
-
if (typeof value === 'function') {
|
|
427
|
-
const evaluatedValue = value(select.getEditedEntityRecord(kind, name, recordId));
|
|
428
|
-
dispatch.editEntityRecord(kind, name, recordId, {
|
|
429
|
-
[key]: evaluatedValue
|
|
430
|
-
}, {
|
|
431
|
-
undoIgnore: true
|
|
432
|
-
});
|
|
433
|
-
record[key] = evaluatedValue;
|
|
434
|
-
}
|
|
469
|
+
if (!entity || entity !== null && entity !== void 0 && entity.__experimentalNoFetch) {
|
|
470
|
+
return;
|
|
435
471
|
}
|
|
436
472
|
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
recordId,
|
|
442
|
-
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
|
|
443
477
|
});
|
|
444
|
-
let updatedRecord;
|
|
445
|
-
let error;
|
|
446
478
|
|
|
447
479
|
try {
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
// have a value.
|
|
462
|
-
|
|
463
|
-
let data = { ...persistedRecord,
|
|
464
|
-
...autosavePost,
|
|
465
|
-
...record
|
|
466
|
-
};
|
|
467
|
-
data = Object.keys(data).reduce((acc, key) => {
|
|
468
|
-
if (['title', 'excerpt', 'content'].includes(key)) {
|
|
469
|
-
acc[key] = data[key];
|
|
470
|
-
}
|
|
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
|
+
}
|
|
471
493
|
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
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
|
|
488
523
|
};
|
|
489
|
-
|
|
490
|
-
// These properties are persisted in autosaves.
|
|
524
|
+
data = Object.keys(data).reduce((acc, key) => {
|
|
491
525
|
if (['title', 'excerpt', 'content'].includes(key)) {
|
|
492
|
-
acc[key] =
|
|
493
|
-
} else if (key === 'status') {
|
|
494
|
-
// Status is only persisted in autosaves when going from
|
|
495
|
-
// "auto-draft" to "draft".
|
|
496
|
-
acc[key] = persistedRecord.status === 'auto-draft' && newRecord.status === 'draft' ? newRecord.status : persistedRecord.status;
|
|
497
|
-
} else {
|
|
498
|
-
// These properties are not persisted in autosaves.
|
|
499
|
-
acc[key] = persistedRecord[key];
|
|
526
|
+
acc[key] = data[key];
|
|
500
527
|
}
|
|
501
528
|
|
|
502
529
|
return acc;
|
|
503
|
-
}, {
|
|
504
|
-
|
|
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
|
+
}
|
|
505
565
|
} else {
|
|
506
|
-
|
|
507
|
-
}
|
|
508
|
-
} else {
|
|
509
|
-
let edits = record;
|
|
566
|
+
let edits = record;
|
|
510
567
|
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
568
|
+
if (entity.__unstablePrePersist) {
|
|
569
|
+
edits = { ...edits,
|
|
570
|
+
...entity.__unstablePrePersist(persistedRecord, edits)
|
|
571
|
+
};
|
|
572
|
+
}
|
|
516
573
|
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
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;
|
|
523
583
|
}
|
|
524
|
-
} catch (_error) {
|
|
525
|
-
error = _error;
|
|
526
|
-
}
|
|
527
584
|
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
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
|
+
};
|
|
540
598
|
};
|
|
541
599
|
/**
|
|
542
600
|
* Runs multiple core-data actions at the same time using one API request.
|
|
@@ -564,9 +622,10 @@ const saveEntityRecord = (kind, name, record, {
|
|
|
564
622
|
|
|
565
623
|
exports.saveEntityRecord = saveEntityRecord;
|
|
566
624
|
|
|
567
|
-
const __experimentalBatch = requests => async
|
|
568
|
-
|
|
569
|
-
|
|
625
|
+
const __experimentalBatch = requests => async _ref6 => {
|
|
626
|
+
let {
|
|
627
|
+
dispatch
|
|
628
|
+
} = _ref6;
|
|
570
629
|
const batch = (0, _batch.createBatch)();
|
|
571
630
|
const api = {
|
|
572
631
|
saveEntityRecord(kind, name, record, options) {
|
|
@@ -604,17 +663,30 @@ const __experimentalBatch = requests => async ({
|
|
|
604
663
|
|
|
605
664
|
exports.__experimentalBatch = __experimentalBatch;
|
|
606
665
|
|
|
607
|
-
const saveEditedEntityRecord = (kind, name, recordId, options) => async
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
666
|
+
const saveEditedEntityRecord = (kind, name, recordId, options) => async _ref7 => {
|
|
667
|
+
let {
|
|
668
|
+
select,
|
|
669
|
+
dispatch
|
|
670
|
+
} = _ref7;
|
|
671
|
+
|
|
611
672
|
if (!select.hasEditsForEntityRecord(kind, name, recordId)) {
|
|
612
673
|
return;
|
|
613
674
|
}
|
|
614
675
|
|
|
676
|
+
const entities = await dispatch((0, _entities.getKindEntities)(kind));
|
|
677
|
+
const entity = (0, _lodash.find)(entities, {
|
|
678
|
+
kind,
|
|
679
|
+
name
|
|
680
|
+
});
|
|
681
|
+
|
|
682
|
+
if (!entity) {
|
|
683
|
+
return;
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
const entityIdKey = entity.key || _entities.DEFAULT_ENTITY_KEY;
|
|
615
687
|
const edits = select.getEntityRecordNonTransientEdits(kind, name, recordId);
|
|
616
688
|
const record = {
|
|
617
|
-
|
|
689
|
+
[entityIdKey]: recordId,
|
|
618
690
|
...edits
|
|
619
691
|
};
|
|
620
692
|
return await dispatch.saveEntityRecord(kind, name, record, options);
|
|
@@ -632,10 +704,12 @@ const saveEditedEntityRecord = (kind, name, recordId, options) => async ({
|
|
|
632
704
|
|
|
633
705
|
exports.saveEditedEntityRecord = saveEditedEntityRecord;
|
|
634
706
|
|
|
635
|
-
const __experimentalSaveSpecifiedEntityEdits = (kind, name, recordId, itemsToSave, options) => async
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
707
|
+
const __experimentalSaveSpecifiedEntityEdits = (kind, name, recordId, itemsToSave, options) => async _ref8 => {
|
|
708
|
+
let {
|
|
709
|
+
select,
|
|
710
|
+
dispatch
|
|
711
|
+
} = _ref8;
|
|
712
|
+
|
|
639
713
|
if (!select.hasEditsForEntityRecord(kind, name, recordId)) {
|
|
640
714
|
return;
|
|
641
715
|
}
|