fix(striker-ui): expose cookie jar builder

main^2
Tsu-ba-me 7 months ago
parent 88a656df6f
commit 5b12924e1f
  1. 44
      striker-ui/hooks/useCookieJar.ts

@ -4,6 +4,7 @@ import useIsFirstRender from './useIsFirstRender';
const useCookieJar = (): { const useCookieJar = (): {
cookieJar: CookieJar; cookieJar: CookieJar;
buildCookieJar: () => CookieJar;
getCookie: <T>(key: string) => T | undefined; getCookie: <T>(key: string) => T | undefined;
getSession: () => SessionCookie | undefined; getSession: () => SessionCookie | undefined;
getSessionUser: () => SessionCookieUser | undefined; getSessionUser: () => SessionCookieUser | undefined;
@ -12,25 +13,10 @@ const useCookieJar = (): {
const [cookieJar, setCookieJar] = useState<CookieJar>({}); const [cookieJar, setCookieJar] = useState<CookieJar>({});
const getCookie = useCallback( const buildCookieJar = useCallback(() => {
<T>(key: string, prefix = 'suiapi.') =>
cookieJar[`${prefix}${key}`] as T | undefined,
[cookieJar],
);
const getSession = useCallback(
() => getCookie<SessionCookie>('session'),
[getCookie],
);
const getSessionUser = useCallback(() => getSession()?.user, [getSession]);
useEffect(() => {
if (isFirstRender) {
const lines = document.cookie.split(/\s*;\s*/); const lines = document.cookie.split(/\s*;\s*/);
setCookieJar( const jar = lines.reduce<CookieJar>((previous, line) => {
lines.reduce<CookieJar>((previous, line) => {
const [key, value] = line.split('=', 2); const [key, value] = line.split('=', 2);
const decoded = decodeURIComponent(value); const decoded = decodeURIComponent(value);
@ -50,13 +36,33 @@ const useCookieJar = (): {
previous[key] = result; previous[key] = result;
return previous; return previous;
}, {}), }, {});
return jar;
}, []);
const getCookie = useCallback(
<T>(key: string, prefix = 'suiapi.') =>
cookieJar[`${prefix}${key}`] as T | undefined,
[cookieJar],
); );
const getSession = useCallback(
() => getCookie<SessionCookie>('session'),
[getCookie],
);
const getSessionUser = useCallback(() => getSession()?.user, [getSession]);
useEffect(() => {
if (isFirstRender) {
setCookieJar(buildCookieJar());
} }
}, [isFirstRender]); }, [buildCookieJar, isFirstRender]);
return { return {
cookieJar, cookieJar,
buildCookieJar,
getCookie, getCookie,
getSession, getSession,
getSessionUser, getSessionUser,

Loading…
Cancel
Save