import { FC, ReactElement, useState } from 'react'; import { ControlledInputField } from '@imphnen-frontend-service/ui/organisms'; import { Button, Textarea } from '@imphnen-frontend-service/ui/atoms'; import { useNavigate } from 'react-router'; import { useForm, Controller } from 'react-hook-form'; import { teamCreateSchema, TTeamCreateForm, useCreateTeam, ETeamVisibility, useUploadFile } from '@imphnen-frontend-service/service'; import { zodResolver } from '@hookform/resolvers/zod'; import INDONESIAN_CITIES from '../../../constants/cities'; const CreateTeamPage: FC = (): ReactElement => { const navigate = useNavigate(); const [logoFile, setLogoFile] = useState(null); const [logoPreview, setLogoPreview] = useState(''); const [bannerFile, setBannerFile] = useState(null); const [bannerPreview, setBannerPreview] = useState(''); const form = useForm({ resolver: zodResolver(teamCreateSchema), mode: 'all', defaultValues: { visibility: ETeamVisibility.PUBLIC, logo: null, banner: null, }, }); const { mutateAsync: createTeam, isPending: isCreating } = useCreateTeam(); const { mutateAsync: uploadFile, isPending: isUploading } = useUploadFile(); const handleLogoChange = (e: React.ChangeEvent) => { const file = e.target.files?.[0]; if (file) { setLogoFile(file); const reader = new FileReader(); reader.onloadend = () => { setLogoPreview(reader.result as string); }; reader.readAsDataURL(file); } }; const handleBannerChange = (e: React.ChangeEvent) => { const file = e.target.files?.[0]; if (file) { setBannerFile(file); const reader = new FileReader(); reader.onloadend = () => { setBannerPreview(reader.result as string); }; reader.readAsDataURL(file); } }; const onSubmit = form.handleSubmit(async (data) => { try { let logoUrl = null; let bannerUrl = null; if (logoFile) { const logoResult = await uploadFile(logoFile); logoUrl = logoResult.data.url; } if (bannerFile) { const bannerResult = await uploadFile(bannerFile); bannerUrl = bannerResult.data.url; } const result = await createTeam({ ...data, logo: logoUrl, banner: bannerUrl, }); navigate(`/teams/${result.data.id}`); } catch (error) { console.error('Failed to create team:', error); } }); return (
{/* Header */}

Create Your Team

Build your hackathon dream team

{/* Banner Upload */}
{bannerPreview ? (
Banner preview
) : ( )}
{/* Logo Upload */}
{logoPreview ? ( Logo preview ) : (
👥
)}
{logoPreview && ( )}
{/* Team Name */} {/* City */}
(
{fieldState.error && (

{fieldState.error.message}

)}
)} />
{/* Description */}
(