refactor: video call

This commit is contained in:
Tristan Yang
2023-04-24 20:45:06 +08:00
parent adbd244292
commit 23d8fb757c
9 changed files with 114 additions and 61 deletions
@@ -71,7 +71,16 @@ export default async function handler({ operation, data = {}, payload }: Params)
break;
case "updateChannelVisibleAside":
{
await table?.setItem("channelAsides", data.channelAsides);
if (payload.aside !== "voice") {
await table?.setItem("channelAsides", data.channelAsides);
}
}
break;
case "updateDMVisibleAside":
{
if (payload.aside !== "voice") {
await table?.setItem("dmAsides", data.dmAsides);
}
}
break;
default:
+10 -7
View File
@@ -124,11 +124,12 @@ export const serverApi = createApi({
const { success } = resp;
if (success) {
const arr = resp.data.channels.map(data => {
const [id] = data.channel_name.split(":").slice(-1);
const [type, id] = data.channel_name.split(":").slice(-2);
const count = data.user_count;
const context = type === "group" ? "channel" as const : "dm" as const;
return {
id: +id,
context: "channel" as const,
context,
memberCount: count
};
});
@@ -149,9 +150,11 @@ export const serverApi = createApi({
getAgoraStatus: builder.query<boolean, void>({
query: () => ({ url: `/admin/agora/enabled` })
}),
getAgoraToken: builder.query<AgoraTokenResponse, number>({
query: (id) => ({
url: `group/${id}/agora_token`,
generateAgoraToken: builder.mutation<AgoraTokenResponse, { uid: number } | { gid: number }>({
query: (data) => ({
url: `/admin/agora/token`,
method: "POST",
body: data
})
}),
getSystemCommon: builder.query<SystemCommon, void>({
@@ -396,11 +399,11 @@ export const {
useSendMessageByBotMutation,
useUpdateFrontendUrlMutation,
useGetFrontendUrlQuery,
useLazyGetAgoraTokenQuery,
useGetAgoraConfigQuery,
useGetAgoraStatusQuery,
useGetAgoraChannelsQuery,
useUpdateSystemCommonMutation,
useLazyGetSystemCommonQuery,
useGetSystemCommonQuery
useGetSystemCommonQuery,
useGenerateAgoraTokenMutation
} = serverApi;
+19 -4
View File
@@ -5,6 +5,7 @@ import { AutoDeleteMessageSettingDTO, AutoDeleteMsgForGroup, AutoDeleteMsgForUse
import { resetAuthData } from "./auth.data";
type ChannelAside = "members" | "voice" | null;
type DMAside = "voice" | null;
export interface State {
og: { [url: string]: OG }
usersVersion: number;
@@ -18,6 +19,7 @@ export interface State {
autoDeleteMsgUsers: AutoDeleteMsgForUser[];
autoDeleteMsgChannels: AutoDeleteMsgForGroup[];
channelAsides: { [cid: number]: ChannelAside };
dmAsides: { [uid: number]: DMAside };
}
@@ -33,7 +35,8 @@ const initialState: State = {
muteChannels: {},
autoDeleteMsgUsers: [],
autoDeleteMsgChannels: [],
channelAsides: {}
channelAsides: {},
dmAsides: {}
};
const footprintSlice = createSlice({
@@ -56,7 +59,8 @@ const footprintSlice = createSlice({
muteChannels = {},
autoDeleteMsgUsers = [],
autoDeleteMsgChannels = [],
channelAsides = {}
channelAsides = {},
dmAsides = {}
} = action.payload;
return {
og,
@@ -70,7 +74,8 @@ const footprintSlice = createSlice({
muteChannels,
autoDeleteMsgUsers,
autoDeleteMsgChannels,
channelAsides
channelAsides,
dmAsides
};
},
updateUsersVersion(state, action: PayloadAction<number>) {
@@ -189,6 +194,10 @@ const footprintSlice = createSlice({
const { id, aside } = action.payload;
state.channelAsides[id] = aside;
},
updateDMVisibleAside(state, action: PayloadAction<{ id: number, aside: DMAside }>) {
const { id, aside } = action.payload;
state.dmAsides[id] = aside;
},
},
extraReducers: (builder) => {
builder.addCase(resetAuthData, (state) => {
@@ -198,6 +207,11 @@ const footprintSlice = createSlice({
state.channelAsides[+channel_id] = null;
}
});
Object.keys(state.dmAsides).forEach((uid: string) => {
if (state.dmAsides[+uid] === "voice") {
state.dmAsides[+uid] = null;
}
});
});
}
});
@@ -213,7 +227,8 @@ export const {
updateAutoDeleteSetting,
updateHistoryMark,
upsertOG,
updateChannelVisibleAside
updateChannelVisibleAside,
updateDMVisibleAside
} = footprintSlice.actions;
export default footprintSlice.reducer;