From d75518517a45ee25254410efc1223c38207b6bb2 Mon Sep 17 00:00:00 2001 From: Kilian Hofmann Date: Mon, 8 Sep 2025 02:00:35 +0200 Subject: [PATCH] Refine GSX lockout --- PackageSources/js-bundle/package.json | 3 +- PackageSources/js-bundle/pnpm-lock.yaml | 21 ++++--- PackageSources/js-bundle/rollup.config.js | 7 +-- PackageSources/js-bundle/src/App.tsx | 2 + .../js-bundle/src/assets/licenses_node.md | 5 +- .../src/components/SBEntry/SBEntryF.tsx | 27 ++++----- .../src/components/SBEntry/SBEntryPax.tsx | 27 ++++----- .../src/components/freighter/Freighter.tsx | 57 ++++++++++++++++--- .../js-bundle/src/components/pax/Pax.tsx | 57 ++++++++++++++++--- .../components/stationEntry/StationEntryF.tsx | 33 +++++------ .../stationEntry/StationEntryPax.tsx | 33 +++++------ .../src/components/zfwEntry/ZFWEntryF.tsx | 24 +++----- .../src/components/zfwEntry/ZFWEntryPax.tsx | 25 +++----- 13 files changed, 183 insertions(+), 138 deletions(-) diff --git a/PackageSources/js-bundle/package.json b/PackageSources/js-bundle/package.json index a9b6f09..25ec1a3 100644 --- a/PackageSources/js-bundle/package.json +++ b/PackageSources/js-bundle/package.json @@ -1,6 +1,6 @@ { "name": "tfdidesign-md11-load-manager", - "version": "0.1.98", + "version": "0.1.116", "description": "", "main": "index.js", "type": "module", @@ -30,6 +30,7 @@ "@rollup/plugin-replace": "^6.0.2", "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^12.1.2", + "@types/node": "^24.3.1", "@types/react": "^19.1.6", "@types/react-dom": "^19.1.6", "@types/uuid": "^10.0.0", diff --git a/PackageSources/js-bundle/pnpm-lock.yaml b/PackageSources/js-bundle/pnpm-lock.yaml index 1b32d21..928ce61 100644 --- a/PackageSources/js-bundle/pnpm-lock.yaml +++ b/PackageSources/js-bundle/pnpm-lock.yaml @@ -39,6 +39,9 @@ importers: '@rollup/plugin-typescript': specifier: ^12.1.2 version: 12.1.2(rollup@4.42.0)(tslib@2.8.1)(typescript@5.8.3) + '@types/node': + specifier: ^24.3.1 + version: 24.3.1 '@types/react': specifier: ^19.1.6 version: 19.1.6 @@ -728,8 +731,8 @@ packages: '@types/minimatch@5.1.2': resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - '@types/node@22.15.30': - resolution: {integrity: sha512-6Q7lr06bEHdlfplU6YRbgG1SFBdlsfNC4/lX+SkhiTs0cpJkOElmWls8PxDFv4yY/xKb8Y6SO0OmSX4wgqTZbA==} + '@types/node@24.3.1': + resolution: {integrity: sha512-3vXmQDXy+woz+gnrTvuvNrPzekOi+Ds0ReMxw0LzBiK3a+1k0kQn9f2NWk+lgD4rJehFUmYy2gMhJ2ZI+7YP9g==} '@types/q@1.5.8': resolution: {integrity: sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==} @@ -2788,8 +2791,8 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@7.10.0: + resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} @@ -3389,12 +3392,12 @@ snapshots: '@types/fs-extra@8.1.5': dependencies: - '@types/node': 22.15.30 + '@types/node': 24.3.1 '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.15.30 + '@types/node': 24.3.1 '@types/http-cache-semantics@4.0.4': {} @@ -3404,9 +3407,9 @@ snapshots: '@types/minimatch@5.1.2': {} - '@types/node@22.15.30': + '@types/node@24.3.1': dependencies: - undici-types: 6.21.0 + undici-types: 7.10.0 '@types/q@1.5.8': {} @@ -5828,7 +5831,7 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - undici-types@6.21.0: {} + undici-types@7.10.0: {} universalify@0.1.2: {} diff --git a/PackageSources/js-bundle/rollup.config.js b/PackageSources/js-bundle/rollup.config.js index 5e2d3be..6c9dce2 100644 --- a/PackageSources/js-bundle/rollup.config.js +++ b/PackageSources/js-bundle/rollup.config.js @@ -2,7 +2,6 @@ import commonjs from '@rollup/plugin-commonjs'; import json from '@rollup/plugin-json'; import resolve from '@rollup/plugin-node-resolve'; import replace from '@rollup/plugin-replace'; -import terser from '@rollup/plugin-terser'; import typescript from '@rollup/plugin-typescript'; import autoprefixer from 'autoprefixer'; import atImport from 'postcss-import'; @@ -31,9 +30,7 @@ export default { }, plugins: [ replace({ - 'process.env.NODE_ENV': JSON.stringify(targetEnv), - 'import.meta.env': true, - 'import.meta.env.MODE': JSON.stringify(targetEnv), + 'process.env.NODE_ENV': `"${targetEnv}"`, }), versionInjector(), postcss({ @@ -50,7 +47,7 @@ export default { commonjs({ requireReturnsDefault: 'auto', }), - targetEnv === 'production' && terser(), + // targetEnv === 'production' && terser(), // Disabled due to script running afterwards copy({ targets: [{ src: ['src/assets/*', '!**/*.svg'], dest: `${panelDirBase}/assets` }], }), diff --git a/PackageSources/js-bundle/src/App.tsx b/PackageSources/js-bundle/src/App.tsx index 67c8516..8bfb721 100644 --- a/PackageSources/js-bundle/src/App.tsx +++ b/PackageSources/js-bundle/src/App.tsx @@ -23,6 +23,8 @@ const App: FC = () => { setWASMData(JSON.parse(data)); }, []); useEffect(() => { + console.log('TFDi MD-11 Load Manager version [VI]{version}[/VI]:', process.env.NODE_ENV, '[VI]{date}[/VI]'); + console.log('Initializing CommBus'); const commBus = RegisterViewListener('JS_LISTENER_COMM_BUS'); diff --git a/PackageSources/js-bundle/src/assets/licenses_node.md b/PackageSources/js-bundle/src/assets/licenses_node.md index 0329632..ad8ce99 100644 --- a/PackageSources/js-bundle/src/assets/licenses_node.md +++ b/PackageSources/js-bundle/src/assets/licenses_node.md @@ -10,6 +10,7 @@ | kessler | stuff | @rollup/plugin-replace | perpetual | material | MIT | git+https://github.com/rollup/plugins.git | 6.0.2 | 6.0.2 | ^6.0.2 | Rich Harris | | kessler | stuff | @rollup/plugin-terser | perpetual | material | MIT | git+https://github.com/rollup/plugins.git | 0.4.4 | 0.4.4 | ^0.4.4 | Peter Placzek | | kessler | stuff | @rollup/plugin-typescript | perpetual | material | MIT | git+https://github.com/rollup/plugins.git | 12.1.4 | 12.1.2 | ^12.1.2 | Oskar Segersvärd | +| kessler | stuff | @types/node | perpetual | material | MIT | https://github.com/DefinitelyTyped/DefinitelyTyped.git | 24.3.1 | 24.3.1 | ^24.3.1 | n/a | | kessler | stuff | @types/react | perpetual | material | MIT | https://github.com/DefinitelyTyped/DefinitelyTyped.git | 19.1.12 | 19.1.6 | ^19.1.6 | n/a | | kessler | stuff | @types/react-dom | perpetual | material | MIT | https://github.com/DefinitelyTyped/DefinitelyTyped.git | 19.1.9 | 19.1.6 | ^19.1.6 | n/a | | kessler | stuff | @types/uuid | perpetual | material | MIT | https://github.com/DefinitelyTyped/DefinitelyTyped.git | 10.0.0 | 10.0.0 | ^10.0.0 | n/a | @@ -27,12 +28,12 @@ | kessler | stuff | prettier | perpetual | material | MIT | git+https://github.com/prettier/prettier.git | 3.6.2 | 3.5.3 | ^3.5.3 | James Long | | kessler | stuff | prettier-plugin-organize-imports | perpetual | material | MIT | git+https://github.com/simonhaenisch/prettier-plugin-organize-imports.git | 4.2.0 | 4.1.0 | ^4.1.0 | Simon Haenisch (https://github.com/simonhaenisch) | | kessler | stuff | rimraf | perpetual | material | ISC | git://github.com/isaacs/rimraf.git | 6.0.1 | 6.0.1 | ^6.0.1 | Isaac Z. Schlueter (http://blog.izs.me/) | -| kessler | stuff | rollup | perpetual | material | MIT | git+https://github.com/rollup/rollup.git | 4.50.0 | 4.42.0 | ^4.42.0 | Rich Harris | +| kessler | stuff | rollup | perpetual | material | MIT | git+https://github.com/rollup/rollup.git | 4.50.1 | 4.42.0 | ^4.42.0 | Rich Harris | | kessler | stuff | rollup-plugin-copy | perpetual | material | MIT | git+https://github.com/vladshcherbin/rollup-plugin-copy.git | 3.5.0 | 3.5.0 | ^3.5.0 | Vlad Shcherbin | | kessler | stuff | rollup-plugin-postcss | perpetual | material | MIT | git+https://github.com/egoist/rollup-plugin-postcss.git | 4.0.2 | 4.0.2 | ^4.0.2 | EGOIST <0x142857@gmail.com> | | kessler | stuff | rollup-plugin-react-svg | perpetual | material | MIT | git+https://github.com/boopathi/react-svg-loader.git | 3.0.3 | 3.0.3 | ^3.0.3 | boopathi | | kessler | stuff | rollup-plugin-version-injector | perpetual | material | ISC | git+https://github.com/djhouseknecht/rollup-plugin-version-injector.git | 1.3.3 | 1.3.3 | ^1.3.3 | David Houseknecht | -| kessler | stuff | sass | perpetual | material | MIT | git+https://github.com/sass/dart-sass.git | 1.92.0 | 1.89.1 | ^1.89.1 | Natalie Weizenbaum nweiz@google.com https://github.com/nex3 | +| kessler | stuff | sass | perpetual | material | MIT | git+https://github.com/sass/dart-sass.git | 1.92.1 | 1.89.1 | ^1.89.1 | Natalie Weizenbaum nweiz@google.com https://github.com/nex3 | | kessler | stuff | tslib | perpetual | material | 0BSD | git+https://github.com/Microsoft/tslib.git | 2.8.1 | 2.8.1 | ^2.8.1 | Microsoft Corp. | | kessler | stuff | typed-scss-modules | perpetual | material | MIT | git+https://github.com/skovy/typed-scss-modules.git | 8.1.1 | 8.1.1 | ^8.1.1 | Spencer Miskoviak | | kessler | stuff | typescript | perpetual | material | Apache-2.0 | git+https://github.com/microsoft/TypeScript.git | 5.8.3 | 5.8.3 | 5.8.3 | Microsoft Corp. | diff --git a/PackageSources/js-bundle/src/components/SBEntry/SBEntryF.tsx b/PackageSources/js-bundle/src/components/SBEntry/SBEntryF.tsx index a1bc7df..7220ab6 100644 --- a/PackageSources/js-bundle/src/components/SBEntry/SBEntryF.tsx +++ b/PackageSources/js-bundle/src/components/SBEntry/SBEntryF.tsx @@ -1,5 +1,4 @@ import { FC, useEffect, useState } from 'react'; -import { GSX_SERVICE_CALLED, GSX_SERVICE_FINISHED } from '../../constants'; import { WASMDataF } from '../../types/WASMData'; import { LoadingState, SimBrief } from '../../types/general'; import { ImportFlightPlanKH } from '../../utils/TFDISBImport'; @@ -10,10 +9,11 @@ import ActionBar from '../actionbar/ActionBar'; interface SBEntryProps { WASMData: WASMDataF; loadingState: LoadingState; + gsxActive: boolean; setLoadingState: (newState: LoadingState) => void; } -const SBEntryF: FC = ({ WASMData, loadingState, setLoadingState }) => { +const SBEntryF: FC = ({ WASMData, loadingState, gsxActive, setLoadingState }) => { const [CGTarget, setCGTarget] = useState(WASMData.targetPayload.CGTarget); const [fuel, setFuel] = useState(Math.round(WASMData.livePayload.fuel)); const [fuelEnabled, setFuelEnabled] = useState(true); @@ -23,7 +23,7 @@ const SBEntryF: FC = ({ WASMData, loadingState, setLoadingState }) const simBrief = useSelector((state) => state.simbrief.plan); const ZFW = () => { - if (loadingState !== 'loaded' && !GSXActive()) return Math.round(WASMData.targetPayload.total); + if (loadingState !== 'loaded' && !gsxActive) return Math.round(WASMData.targetPayload.total); return Math.round(WASMData.livePayload.total); }; @@ -37,13 +37,6 @@ const SBEntryF: FC = ({ WASMData, loadingState, setLoadingState }) 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); @@ -59,7 +52,7 @@ const SBEntryF: FC = ({ WASMData, loadingState, setLoadingState }) }; useEffect(() => { - if (!simBrief || GSXActive()) return; + if (!simBrief || gsxActive) return; setSBInFlight(true); @@ -80,7 +73,7 @@ const SBEntryF: FC = ({ WASMData, loadingState, setLoadingState }) setFuel(parseFloat((SBResponse.message as SimBrief).fuel as unknown as string) ?? 0); setSBInFlight(false); - }, [simBrief, GSXActive()]); + }, [simBrief, gsxActive]); useEffect( () => @@ -110,7 +103,7 @@ const SBEntryF: FC = ({ WASMData, loadingState, setLoadingState }) className={`w-1/2 rounded-lg border border-white bg-zinc-700 px-3 py-2 text-right`} value={fuel} onChange={(e) => handleInput(e.target.value, WASMData.limits.maxFuel, setFuel)} - disabled={loadingState !== 'preview' || GSXActive()} + disabled={loadingState !== 'preview' || gsxActive} /> @@ -166,7 +159,7 @@ const SBEntryF: FC = ({ WASMData, loadingState, setLoadingState }) minCG={WASMData.limits.minCG} maxCG={WASMData.limits.maxCG} value={CGTarget} - disabled={loadingState !== 'preview' || GSXActive()} + disabled={loadingState !== 'preview' || gsxActive} increase={() => setCGTarget((prev) => { const _new = prev + 0.1; @@ -190,7 +183,7 @@ const SBEntryF: FC = ({ WASMData, loadingState, setLoadingState })
= ({ WASMData, loadingState, setLoadingState })
void; } -const SBEntryPax: FC = ({ WASMData, loadingState, setLoadingState }) => { +const SBEntryPax: FC = ({ WASMData, loadingState, gsxActive, setLoadingState }) => { const [CGTarget, setCGTarget] = useState(WASMData.targetPayload.CGTarget); const [fuel, setFuel] = useState(Math.round(WASMData.livePayload.fuel)); const [fuelEnabled, setFuelEnabled] = useState(true); @@ -23,7 +23,7 @@ const SBEntryPax: FC = ({ WASMData, loadingState, setLoadingState const simBrief = useSelector((state) => state.simbrief.plan); const ZFW = () => { - if (loadingState !== 'loaded' && !GSXActive()) return Math.round(WASMData.targetPayload.total); + if (loadingState !== 'loaded' && !gsxActive) return Math.round(WASMData.targetPayload.total); return Math.round(WASMData.livePayload.total); }; @@ -37,13 +37,6 @@ const SBEntryPax: FC = ({ WASMData, loadingState, setLoadingState 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); @@ -59,7 +52,7 @@ const SBEntryPax: FC = ({ WASMData, loadingState, setLoadingState }; useEffect(() => { - if (!simBrief || GSXActive()) return; + if (!simBrief || gsxActive) return; setSBInFlight(true); @@ -80,7 +73,7 @@ const SBEntryPax: FC = ({ WASMData, loadingState, setLoadingState setFuel(parseFloat((SBResponse.message as SimBrief).fuel as unknown as string) ?? 0); setSBInFlight(false); - }, [simBrief, GSXActive()]); + }, [simBrief, gsxActive]); useEffect( () => @@ -110,7 +103,7 @@ const SBEntryPax: FC = ({ WASMData, loadingState, setLoadingState className={`w-1/2 rounded-lg border border-white bg-zinc-700 px-3 py-2 text-right`} value={fuel} onChange={(e) => handleInput(e.target.value, WASMData.limits.maxFuel, setFuel)} - disabled={loadingState !== 'preview' || GSXActive()} + disabled={loadingState !== 'preview' || gsxActive} /> @@ -166,7 +159,7 @@ const SBEntryPax: FC = ({ WASMData, loadingState, setLoadingState minCG={WASMData.limits.minCG} maxCG={WASMData.limits.maxCG} value={CGTarget} - disabled={loadingState !== 'preview' || GSXActive()} + disabled={loadingState !== 'preview' || gsxActive} increase={() => setCGTarget((prev) => { const _new = prev + 0.1; @@ -190,7 +183,7 @@ const SBEntryPax: FC = ({ WASMData, loadingState, setLoadingState
= ({ WASMData, loadingState, setLoadingState
= ({ WASMData, username }) => { const [selectedTab, setSelectedTab] = useState(0); const [loadingState, setLoadingState] = useState('preview'); + const [boardingState, setBoardingState] = useState(1); + const [deboardingState, setDeboardingState] = useState(1); + + useEffect(() => { + console.log('GSX boarding state changed', boardingState, WASMData.GSX.boardingState); + + if (WASMData.GSX.boardingState < GSX_SERVICE_CALLED) return; + + setBoardingState(WASMData.GSX.boardingState); + setDeboardingState(1); + }, [WASMData.GSX.boardingState]); + useEffect(() => { + console.log('GSX deboarding state changed', deboardingState, WASMData.GSX.deboardingState); + + if (WASMData.GSX.deboardingState < GSX_SERVICE_CALLED) return; + + setBoardingState(1); + setDeboardingState(WASMData.GSX.deboardingState); + }, [WASMData.GSX.deboardingState]); const upper1 = (overrideState: LoadingState = loadingState) => { if (overrideState !== 'loaded') return Math.round(WASMData.targetPayload.upper1); @@ -60,9 +79,17 @@ const Freighter: FC = ({ WASMData, username }) => { }; const GSXActive = () => { + // Cases when active: + // BOARDING called, running or done + // DEBOARDING called, running or done + // Cases when not active: + // BOARDING not called, disabled + // DEBOARDING not called, disabled + // BOTH done + return ( - (WASMData.GSX.boardingState >= GSX_SERVICE_CALLED || WASMData.GSX.deboardingState >= GSX_SERVICE_CALLED) && - WASMData.GSX.deboardingState !== GSX_SERVICE_FINISHED + (boardingState >= GSX_SERVICE_CALLED || deboardingState >= GSX_SERVICE_CALLED) && + deboardingState !== GSX_SERVICE_FINISHED ); }; @@ -76,7 +103,7 @@ const Freighter: FC = ({ WASMData, username }) => { ]; } - if (WASMData.options.GSXSync && GSXActive() && WASMData.GSX.boardingState !== GSX_SERVICE_FINISHED) { + if (WASMData.options.GSXSync && GSXActive() && boardingState !== GSX_SERVICE_FINISHED) { return [ WASMData.targetPayload.ZFWCG.toFixed(1), WASMData.targetPayload.ZFWCG < WASMData.limits.minCG || WASMData.targetPayload.ZFWCG > WASMData.limits.maxCG, @@ -115,8 +142,7 @@ const Freighter: FC = ({ WASMData, username }) => { CGs={CGs()} done={ WASMData.options.GSXSync - ? WASMData.GSX.boardingState === GSX_SERVICE_FINISHED && - WASMData.GSX.deboardingState !== GSX_SERVICE_FINISHED + ? boardingState === GSX_SERVICE_FINISHED && deboardingState !== GSX_SERVICE_FINISHED : loadingState !== 'preview' } /> @@ -128,13 +154,28 @@ const Freighter: FC = ({ WASMData, username }) => { setSelectedTab={setSelectedTab} /> {username && selectedTab === 0 && ( - + )} {((username && selectedTab === 1) || (!username && selectedTab === 0)) && ( - + )} {((username && selectedTab === 2) || (!username && selectedTab === 1)) && ( - + )} {((username && selectedTab === 3) || (!username && selectedTab === 2)) && ( diff --git a/PackageSources/js-bundle/src/components/pax/Pax.tsx b/PackageSources/js-bundle/src/components/pax/Pax.tsx index 51be5d7..4708843 100644 --- a/PackageSources/js-bundle/src/components/pax/Pax.tsx +++ b/PackageSources/js-bundle/src/components/pax/Pax.tsx @@ -17,6 +17,25 @@ interface PaxProps { const Pax: FC = ({ WASMData, username }) => { const [selectedTab, setSelectedTab] = useState(0); const [loadingState, setLoadingState] = useState('preview'); + const [boardingState, setBoardingState] = useState(1); + const [deboardingState, setDeboardingState] = useState(1); + + useEffect(() => { + console.log('GSX boarding state changed', boardingState, WASMData.GSX.boardingState); + + if (WASMData.GSX.boardingState < GSX_SERVICE_CALLED) return; + + setBoardingState(WASMData.GSX.boardingState); + setDeboardingState(1); + }, [WASMData.GSX.boardingState]); + useEffect(() => { + console.log('GSX deboarding state changed', deboardingState, WASMData.GSX.deboardingState); + + if (WASMData.GSX.deboardingState < GSX_SERVICE_CALLED) return; + + setBoardingState(1); + setDeboardingState(WASMData.GSX.deboardingState); + }, [WASMData.GSX.deboardingState]); const upper1 = (overrideState: LoadingState = loadingState) => { if (overrideState !== 'loaded') return WASMData.targetPayload.business1; @@ -60,9 +79,17 @@ const Pax: FC = ({ WASMData, username }) => { }; const GSXActive = () => { + // Cases when active: + // BOARDING called, running or done + // DEBOARDING called, running or done + // Cases when not active: + // BOARDING not called, disabled + // DEBOARDING not called, disabled + // BOTH done + return ( - (WASMData.GSX.boardingState >= GSX_SERVICE_CALLED || WASMData.GSX.deboardingState >= GSX_SERVICE_CALLED) && - WASMData.GSX.deboardingState !== GSX_SERVICE_FINISHED + (boardingState >= GSX_SERVICE_CALLED || deboardingState >= GSX_SERVICE_CALLED) && + deboardingState !== GSX_SERVICE_FINISHED ); }; @@ -76,7 +103,7 @@ const Pax: FC = ({ WASMData, username }) => { ]; } - if (WASMData.options.GSXSync && GSXActive() && WASMData.GSX.boardingState !== GSX_SERVICE_FINISHED) { + if (WASMData.options.GSXSync && GSXActive() && boardingState !== GSX_SERVICE_FINISHED) { return [ WASMData.targetPayload.ZFWCG.toFixed(1), WASMData.targetPayload.ZFWCG < WASMData.limits.minCG || WASMData.targetPayload.ZFWCG > WASMData.limits.maxCG, @@ -119,8 +146,7 @@ const Pax: FC = ({ WASMData, username }) => { CGs={CGs()} done={ WASMData.options.GSXSync - ? WASMData.GSX.boardingState === GSX_SERVICE_FINISHED && - WASMData.GSX.deboardingState !== GSX_SERVICE_FINISHED + ? boardingState === GSX_SERVICE_FINISHED && deboardingState !== GSX_SERVICE_FINISHED : loadingState !== 'preview' } /> @@ -132,13 +158,28 @@ const Pax: FC = ({ WASMData, username }) => { setSelectedTab={setSelectedTab} /> {username && selectedTab === 0 && ( - + )} {((username && selectedTab === 1) || (!username && selectedTab === 0)) && ( - + )} {((username && selectedTab === 2) || (!username && selectedTab === 1)) && ( - + )} {((username && selectedTab === 3) || (!username && selectedTab === 2)) && ( diff --git a/PackageSources/js-bundle/src/components/stationEntry/StationEntryF.tsx b/PackageSources/js-bundle/src/components/stationEntry/StationEntryF.tsx index edcda11..45adee1 100644 --- a/PackageSources/js-bundle/src/components/stationEntry/StationEntryF.tsx +++ b/PackageSources/js-bundle/src/components/stationEntry/StationEntryF.tsx @@ -1,5 +1,4 @@ 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'; @@ -8,10 +7,11 @@ import ActionBar from '../actionbar/ActionBar'; interface StationEntryProps { WASMData: WASMDataF; loadingState: LoadingState; + gsxActive: boolean; setLoadingState: (newState: LoadingState) => void; } -const StationEntryF: FC = ({ WASMData, loadingState, setLoadingState }) => { +const StationEntryF: FC = ({ WASMData, loadingState, gsxActive, setLoadingState }) => { const [upper1, setUpper1] = useState(WASMData.targetPayload.upper1); const [upper2, setUpper2] = useState(WASMData.targetPayload.upper2); const [upper3, setUpper3] = useState(WASMData.targetPayload.upper3); @@ -22,7 +22,7 @@ const StationEntryF: FC = ({ WASMData, loadingState, setLoadi const [fuelEnabled, setFuelEnabled] = useState(true); const ZFW = () => { - if (loadingState !== 'loaded' && !GSXActive()) return Math.round(WASMData.targetPayload.total); + if (loadingState !== 'loaded' && !gsxActive) return Math.round(WASMData.targetPayload.total); return Math.round(WASMData.livePayload.total); }; @@ -36,13 +36,6 @@ const StationEntryF: FC = ({ WASMData, loadingState, setLoadi 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); @@ -86,7 +79,7 @@ const StationEntryF: FC = ({ WASMData, loadingState, setLoadi className={`w-1/2 rounded-lg border border-white bg-zinc-700 px-3 py-2 text-right`} value={fuel} onChange={(e) => handleInput(e.target.value, WASMData.limits.maxFuel, setFuel)} - disabled={loadingState !== 'preview' || GSXActive()} + disabled={loadingState !== 'preview' || gsxActive} /> @@ -118,7 +111,7 @@ const StationEntryF: FC = ({ WASMData, loadingState, setLoadi className="w-1/2 rounded-lg border border-white bg-zinc-700 px-3 py-2 text-right focus:border-blue-600 focus:ring-blue-600" value={upper1} onChange={(e) => handleInput(e.target.value, WASMData.limits.upper1, setUpper1)} - disabled={loadingState !== 'preview' || GSXActive()} + disabled={loadingState !== 'preview' || gsxActive} />
@@ -131,7 +124,7 @@ const StationEntryF: FC = ({ WASMData, loadingState, setLoadi className="w-1/2 rounded-lg border border-white bg-zinc-700 px-3 py-2 text-right focus:border-blue-600 focus:ring-blue-600" value={upper2} onChange={(e) => handleInput(e.target.value, WASMData.limits.upper2, setUpper2)} - disabled={loadingState !== 'preview' || GSXActive()} + disabled={loadingState !== 'preview' || gsxActive} />
@@ -144,7 +137,7 @@ const StationEntryF: FC = ({ WASMData, loadingState, setLoadi className="w-1/2 rounded-lg border border-white bg-zinc-700 px-3 py-2 text-right focus:border-blue-600 focus:ring-blue-600" value={upper3} onChange={(e) => handleInput(e.target.value, WASMData.limits.upper3, setUpper3)} - disabled={loadingState !== 'preview' || GSXActive()} + disabled={loadingState !== 'preview' || gsxActive} />
@@ -157,7 +150,7 @@ const StationEntryF: FC = ({ WASMData, loadingState, setLoadi className="w-1/2 rounded-lg border border-white bg-zinc-700 px-3 py-2 text-right focus:border-blue-600 focus:ring-blue-600" value={upper4} onChange={(e) => handleInput(e.target.value, WASMData.limits.upper4, setUpper4)} - disabled={loadingState !== 'preview' || GSXActive()} + disabled={loadingState !== 'preview' || gsxActive} />
@@ -170,7 +163,7 @@ const StationEntryF: FC = ({ WASMData, loadingState, setLoadi className="w-1/2 rounded-lg border border-white bg-zinc-700 px-3 py-2 text-right focus:border-blue-600 focus:ring-blue-600" value={lowerForward} onChange={(e) => handleInput(e.target.value, WASMData.limits.lowerForward, setLowerForward)} - disabled={loadingState !== 'preview' || GSXActive()} + disabled={loadingState !== 'preview' || gsxActive} /> @@ -183,7 +176,7 @@ const StationEntryF: FC = ({ WASMData, loadingState, setLoadi className="w-1/2 rounded-lg border border-white bg-zinc-700 px-3 py-2 text-right focus:border-blue-600 focus:ring-blue-600" value={lowerRear} onChange={(e) => handleInput(e.target.value, WASMData.limits.lowerRear, setLowerRear)} - disabled={loadingState !== 'preview' || GSXActive()} + disabled={loadingState !== 'preview' || gsxActive} /> @@ -193,7 +186,7 @@ const StationEntryF: FC = ({ WASMData, loadingState, setLoadi
= ({ WASMData, loadingState, setLoadi
void; } -const StationEntryPax: FC = ({ WASMData, loadingState, setLoadingState }) => { +const StationEntryPax: FC = ({ WASMData, loadingState, gsxActive, setLoadingState }) => { const [business1, setBusiness1] = useState(WASMData.targetPayload.business1); const [business2, setBusiness2] = useState(WASMData.targetPayload.business2); const [economy1, setEconomy1] = useState(WASMData.targetPayload.economy1); @@ -22,7 +22,7 @@ const StationEntryPax: FC = ({ WASMData, loadingState, setLoa const [fuelEnabled, setFuelEnabled] = useState(true); const ZFW = () => { - if (loadingState !== 'loaded' && !GSXActive()) return Math.round(WASMData.targetPayload.total); + if (loadingState !== 'loaded' && !gsxActive) return Math.round(WASMData.targetPayload.total); return Math.round(WASMData.livePayload.total); }; @@ -36,13 +36,6 @@ const StationEntryPax: FC = ({ WASMData, loadingState, setLoa 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); @@ -86,7 +79,7 @@ const StationEntryPax: FC = ({ WASMData, loadingState, setLoa className={`w-1/2 rounded-lg border border-white bg-zinc-700 px-3 py-2 text-right`} value={fuel} onChange={(e) => handleInput(e.target.value, WASMData.limits.maxFuel, setFuel)} - disabled={loadingState !== 'preview' || GSXActive()} + disabled={loadingState !== 'preview' || gsxActive} /> @@ -118,7 +111,7 @@ const StationEntryPax: FC = ({ WASMData, loadingState, setLoa className="w-1/2 rounded-lg border border-white bg-zinc-700 px-3 py-2 text-right focus:border-blue-600 focus:ring-blue-600" value={business1} onChange={(e) => handleInput(e.target.value, WASMData.limits.business1, setBusiness1)} - disabled={loadingState !== 'preview' || GSXActive()} + disabled={loadingState !== 'preview' || gsxActive} />
@@ -131,7 +124,7 @@ const StationEntryPax: FC = ({ WASMData, loadingState, setLoa className="w-1/2 rounded-lg border border-white bg-zinc-700 px-3 py-2 text-right focus:border-blue-600 focus:ring-blue-600" value={business2} onChange={(e) => handleInput(e.target.value, WASMData.limits.business2, setBusiness2)} - disabled={loadingState !== 'preview' || GSXActive()} + disabled={loadingState !== 'preview' || gsxActive} />
@@ -144,7 +137,7 @@ const StationEntryPax: FC = ({ WASMData, loadingState, setLoa className="w-1/2 rounded-lg border border-white bg-zinc-700 px-3 py-2 text-right focus:border-blue-600 focus:ring-blue-600" value={economy1} onChange={(e) => handleInput(e.target.value, WASMData.limits.economy1, setEconomy1)} - disabled={loadingState !== 'preview' || GSXActive()} + disabled={loadingState !== 'preview' || gsxActive} /> @@ -157,7 +150,7 @@ const StationEntryPax: FC = ({ WASMData, loadingState, setLoa className="w-1/2 rounded-lg border border-white bg-zinc-700 px-3 py-2 text-right focus:border-blue-600 focus:ring-blue-600" value={economy2} onChange={(e) => handleInput(e.target.value, WASMData.limits.economy2, setEconomy2)} - disabled={loadingState !== 'preview' || GSXActive()} + disabled={loadingState !== 'preview' || gsxActive} /> @@ -170,7 +163,7 @@ const StationEntryPax: FC = ({ WASMData, loadingState, setLoa className="w-1/2 rounded-lg border border-white bg-zinc-700 px-3 py-2 text-right focus:border-blue-600 focus:ring-blue-600" value={forwardCargo} onChange={(e) => handleInput(e.target.value, WASMData.limits.forwardCargo, setForwardCargo)} - disabled={loadingState !== 'preview' || GSXActive()} + disabled={loadingState !== 'preview' || gsxActive} /> @@ -183,7 +176,7 @@ const StationEntryPax: FC = ({ WASMData, loadingState, setLoa className="w-1/2 rounded-lg border border-white bg-zinc-700 px-3 py-2 text-right focus:border-blue-600 focus:ring-blue-600" value={rearCargo} onChange={(e) => handleInput(e.target.value, WASMData.limits.rearCargo, setRearCargo)} - disabled={loadingState !== 'preview' || GSXActive()} + disabled={loadingState !== 'preview' || gsxActive} /> @@ -193,7 +186,7 @@ const StationEntryPax: FC = ({ WASMData, loadingState, setLoa
= ({ WASMData, loadingState, setLoa
void; } -const ZFWEntryF: FC = ({ WASMData, loadingState, setLoadingState }) => { +const ZFWEntryF: FC = ({ WASMData, loadingState, gsxActive, setLoadingState }) => { const [CGTarget, setCGTarget] = useState(WASMData.targetPayload.CGTarget); const [fuel, setFuel] = useState(Math.round(WASMData.livePayload.fuel)); const [ZFWTarget, setZFWTarget] = useState(Math.round(WASMData.targetPayload.total)); const [fuelEnabled, setFuelEnabled] = useState(true); const ZFW = () => { - if (loadingState !== 'loaded' && !GSXActive()) return ZFWTarget; + if (loadingState !== 'loaded' && !gsxActive) return ZFWTarget; return Math.round(WASMData.livePayload.total); }; @@ -33,13 +34,6 @@ const ZFWEntryF: FC = ({ WASMData, loadingState, setLoadingState 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); @@ -109,7 +103,7 @@ const ZFWEntryF: FC = ({ WASMData, loadingState, setLoadingState className={`w-1/2 rounded-lg border border-white bg-zinc-700 px-3 py-2 text-right`} value={fuel} onChange={(e) => handleInput(e.target.value, WASMData.limits.maxFuel, setFuel)} - disabled={loadingState !== 'preview' || GSXActive()} + disabled={loadingState !== 'preview' || gsxActive} /> @@ -142,7 +136,7 @@ const ZFWEntryF: FC = ({ WASMData, loadingState, setLoadingState value={ZFWTarget} onChange={(e) => handleInputZFW(e.target.value)} onBlur={(e) => handleBlur(e.target.value)} - disabled={loadingState !== 'preview' || GSXActive()} + disabled={loadingState !== 'preview' || gsxActive} />
@@ -155,7 +149,7 @@ const ZFWEntryF: FC = ({ WASMData, loadingState, setLoadingState minCG={WASMData.limits.minCG} maxCG={WASMData.limits.maxCG} value={CGTarget} - disabled={loadingState !== 'preview' || GSXActive()} + disabled={loadingState !== 'preview' || gsxActive} increase={() => setCGTarget((prev) => { const _new = prev + 0.1; @@ -179,7 +173,7 @@ const ZFWEntryF: FC = ({ WASMData, loadingState, setLoadingState
= ({ WASMData, loadingState, setLoadingState
void; } -const ZFWEntryPax: FC = ({ WASMData, loadingState, setLoadingState }) => { +const ZFWEntryPax: FC = ({ WASMData, loadingState, gsxActive, setLoadingState }) => { const [CGTarget, setCGTarget] = useState(WASMData.targetPayload.CGTarget); const [fuel, setFuel] = useState(Math.round(WASMData.livePayload.fuel)); const [ZFWTarget, setZFWTarget] = useState(Math.round(WASMData.targetPayload.total)); const [fuelEnabled, setFuelEnabled] = useState(true); const ZFW = () => { - if (loadingState !== 'loaded' && !GSXActive()) return ZFWTarget; + if (loadingState !== 'loaded' && !gsxActive) return ZFWTarget; return Math.round(WASMData.livePayload.total); }; @@ -33,13 +33,6 @@ const ZFWEntryPax: FC = ({ WASMData, loadingState, setLoadingStat 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); @@ -109,7 +102,7 @@ const ZFWEntryPax: FC = ({ WASMData, loadingState, setLoadingStat className={`w-1/2 rounded-lg border border-white bg-zinc-700 px-3 py-2 text-right`} value={fuel} onChange={(e) => handleInput(e.target.value, WASMData.limits.maxFuel, setFuel)} - disabled={loadingState !== 'preview' || GSXActive()} + disabled={loadingState !== 'preview' || gsxActive} /> @@ -142,7 +135,7 @@ const ZFWEntryPax: FC = ({ WASMData, loadingState, setLoadingStat value={ZFWTarget} onChange={(e) => handleInputZFW(e.target.value)} onBlur={(e) => handleBlur(e.target.value)} - disabled={loadingState !== 'preview' || GSXActive()} + disabled={loadingState !== 'preview' || gsxActive} />
@@ -155,7 +148,7 @@ const ZFWEntryPax: FC = ({ WASMData, loadingState, setLoadingStat minCG={WASMData.limits.minCG} maxCG={WASMData.limits.maxCG} value={CGTarget} - disabled={loadingState !== 'preview' || GSXActive()} + disabled={loadingState !== 'preview' || gsxActive} increase={() => setCGTarget((prev) => { const _new = prev + 0.1; @@ -179,7 +172,7 @@ const ZFWEntryPax: FC = ({ WASMData, loadingState, setLoadingStat
= ({ WASMData, loadingState, setLoadingStat