import { FC, useEffect, useState } from 'react'; import { GSX_SERVICE_CALLED, GSX_SERVICE_FINISHED } from '../../constants'; import { LoadingState } from '../../types/general'; import { WASMDataF } from '../../types/WASMData'; import { CoherentCallStationEntryF, inRangeOf, loadAircraft, unloadAircraft } from '../../utils/utils'; import ActionBar from '../actionbar/ActionBar'; interface StationEntryProps { WASMData: WASMDataF; loadingState: LoadingState; setLoadingState: (newState: LoadingState) => void; } const StationEntryF: FC = ({ WASMData, loadingState, setLoadingState }) => { const [upper1, setUpper1] = useState(WASMData.targetPayload.upper1); const [upper2, setUpper2] = useState(WASMData.targetPayload.upper2); const [upper3, setUpper3] = useState(WASMData.targetPayload.upper3); const [upper4, setUpper4] = useState(WASMData.targetPayload.upper4); const [lowerForward, setLowerForward] = useState(WASMData.targetPayload.lowerForward); const [lowerRear, setLowerRear] = useState(WASMData.targetPayload.lowerRear); const [fuel, setFuel] = useState(Math.round(WASMData.livePayload.fuel)); const [fuelEnabled, setFuelEnabled] = useState(true); const ZFW = () => { if (loadingState !== 'loaded' && !GSXActive()) return Math.round(WASMData.targetPayload.total); return Math.round(WASMData.livePayload.total); }; const ZFWValid = () => { return ZFW() <= WASMData.limits.maxZFW; }; const GW = () => { return fuel + ZFW(); }; const GWValid = () => { return GW() <= WASMData.limits.maxTOW; }; const GSXActive = () => { return ( (WASMData.GSX.boardingState >= GSX_SERVICE_CALLED || WASMData.GSX.deboardingState >= GSX_SERVICE_CALLED) && WASMData.GSX.deboardingState !== GSX_SERVICE_FINISHED ); }; const handleInput = (input: string, maxValue: number, setter: (value: number) => void) => { if (!input) { setter(0); return; } const converted = parseInt(input); if (converted) { if (converted < 0) setter(0); else if (converted > maxValue) setter(maxValue); else setter(converted); } }; const updateData = () => { CoherentCallStationEntryF(upper1, upper2, upper3, upper4, lowerForward, lowerRear); }; useEffect(() => updateData(), [upper1, upper2, upper3, upper4, lowerForward, lowerRear]); useEffect( () => setFuel((prev) => { if (prev > WASMData.limits.maxFuel) return WASMData.limits.maxFuel; return prev; }), [WASMData.userData.isER] ); useEffect(() => { setFuelEnabled((prev) => (!prev ? inRangeOf(Math.round(WASMData.livePayload.fuel), fuel) : prev)); }, [WASMData.livePayload.fuel]); return ( <>
handleInput(e.target.value, WASMData.limits.maxFuel, setFuel)} disabled={loadingState !== 'preview' || GSXActive()} />
handleInput(e.target.value, WASMData.limits.upper1, setUpper1)} disabled={loadingState !== 'preview' || GSXActive()} />
handleInput(e.target.value, WASMData.limits.upper2, setUpper2)} disabled={loadingState !== 'preview' || GSXActive()} />
handleInput(e.target.value, WASMData.limits.upper3, setUpper3)} disabled={loadingState !== 'preview' || GSXActive()} />
handleInput(e.target.value, WASMData.limits.upper4, setUpper4)} disabled={loadingState !== 'preview' || GSXActive()} />
handleInput(e.target.value, WASMData.limits.lowerForward, setLowerForward)} disabled={loadingState !== 'preview' || GSXActive()} />
handleInput(e.target.value, WASMData.limits.lowerRear, setLowerRear)} disabled={loadingState !== 'preview' || GSXActive()} />
{ setLoadingState('loaded'); loadAircraft(); }} unload={() => { setLoadingState('preview'); unloadAircraft(); }} /> ); }; export default StationEntryF;