@wordpress/core-data
Version:
Access to and manipulation of core WordPress entities.
41 lines (40 loc) • 1.13 kB
JavaScript
// packages/core-data/src/utils/save-crdt-doc.js
import apiFetch from "@wordpress/api-fetch";
import { getSyncManager } from "../sync.mjs";
var SYNC_SAVE_API_PATH = "/wp-sync/v1/save";
var saveCRDTDocQueues = /* @__PURE__ */ new Map();
async function serializeAndSaveCRDTDoc(objectType, objectId, room) {
const serializedDoc = await getSyncManager()?.createPersistedCRDTDoc(
objectType,
objectId
);
if (!serializedDoc) {
return;
}
await apiFetch({
path: SYNC_SAVE_API_PATH,
method: "POST",
data: {
room,
doc: serializedDoc
}
});
}
async function saveCRDTDoc(objectType, objectId) {
const room = `${objectType}:${objectId}`;
const previousSave = saveCRDTDocQueues.get(room) || Promise.resolve();
const currentSave = previousSave.catch(() => {
}).then(() => serializeAndSaveCRDTDoc(objectType, objectId, room));
saveCRDTDocQueues.set(room, currentSave);
try {
await currentSave;
} finally {
if (saveCRDTDocQueues.get(room) === currentSave) {
saveCRDTDocQueues.delete(room);
}
}
}
export {
saveCRDTDoc
};
//# sourceMappingURL=save-crdt-doc.mjs.map