Moved GSX state machine into WASM

This commit is contained in:
2025-09-09 14:53:41 +02:00
parent dee5447bed
commit 04e5ec4251
9 changed files with 218 additions and 154 deletions
@@ -1,7 +1,6 @@
import { FC, useEffect, useMemo, useState } from 'react';
import { GSX_SERVICE_CALLED, GSX_SERVICE_FINISHED } from '../../constants';
import { FC, useEffect, useState } from 'react';
import { LoadingState } from '../../types/general';
import { WASMDataPax } from '../../types/WASMData';
import { GSXLoadingState, WASMDataPax } from '../../types/WASMData';
import OptionsPax from '../options/OptionsPax';
import Profile from '../profile/Profile';
import SBEntryPax from '../SBEntry/SBEntryPax';
@@ -17,21 +16,6 @@ interface PaxProps {
const Pax: FC<PaxProps> = ({ WASMData, username }) => {
const [selectedTab, setSelectedTab] = useState(0);
const [loadingState, setLoadingState] = useState<LoadingState>('preview');
const [boardingState, setBoardingState] = useState(1);
const [deboardingState, setDeboardingState] = useState(1);
useEffect(() => {
if (WASMData.GSX.boardingState > 1 && WASMData.GSX.boardingState < GSX_SERVICE_CALLED) return;
setBoardingState(WASMData.GSX.boardingState);
setDeboardingState(1);
}, [WASMData.GSX.boardingState]);
useEffect(() => {
if (WASMData.GSX.deboardingState > 1 && 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;
@@ -54,43 +38,36 @@ const Pax: FC<PaxProps> = ({ WASMData, username }) => {
return WASMData.livePayload.economy2;
};
const lower1 = () => {
if (loadingState !== 'loaded' && !GSXActive) return Math.round(WASMData.targetPayload.forwardCargo);
if (loadingState !== 'loaded' && !GSXActive()) return Math.round(WASMData.targetPayload.forwardCargo);
return Math.round(WASMData.livePayload.forwardCargo);
};
const lower2 = () => {
if (loadingState !== 'loaded' && !GSXActive) return Math.round(WASMData.targetPayload.rearCargo);
if (loadingState !== 'loaded' && !GSXActive()) return Math.round(WASMData.targetPayload.rearCargo);
return Math.round(WASMData.livePayload.rearCargo);
};
const OEW = () => {
if (loadingState !== 'loaded' && !GSXActive) return Math.round(WASMData.targetPayload.empty);
if (loadingState !== 'loaded' && !GSXActive()) return Math.round(WASMData.targetPayload.empty);
return Math.round(WASMData.livePayload.empty);
};
const crew = () => {
if (loadingState !== 'loaded' && !GSXActive) return Math.round(WASMData.targetPayload.crew);
if (loadingState !== 'loaded' && !GSXActive()) return Math.round(WASMData.targetPayload.crew);
return Math.round(WASMData.livePayload.crew);
};
const GSXActive = useMemo(() => {
// 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
const GSXActive = () => {
return (
(boardingState >= GSX_SERVICE_CALLED || deboardingState >= GSX_SERVICE_CALLED) &&
deboardingState !== GSX_SERVICE_FINISHED
WASMData.GSX.couatlStarted &&
WASMData.GSX.loadingState !== GSXLoadingState.IDLE &&
WASMData.GSX.loadingState !== GSXLoadingState.DEBOARDED
);
}, [boardingState, deboardingState]);
};
const CGs = (): [string, boolean, string, boolean] => {
if (loadingState !== 'loaded' && !GSXActive) {
if (loadingState !== 'loaded' && !GSXActive()) {
return [
WASMData.targetPayload.ZFWCG.toFixed(1),
WASMData.targetPayload.ZFWCG < WASMData.limits.minCG || WASMData.targetPayload.ZFWCG > WASMData.limits.maxCG,
@@ -99,7 +76,7 @@ const Pax: FC<PaxProps> = ({ WASMData, username }) => {
];
}
if (WASMData.options.GSXSync && GSXActive && boardingState !== GSX_SERVICE_FINISHED) {
if (WASMData.options.GSXSync && GSXActive() && WASMData.GSX.loadingState === GSXLoadingState.BOARDING) {
return [
WASMData.targetPayload.ZFWCG.toFixed(1),
WASMData.targetPayload.ZFWCG < WASMData.limits.minCG || WASMData.targetPayload.ZFWCG > WASMData.limits.maxCG,
@@ -125,25 +102,23 @@ const Pax: FC<PaxProps> = ({ WASMData, username }) => {
<Profile
type="PAX"
isER={WASMData.userData.isER}
upper1={`${upper1(GSXActive ? 'loaded' : loadingState)}`}
upper1max={loadingState === 'loaded' || GSXActive ? `${upper1('preview')}` : `${WASMData.limits.business1}`}
upper2={`${upper2(GSXActive ? 'loaded' : loadingState)}`}
upper2max={loadingState === 'loaded' || GSXActive ? `${upper2('preview')}` : `${WASMData.limits.business2}`}
upper3={`${upper3(GSXActive ? 'loaded' : loadingState)}`}
upper3max={loadingState === 'loaded' || GSXActive ? `${upper3('preview')}` : `${WASMData.limits.economy1}`}
upper4={`${upper4(GSXActive ? 'loaded' : loadingState)}`}
upper4max={loadingState === 'loaded' || GSXActive ? `${upper4('preview')}` : `${WASMData.limits.economy2}`}
upper1={`${upper1(GSXActive() ? 'loaded' : loadingState)}`}
upper1max={loadingState === 'loaded' || GSXActive() ? `${upper1('preview')}` : `${WASMData.limits.business1}`}
upper2={`${upper2(GSXActive() ? 'loaded' : loadingState)}`}
upper2max={loadingState === 'loaded' || GSXActive() ? `${upper2('preview')}` : `${WASMData.limits.business2}`}
upper3={`${upper3(GSXActive() ? 'loaded' : loadingState)}`}
upper3max={loadingState === 'loaded' || GSXActive() ? `${upper3('preview')}` : `${WASMData.limits.economy1}`}
upper4={`${upper4(GSXActive() ? 'loaded' : loadingState)}`}
upper4max={loadingState === 'loaded' || GSXActive() ? `${upper4('preview')}` : `${WASMData.limits.economy2}`}
lower1={`${lower1()}`}
lower2={`${lower2()}`}
OEW={`${OEW()}`}
crew={`${crew()}`}
unit={WASMData.userData.isImperial ? 'LBS' : 'KG'}
inPreview={loadingState !== 'loaded' && !GSXActive}
inPreview={loadingState !== 'loaded' && !GSXActive()}
CGs={CGs()}
done={
WASMData.options.GSXSync
? boardingState === GSX_SERVICE_FINISHED && deboardingState !== GSX_SERVICE_FINISHED
: loadingState !== 'preview'
WASMData.options.GSXSync ? WASMData.GSX.loadingState === GSXLoadingState.BOARDED : loadingState !== 'preview'
}
/>
<Tabbar
@@ -158,7 +133,7 @@ const Pax: FC<PaxProps> = ({ WASMData, username }) => {
WASMData={WASMData}
loadingState={loadingState}
setLoadingState={setLoadingState}
gsxActive={GSXActive}
gsxActive={GSXActive()}
/>
)}
{((username && selectedTab === 1) || (!username && selectedTab === 0)) && (
@@ -166,7 +141,7 @@ const Pax: FC<PaxProps> = ({ WASMData, username }) => {
WASMData={WASMData}
loadingState={loadingState}
setLoadingState={setLoadingState}
gsxActive={GSXActive}
gsxActive={GSXActive()}
/>
)}
{((username && selectedTab === 2) || (!username && selectedTab === 1)) && (
@@ -174,11 +149,11 @@ const Pax: FC<PaxProps> = ({ WASMData, username }) => {
WASMData={WASMData}
loadingState={loadingState}
setLoadingState={setLoadingState}
gsxActive={GSXActive}
gsxActive={GSXActive()}
/>
)}
{((username && selectedTab === 3) || (!username && selectedTab === 2)) && (
<OptionsPax WASMData={WASMData} loadingState={loadingState} gsxActive={GSXActive} />
<OptionsPax WASMData={WASMData} loadingState={loadingState} gsxActive={GSXActive()} />
)}
</>
);