import React, { useState, useMemo, useEffect } from 'react'; import { AppConfig, LayoutSplits, GeneratedPart } from './types'; // Импорт должен быть правильным, проверь путь import { calculateParts } from './services/geometryGenerator'; import { ConfigStep } from './components/ConfigStep'; import { LayoutStep } from './components/LayoutStep'; import { PreviewStep } from './components/PreviewStep'; import { parseShareUrl } from './utils/share'; // <--- Новый импорт import { ChevronRight, ChevronLeft, Box } from 'lucide-react'; const App = () => { const [step, setStep] = useState(1); const [isLoadedFromUrl, setIsLoadedFromUrl] = useState(false); // State const [config, setConfig] = useState({ drawer: { width: 300, depth: 400, height: 80 }, wallThickness: 1.2, printerTolerance: 0.5, }); const [splits, setSplits] = useState({ x: [], y: [] }); // --- ЛОГИКА ВОССТАНОВЛЕНИЯ ИЗ ССЫЛКИ --- useEffect(() => { const sharedData = parseShareUrl(); if (sharedData) { setConfig(sharedData.config); setSplits(sharedData.splits); setStep(3); // Сразу прыгаем на превью setIsLoadedFromUrl(true); // Очищаем URL, чтобы он не мозолил глаза (опционально) window.history.replaceState({}, '', window.location.pathname); } }, []); // --------------------------------------- // Derived State: Parts const parts: GeneratedPart[] = useMemo(() => { return calculateParts(config, splits); }, [config, splits]); return (
{/* Header */}

PrintFit

Генератор органайзеров

{/* Progress Stepper */}
{[1, 2, 3].map((num) => (
{num} {num === 1 ? 'Настройки' : num === 2 ? 'Макет' : 'Экспорт'}
{num < 3 &&
} ))}
{/* Main Content */}
{step === 1 && (
)} {step === 2 && (
)} {step === 3 && (
{/* Передаем splits, чтобы кнопка Share могла их использовать */}
)}
{/* Footer Navigation */}
); }; export default App;