Files
alexopus-ComfyUI-Notes-Sidebar/js/stores/NotesStore.js
T
2025-07-20 01:08:13 +02:00

92 lines
2.8 KiB
JavaScript

export class NotesStore extends EventTarget {
constructor() {
super();
this.state = {
notes: [],
activeNote: null,
unsavedChanges: new Map(), // noteName -> boolean
noteContent: new Map(), // noteName -> string (current content)
savedContent: new Map() // noteName -> string (last saved content)
};
}
getState() {
return { ...this.state };
}
setState(updates) {
const prevState = { ...this.state };
this.state = { ...this.state, ...updates };
// Emit state change event
this.dispatchEvent(new CustomEvent('stateChanged', {
detail: {
prevState,
newState: this.getState(),
updates
}
}));
}
// Convenience methods for common state operations
setNotes(notes) {
this.setState({ notes });
}
setActiveNote(activeNote) {
this.setState({ activeNote });
}
setNoteContent(noteName, content) {
const noteContent = new Map(this.state.noteContent);
noteContent.set(noteName, content);
this.setState({ noteContent });
}
setSavedContent(noteName, content) {
const savedContent = new Map(this.state.savedContent);
savedContent.set(noteName, content);
this.setState({ savedContent });
}
setUnsavedChanges(noteName, hasChanges) {
const unsavedChanges = new Map(this.state.unsavedChanges);
unsavedChanges.set(noteName, hasChanges);
this.setState({ unsavedChanges });
}
deleteNoteFromState(noteName) {
const unsavedChanges = new Map(this.state.unsavedChanges);
const noteContent = new Map(this.state.noteContent);
const savedContent = new Map(this.state.savedContent);
unsavedChanges.delete(noteName);
noteContent.delete(noteName);
savedContent.delete(noteName);
this.setState({ unsavedChanges, noteContent, savedContent });
}
renameNoteInState(oldName, newName) {
const unsavedChanges = new Map(this.state.unsavedChanges);
const noteContent = new Map(this.state.noteContent);
const savedContent = new Map(this.state.savedContent);
// Transfer state from old name to new name
const unsavedState = unsavedChanges.get(oldName) || false;
const content = noteContent.get(oldName) || '';
const saved = savedContent.get(oldName) || '';
// Remove old
unsavedChanges.delete(oldName);
noteContent.delete(oldName);
savedContent.delete(oldName);
// Add new
unsavedChanges.set(newName, unsavedState);
noteContent.set(newName, content);
savedContent.set(newName, saved);
this.setState({ unsavedChanges, noteContent, savedContent });
}
}