'use client'; import { useTransition } from 'react'; import { useRouter } from 'next/navigation'; import { LoaderCircle } from 'lucide-react'; import { selectJobAction, unselectJobAction, } from '@kit/doctor/actions/doctor-server-actions'; import { ErrorReason } from '@kit/doctor/schema/error.type'; import { Button, ButtonProps } from '@kit/ui/button'; import { toast } from '@kit/ui/sonner'; import { Trans } from '@kit/ui/trans'; import { cn } from '@kit/ui/utils'; export default function DoctorJobSelect({ className, size = 'sm', doctorUserId, doctorName, analysisOrderId, userId, isRemovable, onJobUpdate, linkTo, }: { className?: string; size?: ButtonProps['size']; doctorUserId?: string | null; doctorName?: string; analysisOrderId: number; userId: string; isRemovable?: boolean; linkTo?: string; onJobUpdate: () => void; }) { const [isPending, startTransition] = useTransition(); const router = useRouter(); const handleSelectJob = () => { startTransition(async () => { const result = await selectJobAction({ analysisOrderId, userId, }); if (result?.success) { onJobUpdate(); linkTo && router.push(linkTo); } else { toast.error( , ); if (result.reason === ErrorReason.JOB_ASSIGNED) { onJobUpdate(); } } }); }; const handleUnselectJob = () => { startTransition(async () => { const result = await unselectJobAction({ analysisOrderId, }); if (result?.success) { onJobUpdate(); } else { toast.error( , ); } }); }; if (isRemovable) { return ( ); } if (!doctorUserId) { return ( ); } return <>{doctorName}; }