diff --git a/resources/js/guest/hooks/useEventData.ts b/resources/js/guest/hooks/useEventData.ts index 86806ae..e8a1a58 100644 --- a/resources/js/guest/hooks/useEventData.ts +++ b/resources/js/guest/hooks/useEventData.ts @@ -19,11 +19,13 @@ interface UseEventDataResult { } const NO_TOKEN_ERROR_MESSAGE = 'Es wurde kein Einladungscode übergeben.'; +const eventCache = new Map(); export function useEventData(): UseEventDataResult { const { token } = useParams<{ token: string }>(); - const [event, setEvent] = useState(null); - const [status, setStatus] = useState(token ? 'loading' : 'error'); + const cachedEvent = token ? eventCache.get(token) ?? null : null; + const [event, setEvent] = useState(cachedEvent); + const [status, setStatus] = useState(token ? (cachedEvent ? 'ready' : 'loading') : 'error'); const [errorMessage, setErrorMessage] = useState(token ? null : NO_TOKEN_ERROR_MESSAGE); const [errorCode, setErrorCode] = useState(token ? null : 'invalid_token'); @@ -39,7 +41,10 @@ export function useEventData(): UseEventDataResult { let cancelled = false; const loadEvent = async () => { - setStatus('loading'); + const cached = eventCache.get(token) ?? null; + if (!cached) { + setStatus('loading'); + } setErrorCode(null); setErrorMessage(null); @@ -49,6 +54,7 @@ export function useEventData(): UseEventDataResult { return; } + eventCache.set(token, eventData); setEvent(eventData); setStatus('ready'); } catch (err) { @@ -56,6 +62,11 @@ export function useEventData(): UseEventDataResult { return; } + if (cached) { + setEvent(cached); + setStatus('ready'); + return; + } setEvent(null); setStatus('error');