Encapsulate note store more

This commit is contained in:
Joscha 2025-02-08 18:16:35 +01:00
parent c2b4592bc9
commit 3628fa260b
3 changed files with 22 additions and 27 deletions

View file

@ -11,8 +11,10 @@ const repos = useReposStore();
const notes = useNotesStore(); const notes = useNotesStore();
const ui = useUiStore(); const ui = useUiStore();
function mkNote(id: string, ...children: string[]): Note { function mkNote(text: string, ...children: string[]): Note {
return notes.addNote({ id, text: id, children }); const note = notes.createNote(text);
children.forEach((it) => note.children.push(it));
return note;
} }
function createSomeNotes() { function createSomeNotes() {

View file

@ -22,11 +22,11 @@ const props = defineProps<{
forceOpen?: boolean; forceOpen?: boolean;
}>(); }>();
const note = computed(() => notes.notes.get(props.noteId)); const note = computed(() => notes.getNote(props.noteId));
// Our children and their locally unique keys. // Our children and their locally unique keys.
const children = computed(() => { const children = computed(() => {
if (note.value === undefined) return []; if (!note.value) return [];
const seen = new Map<string, number>(); const seen = new Map<string, number>();
const children: { id: string; key: string }[] = []; const children: { id: string; key: string }[] = [];
for (const id of note.value.children) { for (const id of note.value.children) {
@ -79,6 +79,7 @@ function onClick() {
} }
function onEditButtonClick() { function onEditButtonClick() {
if (!note.value) return;
mode.value = "editing"; mode.value = "editing";
} }
@ -87,11 +88,13 @@ function onEditEditorClose() {
} }
function onEditEditorFinish(text: string) { function onEditEditorFinish(text: string) {
if (note.value) note.value.text = text; if (!note.value) return;
note.value.text = text;
onEditEditorClose(); onEditEditorClose();
} }
function onCreateButtonClick() { function onCreateButtonClick() {
if (!note.value) return;
mode.value = "creating"; mode.value = "creating";
} }
@ -100,7 +103,10 @@ function onCreateEditorClose() {
} }
function onCreateEditorFinish(text: string) { function onCreateEditorFinish(text: string) {
notes.appendNewChildNote(props.noteId, text); if (!note.value) return;
const newNote = notes.createNote(text);
note.value.children.push(newNote.id);
const lastChild = children.value.at(-1); const lastChild = children.value.at(-1);
if (lastChild) ui.focusPath = pathAppend(props.path, lastChild.key); if (lastChild) ui.focusPath = pathAppend(props.path, lastChild.key);

View file

@ -10,25 +10,14 @@ export type Note = {
export const useNotesStore = defineStore("notes", () => { export const useNotesStore = defineStore("notes", () => {
const notes = ref<Map<string, Note>>(new Map()); const notes = ref<Map<string, Note>>(new Map());
function addNote(note: Note): Note { function getNote(id: string): Note | undefined {
notes.value.set(note.id, note); return notes.value.get(id);
return notes.value.get(note.id)!; // Re-getting so returned Note is reactive
} }
function addNewNote(text: string): Note { function createNote(text: string): Note {
return addNote({ const id = crypto.randomUUID();
id: crypto.randomUUID(), notes.value.set(id, { id, text, children: [] });
text, return notes.value.get(id)!; // Re-getting so returned Note is reactive
children: [],
});
}
function appendNewChildNote(parentId: string, text: string): Note | undefined {
const parent = notes.value.get(parentId);
if (parent === undefined) return undefined;
const note = addNewNote(text);
parent.children.push(note.id);
return note;
} }
function clearNotes() { function clearNotes() {
@ -36,10 +25,8 @@ export const useNotesStore = defineStore("notes", () => {
} }
return { return {
notes, getNote,
addNote, createNote,
addNewNote,
appendNewChildNote,
clearNotes, clearNotes,
}; };
}); });