56 lines
2.2 KiB
JavaScript
56 lines
2.2 KiB
JavaScript
// Rôle : charge le contenu éditorial et les données publiques nécessaires à l'application.
|
|
import { useEffect, useState } from "react";
|
|
import { INITIAL_DIABLO4_STATE, INITIAL_MHWILDS_STATE, loadDiablo4Data, loadMhwildsData } from "../features/games/loaders.js";
|
|
|
|
export function useAppData(route) {
|
|
const [siteContent, setSiteContent] = useState(null);
|
|
const [siteContentError, setSiteContentError] = useState("");
|
|
const [games, setGames] = useState([]);
|
|
const [gamesError, setGamesError] = useState("");
|
|
const [mhwilds, setMhwilds] = useState(INITIAL_MHWILDS_STATE);
|
|
const [diablo4, setDiablo4] = useState(INITIAL_DIABLO4_STATE);
|
|
|
|
useEffect(() => {
|
|
Promise.all([
|
|
fetch("/data/site.json").then((response) => {
|
|
if (!response.ok) throw new Error("Impossible de charger le contenu du site.");
|
|
return response.json();
|
|
}).catch((error) => {
|
|
setSiteContentError(error.message);
|
|
return null;
|
|
}),
|
|
fetch("/data/games.json").then((response) => response.ok ? response.json() : { games: [] }).catch((error) => {
|
|
setGamesError(error.message);
|
|
return { games: [] };
|
|
})
|
|
]).then(([content, gamesPayload]) => {
|
|
if (content) setSiteContent(content);
|
|
setGames(Array.isArray(gamesPayload.games) ? gamesPayload.games : []);
|
|
});
|
|
}, []);
|
|
|
|
useEffect(() => {
|
|
if (!route.startsWith("/games/mhwilds") || mhwilds.loaded || mhwilds.loading) return;
|
|
setMhwilds((state) => ({ ...state, loading: true, error: "" }));
|
|
loadMhwildsData()
|
|
.then(setMhwilds)
|
|
.catch((error) => setMhwilds({ ...INITIAL_MHWILDS_STATE, loaded: true, error: error.message }));
|
|
}, [route, mhwilds.loaded, mhwilds.loading]);
|
|
|
|
useEffect(() => {
|
|
if (!route.startsWith("/games/diablo4") || diablo4.loaded || diablo4.loading) return;
|
|
setDiablo4((state) => ({ ...state, loading: true, error: "" }));
|
|
loadDiablo4Data()
|
|
.then(setDiablo4)
|
|
.catch((error) => setDiablo4({ ...INITIAL_DIABLO4_STATE, loaded: true, error: error.message }));
|
|
}, [route, diablo4.loaded, diablo4.loading]);
|
|
|
|
return {
|
|
siteContent,
|
|
siteContentError,
|
|
games,
|
|
gamesError,
|
|
mhwilds,
|
|
diablo4
|
|
};
|
|
}
|