Een dating-app op basis van brieven, niet van gezichten!

main

Deze repository wordt als momentopname gepubliceerd: een clone bevat de volledige inhoud, maar geen commitgeschiedenis.

1.1 kB Ruw bestand
import { useSyncExternalStore } from "react";

/*
 * Sessietoken van de ingelogde gebruiker, bewaard in localStorage (blijft ook in
 * een Capacitor-webview staan tussen app-starts). Componenten volgen het via
 * useSession(); de API-client leest het via getToken() en wist het bij een 401.
 */
const KEY = "liefdesbrieven.token";
const listeners = new Set();
let token = null;
try {
  token = localStorage.getItem(KEY);
} catch {
  /* geen storage (privémodus, SSR): dan alleen in het geheugen */
}

const notify = () => listeners.forEach((l) => l());

export const getToken = () => token;

export function setToken(next) {
  token = next ?? null;
  try {
    if (token) localStorage.setItem(KEY, token);
    else localStorage.removeItem(KEY);
  } catch {
    /* zie boven */
  }
  notify();
}

export const clearToken = () => setToken(null);

const subscribe = (l) => {
  listeners.add(l);
  return () => listeners.delete(l);
};

/* Hook: het huidige token (null = uitgelogd); rendert opnieuw bij in-/uitloggen */
export const useSession = () => useSyncExternalStore(subscribe, getToken, () => null);