import { useRosettaBreakpoints } from "@/app/hooks/useRosettaBreakpoints"; import { useGroupInviteStatus } from "@/app/providers/DialogProvider/useGroupInviteStatus"; import { useGroups } from "@/app/providers/DialogProvider/useGroups"; import { GroupStatus } from "@/app/providers/ProtocolProvider/protocol/packets/packet.group.invite.info"; import { Avatar, Button, Flex, Paper, Skeleton, Text } from "@mantine/core"; import { IconBan, IconCheck, IconLink, IconPlus, IconX } from "@tabler/icons-react"; import { useEffect, useState } from "react"; import { useNavigate } from "react-router-dom"; export interface GroupInviteMessageProps { groupInviteCode: string; } export function GroupInviteMessage(props: GroupInviteMessageProps) { const {parseGroupString, prepareForRoute, joinGroup, loading} = useGroups(); const [groupInfo, setGroupInfo] = useState({ groupId: '', title: '', description: '', encryptKey: '' }); const {inviteStatus} = useGroupInviteStatus(groupInfo.groupId); const colorStatus = ( inviteStatus === GroupStatus.NOT_JOINED ? 'blue' : inviteStatus === GroupStatus.JOINED ? 'green' : 'red' ); const navigate = useNavigate(); const {lg} = useRosettaBreakpoints(); useEffect(() => { initGroupInfo(); }, [props.groupInviteCode]); const initGroupInfo = async () => { const info = await parseGroupString(props.groupInviteCode); if(!info){ setGroupInfo({ groupId: 'Invalid', title: 'Invalid', description: 'Invalid', encryptKey: '' }); return; } setGroupInfo(info); } const onClickButton = async () => { if(inviteStatus === GroupStatus.NOT_JOINED){ await joinGroup(props.groupInviteCode); return; } if(inviteStatus === GroupStatus.JOINED){ navigate(`/main/chat/${prepareForRoute(groupInfo.groupId)}`); return; } } return ( <> {groupInfo.groupId === '' && ( )} {groupInfo.groupId != '' && ( {lg && ( )} {groupInfo.title} {inviteStatus === GroupStatus.NOT_JOINED && "Invite to join in this group."} {inviteStatus === GroupStatus.JOINED && "You are already a member of this group."} {inviteStatus === GroupStatus.INVALID && "This group invite is invalid."} {inviteStatus === GroupStatus.BANNED && "You are banned in this group."} {inviteStatus === GroupStatus.NOT_JOINED && ( )} {inviteStatus === GroupStatus.JOINED && ( )} {inviteStatus === GroupStatus.INVALID && ( )} {inviteStatus === GroupStatus.BANNED && ( )} )} ); }