feat(ideContainer): 添加当前应用数据状态管理

- 在 ideContainer 状态中新增 currentAppData 字段用于存储当前选中的应用数据
- 添加 updateCurrentAppData action 用于更新当前应用数据
- 在页面组件中调用 dispatch 更新 currentAppData 状态
- 实现菜单项查找函数 findMenuItem用于定位当前应用数据
- 在侧边栏操作中同步更新当前应用数据状态
master
钟良源 4 months ago
parent bfe24c7dfc
commit d43d84143f

@ -6,7 +6,7 @@ import LogBar from './logBar';
import RightSideBar from './rightSideBar'; import RightSideBar from './rightSideBar';
import NavBar, { NavBarRef } from './navBar'; import NavBar, { NavBarRef } from './navBar';
import { Selected } from '@/pages/ideContainer/types'; import { Selected } from '@/pages/ideContainer/types';
import { updateInfo, updateProjectComponentData } from '@/store/ideContainer'; import { updateCurrentAppData, updateInfo, updateProjectComponentData } from '@/store/ideContainer';
import { useDispatch, useSelector } from 'react-redux'; import { useDispatch, useSelector } from 'react-redux';
import { getAppListBySceneId } from '@/api/apps'; import { getAppListBySceneId } from '@/api/apps';
import { getProjectComp } from '@/api/scene'; import { getProjectComp } from '@/api/scene';
@ -200,6 +200,8 @@ function IDEContainer() {
const menuItems = menuData[urlParams.identity]; const menuItems = menuData[urlParams.identity];
const menuItem = findMenuItem(menuItems, key); const menuItem = findMenuItem(menuItems, key);
dispatch(updateCurrentAppData({ ...menuItem }));
if (menuItem) { if (menuItem) {
setSelected({ setSelected({
...menuItem, ...menuItem,

@ -17,7 +17,7 @@ import { menuData1, menuData2 } from './config/menuData';
import { IconSearch, IconPlus } from '@arco-design/web-react/icon'; import { IconSearch, IconPlus } from '@arco-design/web-react/icon';
import { Selected } from '@/pages/ideContainer/types'; import { Selected } from '@/pages/ideContainer/types';
import { useDispatch, useSelector } from 'react-redux'; import { useDispatch, useSelector } from 'react-redux';
import { updateMenuData, updateFlowData } from '@/store/ideContainer'; import { updateMenuData, updateFlowData, updateCurrentAppData } from '@/store/ideContainer';
import { addApp, getProjectEnv, editApp, deleteApp } from '@/api/apps'; import { addApp, getProjectEnv, editApp, deleteApp } from '@/api/apps';
import _ from 'lodash'; import _ from 'lodash';
import { getAppInfoNew } from '@/api/appRes'; import { getAppInfoNew } from '@/api/appRes';
@ -281,10 +281,26 @@ const SideBar: React.FC<SideBarProps> = ({
}; };
}); });
const findMenuItem = (menuItems: any[], key: string): any => {
for (const item of menuItems) {
if (item.key === key) {
return item;
}
if (item.children) {
const found = findMenuItem(item.children, key);
if (found) return found;
}
}
return null;
};
// 更新 menuData 中的数据 // 更新 menuData 中的数据
dispatch(updateMenuData({ ...menuData, [identity]: currentMenu })); dispatch(updateMenuData({ ...menuData, [identity]: currentMenu }));
// 更新 flowData 中的数据 // 更新 flowData 中的数据
dispatch(updateFlowData({ [data.id]: res.data })); dispatch(updateFlowData({ [data.id]: res.data }));
// 更新 currentAppData 中的数据
dispatch(updateCurrentAppData({ ...findMenuItem(menuData[identity], children.key) }));
// 同时更新本地 menu 状态以触发重新渲染 // 同时更新本地 menu 状态以触发重新渲染
setMenu(prevMenu => { setMenu(prevMenu => {

@ -6,6 +6,7 @@ interface IDEContainerState {
flowData: any; flowData: any;
canvasDataMap: any; canvasDataMap: any;
projectComponentData: any; projectComponentData: any;
currentAppData: any;
logBarStatus?: boolean; logBarStatus?: boolean;
} }
@ -15,6 +16,7 @@ const initialState: IDEContainerState = {
flowData: {}, // 编排数据,即流程图的渲染数据 flowData: {}, // 编排数据,即流程图的渲染数据
canvasDataMap: {}, // 每个画布的缓存信息 canvasDataMap: {}, // 每个画布的缓存信息
projectComponentData: {}, // 工程下的组件列表 projectComponentData: {}, // 工程下的组件列表
currentAppData: {}, // 当前选中的应用数据
logBarStatus: false logBarStatus: false
}; };
@ -37,6 +39,9 @@ const ideContainerSlice = createSlice({
updateProjectComponentData(state, action) { updateProjectComponentData(state, action) {
state.projectComponentData = { ...state.projectComponentData, ...action.payload }; state.projectComponentData = { ...state.projectComponentData, ...action.payload };
}, },
updateCurrentAppData(state, action) {
state.currentAppData = action.payload;
},
updateLogBarStatus(state, action) { updateLogBarStatus(state, action) {
state.logBarStatus = action.payload; state.logBarStatus = action.payload;
} }
@ -49,6 +54,7 @@ export const {
updateFlowData, updateFlowData,
updateCanvasDataMap, updateCanvasDataMap,
updateProjectComponentData, updateProjectComponentData,
updateCurrentAppData,
updateLogBarStatus updateLogBarStatus
} = ideContainerSlice.actions; } = ideContainerSlice.actions;

Loading…
Cancel
Save