import { createSlice, PayloadAction } from '@reduxjs/toolkit'; import type { GroupInfo } from '../../model/group'; export interface GroupState { groups: Record; } const initialState: GroupState = { groups: {}, }; const groupSlice = createSlice({ name: 'group', initialState, reducers: { /** * 追加或更新群组信息 */ appendGroups(state, action: PayloadAction) { const groups = action.payload; for (const group of groups) { state.groups[group._id] = { ...state.groups[group._id], ...group, }; } }, updateGroup(state, action: PayloadAction) { const group = action.payload; const groupId = group._id; if (state.groups[groupId]) { // NOTICE: updateGroup 只会去更新,不会去添加新的 state.groups[groupId] = { ...state.groups[groupId], ...group, }; } }, removeGroup(state, action: PayloadAction) { const groupId = action.payload; delete state.groups[groupId]; }, pinGroupPanel( state, action: PayloadAction<{ groupId: string; panelId: string; }> ) { const { groupId, panelId } = action.payload; if (state.groups[groupId]) { // NOTICE: updateGroup 只会去更新,不会去添加新的 state.groups[groupId] = { ...state.groups[groupId], pinnedPanelId: panelId, }; } }, unpinGroupPanel( state, action: PayloadAction<{ groupId: string; }> ) { const { groupId } = action.payload; if (state.groups[groupId]) { // NOTICE: updateGroup 只会去更新,不会去添加新的 state.groups[groupId] = { ...state.groups[groupId], pinnedPanelId: undefined, }; } }, updateGroupConfig( state, action: PayloadAction<{ groupId: string; configName: string; configValue: any; }> ) { const { groupId, configName, configValue } = action.payload; const groupInfo = state.groups[groupId]; if (groupInfo) { state.groups[groupId] = { ...groupInfo, config: { ...(groupInfo.config ?? {}), [configName]: configValue, }, }; } }, }, }); export const groupActions = groupSlice.actions; export const groupReducer = groupSlice.reducer;