UNPKG

@sanity/visual-editing

Version:

[![npm stat](https://img.shields.io/npm/dm/@sanity/visual-editing.svg?style=flat-square)](https://npm-stat.com/charts.html?package=@sanity/visual-editing) [![npm version](https://img.shields.io/npm/v/@sanity/visual-editing.svg?style=flat-square)](https://

163 lines (162 loc) 5.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: !0 }); var context = require("../_chunks-cjs/context.cjs"), _unstable_machine = require("@sanity/mutate/_unstable_machine"), xstate = require("xstate"), mutate = require("@sanity/mutate"); const createDocumentMutator = (comlink) => { const fetchSnapshot = xstate.fromPromise(async ({ input, signal }) => { const { id } = input, { snapshot } = await comlink.fetch("visual-editing/fetch-snapshot", { documentId: id }, { signal }); return snapshot; }), submitMutations = xstate.fromPromise(async ({ input }) => { const { transactions } = input; for (const transaction of transactions) { const data = mutate.SanityEncoder.encodeTransaction(transaction); return comlink.post("visual-editing/mutate", data); } }); return _unstable_machine.documentMutatorMachine.provide({ actions: { "send sync event to parent": xstate.enqueueActions(({ enqueue }) => { enqueue.sendParent(({ context: context2 }) => ({ type: "sync", id: context2.id, document: context2.remote })), enqueue.emit(({ context: context2 }) => ({ type: "ready", snapshot: context2.local })); }) }, actors: { "fetch remote snapshot": fetchSnapshot, "submit mutations as transactions": submitMutations } }); }, datasetMutatorMachine = xstate.setup({ types: {}, actions: { "emit sync event": xstate.emit(({ event }) => (xstate.assertEvent(event, "sync"), event)), "emit mutation event": xstate.emit(({ event }) => (xstate.assertEvent(event, "mutation"), event)), "emit rebased event": xstate.emit(({ event }) => (xstate.assertEvent(event, ["rebased.local", "rebased.remote"]), event)), "emit pristine event": xstate.emit(({ event }) => (xstate.assertEvent(event, ["pristine"]), event)), "add document actor": xstate.assign({ documents: ({ context: context2, event, spawn }) => { xstate.assertEvent(event, "observe"); const id = event.documentId; return context2.documents[id] ? context2.documents : { ...context2.documents, [id]: spawn("documentMutatorMachine", { input: { id, client: context2.client, sharedListener: context2.sharedListener || _unstable_machine.createSharedListener(context2.client) }, id }) }; } }), "stop remote snapshot": xstate.stopChild(({ context: context2, event }) => (xstate.assertEvent(event, "unobserve"), context2.documents[event.documentId])), "remove remote snapshot from context": xstate.assign({ documents: ({ context: context2, event }) => { if (xstate.assertEvent(event, "unobserve"), !context2.documents[event.documentId]) return context2.documents; const { [event.documentId]: _, ...documents } = context2.documents; return documents; } }) }, actors: { documentMutatorMachine: _unstable_machine.documentMutatorMachine } }).createMachine({ /** @xstate-layout N4IgpgJg5mDOIC5QBsD2BjAhsgIhgrgLZgB2ALgMTICWsZpA2gAwC6ioADqrNWdaiXYgAHogC0ADgBMAOgkA2ACyKArBICcTdfKXSANCACeiFQHYZpgMxWV800yYqp6gIyn5AXw8G0WXAWJyCnwSGjpGViEuHj4BIVEEKUt5OSlFU1smFwkFW0sDY0T1GRUXRXkXKVN7HSYJJkUvHwxsPHQiUjIZDgAnWj4SMApCfDJMemY2JBBo3n5BaYSXeVlbKRUsiXdFSxcXfKNERSqZTbr1zVMJNyaQX1aAzpkIah6yQwp0VEJCXkmo7hzOKLRDLFwyFxaSzXKTOKQudSKCQFRDOczqCSWJjwjbHCQqRFebwgEioCBwIT3fztQJkAExebxcQuFEIZaWGRIrF7dSXKTyFSNYlUtodcjdPp0aiDelAhagBLpVmWAmc46mNwSZTyLQuFS3EWPcUvN6FTiA2LykSoq6c6wbCqVUzparKioyRFVfkq1zqNSWIkeIA */ id: "dataset-mutator", context: ({ input }) => ({ documents: {}, client: input.client, sharedListener: input.sharedListener }), on: { sync: { actions: ["emit sync event"] }, mutation: { actions: ["emit mutation event"] }, "rebased.*": { actions: ["emit rebased event"] }, pristine: { actions: ["emit pristine event"] }, observe: { actions: ["add document actor"] }, unobserve: { actions: ["stop remote snapshot", "remove remote snapshot from context"] } }, initial: "pristine", states: { pristine: {} } }), createDatasetMutator = (comlink) => datasetMutatorMachine.provide({ actors: { documentMutatorMachine: createDocumentMutator(comlink) } }); Object.defineProperty(exports, "actor", { enumerable: !0, get: function() { return context.actor; } }); exports.emptyActor = context.emptyActor; exports.isEmptyActor = context.isEmptyActor; exports.listeners = context.listeners; exports.setActor = context.setActor; exports.createDatasetMutator = createDatasetMutator; exports.createDocumentMutator = createDocumentMutator; //# sourceMappingURL=index.cjs.map