Encapsulate note store more
This commit is contained in:
parent
c2b4592bc9
commit
3628fa260b
3 changed files with 22 additions and 27 deletions
|
|
@ -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() {
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue