MCPcopy
hub / github.com/slowlydev/f1-dash / useDataEngine

Function useDataEngine

dashboard/src/hooks/useDataEngine.ts:24–178  ·  view source on GitHub ↗
({ updateState, updatePosition, updateCarData }: Props)

Source from the content-addressed store, hash-verified

22};
23
24export const useDataEngine = ({ updateState, updatePosition, updateCarData }: Props) => {
25 const buffers = {
26 ExtrapolatedClock: useStatefulBuffer(),
27 TopThree: useStatefulBuffer(),
28 TimingStats: useStatefulBuffer(),
29 TimingAppData: useStatefulBuffer(),
30 WeatherData: useStatefulBuffer(),
31 TrackStatus: useStatefulBuffer(),
32 SessionStatus: useStatefulBuffer(),
33 DriverList: useStatefulBuffer(),
34 RaceControlMessages: useStatefulBuffer(),
35 SessionInfo: useStatefulBuffer(),
36 SessionData: useStatefulBuffer(),
37 LapCount: useStatefulBuffer(),
38 TimingData: useStatefulBuffer(),
39 TeamRadio: useStatefulBuffer(),
40 ChampionshipPrediction: useStatefulBuffer(),
41 };
42
43 const carBuffer = useBuffer<CarsData>();
44 const posBuffer = useBuffer<Positions>();
45
46 const [maxDelay, setMaxDelay] = useState<number>(0);
47
48 const delayRef = useRef<number>(0);
49
50 useSettingsStore.subscribe(
51 (state) => state.delay,
52 (delay) => (delayRef.current = delay),
53 { fireImmediately: true },
54 );
55
56 const intervalRef = useRef<NodeJS.Timeout | null>(null);
57
58 const handleInitial = ({ CarDataZ: carZ, PositionZ: posZ, ...initial }: MessageInitial) => {
59 updateState(initial);
60
61 Object.keys(buffers).forEach((key) => {
62 const data = initial[key as keyof typeof initial];
63 const buffer = buffers[key as keyof typeof buffers];
64 if (data) buffer.push(data);
65 });
66
67 if (carZ) {
68 const carData = inflate<CarData>(carZ);
69 updateCarData(carData.Entries[0].Cars);
70
71 for (const entry of carData.Entries) {
72 carBuffer.pushTimed(entry.Cars, utcToLocalMs(entry.Utc));
73 }
74 }
75
76 if (posZ) {
77 const position = inflate<Position>(posZ);
78 updatePosition(position.Position[0].Entries);
79
80 for (const entry of position.Position) {
81 posBuffer.pushTimed(entry.Entries, utcToLocalMs(entry.Timestamp));

Callers 1

DashboardLayoutFunction · 0.90

Calls 2

useStatefulBufferFunction · 0.90
useBufferFunction · 0.90

Tested by

no test coverage detected