fix(striker-ui): add cookie jar

main
Tsu-ba-me 2 years ago
parent 09029d5e7b
commit 574f5e99b5
  1. 58
      striker-ui/hooks/useCookieJar.ts
  2. 3
      striker-ui/types/CookieJar.d.ts

@ -0,0 +1,58 @@
import { useCallback, useEffect, useState } from 'react';
import useIsFirstRender from './useIsFirstRender';
const useCookieJar = (): {
cookieJar: CookieJar;
getCookie: <T>(key: string) => T | undefined;
getSessionUser: () => SessionUser | undefined;
} => {
const isFirstRender = useIsFirstRender();
const [cookieJar, setCookieJar] = useState<CookieJar>({});
const getCookie = useCallback(
<T>(key: string, prefix = 'suiapi.') =>
cookieJar[`${prefix}${key}`] as T | undefined,
[cookieJar],
);
const getSessionUser = useCallback(
() => getCookie<SessionUser>('user'),
[getCookie],
);
useEffect(() => {
if (isFirstRender) {
const lines = document.cookie.split(/\s*;\s*/);
setCookieJar(
lines.reduce<CookieJar>((previous, line) => {
const [key, value] = line.split('=', 2);
const decoded = decodeURIComponent(value);
let result: unknown;
if (decoded.startsWith('j:')) {
try {
result = JSON.parse(decoded.substring(2));
} catch (error) {
result = value;
}
} else {
result = value;
}
previous[key] = result;
return previous;
}, {}),
);
}
}, [isFirstRender]);
return { cookieJar, getCookie, getSessionUser };
};
export default useCookieJar;

@ -0,0 +1,3 @@
type CookieJar = Record<string, unknown>;
type SessionUser = { name: string; uuid: string };
Loading…
Cancel
Save