save messages on window close
This commit is contained in:
parent
61253f9cc2
commit
006a5d3d1c
4 changed files with 72 additions and 33 deletions
41
src/modules/messages.ts
Normal file
41
src/modules/messages.ts
Normal 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
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue