"use client"; import { useActionState, useEffect, useState } from "react"; import { useRouter } from "next/navigation"; import { ArrowRight, Check, CircleAlert, Loader2, PackageCheck, Play, RotateCcw, Send, X, } from "lucide-react"; import { toast } from "sonner"; import { Button } from "@/components/ui/button"; import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { acceptJobAction, approveAtClinicAction, cancelJobAction, handToClinicAction, markDeliveredAction, requestRevisionAction, } from "@/lib/appwrite/job-actions"; import { initialJobActionState } from "@/lib/appwrite/job-types"; import type { Job, TenantKind } from "@/lib/appwrite/schema"; type Side = "clinic" | "lab"; export function JobActionsPanel({ job, side, kind, }: { job: Job; side: Side; kind: TenantKind | null; }) { if (!kind) return null; const isLab = side === "lab"; const isClinic = side === "clinic"; const location = job.location ?? "at_lab"; const isAtLab = location === "at_lab"; const isAtClinic = location === "at_clinic"; return (
{/* Pending pickup — lab accepts */} {isLab && job.status === "pending" && } {/* Lab is producing — push to clinic for prova / final delivery */} {isLab && job.status === "in_progress" && isAtLab && ( )} {/* Clinic finished the prova — approve and send back to lab */} {isClinic && job.status === "in_progress" && isAtClinic && ( <> )} {/* Final delivery — clinic took it from the lab */} {isClinic && job.status === "sent" && } {/* Cancel — only while the job hasn't started yet */} {(isClinic || isLab) && job.status === "pending" && ( )}
); } function AcceptButton({ jobId }: { jobId: string }) { const router = useRouter(); const [state, action, pending] = useActionState(acceptJobAction, initialJobActionState); useEffect(() => { if (state.ok) { toast.success("İş işleme alındı, alt yapı üretimi başladı."); router.refresh(); } else if (state.error) { toast.error(state.error); } }, [state, router]); return (
); } function HandToClinicButton({ job }: { job: Job }) { const router = useRouter(); const [state, action, pending] = useActionState(handToClinicAction, initialJobActionState); const [open, setOpen] = useState(false); useEffect(() => { if (state.ok) { toast.success("Klinik tarafına gönderildi."); setOpen(false); router.refresh(); } else if (state.error) { toast.error(state.error); } }, [state, router]); const isFinal = job.currentStep === "cila_bitim"; const stageLabel = job.currentStep === "alt_yapi_prova" ? "alt yapı" : job.currentStep === "ust_yapi_prova" ? "üst yapı" : "cila/bitim"; return ( {isFinal ? "Nihai teslime gönderilsin mi?" : "Kliniğe gönderilsin mi?"} {isFinal ? "Cila ve bitim tamamlandı; iş 'Gönderildi' durumuna geçer. Klinik teslim aldığında nihai onay verecek." : `${stageLabel === "alt yapı" ? "Alt yapı" : "Üst yapı"} provası için iş klinik tarafına geçer. Klinik provayı onayladığında size geri dönecek.`}