/**
* 检查器面板组件
* Inspector panel component
*
* 使用 InspectorStore 管理状态,减少 useEffect 数量
* Uses InspectorStore for state management to reduce useEffect count
*/
import { useEffect, useRef } from 'react';
import { useInspectorStore } from '../../stores';
import { InspectorProps } from './types';
import { getProfilerService } from './utils';
import {
EmptyInspector,
ExtensionInspector,
AssetFileInspector,
RemoteEntityInspector,
PrefabInspector,
VirtualNodeInspector
} from './views';
import { EntityInspectorPanel } from '../inspector';
export function Inspector({ entityStore: _entityStore, messageHub, inspectorRegistry, projectPath, commandManager }: InspectorProps) {
// ===== 从 InspectorStore 获取状态 | Get state from InspectorStore =====
const {
target,
componentVersion,
autoRefresh,
setAutoRefresh,
isLocked,
setIsLocked,
decimalPlaces,
} = useInspectorStore();
// Ref 用于 profiler 回调访问最新状态 | Ref for profiler callback to access latest state
const targetRef = useRef(target);
targetRef.current = target;
// 自动刷新远程实体详情 | Auto-refresh remote entity details
useEffect(() => {
if (!autoRefresh || target?.type !== 'remote-entity') {
return;
}
const profilerService = getProfilerService();
if (!profilerService) {
return;
}
const handleProfilerData = () => {
const currentTarget = targetRef.current;
if (currentTarget?.type === 'remote-entity' && currentTarget.data?.id !== undefined) {
profilerService.requestEntityDetails(currentTarget.data.id);
}
};
const unsubscribe = profilerService.subscribe(handleProfilerData);
return () => {
unsubscribe();
};
}, [autoRefresh, target?.type]);
// ===== 渲染 | Render =====
if (!target) {
return ;
}
if (target.type === 'extension') {
return ;
}
if (target.type === 'asset-file') {
// 预制体文件使用专用检查器 | Prefab files use dedicated inspector
if (target.data.extension?.toLowerCase() === 'prefab') {
return ;
}
// 检查插件是否提供自定义检查器 | Check if a plugin provides a custom inspector
const customInspector = inspectorRegistry.render(target, { target, projectPath });
if (customInspector) {
return customInspector;
}
// 回退到默认资产文件检查器 | Fall back to default asset file inspector
return ;
}
if (target.type === 'remote-entity') {
const entity = target.data;
const details = target.details;
return (
);
}
if (target.type === 'entity') {
return (
);
}
if (target.type === 'virtual-node') {
return (
);
}
return null;
}