add message delete on size limit
This commit is contained in:
parent
4a2bb7cb52
commit
930f6fa6b7
1 changed files with 19 additions and 3 deletions
|
|
@ -1,10 +1,13 @@
|
||||||
import { ref } from 'vue';
|
import { ref } from 'vue';
|
||||||
import { RenderMessage, Annotation } from "@/types/message/index";
|
import { RenderMessage, Annotation } from "@/types/message/index";
|
||||||
|
|
||||||
|
const messagesKey = "CRIMATA_MESSAGES";
|
||||||
|
const sizeLimit = 200;
|
||||||
|
|
||||||
|
// list of messages where the first item is the oldest message.
|
||||||
const messages = ref(new Map());
|
const messages = ref(new Map());
|
||||||
|
|
||||||
const messagesKey = "CRIMATA_MESSAGES";
|
// get stored messages.
|
||||||
|
|
||||||
const messagesString = window.localStorage.getItem(messagesKey);
|
const messagesString = window.localStorage.getItem(messagesKey);
|
||||||
|
|
||||||
if (messagesString) {
|
if (messagesString) {
|
||||||
|
|
@ -14,9 +17,22 @@ if (messagesString) {
|
||||||
messages.value = new Map(Object.entries(parsed));
|
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() {
|
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) => {
|
const updateMessage = (m: Annotation) => {
|
||||||
// update message if in the map.
|
// update message if in the map.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue