Name:
diff --git a/packages/editor-app/src/components/MenuBar.tsx b/packages/editor-app/src/components/MenuBar.tsx
index 1d924728..8db32e32 100644
--- a/packages/editor-app/src/components/MenuBar.tsx
+++ b/packages/editor-app/src/components/MenuBar.tsx
@@ -4,7 +4,7 @@ import type { MenuItem as PluginMenuItem } from '@esengine/editor-core';
import '../styles/MenuBar.css';
interface MenuItem {
- label: string;
+ label?: string;
shortcut?: string;
disabled?: boolean;
separator?: boolean;
@@ -215,12 +215,12 @@ export function MenuBar({
{ label: t('viewport'), disabled: true },
{ separator: true },
...pluginMenuItems.map(item => ({
- label: item.label,
+ label: item.label || '',
shortcut: item.shortcut,
disabled: item.disabled,
onClick: item.onClick
})),
- ...(pluginMenuItems.length > 0 ? [{ separator: true }] : []),
+ ...(pluginMenuItems.length > 0 ? [{ separator: true } as MenuItem] : []),
{ label: t('pluginManager'), onClick: onOpenPluginManager },
{ separator: true },
{ label: t('devtools'), onClick: onToggleDevtools }
@@ -255,7 +255,7 @@ export function MenuBar({
};
const handleMenuItemClick = (item: MenuItem) => {
- if (!item.disabled && !item.separator && item.onClick) {
+ if (!item.disabled && !item.separator && item.onClick && item.label) {
item.onClick();
setOpenMenu(null);
}
@@ -271,7 +271,7 @@ export function MenuBar({
>
{t(menuKey)}
- {openMenu === menuKey && (
+ {openMenu === menuKey && menus[menuKey] && (
{menus[menuKey].map((item, index) => {
if (item.separator) {
@@ -284,7 +284,7 @@ export function MenuBar({
onClick={() => handleMenuItemClick(item)}
disabled={item.disabled}
>
- {item.label}
+ {item.label || ''}
{item.shortcut && {item.shortcut}}
);
diff --git a/packages/editor-app/src/components/PortManager.tsx b/packages/editor-app/src/components/PortManager.tsx
index 954d3823..9ba964ca 100644
--- a/packages/editor-app/src/components/PortManager.tsx
+++ b/packages/editor-app/src/components/PortManager.tsx
@@ -9,7 +9,7 @@ interface PortManagerProps {
export function PortManager({ onClose }: PortManagerProps) {
const [isServerRunning, setIsServerRunning] = useState(false);
- const [serverPort, setServerPort] = useState(8080);
+ const [serverPort] = useState(8080);
const [isChecking, setIsChecking] = useState(false);
const [isStopping, setIsStopping] = useState(false);
diff --git a/packages/editor-app/src/components/ProfilerPanel.tsx b/packages/editor-app/src/components/ProfilerPanel.tsx
index ebc950e0..9fbd3983 100644
--- a/packages/editor-app/src/components/ProfilerPanel.tsx
+++ b/packages/editor-app/src/components/ProfilerPanel.tsx
@@ -1,6 +1,6 @@
import { useState, useEffect, useRef } from 'react';
import { Core } from '@esengine/ecs-framework';
-import { Activity, BarChart3, Clock, Cpu, TrendingUp, RefreshCw, Pause, Play } from 'lucide-react';
+import { Activity, BarChart3, Clock, Cpu, RefreshCw, Pause, Play } from 'lucide-react';
import '../styles/ProfilerPanel.css';
interface SystemPerformanceData {
diff --git a/packages/editor-app/src/components/ProfilerWindow.tsx b/packages/editor-app/src/components/ProfilerWindow.tsx
index 17d20e80..22e03084 100644
--- a/packages/editor-app/src/components/ProfilerWindow.tsx
+++ b/packages/editor-app/src/components/ProfilerWindow.tsx
@@ -28,7 +28,7 @@ export function ProfilerWindow({ onClose }: ProfilerWindowProps) {
const [systems, setSystems] = useState([]);
const [totalFrameTime, setTotalFrameTime] = useState(0);
const [isPaused, setIsPaused] = useState(false);
- const [sortBy, setSortBy] = useState<'time' | 'average' | 'name'>('time');
+ const [sortBy] = useState<'time' | 'average' | 'name'>('time');
const [dataSource, setDataSource] = useState('local');
const [viewMode, setViewMode] = useState<'tree' | 'table'>('table');
const [searchQuery, setSearchQuery] = useState('');
diff --git a/packages/editor-app/src/components/SceneHierarchy.tsx b/packages/editor-app/src/components/SceneHierarchy.tsx
index 1a1ca138..206b5d24 100644
--- a/packages/editor-app/src/components/SceneHierarchy.tsx
+++ b/packages/editor-app/src/components/SceneHierarchy.tsx
@@ -108,12 +108,12 @@ export function SceneHierarchy({ entityStore, messageHub }: SceneHierarchyProps)
};
// Filter entities based on search query
- const filterEntities = (entityList: T[]): T[] => {
+ const filterRemoteEntities = (entityList: RemoteEntity[]): RemoteEntity[] => {
if (!searchQuery.trim()) return entityList;
const query = searchQuery.toLowerCase();
return entityList.filter(entity => {
- const name = 'name' in entity ? entity.name : `Entity ${entity.id}`;
+ const name = entity.name;
const id = entity.id.toString();
// Search by name or ID
@@ -121,8 +121,8 @@ export function SceneHierarchy({ entityStore, messageHub }: SceneHierarchyProps)
return true;
}
- // Search by component types (for remote entities)
- if ('componentTypes' in entity && Array.isArray(entity.componentTypes)) {
+ // Search by component types
+ if (Array.isArray(entity.componentTypes)) {
return entity.componentTypes.some(type =>
type.toLowerCase().includes(query)
);
@@ -132,8 +132,20 @@ export function SceneHierarchy({ entityStore, messageHub }: SceneHierarchyProps)
});
};
+ const filterLocalEntities = (entityList: Entity[]): Entity[] => {
+ if (!searchQuery.trim()) return entityList;
+
+ const query = searchQuery.toLowerCase();
+ return entityList.filter(entity => {
+ const id = entity.id.toString();
+ return id.includes(query);
+ });
+ };
+
// Determine which entities to display
- const displayEntities = filterEntities(isRemoteConnected ? remoteEntities : entities);
+ const displayEntities = isRemoteConnected
+ ? filterRemoteEntities(remoteEntities)
+ : filterLocalEntities(entities);
const showRemoteIndicator = isRemoteConnected && remoteEntities.length > 0;
return (
@@ -169,7 +181,7 @@ export function SceneHierarchy({ entityStore, messageHub }: SceneHierarchyProps)
) : isRemoteConnected ? (
- {displayEntities.map(entity => (
+ {(displayEntities as RemoteEntity[]).map(entity => (