import { Box, Button, Flex, FormControl, FormLabel, Grid, Input, Modal, ModalBody, ModalCloseButton, ModalContent, ModalHeader, ModalOverlay, useToast, } from "@chakra-ui/react"; import { t, Trans } from "@lingui/macro"; import UserAvatar from "components/common/UserAvatar"; import { getToastOptions } from "lib/getToastOptions"; import { sendData } from "lib/postData"; import { useRouter } from "next/router"; import { GetTeamData } from "prisma/queries/getTeam"; import { Fragment, useEffect, useState } from "react"; import { FiCheck, FiTrash, FiUsers } from "react-icons/fi"; import { mutate } from "swr"; interface Props { team: NonNullable; } const TeamManagementModal: React.FC = ({ team }) => { const router = useRouter(); const toast = useToast(); const [isOpen, setIsOpen] = useState(false); const [sending, setSending] = useState(false); const [copied, setCopied] = useState(false); useEffect(() => { if (!copied) return; const timer = setTimeout(() => { setCopied(false); }, 750); return () => clearTimeout(timer); }, [copied]); const resetCode = async () => { setSending(true); const success = await sendData("POST", "/api/teams/code"); setSending(false); if (!success) return; mutate(`/api/teams/${team.id}`); toast(getToastOptions(t`Invite code reseted`, "success")); }; const deleteTeam = async () => { if (!window.confirm(t`Delete the team? DELETING IS PERMANENT.`)) return; setSending(true); const success = await sendData("DELETE", "/api/teams"); setSending(false); if (!success) return; toast(getToastOptions(t`Team deleted`, "success")); router.push("/t"); }; const kickTeamMember = async (id: number, name: string) => { if (!window.confirm(`Kick ${name}?`)) return; setSending(true); const success = await sendData("POST", "/api/teams/kick", { id }); setSending(false); if (!success) return; mutate(`/api/teams/${team.id}`); toast(getToastOptions(t`User kicked`, "success")); setIsOpen(false); }; const makeOwner = async (id: number, name: string) => { if ( !window.confirm( `Transfer the ownership to ${name}? YOU WILL LOSE ACCESS TO FEATURES RELATING TO MANAGING THE TEAM.` ) ) return; setSending(true); const success = await sendData("POST", "/api/teams/owner", { id }); setSending(false); if (!success) return; mutate(`/api/teams/${team.id}`); toast(getToastOptions(t`Switched owners`, "success")); setIsOpen(false); }; return ( <> {isOpen && ( setIsOpen(false)} size="xl"> Managing team Invite link {team.roster.map((user) => ( {user.username}#{user.discriminator} ))} )} ); }; export default TeamManagementModal;