spb/company-atlas
Public
Python 66.3%
TypeScript 22.7%
JavaScript 8.6%
HTML 1.4%
CSS 0.7%
1'use client';2/** Admin token (`X-CA-Admin-Token`) kept in localStorage; entered once on /admin. Never rendered back into the page. */3import { useEffect, useState } from 'react';45export const ADMIN_KEY = 'ca-admin-token';6const EVENT = 'ca-admin-change';78export function readAdminToken(): string | null {9 if (typeof window === 'undefined') return null;10 try {11 return window.localStorage.getItem(ADMIN_KEY) || null;12 } catch {13 return null;14 }15}16export function setAdminToken(t: string | null) {17 try {18 if (t) window.localStorage.setItem(ADMIN_KEY, t);19 else window.localStorage.removeItem(ADMIN_KEY);20 } catch {21 /* ignore */22 }23 window.dispatchEvent(new CustomEvent(EVENT));24}25/** `undefined` while unknown (before mount), `null` when absent. */26export function useAdminToken(): string | null | undefined {27 const [t, setT] = useState<string | null | undefined>(undefined);28 useEffect(() => {29 const read = () => setT(readAdminToken());30 read();31 window.addEventListener(EVENT, read);32 return () => window.removeEventListener(EVENT, read);33 }, []);34 return t;35}3637export { ADMIN_MODULES } from './admin-modules';38