import { useState, useEffect } from 'react'; import * as api from './api'; import PartsTable from './components/PartsTable'; import Scanner from './components/Scanner'; import CsvImporter from './components/CsvImporter'; function App() { const [isScannerOpen, setIsScannerOpen] = useState(false); const [selectedPart, setSelectedPart] = useState(null); // Добавили стейт const [parts, setParts] = useState([]); const loadData = async () => { try{ const res = await api.getAllParts(); setParts(res.data || []); }catch(e){ console.error(e); } }; useEffect(()=>{ loadData(); }, []); const handleScan = async (id) => { try { const res = await api.getPart(id); if (res.data) { setIsScannerOpen(false); setSelectedPart(res.data); // Теперь стейт существует alert(`Деталь ${res.data.name || id} найдена!`); // res.data обычно объект, выводим поле name } } catch (err) { alert(`Деталь ${id} не найдена`); setIsScannerOpen(false); // Закрываем, чтобы не зациклиться на ошибке } }; const handleDelete = async (id) => { if(window.confirm("Удалить эту панель?")){ await api.deletePart(id); loadData(); } }; return (

VIPLIGHT MRP

{isScannerOpen && ( setIsScannerOpen(false)} /> )} {selectedPart && (

Текущий выбор:

{selectedPart.name} ({selectedPart.order_id})

)}
); } export default App;