UNPKG

@alauda/doom

Version:

Doctor Doom making docs.

38 lines (37 loc) 1.23 kB
import { useCallback, useSyncExternalStore } from 'react'; import { CLOUD_AUTH_TOKEN_KEY } from './constants.js'; import { getAuthInfoFromToken, setLocalStorage } from './utils.js'; export const getCloudAuth = () => { if (typeof localStorage === 'undefined') { return null; } const token = localStorage.getItem(CLOUD_AUTH_TOKEN_KEY); if (token == null) { return null; } return { token, detail: getAuthInfoFromToken(token) }; }; let authInfo = getCloudAuth(); const subscribe = (onStoreChange) => { const listener = (_ev) => { const ev = _ev; setLocalStorage(CLOUD_AUTH_TOKEN_KEY, ev.detail); authInfo = getCloudAuth(); onStoreChange(); }; document.addEventListener('cloud-auth-change', listener); return () => { document.removeEventListener('cloud-auth-change', listener); }; }; const getSnapshot = () => authInfo; export const useCloudAuth = () => { const authInfo = useSyncExternalStore(subscribe, getSnapshot); const setAuthBasic = useCallback((token) => { document.dispatchEvent(new CustomEvent('cloud-auth-change', { detail: token })); }, []); return { authInfo, setAuthBasic, }; };