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 && (
} mt={'xs'} variant={'light'} size={'compact-xs'}>Join Group
)}
{inviteStatus === GroupStatus.JOINED && (
} mt={'xs'} variant={'light'} color={'green'} size={'compact-xs'}>In group
)}
{inviteStatus === GroupStatus.INVALID && (
} mt={'xs'} variant={'light'} color={'red'} size={'compact-xs'}>Invalid
)}
{inviteStatus === GroupStatus.BANNED && (
} mt={'xs'} variant={'light'} color={'red'} size={'compact-xs'}>Banned
)}
)}
>
);
}