import { Box, Button, FormControl, FormErrorMessage, FormHelperText, FormLabel, Input, InputGroup, InputLeftAddon, Modal, ModalBody, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalOverlay, useToast, } from "@chakra-ui/react"; import { zodResolver } from "@hookform/resolvers/zod"; import { t, Trans } from "@lingui/macro"; import { useLingui } from "@lingui/react"; import MarkdownTextarea from "components/common/MarkdownTextarea"; import { getToastOptions } from "lib/getToastOptions"; import { sendData } from "lib/postData"; import { teamSchema, TEAM_BIO_CHARACTER_LIMIT, TEAM_RECRUITING_POST_CHARACTER_LIMIT, } from "lib/validators/team"; import { GetTeamData } from "prisma/queries/getTeam"; import { useState } from "react"; import { useForm } from "react-hook-form"; import { FaTwitter } from "react-icons/fa"; import { mutate } from "swr"; import * as z from "zod"; interface Props { team: NonNullable; closeModal: () => void; } type FormData = z.infer; const TeamProfileModal: React.FC = ({ team, closeModal }) => { const { i18n } = useLingui(); const toast = useToast(); const [sending, setSending] = useState(false); const { handleSubmit, errors, register, watch } = useForm({ resolver: zodResolver(teamSchema), defaultValues: team, }); const watchBio = watch("bio", team.bio); const watchRecruitingPost = watch("recruitingPost", team.recruitingPost); const onSubmit = async (formData: FormData) => { const modifiedData: FormData = formData; for (const [key, value] of Object.entries(formData)) { if (value === "" || value === undefined) { const typedKey = key as keyof typeof modifiedData; modifiedData[typedKey] = null; } } setSending(true); const success = await sendData("PUT", "/api/teams", modifiedData); setSending(false); if (!success) return; mutate(`/api/teams/${team.id}`); toast(getToastOptions(t`Team profile updated`, "success")); closeModal(); }; return ( Editing team profile
{" "} Twitter name Twitter is also used to get the team's avatar. {errors.twitterName?.message}
); }; export default TeamProfileModal;