packages/cookie/stories/demo-default/index.tsx (91 lines of code) (raw):
import React, {
useState,
useCallback
} from 'react';
import {
H1,
Button,
PreJson,
Table
} from '@alicloud/demo-rc-elements';
import {
getAllCookies,
getCookie,
setCookie,
deleteCookie, CookieSetOptions
} from '../../src';
interface ITestItem {
name: string;
value: string;
valueGet: string | undefined;
sameSite: CookieSetOptions['sameSite'];
secure: CookieSetOptions['secure'];
}
const TEST_COOKIE = 'boshit_cookie';
const ALL_COOKIES = getAllCookies();
const ONE_COOKIE = getCookie(TEST_COOKIE);
const SAME_SITES = [undefined, 'Lax', 'Strict', 'None'] as [undefined, CookieSetOptions['sameSite'], CookieSetOptions['sameSite'], CookieSetOptions['sameSite']];
const SECURES = [undefined, true, false];
const TIME = Date.now();
const TEST_ITEMS: ITestItem[] = SAME_SITES.reduce((result: ITestItem[], sameSite) => {
SECURES.forEach(secure => {
const name = `SameSite_${sameSite}__Secure_${secure}`;
const value = `${sameSite}_${secure}_${TIME}`;
setCookie(name, value, {
sameSite,
secure
});
result.push({
name,
value,
valueGet: getCookie(name),
sameSite,
secure
});
});
return result;
}, []);
export default function DemoDefault(): JSX.Element {
const [stateCookies, setStateCookies] = useState(ALL_COOKIES);
const [stateOneCookie, setStateOneCookie] = useState(ONE_COOKIE);
const handleRefreshAll = useCallback(() => setStateCookies(getAllCookies()), [setStateCookies]);
const handleRefreshOne = useCallback(() => setStateOneCookie(getCookie(TEST_COOKIE)), [setStateOneCookie]);
const handleSetCookie = useCallback(() => {
setCookie(TEST_COOKIE, new Date().toISOString());
handleRefreshAll();
handleRefreshOne();
}, [handleRefreshAll, handleRefreshOne]);
const handleDeleteCookie = useCallback(() => {
deleteCookie(TEST_COOKIE);
handleRefreshAll();
handleRefreshOne();
}, [handleRefreshAll, handleRefreshOne]);
return <>
<H1>全部 Cookie</H1>
<Button onClick={handleDeleteCookie}>{`deleteCookie('${TEST_COOKIE}')`}</Button>
<Button onClick={handleSetCookie}>{`setCookie('${TEST_COOKIE}') → getCookie('${TEST_COOKIE}') → ${stateOneCookie}`}</Button>
<PreJson o={stateCookies} />
<Table<ITestItem> {...{
dataSource: TEST_ITEMS,
columns: [{
title: 'Cookie',
dataIndex: 'name'
}, {
title: 'SameSite',
dataIndex: 'sameSite'
}, {
title: 'Secure',
dataIndex: 'secure'
}, {
title: '设置值',
dataIndex: 'value'
}, {
title: '获取值',
dataIndex: 'valueGet'
}, {
title: '结果',
renderCell: o => (o.value === o.valueGet ? <span>✅</span> : <span>❌</span>)
}]
}} />
</>;
}