import { createRef, useMemo, useState, type Dispatch, type FC, type SetStateAction } from 'react'; import Parser from '../parser/parser'; import { Loader } from './Loader'; interface ProcedureSelectProps { parser: Parser; selectedAirport: Airport | undefined; selectedRunway: Runway | undefined; selectedTerminal: Terminal | undefined; setSelectedAirport: Dispatch>; setSelectedRunway: Dispatch>; setSelectedTerminal: Dispatch>; handleSelection: (transitions: string[], terminal: Terminal) => void; } export const ProcedureSelect: FC = ({ parser, selectedAirport, selectedRunway, selectedTerminal, setSelectedAirport, setSelectedRunway, setSelectedTerminal, handleSelection, }) => { const inputRef = createRef(); const [error, setError] = useState(); const [inFlight, setInFlight] = useState(); const runways = useMemo( () => parser.runways.filter(({ AirportID }) => AirportID === selectedAirport?.ID), [selectedAirport] ); const terminals = useMemo(() => { const _terminals = parser.terminals.filter( ({ AirportID, RwyID }) => AirportID === selectedAirport?.ID && (!RwyID || RwyID === selectedRunway?.ID) ); return { star: _terminals.filter((terminal) => terminal.Proc === 1), sid: _terminals.filter((terminal) => terminal.Proc === 2), iap: _terminals.filter((terminal) => terminal.Proc === 3), }; }, [selectedAirport, selectedRunway]); return (
{selectedAirport && ( )}
{!selectedAirport && (

Enter Airport ICAO

{ if (e.target.value.length <= 4) e.target.value = e.target.value.toUpperCase(); else e.target.value = e.target.value.slice(0, 4); }} > {error && {error}}
)} {selectedAirport && !selectedRunway && (

Select Runway

{runways.map((runway) => ( ))}
)} {selectedAirport && selectedRunway && !selectedTerminal && (

Select Procedure

Arrivals
{terminals.star.map((terminal) => ( ))}
Departures
{terminals.sid.map((terminal) => ( ))}
Approaches
{terminals.iap.map((terminal) => ( ))}
)}
); };