(fix) module list status bug..

This commit is contained in:
2026-09-07 14:16:17 +09:00
parent 01017f03fe
commit bfb3cbaf9b
4 changed files with 165 additions and 22 deletions
@@ -462,7 +462,7 @@ const moduleGuidePages = [
imageAlt: '로컬 환경 모듈 가이드',
imageSrc: './assets/images/module-guide-local.png',
slamModules: ['NAV2-Gazebo', 'NAV2-TurtleBot3Burger', 'NAV2-Perception', 'NAV2-SLAM'],
navigationModules: ['NAV2-Gazebo', 'NAV2-TurtleBot3Burger', 'NAV2-Perception', 'NAV2-Localization', 'NAV2-Planning', 'NAV2-Control'],
navigationModules: ['NAV2-Gazebo', 'NAV2-TurtleBot3Burger', 'NAV2-Perception', 'NAV2-Map', 'NAV2-Localization', 'NAV2-Planning', 'NAV2-Control'],
parameters: [
['기본', 'sim_mode:=true, platform:=turtlebot3, robot:=turtlebot3, level:=2d'],
['Perception', 'sim_mode:=true'],
@@ -474,7 +474,7 @@ const moduleGuidePages = [
imageAlt: '원격 플랫폼 환경 모듈 가이드',
imageSrc: './assets/images/module-guide-remote-platform.png',
slamModules: ['NAV2-MKMini', 'NAV2-Perception', 'NAV2-SLAM'],
navigationModules: ['NAV2-MKMini', 'NAV2-Perception', 'NAV2-Localization', 'NAV2-Planning', 'NAV2-Control'],
navigationModules: ['NAV2-MKMini', 'NAV2-Perception', 'NAV2-Map', 'NAV2-Localization', 'NAV2-Planning', 'NAV2-Control'],
parameters: [
['기본', 'sim_mode:=false, platform:=mkmini, robot:=mkmini, level:=2d'],
['Perception', 'sim_mode:=false'],
@@ -486,7 +486,7 @@ const moduleGuidePages = [
imageAlt: '원격 3D SLAM 환경 모듈 가이드',
imageSrc: './assets/images/module-guide-remote-3d.png',
slamModules: ['NAV2-MKMini', 'NAV2-Perception3D', 'NAV2-SLAM3D'],
navigationModules: ['NAV2-MKMini', 'NAV2-Perception3D', 'NAV2-Localization', 'NAV2-Planning', 'NAV2-Control'],
navigationModules: ['NAV2-MKMini', 'NAV2-Perception3D', 'NAV2-Map', 'NAV2-Localization', 'NAV2-Planning', 'NAV2-Control'],
parameters: [
['기본', 'sim_mode:=false, platform:=mkmini, robot:=mkmini, level:=3d']
]
@@ -59,6 +59,26 @@ function parseRemoteWorkspaceTarget(targetKey: string): RemoteWorkspaceTarget |
}
}
function retainRunningModuleStats(modules: ModuleRow[], previousModules: ModuleRow[]): ModuleRow[] {
const previousByKey = new Map(
previousModules
.filter((module) => module.state === 'running')
.map((module) => [module.folderName ?? module.name, module]),
)
return modules.map((module) => {
if (module.state !== 'running') return module
const previous = previousByKey.get(module.folderName ?? module.name)
if (!previous) return module
return {
...module,
cpu: module.cpu ?? previous.cpu,
memory: module.memory ?? previous.memory,
}
})
}
export function useWorkspaceModuleList({
clonePathPreview,
curriculumModules,
@@ -164,8 +184,11 @@ export function useWorkspaceModuleList({
if (requestSequence !== loadSequenceRef.current) return
setModuleListError(null)
const modules = applyPendingModuleStates(applyOverrides(result.modules).sort(compareModulePriority))
setAvailableModules(modules)
storeRemoteModuleCache(moduleCacheKey, modules)
setAvailableModules((current) => {
const nextModules = retainRunningModuleStats(modules, current)
storeRemoteModuleCache(moduleCacheKey, nextModules)
return nextModules
})
return
}
@@ -173,8 +196,11 @@ export function useWorkspaceModuleList({
if (requestSequence !== loadSequenceRef.current) return
setModuleListError(null)
const modules = applyPendingModuleStates(applyOverrides(result.modules).sort(compareModulePriority))
setAvailableModules(modules)
storeRemoteModuleCache(moduleCacheKey, modules)
setAvailableModules((current) => {
const nextModules = retainRunningModuleStats(modules, current)
storeRemoteModuleCache(moduleCacheKey, nextModules)
return nextModules
})
} catch (error) {
if (requestSequence !== loadSequenceRef.current) return
console.error('[modules] list failed', error)