| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- import { createSlice, PayloadAction } from '@reduxjs/toolkit';
- interface FunctionAreaState {
- action: string | null;
- actionTrigger: number;
- activeTools: Record<string, boolean>; // 工具激活状态映射
- }
- const initialState: FunctionAreaState = {
- action: null,
- actionTrigger: 0,
- activeTools: {}, // 初始化为空对象
- };
- // 需要互斥的鼠标左键绑定工具列表
- const MOUSE_BINDING_TOOLS = [
- 'Adjust Brightness and Contrast',
- 'Magnifier',
- 'Zoom Image',
- 'Pan'
- ] as const;
- const functionAreaSlice = createSlice({
- name: 'functionArea',
- initialState,
- reducers: {
- setAction: (state, action: PayloadAction<string>) => {
- state.action = action.payload;
- state.actionTrigger += 1;
- },
- clearAction: (state) => {
- state.action = null;
- },
- setToolActive: (state, action: PayloadAction<string>) => {
- state.activeTools[action.payload] = true;
- },
- setToolInactive: (state, action: PayloadAction<string>) => {
- state.activeTools[action.payload] = false;
- },
- // 切换工具状态(自动处理互斥)
- toggleTool: (state, action: PayloadAction<string>) => {
- const toolName = action.payload;
- const currentlyActive = state.activeTools[toolName];
-
- // 如果工具已激活,停用它
- if (currentlyActive) {
- state.activeTools[toolName] = false;
- state.action = `Deactivate:${toolName}`;
- } else {
- // 停用所有其他工具(互斥)
- MOUSE_BINDING_TOOLS.forEach(tool => {
- state.activeTools[tool] = false;
- });
- // 激活当前工具
- state.activeTools[toolName] = true;
- state.action = `Activate:${toolName}`;
- }
- state.actionTrigger += 1;
- },
- // 停用所有工具
- deactivateAllTools: (state) => {
- MOUSE_BINDING_TOOLS.forEach(tool => {
- state.activeTools[tool] = false;
- });
- state.action = 'DeactivateAll';
- state.actionTrigger += 1;
- },
- },
- });
- export const { setAction, clearAction, setToolActive, setToolInactive, toggleTool, deactivateAllTools } = functionAreaSlice.actions;
- export default functionAreaSlice.reducer;
|