'use client' import Button from '@/components/ui/Button' import Typography from '@/components/ui/Typography' import FormGroup from '@/components/ui/form/FormGroup' import Input from '@/components/ui/form/Input' import TextArea from '@/components/ui/form/TextArea' import { useAppDispatch } from '@/hooks/useAppDispatch' import useManageError from '@/hooks/useManageError' import { addAlert } from '@/state/feedbackSlice' import { css } from '@/styled-system/css' import { teamApplicationDataSchema } from '@/utilities/teamApplication' import { faChevronRight } from '@fortawesome/free-solid-svg-icons' import { FontAwesomeIcon, type FontAwesomeIconProps } from '@fortawesome/react-fontawesome' import { nanoid } from '@reduxjs/toolkit' import { ADMIN_CLAN_ID, COLLABORATOR_CLAN_ID, MODERATOR_CLAN_ID } from 'entgamers-database/frontend/clanes/administrative' import { createTeamApplication, type TeamApplicationData } from 'entgamers-database/frontend/database/teamApplications' import { useFormik } from 'formik' import { AnimatePresence, motion } from 'framer-motion' import { usePathname, useSearchParams } from 'next/navigation' import { useRouter } from 'next/router' import { useEffect, type FC } from 'react' const ApplyForm: FC = () => { const searchParams = useSearchParams() const pathname = usePathname() const router = useRouter() const { manageError } = useManageError() const dispatch = useAppDispatch() const formik = useFormik >({ initialValues: { name: '', email: '', discord: '', message: '', role: 'Moderator' }, onSubmit: async (values) => { try { await createTeamApplication(values) dispatch(addAlert({ id: nanoid(), title: 'Formulario enviado', message: 'Gracias por interesarte en unirte al equipo', severity: 'success' })) } catch (error) { manageError(error, 'Error al enviar el formulario', 'Error desconocido al enviar el formulario', 'error') } }, validationSchema: teamApplicationDataSchema, validateOnMount: true }) useEffect(() => { if (searchParams.has('role')) { formik.setFieldValue('role', searchParams.get('role')) .catch((error) => { console.error(error) }) .finally(() => { router.replace(pathname) }) } }, [searchParams, formik, pathname, router]) return (
{formik.submitCount <= 0 ? (
{formik.touched.name !== undefined && formik.errors.name !== undefined ? ( {formik.errors.name} ) : ( Tu nombre. )} {formik.touched.email !== undefined && formik.errors.email !== undefined ? ( {formik.errors.email} ) : ( Tu email, para poder contactarte. )} {formik.touched.discord !== undefined && formik.errors.discord !== undefined ? ( {formik.errors.discord} ) : ( Tu nombre de Discord, para poder contactarte. )}