UNPKG

mobx-keystone-yjs

Version:

Yjs bindings for mobx-keystone

33 lines (26 loc) 934 B
import { modelSnapshotOutWithMetadata } from "mobx-keystone" import * as Y from "yjs" import { PlainObject, PlainValue } from "../plainTypes" import { YjsTextModel } from "./YjsTextModel" import { action } from "mobx" export type YjsData = Y.Array<any> | Y.Map<any> | Y.Text | PlainValue export const convertYjsDataToJson = action((yjsData: YjsData): PlainValue => { if (yjsData instanceof Y.Array) { return yjsData.map((v) => convertYjsDataToJson(v)) } if (yjsData instanceof Y.Map) { const obj: PlainObject = {} yjsData.forEach((v, k) => { obj[k] = convertYjsDataToJson(v) }) return obj } if (yjsData instanceof Y.Text) { const deltas = yjsData.toDelta() as unknown[] return modelSnapshotOutWithMetadata(YjsTextModel, { deltaList: deltas.length > 0 ? [{ $frozen: true, data: deltas }] : [], }) as unknown as PlainValue } // assume it's a primitive return yjsData })