mirror of
https://github.com/zadam/trilium.git
synced 2025-12-24 08:14:25 +01:00
34 lines
837 B
TypeScript
34 lines
837 B
TypeScript
type Listener = () => void;
|
|
|
|
class NoteSavedDataStore {
|
|
private data = new Map<string, string>();
|
|
private listeners = new Map<string, Set<Listener>>();
|
|
|
|
get(noteId: string) {
|
|
return this.data.get(noteId);
|
|
}
|
|
|
|
set(noteId: string, value: string) {
|
|
this.data.set(noteId, value);
|
|
this.listeners.get(noteId)?.forEach(l => l());
|
|
}
|
|
|
|
subscribe(noteId: string, listener: Listener) {
|
|
let set = this.listeners.get(noteId);
|
|
if (!set) {
|
|
set = new Set();
|
|
this.listeners.set(noteId, set);
|
|
}
|
|
set.add(listener);
|
|
|
|
return () => {
|
|
set!.delete(listener);
|
|
if (set!.size === 0) {
|
|
this.listeners.delete(noteId);
|
|
}
|
|
};
|
|
}
|
|
}
|
|
|
|
export const noteSavedDataStore = new NoteSavedDataStore();
|