task(A2): tool dispatcher behind flag

This commit is contained in:
Agent Zero
2026-08-26 21:14:46 +02:00
parent 5d7fa23825
commit 4a7a8f912f
5 changed files with 396 additions and 0 deletions
+20
View File
@@ -12,6 +12,8 @@ import { SpatialIndex } from '../canvas/SpatialIndex';
import { LayerManager } from '../canvas/LayerManager';
import { GroupManager } from '../tools/modification/GroupTool';
import { formatCoordinate } from '../utils/format';
import { InteractionDispatcher } from '../interaction/dispatcher';
import { logger } from '../utils/logger';
const CanvasArea: React.FC<CanvasAreaProps> = ({
cursorPos, viewMode, onViewChange, gridEnabled, orthoEnabled, snapEnabled,
@@ -26,6 +28,7 @@ const CanvasArea: React.FC<CanvasAreaProps> = ({
const zoomPanRef = useRef<ZoomPanController | null>(null);
const renderEngineRef = useRef<RenderEngine | null>(null);
const interactionRef = useRef<InteractionEngine | null>(null);
const dispatcherRef = useRef<InteractionDispatcher | null>(null);
const spatialIndexRef = useRef<SpatialIndex | null>(null);
const layerManagerRef = useRef<LayerManager | null>(null);
const selectionEngineRef = useRef<SelectionEngine | null>(null);
@@ -44,6 +47,21 @@ const CanvasArea: React.FC<CanvasAreaProps> = ({
canvas, zoomPan, renderEngine, snapEngine, selectionEngine, spatialIndex, layerManager,
);
// ── Task A2: V2-Tool-Dispatcher hinter Feature-Flag ──
// Flag VITE_TOOL_DISPATCHER=v2 (in .env / Shell): aktiviert den neuen
// InteractionDispatcher parallel zur Legacy InteractionEngine.
// Tools mit handlers werden dann über die Plugin-API v2 geroutet.
if (import.meta.env.VITE_TOOL_DISPATCHER === 'v2') {
dispatcherRef.current = new InteractionDispatcher(canvas, {
zoomPan,
setStatus: (msg) => {
/* StatusBar-Bridge folgt in A3 */
},
setPreview: (el) => renderEngine.setPreviewElement(el as CADElement | null),
});
logger.info('InteractionDispatcher v2 aktiviert (VITE_TOOL_DISPATCHER=v2)');
}
zoomPanRef.current = zoomPan;
renderEngineRef.current = renderEngine;
interactionRef.current = interaction;
@@ -66,6 +84,8 @@ const CanvasArea: React.FC<CanvasAreaProps> = ({
return () => {
interaction.detach();
dispatcherRef.current?.destroy();
dispatcherRef.current = null;
zoomPanRef.current = null;
renderEngineRef.current = null;
interactionRef.current = null;