import { FC, ReactElement, useState, useEffect } from 'react'; import { ControlledInputField } from '@imphnen-frontend-service/ui/organisms'; import { Button, Textarea } from '@imphnen-frontend-service/ui/atoms'; import { useNavigate, useParams } from 'react-router'; import { useForm, Controller } from 'react-hook-form'; import { teamUpdateSchema, TTeamUpdateForm, useUpdateTeam, useTeamById, ETeamVisibility, useUploadFile, useAuthStore, } from '@imphnen-frontend-service/service'; import { zodResolver } from '@hookform/resolvers/zod'; import { CitySelect } from '../../../../components/city-select'; import { Icon } from '@iconify/react'; const EditTeamPage: FC = (): ReactElement => { const { teamId } = useParams<{ teamId: string }>(); const navigate = useNavigate(); const { session } = useAuthStore(); const [logoFile, setLogoFile] = useState(null); const [logoPreview, setLogoPreview] = useState(''); const [bannerFile, setBannerFile] = useState(null); const [bannerPreview, setBannerPreview] = useState(''); const { data: teamData, isLoading: isLoadingTeam } = useTeamById( teamId || '' ); const { mutateAsync: updateTeam, isPending: isUpdating } = useUpdateTeam( teamId || '' ); const { mutateAsync: uploadFile, isPending: isUploading } = useUploadFile(); const team = teamData?.data; const currentUserId = session?.user?.id; const isLeader = currentUserId === team?.leader_id; const form = useForm({ resolver: zodResolver(teamUpdateSchema), mode: 'all', }); useEffect(() => { if (team) { form.reset({ name: team.name, description: team.description, city: team.city, visibility: team.visibility, logo: team.logo, banner: team.banner, }); if (team.logo) setLogoPreview(team.logo); if (team.banner) setBannerPreview(team.banner); } }, [team, form]); if (isLoadingTeam) { return (
Loading team...
); } if (!isLeader) { return (

Access Denied

Only the team leader can edit team information

); } 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 = data.logo; let bannerUrl = data.banner; if (logoFile) { const logoResult = await uploadFile(logoFile); logoUrl = logoResult.data.url; } if (bannerFile) { const bannerResult = await uploadFile(bannerFile); bannerUrl = bannerResult.data.url; } await updateTeam({ ...data, logo: logoUrl, banner: bannerUrl, }); navigate(`/teams/${teamId}`); } catch (error) { console.error('Failed to update team:', error); } }); return (

Edit Team Info

Update your team details

{/* Banner Upload */}
{bannerPreview ? (
Banner preview
) : ( )}
{/* Logo Upload */}
{logoPreview ? ( Logo preview ) : (
)}
{logoPreview && ( )}
{/* Team Name */} {/* City */}
( )} />
{/* Description */}
(