UNPKG

chamesu

Version:

This package contains all packages of the chat application.

88 lines (67 loc) 2.62 kB
/* * 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<string, any>[] } export const state = () : ChatState => ({ membersOnline: [] }); export const getters : GetterTree<ChatState, RootState> = { 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<ChatState, RootState> = { // -------------------------------------------------------------------- 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<ChatState> = { 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 }