import { useState, useEffect } from 'react'; import { Entity } from '@esengine/ecs-framework'; import { EntityStoreService, MessageHub } from '@esengine/editor-core'; import { useLocale } from '../hooks/useLocale'; import '../styles/SceneHierarchy.css'; interface SceneHierarchyProps { entityStore: EntityStoreService; messageHub: MessageHub; } export function SceneHierarchy({ entityStore, messageHub }: SceneHierarchyProps) { const [entities, setEntities] = useState([]); const [selectedId, setSelectedId] = useState(null); const { t } = useLocale(); useEffect(() => { const updateEntities = () => { setEntities(entityStore.getRootEntities()); }; const handleSelection = (data: { entity: Entity | null }) => { setSelectedId(data.entity?.id ?? null); }; updateEntities(); const unsubAdd = messageHub.subscribe('entity:added', updateEntities); const unsubRemove = messageHub.subscribe('entity:removed', updateEntities); const unsubClear = messageHub.subscribe('entities:cleared', updateEntities); const unsubSelect = messageHub.subscribe('entity:selected', handleSelection); return () => { unsubAdd(); unsubRemove(); unsubClear(); unsubSelect(); }; }, [entityStore, messageHub]); const handleEntityClick = (entity: Entity) => { entityStore.selectEntity(entity); }; return (

{t('hierarchy.title')}

{entities.length === 0 ? (
{t('hierarchy.empty')}
) : (
    {entities.map(entity => (
  • handleEntityClick(entity)} > 📦 Entity {entity.id}
  • ))}
)}
); }