const IfrTable = () => { const {go, setPlans, toast, user} = useApp(); const [q, setQ] = useState(''); const [rules, setRules] = useState('all'); const [expanded, setExpanded] = useState(null); const filtered = IFR_ROUTES.filter(r => { if (rules!=='all' && r.rules!==rules) return false; if (!q) return true; const s=q.toUpperCase(); return r.from.includes(s)||r.to.includes(s)||r.route.toUpperCase().includes(s); }); const RULES_SHORT = {Z:'Z',Y:'Y',I:'IFR',V:'VFR'}; const RULES_COLOR = {Z:'#C15F3C',Y:'#8B3A62',I:'#4A7C59',V:'#3E6FA8'}; const createFromRoute = async (r) => { const plan = { name: r.from + ' - ' + r.to, message_type: 'FPL', arcid: 'ECOBE', flight_rules: r.rules || 'I', flight_type: 'S', aircraft_count: 1, aircraft_type: 'C172', wake: 'L', com_equipment: 'SGY', ssr: 'C', adep: r.from, ades: r.to, flight_date: '', eobt: '08:00', speed: 'N0110', level: r.fl || 'F100', route: r.route || 'DCT', eet_total: r.dur || '01:30', altn: 'LEVC', altn2: 'LEMT', reg: 'ECOBE', opr: 'EUROPEANFLYER', rmk: 'VUELO DE ESCUELA', endurance: '05:00', persons_on_board: 2, pic_name: user?.name || '', colors: 'BLANCA', emergency_radio: 'E', life_jacket_type: 'F', }; try { const res = await api.createPlan(plan); if (res && res.id) plan.id = res.id; } catch(e) { plan.id = 'pl_' + Math.random().toString(36).slice(2,8); } setPlans(p => [plan, ...p]); toast('Plan creado desde ruta'); // Small delay so React processes setPlans before PlanEditor mounts setTimeout(() => go('plan-editor', {id: plan.id}), 50); }; return
{filtered.length} de {IFR_ROUTES.length} rutas · elige origen y destino y rellenamos el resto.