Skip to content

Commit 7a87c10

Browse files
committed
move health to datacontext
1 parent 804bf93 commit 7a87c10

File tree

2 files changed

+31
-40
lines changed

2 files changed

+31
-40
lines changed

frontend/src/app/page.tsx

Lines changed: 17 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import Toast from '@/components/Toast';
1212
import SettingsCard from '@/components/SettingsCard';
1313
import ConfirmationModal from '@/components/ConfirmationModal';
1414
import { Preset, LoadoutItemV1 } from '@/lib/types';
15-
import { getPlayerLoadout, applyLoadout, getPresets, savePresets, getHealth } from '@/services/api';
15+
import { getPlayerLoadout, applyLoadout, getPresets, savePresets } from '@/services/api';
1616
import { getSettings, saveSettings } from '@/services/settings';
1717
import { LocalClientError } from '@/lib/errors';
1818
import { useData } from '@/context/DataContext';
@@ -26,7 +26,7 @@ const defaultPreset: Preset = {
2626
};
2727

2828
export default function Home() {
29-
const { agents, loading: dataContextLoading } = useData();
29+
const { agents, loading: dataContextLoading, isClientHealthy } = useData();
3030
const [currentLoadout, setCurrentLoadout] = useState<Record<string, LoadoutItemV1>>(defaultPreset.loadout);
3131
const [presets, setPresets] = useState<Preset[]>([]);
3232
const [selectedPreset, setSelectedPreset] = useState<Preset | null>(defaultPreset);
@@ -49,6 +49,7 @@ export default function Home() {
4949

5050
const loadData = useCallback(async () => {
5151
try {
52+
setIsLoading(true);
5253
const [playerLoadout, fetchedPresets, settings] = await Promise.all([
5354
getPlayerLoadout(),
5455
getPresets(),
@@ -66,7 +67,6 @@ export default function Home() {
6667
setIsLoading(false);
6768
} catch (error) {
6869
if (error instanceof LocalClientError) {
69-
setLoadingMessage("Waiting for VALORANT to start...");
7070
setIsLoading(true);
7171
} else {
7272
console.error(error);
@@ -78,25 +78,14 @@ export default function Home() {
7878
}, []);
7979

8080
useEffect(() => {
81-
loadData();
82-
}, [loadData]);
83-
84-
useEffect(() => {
85-
const healthCheck = async () => {
86-
const isHealthy = await getHealth();
87-
if (isHealthy && isLoading) {
88-
loadData();
89-
} else if (!isHealthy && !isLoading) {
90-
setIsLoading(true);
91-
setLoadingMessage("Waiting for VALORANT to start...");
92-
}
93-
};
94-
95-
healthCheck();
96-
const intervalId = setInterval(healthCheck, 3000);
97-
98-
return () => clearInterval(intervalId);
99-
}, [isLoading, loadData]);
81+
if (isClientHealthy) {
82+
setLoadingMessage('Loading application data...');
83+
loadData();
84+
} else {
85+
setIsLoading(true);
86+
setLoadingMessage("Waiting for VALORANT to start...");
87+
}
88+
}, [isClientHealthy, loadData]);
10089

10190
useEffect(() => {
10291
if (autoSelectAgent !== undefined) {
@@ -255,14 +244,12 @@ export default function Home() {
255244
if (error instanceof LocalClientError) {
256245
setErrorMessage(error.message);
257246
setShowErrorModal(true);
258-
} else {
259-
console.error(error);
260247
}
248+
} finally {
249+
setIsEditing(false);
250+
setEditingPreset(null);
251+
setOriginalPreset(null);
261252
}
262-
263-
setIsEditing(false);
264-
setEditingPreset(null);
265-
setOriginalPreset(null);
266253
};
267254

268255
const handlePresetDelete = (presetId: string) => {
@@ -417,7 +404,7 @@ export default function Home() {
417404
</div>
418405
</div>
419406
</main>
420-
{isEditing && <Footer onSave={handleSave} onCancel={handleCancel} onSaveAsNew={() => handleOpenPresetNameModal(false)} onApply={handleApply} showSaveButton={originalPreset?.uuid !== 'default-preset'} />}
407+
{isEditing && <Footer onSave={handleSave} onCancel={handleCancel} onSaveAsNew={() => handleOpenPresetNameModal(false)} onApply={handleApply} showSaveButton={originalPreset?.uuid !== 'default-preset'} />}
421408
<PresetNameModal show={showPresetNameModal} onClose={handleClosePresetNameModal} onSave={handleSavePresetName} initialName={renamingPreset?.name} />
422409
<ErrorModal show={showErrorModal} onClose={handleCloseErrorModal} message={errorMessage} />
423410
<Toast show={showToast} onClose={() => setShowToast(false)} message={toastMessage} />
@@ -430,4 +417,4 @@ export default function Home() {
430417
/>
431418
</>
432419
);
433-
}
420+
}

frontend/src/context/DataContext.tsx

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ interface DataContextType {
1414
ownedChromaIDs: string[];
1515
ownedBuddyIDs: string[];
1616
loading: boolean;
17+
isClientHealthy: boolean;
1718
}
1819

1920
const DataContext = createContext<DataContextType | undefined>(undefined);
@@ -27,6 +28,7 @@ export function DataProvider({ children }: { children: ReactNode }) {
2728
const [ownedChromaIDs, setOwnedChromaIDs] = useState<string[]>([]);
2829
const [ownedBuddyIDs, setOwnedBuddyIDs] = useState<string[]>([]);
2930
const [loading, setLoading] = useState(true);
31+
const [isClientHealthy, setIsClientHealthy] = useState(false);
3032

3133
const loadData = useCallback(async () => {
3234
try {
@@ -64,27 +66,29 @@ export function DataProvider({ children }: { children: ReactNode }) {
6466
}
6567
}, []);
6668

67-
useEffect(() => {
68-
loadData();
69-
}, [loadData]);
70-
7169
useEffect(() => {
7270
const healthCheck = async () => {
7371
const isHealthy = await getHealth();
74-
if (isHealthy && loading) {
75-
loadData();
76-
} else if (!isHealthy && loading) {
77-
setLoading(true);
72+
setIsClientHealthy(isHealthy);
73+
if (isHealthy) {
74+
if (loading) {
75+
loadData();
76+
}
77+
} else {
78+
if (!loading) {
79+
setLoading(true);
80+
}
7881
}
7982
};
8083

84+
healthCheck();
8185
const intervalId = setInterval(healthCheck, 3000);
8286

8387
return () => clearInterval(intervalId);
8488
}, [loading, loadData]);
8589

8690
return (
87-
<DataContext.Provider value={{ agents, weapons, ownedBuddies, contentTiers, ownedLevelIDs, ownedChromaIDs, ownedBuddyIDs, loading }}>
91+
<DataContext.Provider value={{ agents, weapons, ownedBuddies, contentTiers, ownedLevelIDs, ownedChromaIDs, ownedBuddyIDs, loading, isClientHealthy }}>
8892
{children}
8993
</DataContext.Provider>
9094
);
@@ -96,4 +100,4 @@ export function useData() {
96100
throw new Error('useData must be used within a DataProvider');
97101
}
98102
return context;
99-
}
103+
}

0 commit comments

Comments
 (0)