fix: add and remove member from channel

This commit is contained in:
zerosoul
2022-04-02 23:29:34 +08:00
parent fa52b3e4ad
commit 4fce074ef2
2 changed files with 45 additions and 19 deletions
+30 -2
View File
@@ -30,8 +30,36 @@ const channelsSlice = createSlice({
},
updateChannel(state, action) {
// console.log("set channels store", action);
const { id, ...rest } = action.payload;
state.byId[id] = { ...state.byId[id], ...rest };
const { id, operation, members, ...rest } = action.payload;
switch (operation) {
case "remove_member":
{
const filtered = state.byId[id].members.filter(
(id) => members.findIndex((uid) => uid == id) == -1
);
console.log(
"remove member from channel",
filtered,
members,
state.byId[id].members
);
state.byId[id].members = filtered;
}
break;
case "add_member":
{
const currs = state.byId[id].members;
const _set = new Set([...currs, ...members]);
console.log("add member to channel", [..._set]);
state.byId[id].members = [..._set];
}
break;
default:
state.byId[id] = { ...state.byId[id], members, ...rest };
break;
}
},
removeChannel(state, action) {
const gid = action.payload;
+15 -17
View File
@@ -49,7 +49,6 @@ export default function useStreaming() {
const [readyPullData, setReadyPullData] = useState(false);
const {
authData: { uid: loginUid },
channels: { byId: channelData },
ui: { ready, online },
footprint: { afterMid, usersVersion, readUsers, readChannels },
} = useSelector((store) => store);
@@ -192,28 +191,27 @@ export default function useStreaming() {
dispatch(addChannel(data.group));
break;
case "user_joined_group":
console.log("new user joined group", data.gid);
// 去重
dispatch(
updateChannel({
id: data.gid,
members: [
...channelData[data.gid].members,
...data.uid,
].filter((v, i, a) => a.indexOf(v) === i),
})
);
{
console.log("new user joined group", data.gid);
const { gid, uid: uids } = data;
// 去重
dispatch(
updateChannel({
operation: "add_member",
id: gid,
members: uids,
})
);
}
break;
case "user_leaved_group":
{
const { gid, uid: uids } = data;
const leftMembers = channelData[gid].members.filter(
(id) => uids.findIndex((uid) => id == uid) == -1
);
dispatch(
updateChannel({
id: data.gid,
members: [...leftMembers],
operation: "remove_member",
id: gid,
members: uids,
})
);
}