From 930f6fa6b747d14ab467b72e7ef920228cde45a4 Mon Sep 17 00:00:00 2001 From: riqo Date: Sat, 13 Mar 2021 10:50:33 -0600 Subject: [PATCH] add message delete on size limit --- src/modules/messages.ts | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/modules/messages.ts b/src/modules/messages.ts index e3c9286..9becb4d 100644 --- a/src/modules/messages.ts +++ b/src/modules/messages.ts @@ -1,10 +1,13 @@ import { ref } from 'vue'; import { RenderMessage, Annotation } from "@/types/message/index"; -const messages = ref(new Map()); - const messagesKey = "CRIMATA_MESSAGES"; +const sizeLimit = 200; + +// list of messages where the first item is the oldest message. +const messages = ref(new Map()); +// get stored messages. const messagesString = window.localStorage.getItem(messagesKey); if (messagesString) { @@ -14,9 +17,22 @@ if (messagesString) { messages.value = new Map(Object.entries(parsed)); } +// utility function to remove oldest message from the messages map. +function deleteOldest() { + // create array of map keys and get the key of the oldest message. + const lastKey = Array.from(messages.value.keys()).shift(); + + messages.value.delete(lastKey); +} + export default function useMessages() { - const addMessage = (m: RenderMessage) => messages.value.set(m.uid, m); + const addMessage = (m: RenderMessage) => { + // check for message limit before setting a new message. + if (messages.value.size >= sizeLimit) deleteOldest(); + + messages.value.set(m.uid, m); + } const updateMessage = (m: Annotation) => { // update message if in the map. -- 2.43.0