@skokenes/slate-yjs
Version:
Yjs bindings for Slate.
28 lines • 2.89 kB
JavaScript
import { Transforms } from 'slate';
import { toSlatePath } from '../utils/convert';
import { withoutNormalizingAndSelectionMod } from './util';
/**
* Applies a Yjs map event to a Slate editor.
*
* @param event
*/
export default function applyMapEvent(editor, event) {
const targetPath = toSlatePath(event.path);
const targetElement = event.target;
const keyChanges = Array.from(event.changes.keys.entries());
const removedProperties = keyChanges
.filter(([, info]) => info.action === 'delete')
.map(([key]) => key);
const newProperties = keyChanges
.filter(([, info]) => info.action !== 'delete')
.reduce((curr, [key]) => (Object.assign(Object.assign({}, curr), { [key]: targetElement.get(key) })), {});
withoutNormalizingAndSelectionMod(editor, () => {
if (removedProperties.length > 0) {
Transforms.unsetNodes(editor, removedProperties, { at: targetPath });
}
if (Object.keys(newProperties).length > 0) {
Transforms.setNodes(editor, newProperties, { at: targetPath });
}
});
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwRXZlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbHlUb1NsYXRlL21hcEV2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVSxVQUFVLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFHM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUUzRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sVUFBVSxhQUFhLENBQ25DLE1BQWMsRUFDZCxLQUEyQjtJQUUzQixNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxNQUFxQixDQUFDO0lBRWxELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUU1RCxNQUFNLGlCQUFpQixHQUFHLFVBQVU7U0FDakMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQztTQUM5QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV2QixNQUFNLGFBQWEsR0FBNEIsVUFBVTtTQUN0RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDO1NBQzlDLE1BQU0sQ0FDTCxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxpQ0FDWixJQUFJLEtBQ1AsQ0FBQyxHQUFHLENBQUMsRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUM3QixFQUNGLEVBQUUsQ0FDSCxDQUFDO0lBRUosaUNBQWlDLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtRQUM3QyxJQUFJLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDaEMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztTQUN0RTtRQUVELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3pDLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1NBQ2hFO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIn0=