fix: add and remove member from channel
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user