export default function DemoDefault()

in packages-fetcher/console-fetcher-interceptor-fecs/stories/demo-default/index.tsx [36:93]


export default function DemoDefault(): JSX.Element {
  const [stateToken, setStateToken] = useState<string>(cookieGetToken());
  const [statePromisePost, setStatePromisePost] = useState<Promise<unknown> | null>(null);
  const [statePromiseGet, setStatePromiseGet] = useState<Promise<unknown> | null>(null);
  const [statePromiseOpenApi, setStatePromiseOpenApi] = useState<Promise<unknown> | null>(null);
  
  const handleClearToken = useCallback(() => {
    cookieSetToken('');
    setStateToken('');
  }, [setStateToken]);
  
  const handleRefreshTokenLocally = useCallback(() => {
    setStateToken(cookieGetToken());
  }, [setStateToken]);
  
  const handleRefreshTokenRemotely = useCallback(() => refreshToken().then(() => {
    handleRefreshTokenLocally();
  }), [handleRefreshTokenLocally]);
  
  const handleTestPost = useCallback(() => setStatePromisePost(fetcher.post('/api/console-base/product/recent/add', {
    productIds: ['oss']
  })), []);
  const handleTestGet = useCallback(() => setStatePromiseGet(fetcher.get('/api/console-base/config')), []);
  const handleTestOpenApi = useCallback(() => setStatePromiseOpenApi(fetcherNoFecs.post('/data/api.json', {
    product: 'slb',
    action: 'DescribeRegions'
  })), []);
  
  return <>
    <ThemeSwitcher />
    <PkgInfo />
    <FetcherDemoRcFecsTip />
    <H1>如何测试</H1>
    <List>
      <>如果没有 token,POST 请求会否自行 refreshToken,后会否重新请求</>
      <>如果有 token,POST 请求的 body 是否含有 <code>sec_token</code>,值看下方</>
      <>GET 请求不受影响</>
    </List>
    <P>当前 Token 值:<code>{stateToken}</code></P>
    <div>
      <Button onClick={handleClearToken}>clear token</Button>
      <Button onClick={handleRefreshTokenLocally}>get token locally</Button>
      <Button onClick={handleRefreshTokenRemotely}>refresh token remotely</Button>
    </div>
    <H2>POST 请求</H2>
    <Button onClick={handleTestPost}>测试 POST</Button>
    <PrePromise promise={statePromisePost} />
    <H2>GET 不会受影响</H2>
    <Button onClick={handleTestGet}>测试 GET</Button>
    <PrePromise promise={statePromiseGet} />
    <H2>并发刷新</H2>
    <P>同时很多个 refreshToken 仅会发送一个请求</P>
    <Button onClick={manyRefreshes}>一次性触发多次仅发一个请求</Button>
    <H2>OpenAPI 自动转接到 FECS(因为当前不是 OneConsole)</H2>
    <Button onClick={handleTestOpenApi}>OpenAPI</Button>
    <PrePromise promise={statePromiseOpenApi} />
  </>;
}