save messages on window close

This commit is contained in:
Enrique Hernandez 2021-03-11 21:34:21 -06:00
commit 006a5d3d1c
4 changed files with 72 additions and 33 deletions

41
src/modules/messages.ts Normal file
View file

@ -0,0 +1,41 @@
import { ref } from 'vue';
import { RenderMessage, Annotation } from "@/types/message/index";
const messages = ref(new Map());
const messagesKey = "CRIMATA_MESSAGES";
const messagesString = window.localStorage.getItem(messagesKey);
if (messagesString) {
// parse stored messages.
const parsed = JSON.parse(messagesString);
// set messages.
messages.value = new Map(Object.entries(parsed));
}
export default function useMessages() {
const addMessage = (m: RenderMessage) => messages.value.set(m.uid, m);
const updateMessage = (m: Annotation) => {
// update message if in the map.
if (messages.value.has(m.uid)) {
messages.value.get(m.uid).context = m.context;
messages.value.get(m.uid).content.text = m.text;
}
}
const saveMessages = () => {
// de-reactivate message data before saving.
const messageData = Object.fromEntries(messages.value);
window.localStorage.setItem(messagesKey, JSON.stringify(messageData));
}
return {
messages,
saveMessages,
addMessage,
updateMessage
}
}