/* * Copyright (c) 2022. * Author Peter Placzek (tada5hi) * For the full copyright and license information, * view the LICENSE file that was distributed with this source code. */ import {ActionTree, GetterTree, MutationTree} from "vuex"; import {RootState} from "~/store/index"; // -------------------------------------------------------------------- export interface ChatState { membersOnline: Record[] } export const state = () : ChatState => ({ membersOnline: [] }); export const getters : GetterTree = { roomMembersOnline: (state) => (roomId?: string) => { return typeof roomId !== 'undefined' ? state.membersOnline.filter(member => member.roomId === roomId) : state.membersOnline; }, roomMemberOnline: (state) => (roomId: string, id: number) => { return state.membersOnline.filter(member => member.roomId === roomId && member.id === id); } }; export const actions : ActionTree = { // -------------------------------------------------------------------- setMembersOnline({commit}, members) { commit('setMembersOnline', members); }, // -------------------------------------------------------------------- addMemberOnline({commit}, member) { commit('addMemberOnline', member); }, dropMemberOnline({commit}, member) { commit('dropMemberOnline', member); }, // -------------------------------------------------------------------- dropRoomMemberOnline({commit}, roomId) { commit('dropRoomMemberOnline', roomId); }, }; export const mutations : MutationTree = { setMembersOnline(state, members) { state.membersOnline = members; }, // -------------------------------------------------------------------- addMemberOnline(state, member) { const index = state.membersOnline.findIndex(item => item.id === member.id && item.roomId === member.roomId); if(index === -1) { state.membersOnline.push(member); } }, dropMemberOnline(state, member) { state.membersOnline = state.membersOnline.filter(item => item.id !== member.id || item.roomId !== member.roomId); }, // -------------------------------------------------------------------- dropRoomMemberOnline(state, roomId) { state.membersOnline = state.membersOnline.filter(item => item.roomId !== roomId); } }; // -------------------------------------------------------------------- export default { namespaced: true, state, getters, actions, mutations }