mirror of https://github.com/msgbyte/tailchat
refactor: 根据登录状态修改加入按钮的变更
parent
c731cd0690
commit
56cf913675
@ -0,0 +1,25 @@
|
|||||||
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||||
|
import type { FetchQueryOptions } from 'react-query';
|
||||||
|
import { queryClient } from './';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构建缓存请求
|
||||||
|
* TODO: 这里的类型真的不好写, 先用any来过滤内部的, 只保证外部使用ok
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const queryData = buildCachedRequest('key')((arg1, arg2) => {
|
||||||
|
* return request.post(...)
|
||||||
|
* })
|
||||||
|
*/
|
||||||
|
export function buildCachedRequest<
|
||||||
|
R extends any,
|
||||||
|
F extends (...args: any) => Promise<R>
|
||||||
|
>(prefix: string, fn: F, options?: FetchQueryOptions): F {
|
||||||
|
return ((...args: any) => {
|
||||||
|
return queryClient.fetchQuery(
|
||||||
|
[prefix, JSON.stringify(args)],
|
||||||
|
() => fn(...args),
|
||||||
|
options
|
||||||
|
);
|
||||||
|
}) as any;
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
import { getUserJWT } from '@/utils/jwt-helper';
|
||||||
|
import { Button } from 'antd';
|
||||||
|
import React, { useCallback } from 'react';
|
||||||
|
import { useHistory } from 'react-router';
|
||||||
|
import { checkTokenValid, t, useAsync } from 'tailchat-shared';
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
onJoinGroup: () => void;
|
||||||
|
}
|
||||||
|
export const JoinBtn: React.FC<Props> = React.memo((props) => {
|
||||||
|
const history = useHistory();
|
||||||
|
const { loading, value: isTokenValid } = useAsync(async () => {
|
||||||
|
const token = await getUserJWT();
|
||||||
|
const isTokenValid = await checkTokenValid(token);
|
||||||
|
return isTokenValid;
|
||||||
|
});
|
||||||
|
|
||||||
|
const handleRegister = useCallback(() => {
|
||||||
|
history.push(
|
||||||
|
`/entry/register?redirect=${encodeURIComponent(location.pathname)}`
|
||||||
|
);
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
if (loading) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return isTokenValid ? (
|
||||||
|
<Button
|
||||||
|
block={true}
|
||||||
|
type="primary"
|
||||||
|
size="large"
|
||||||
|
onClick={props.onJoinGroup}
|
||||||
|
>
|
||||||
|
{t('加入群组')}
|
||||||
|
</Button>
|
||||||
|
) : (
|
||||||
|
<Button block={true} type="primary" size="large" onClick={handleRegister}>
|
||||||
|
{t('立即注册')}
|
||||||
|
</Button>
|
||||||
|
);
|
||||||
|
});
|
||||||
|
JoinBtn.displayName = 'JoinBtn';
|
Loading…
Reference in New Issue