feat: add jump to button for joined groups in discover

replace with error toast
pull/105/head
moonrailgun 2 years ago
parent 480a1e3442
commit 2128c019c4

@ -1,10 +1,13 @@
import React from 'react'; import React, { useMemo } from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import { import {
postRequest, postRequest,
useAsync, useAsync,
useAsyncRequest, useAsyncRequest,
getTextColorHex, getTextColorHex,
getGlobalState,
useNavigate,
useEvent,
} from '@capital/common'; } from '@capital/common';
import { Avatar, Skeleton, Button } from '@capital/component'; import { Avatar, Skeleton, Button } from '@capital/component';
import { Translate } from '../translate'; import { Translate } from '../translate';
@ -85,6 +88,7 @@ interface DiscoverServerCardProps {
export const DiscoverServerCard: React.FC<DiscoverServerCardProps> = React.memo( export const DiscoverServerCard: React.FC<DiscoverServerCardProps> = React.memo(
(props) => { (props) => {
const navigate = useNavigate();
const { value: groupBasicInfo } = useAsync(async () => { const { value: groupBasicInfo } = useAsync(async () => {
const { data } = await postRequest('/group/getGroupBasicInfo', { const { data } = await postRequest('/group/getGroupBasicInfo', {
groupId: props.groupId, groupId: props.groupId,
@ -99,6 +103,21 @@ export const DiscoverServerCard: React.FC<DiscoverServerCardProps> = React.memo(
}); });
}, [props.groupId]); }, [props.groupId]);
const handleJumpTo = useEvent(() => {
navigate(`/main/group/${props.groupId}`);
});
const isJoined = useMemo(() => {
try {
return Object.keys(getGlobalState().group.groups).includes(
props.groupId
);
} catch (err) {
console.error(err);
return false;
}
}, [props.groupId]);
if (!groupBasicInfo) { if (!groupBasicInfo) {
return ( return (
<Root> <Root>
@ -142,14 +161,26 @@ export const DiscoverServerCard: React.FC<DiscoverServerCardProps> = React.memo(
groupBasicInfo.memberCount groupBasicInfo.memberCount
)} )}
</div> </div>
<Button
size="small" {isJoined ? (
type="primary" <Button
loading={joinLoading} size="small"
onClick={handleJoin} type="primary"
> loading={joinLoading}
{Translate.join} onClick={handleJumpTo}
</Button> >
{Translate.joined}
</Button>
) : (
<Button
size="small"
type="primary"
loading={joinLoading}
onClick={handleJoin}
>
{Translate.join}
</Button>
)}
</div> </div>
</Root> </Root>
); );

@ -17,4 +17,8 @@ export const Translate = {
'zh-CN': '加入', 'zh-CN': '加入',
'en-US': 'Join', 'en-US': 'Join',
}), }),
joined: localTrans({
'zh-CN': '已加入',
'en-US': 'Joined',
}),
}; };

Loading…
Cancel
Save