diff --git a/src/store/messagesStore.js b/src/store/messagesStore.js index 433c02436c5..b83c58f3c15 100644 --- a/src/store/messagesStore.js +++ b/src/store/messagesStore.js @@ -479,14 +479,18 @@ const mutations = { return } + const sharedItemsStore = useSharedItemsStore() const timestamp = convertToUnix(Date.now()) const messageIds = Object.keys(state.messages[token]) messageIds.forEach((messageId) => { if (state.messages[token][messageId].expirationTimestamp && timestamp > state.messages[token][messageId].expirationTimestamp) { Vue.delete(state.messages[token], messageId) + sharedItemsStore.deleteSharedItemFromMessage(token, +messageId) } }) + + sharedItemsStore.purgeExpiredSharedItems(token, timestamp) }, easeMessageList(state, { token, lastReadMessage }) { diff --git a/src/stores/sharedItems.js b/src/stores/sharedItems.js index 4fb0cafa496..83b51ca7354 100644 --- a/src/stores/sharedItems.js +++ b/src/stores/sharedItems.js @@ -157,6 +157,33 @@ export const useSharedItemsStore = defineStore('sharedItems', { } }, + /** + * Purge expired shared items from the store + * + * @param {Token} token conversation token + * @param {number} timestamp current timestamp + */ + purgeExpiredSharedItems(token, timestamp) { + if (!this.sharedItemsPool[token]) { + return + } + + for (const type of Object.keys(this.sharedItemsPool[token])) { + for (const id of Object.keys(this.sharedItemsPool[token][type])) { + const message = this.sharedItemsPool[token][type][+id] + if (message.expirationTimestamp && message.expirationTimestamp < timestamp) { + delete this.sharedItemsPool[token][type][+id] + } + } + if (Object.keys(this.sharedItemsPool[token][type]).length === 0) { + delete this.sharedItemsPool[token][type] + } + } + if (Object.keys(this.sharedItemsPool[token]).length === 0) { + delete this.sharedItemsPool[token] + } + }, + /** * @param {Token} token conversation token * @param {Type} type type of shared item