change notif when setting seen flag

This commit is contained in:
grimhilt 2023-04-13 16:43:44 +02:00
parent 8cb1271f9a
commit b48c834d36

View File

@ -1,4 +1,5 @@
import API from "@/services/imapAPI"; import API from "@/services/imapAPI";
import { isSeenFc } from "@/utils/flagsUtils";
import { decodeEmojis } from "@/utils/string"; import { decodeEmojis } from "@/utils/string";
import { AxiosError, AxiosResponse } from "axios"; import { AxiosError, AxiosResponse } from "axios";
import { createStore } from "vuex"; import { createStore } from "vuex";
@ -55,6 +56,29 @@ const roomOnId = (state: State, roomId: number): Room | undefined =>
state.rooms.find((room: Room) => room.id == roomId); state.rooms.find((room: Room) => room.id == roomId);
const msgOnRoomId = (state: State, roomId: number) => state.roomMessages.find((roomMsg) => roomMsg.roomId == 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 // define injection key todo
// export const key: InjectionKey<Store<State>> = Symbol() // export const key: InjectionKey<Store<State>> = Symbol()
@ -135,16 +159,17 @@ const store = createStore<State>({
}); });
}, },
addFlag(state, payload) { addFlag(state, payload) {
// todo if seen notif
const msg = msgOnRoomId(state, payload.roomId)?.messages.find((msg) => msg.id == payload.messageId); const msg = msgOnRoomId(state, payload.roomId)?.messages.find((msg) => msg.id == payload.messageId);
if (msg) { if (msg) {
msg.flags.push(payload.flag); msg.flags.push(payload.flag);
updateSeen(state, payload.roomId, payload.flag, true);
} }
}, },
removeFlag(state, payload) { removeFlag(state, payload) {
const msg = msgOnRoomId(state, payload.roomId)?.messages.find((msg) => msg.id == payload.messageId); const msg = msgOnRoomId(state, payload.roomId)?.messages.find((msg) => msg.id == payload.messageId);
if (msg) { if (msg) {
msg.flags?.splice(msg.flags?.indexOf(payload.flag), 1); msg.flags?.splice(msg.flags?.indexOf(payload.flag), 1);
updateSeen(state, payload.roomId, payload.flag, false);
} }
}, },
}, },