json-joy
Version:
Collection of libraries for building collaborative editing apps.
41 lines (40 loc) • 1.12 kB
JavaScript
import { Log } from '../../../json-crdt/log/Log';
import { DomController } from '../dom/DomController';
import { ValueSyncStore } from '../../../util/events/sync-store';
export class PeritextSurfaceState {
events;
el;
plugins;
peritext;
dom;
log;
render = new ValueSyncStore(0);
rerender = () => {
const { peritext, render } = this;
peritext.refresh();
render.next(render.value + 1);
};
constructor(events, el, plugins) {
this.events = events;
this.el = el;
this.plugins = plugins;
const peritext = (this.peritext = events.txt);
const log = (this.log = Log.from(peritext.model));
this.dom = new DomController({
events,
log,
source: el,
});
}
start() {
const { dom, rerender } = this;
const et = dom.et;
const stopDom = dom.start();
et.addEventListener('change', rerender);
return () => {
this.log.destroy();
stopDom();
et.removeEventListener('change', rerender);
};
}
}