From 7d74a805206dddc9b51da4a33bcf58b7859106e6 Mon Sep 17 00:00:00 2001 From: "nisch.codes" <hey@nisch.codes> Date: Sun, 16 Mar 2025 08:48:55 +0100 Subject: [PATCH] feat: add localstorage for persistancy and minor refacotring --- src/App.vue | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/src/App.vue b/src/App.vue index 7c1b8a3..1b3b009 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,13 +1,22 @@ <script setup lang="ts"> -import {ref} from 'vue' +import {ref, watchEffect} from 'vue' import Sidebar from './components/Sidebar.vue' -const notes = ref([]) +const STORAGE_KEY_CONFIG = 'jane-config' +const STORAGE_KEY_NOTES = 'jane-notes' + +const configs = ref(JSON.parse(localStorage.getItem(STORAGE_KEY_CONFIG) || '[]')) +const notes = ref(JSON.parse(localStorage.getItem(STORAGE_KEY_NOTES) || '[]')) const active_note = ref(null) const input_title = ref('') const input_content = ref('') +// find note Index by Id +function findNoteIndexById(id:any):any { + return notes.value.findIndex((note:any) => note.id === id) +} + // create note function create_note() { // generate random id @@ -23,11 +32,11 @@ function create_note() { } // delete note -function delete_note({id, evt}) { +function delete_note({id, evt}:any) { // stop the propagation of the event evt.stopPropagation() // find the current note id in the notes array - let noteId = notes.value.findIndex(note => note.id === id) + let noteId = findNoteIndexById(id) // delete the note out of the array notes.value.splice(noteId, 1) // unset the active note and the inputs @@ -39,30 +48,32 @@ function delete_note({id, evt}) { // update note function update_note() { // find the current note id in the notes array - let noteId = notes.value.findIndex(note => note.id === active_note.value) + let noteId = findNoteIndexById(active_note.value) // set the note properties to the current input values notes.value[noteId].title = input_title.value notes.value[noteId].content = input_content.value } // set active note -function set_active_note(id) { +function set_active_note(id:any) { // set the active note property active_note.value = id // find the current note in the notes array - let note = notes.value.find(note => note.id === id) + let noteId = findNoteIndexById(id) // set the input properties to the current note - input_title.value = note.title - input_content.value = note.content + input_title.value = notes.value[noteId].title + input_content.value = notes.value[noteId].content // set timeout to wait a tick to get it ready - setTimeout(() => { - document.querySelector('input#note-title').focus() - }, 0); + setTimeout(() => { (document.querySelector('input#note-title') as HTMLInputElement)?.focus() }, 0) } -// save notes - -// load notes +// persist state +watchEffect(() => { + // save the current array of notes + localStorage.setItem(STORAGE_KEY_NOTES, JSON.stringify(notes.value)) + // save the current array of configurations + localStorage.setItem(STORAGE_KEY_CONFIG, JSON.stringify(configs.value)) +}) </script>