schreiben/src/lib/lastUpdated.ts

30 lines
1 KiB
TypeScript
Raw Permalink Normal View History

2023-03-25 23:28:56 +00:00
import type { AbstractType, Doc } from "yjs";
import { makeYdocStore } from "./makeYdocStore.js";
// XXX: si hay problemas de perf, mirar acá..
// después de implementar esto me di cuenta que simplemente puedo fijarme en
// cuales fueron las últimas páginas a las que se entró, y probablemente sería más útil.
export function lastUpdated(ydoc: Doc) {
let map: Map<string, Date> = new Map();
let observers: Set<{ y: AbstractType<any>; observer: () => void }> =
new Set();
return makeYdocStore(
(_, __, ydoc) => {
for (const name of ydoc.share.keys()) {
if (name.startsWith("page/")) {
if (!map.get(name)) {
map.set(name, new Date());
const y = ydoc.getXmlFragment(name);
const observer = () => map.set(name, new Date());
observers.add({ y, observer });
y.observeDeep(observer);
}
}
}
return map;
},
2023-08-29 14:05:34 +00:00
() => observers.forEach(({ y, observer }) => y.unobserveDeep(observer)),
2023-03-25 23:28:56 +00:00
)(ydoc);
}