'use client';
import { useState, useEffect, useCallback } from 'react';
import { PageLayout, DataTable, StatusBadge, Modal, EmptyState } from '@/components/ui';
export default function DefectsPage() {
const [defects, setDefects] = useState([] as any[]);
const [loading, setLoading] = useState(true);
const [showAdd, setShowAdd] = useState(false);
const [filter, setFilter] = useState('');
const api = useCallback(async (ep: string, opts?: RequestInit) => {
const r = await fetch(`/api/v1/defects${ep}`, opts);
return r.json();
}, []);
useEffect(() => {
setLoading(true); api(`/${filter ? `?status=${filter}` : ""}`).then(d => { setDefects(d.items || []); });
}, [api, filter]);
const handleAdd = async (data: any) => {
const r = await api('/', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) });
if (r.id) { setDefects(p => [r, ...p]); setShowAdd(false); }
};
return (
<>
setShowAdd(true)} className="btn-primary text-sm px-4 py-2 rounded">+ Зарегистрировать}>
{['', 'open', 'deferred', 'rectified', 'closed'].map(s => (
))}
{defects.length > 0 ? (
(
)},
{ key: 'discovered_during', label: 'Обнаружен' },
{ key: 'mel_reference', label: 'MEL', render: (v: string) => v || '—' },
{ key: 'status', label: 'Статус', render: (v: string) => (
)},
]} data={defects} />
) : }
setShowAdd(false)} title="Регистрация дефекта">
setShowAdd(false)} />
>
);
}
function DefectForm({ onSubmit, onCancel }: { onSubmit: (d: any) => void; onCancel: () => void }) {
const [f, setF] = useState({ aircraft_reg: '', ata_chapter: '', description: '', severity: 'minor', discovered_during: 'preflight' });
return (
setF(p => ({ ...p, aircraft_reg: e.target.value }))} />
setF(p => ({ ...p, ata_chapter: e.target.value }))} />
);
}