From b48c834d367efe9bfc365240d048cc1b460941e9 Mon Sep 17 00:00:00 2001 From: grimhilt Date: Thu, 13 Apr 2023 16:43:44 +0200 Subject: [PATCH] change notif when setting seen flag --- front/src/store/store.ts | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/front/src/store/store.ts b/front/src/store/store.ts index 7aa6e8c..d19655f 100644 --- a/front/src/store/store.ts +++ b/front/src/store/store.ts @@ -1,4 +1,5 @@ import API from "@/services/imapAPI"; +import { isSeenFc } from "@/utils/flagsUtils"; import { decodeEmojis } from "@/utils/string"; import { AxiosError, AxiosResponse } from "axios"; import { createStore } from "vuex"; @@ -55,6 +56,29 @@ const roomOnId = (state: State, roomId: number): Room | undefined => state.rooms.find((room: Room) => room.id == roomId); const msgOnRoomId = (state: State, roomId: number) => state.roomMessages.find((roomMsg) => roomMsg.roomId == roomId); +function updateSeen(state: State, roomId: number, flag: string[], adding: boolean) { + // if is seen flag decrement unread value + if (isSeenFc(flag)) { + const room = roomOnId(state, roomId); + if (!room) return; + if (adding) { + room.notSeen--; + } else { + room.notSeen++; + } + // if is thread change seen on parent + if (room.roomType == RoomType.THREAD) { + const parentRoom = state.rooms.find((room) => room.threadIds.includes(roomId)); + if (parentRoom) { + if (adding) { + parentRoom.notSeen--; + } else { + parentRoom.notSeen++; + } + } + } + } +} // define injection key todo // export const key: InjectionKey> = Symbol() @@ -135,16 +159,17 @@ const store = createStore({ }); }, addFlag(state, payload) { - // todo if seen notif const msg = msgOnRoomId(state, payload.roomId)?.messages.find((msg) => msg.id == payload.messageId); if (msg) { msg.flags.push(payload.flag); + updateSeen(state, payload.roomId, payload.flag, true); } }, removeFlag(state, payload) { const msg = msgOnRoomId(state, payload.roomId)?.messages.find((msg) => msg.id == payload.messageId); if (msg) { msg.flags?.splice(msg.flags?.indexOf(payload.flag), 1); + updateSeen(state, payload.roomId, payload.flag, false); } }, },