92 lines
2.8 KiB
JavaScript
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 });
|
|
}
|
|
} |