import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { formatDateToHumanReadable } from "@/utils/dateUtils"; import React, { useState } from "react"; import { ClaimStatus, ClaimWithServiceLines } from "@repo/db/types"; type ClaimEditModalProps = { isOpen: boolean; onOpenChange: (open: boolean) => void; onClose: () => void; claim: ClaimWithServiceLines | null; onSave: (updatedClaim: ClaimWithServiceLines) => void; }; export default function ClaimEditModal({ isOpen, onOpenChange, onClose, claim, onSave, }: ClaimEditModalProps) { const [status, setStatus] = useState( claim?.status ?? ("PENDING" as ClaimStatus) ); if (!claim) return null; const handleSave = () => { const updatedClaim: ClaimWithServiceLines = { ...claim, status, }; onSave(updatedClaim); onOpenChange(false); }; return ( Edit Claim Status Update the status of the claim.
{/* Patient Details */}
{claim.patientName.charAt(0)}

{claim.patientName}

Claim ID: {claim.id?.toString().padStart(4, "0")}

{/* Basic Info */}

Basic Information

Date of Birth:{" "} {formatDateToHumanReadable(claim.dateOfBirth)}

Service Date:{" "} {formatDateToHumanReadable(claim.serviceDate)}

Status:

Insurance Details

Insurance Provider:{" "} {claim.insuranceProvider || "N/A"}

Member ID:{" "} {claim.memberId}

Remarks:{" "} {claim.remarks || "N/A"}

{/* Timestamps */}

Timestamps

Created At:{" "} {formatDateToHumanReadable(claim.createdAt)}

Updated At:{" "} {formatDateToHumanReadable(claim.updatedAt)}

{/* Staff Info */} {claim.staff && (

Assigned Staff

Name: {claim.staff.name}

Role: {claim.staff.role}

{claim.staff.email && (

Email:{" "} {claim.staff.email}

)} {claim.staff.phone && (

Phone:{" "} {claim.staff.phone}

)}
)} {/* Service Lines */}

Service Lines

{claim.serviceLines.length > 0 ? ( <> {claim.serviceLines.map((line) => (

Procedure Code:{" "} {line.procedureCode}

Procedure Date:{" "} {formatDateToHumanReadable(line.procedureDate)}

{line.oralCavityArea && (

Oral Cavity Area: {" "} {line.oralCavityArea}

)} {line.toothNumber && (

Tooth Number:{" "} {line.toothNumber}

)} {line.toothSurface && (

Tooth Surface:{" "} {line.toothSurface}

)}

Billed Amount: $ {Number(line.totalBilled).toFixed(2)}

))}
Total Billed Amount: $ {claim.serviceLines .reduce((total, line) => { const billed = line.totalBilled ? parseFloat(line.totalBilled as any) : 0; return total + billed; }, 0) .toFixed(2)}
) : (

No service lines available.

)}
{/* Actions */}
); }