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 }); } }