feat: remark

This commit is contained in:
Tristan Yang
2025-07-16 17:52:57 +08:00
parent 5e537cae39
commit 2f9e0ccaab
15 changed files with 229 additions and 93 deletions
+18 -9
View File
@@ -10,7 +10,7 @@ import {
AutoDeleteSettingForChannels,
AutoDeleteSettingForUsers,
PinChat,
PinChatTarget
PinChatTarget,
} from "@/types/sse";
import { resetAuthData } from "./auth.data";
@@ -31,6 +31,7 @@ export interface State {
channelAsides: { [cid: number]: ChannelAside };
dmAsides: { [uid: number]: DMAside };
pinChats: PinChat[];
remarkMap: Record<number, string>;
}
const initialState: State = {
@@ -47,7 +48,8 @@ const initialState: State = {
autoDeleteMsgChannels: [],
channelAsides: {},
dmAsides: {},
pinChats: []
pinChats: [],
remarkMap: {},
};
const footprintSlice = createSlice({
@@ -72,7 +74,8 @@ const footprintSlice = createSlice({
autoDeleteMsgChannels = [],
channelAsides = {},
dmAsides = {},
pinChats = []
pinChats = [],
remarkMap = {},
} = action.payload;
// 初始化全局变量
window.USERS_VERSION = usersVersion;
@@ -91,7 +94,8 @@ const footprintSlice = createSlice({
autoDeleteMsgChannels,
channelAsides,
dmAsides,
pinChats
pinChats,
remarkMap,
};
},
updateUsersVersion(state, action: PayloadAction<number>) {
@@ -100,7 +104,7 @@ const footprintSlice = createSlice({
},
updateAfterMid(state, action: PayloadAction<number>) {
const newMid = action.payload;
// 如果新mid小于已有的afterMid,则不必更新
// 如果新 mid 小于已有的 afterMid则不必更新
if (state.afterMid < newMid) {
state.afterMid = action.payload;
window.AFTER_MID = action.payload;
@@ -220,6 +224,10 @@ const footprintSlice = createSlice({
state.readUsers[uid] = mid;
});
},
updateRemarkByUid(state, action: PayloadAction<{ uid: number; remark: string }>) {
const { uid, remark } = action.payload;
state.remarkMap[uid] = remark;
},
updateReadChannels(state, action: PayloadAction<{ gid: number; mid: number }[] | undefined>) {
const reads = action.payload || [];
if (reads.length == 0) return;
@@ -234,11 +242,11 @@ const footprintSlice = createSlice({
updateDMVisibleAside(state, action: PayloadAction<{ id: number; aside: DMAside }>) {
const { id, aside } = action.payload;
state.dmAsides[id] = aside;
}
},
},
extraReducers: (builder) => {
builder.addCase(resetAuthData, (state) => {
// 如果有asidevoice的,就把它关掉
// 如果有 asidevoice 的,就把它关掉
Object.keys(state.channelAsides).forEach((channel_id: string) => {
if (state.channelAsides[+channel_id] === "voice") {
state.channelAsides[+channel_id] = null;
@@ -250,7 +258,7 @@ const footprintSlice = createSlice({
}
});
});
}
},
});
export const {
@@ -267,7 +275,8 @@ export const {
updateChannelVisibleAside,
updateDMVisibleAside,
upsertPinChats,
removePinChats
removePinChats,
updateRemarkByUid,
} = footprintSlice.actions;
export default footprintSlice.reducer;