chamesu
Version:
This package contains all packages of the chat application.
88 lines (67 loc) • 2.62 kB
text/typescript
/*
* 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
}