velxio/frontend/src/pages/ExamplesPage.tsx

72 lines
2.1 KiB
TypeScript
Raw Normal View History

/**
* Examples Page Component
*
* Displays the examples gallery
*/
import React from 'react';
import { useNavigate } from 'react-router-dom';
import { ExamplesGallery } from '../components/examples/ExamplesGallery';
import { useEditorStore } from '../store/useEditorStore';
import { useSimulatorStore } from '../store/useSimulatorStore';
import type { ExampleProject } from '../data/examples';
export const ExamplesPage: React.FC = () => {
const navigate = useNavigate();
const { setCode } = useEditorStore();
const { setComponents, setWires } = useSimulatorStore();
const handleLoadExample = (example: ExampleProject) => {
console.log('Loading example:', example.title);
// Load the code into the editor
setCode(example.code);
// Filter out Arduino component from examples (it's rendered separately in SimulatorCanvas)
const componentsWithoutArduino = example.components.filter(
(comp) => !comp.type.includes('arduino')
);
// Load components into the simulator
// Convert component type to metadataId (e.g., 'wokwi-led' -> 'led')
setComponents(
componentsWithoutArduino.map((comp) => ({
id: comp.id,
metadataId: comp.type.replace('wokwi-', ''),
x: comp.x,
y: comp.y,
properties: comp.properties,
}))
);
// Load wires (need to convert to full wire format with positions)
// For now, just set empty wires - wire positions will be calculated when components are loaded
const wiresWithPositions = example.wires.map((wire) => ({
id: wire.id,
start: {
componentId: wire.start.componentId,
pinName: wire.start.pinName,
x: 0, // Will be calculated by SimulatorCanvas
y: 0,
},
end: {
componentId: wire.end.componentId,
pinName: wire.end.pinName,
x: 0,
y: 0,
},
color: wire.color,
controlPoints: [],
isValid: true,
signalType: 'digital' as const,
}));
setWires(wiresWithPositions);
// Navigate to the editor
navigate('/');
};
return <ExamplesGallery onLoadExample={handleLoadExample} />;
};