'use client'; // File: app/(dashboard)/distribution-matrices/page.tsx // Change Log // - 2026-05-14: Add admin UI for Distribution Matrix management. import { useState } from 'react'; import { Network, Plus, Trash2 } from 'lucide-react'; import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import * as z from 'zod'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form'; import { Input } from '@/components/ui/input'; import { useCreateDistributionMatrix, useDeleteDistributionMatrix, useDistributionMatrices, } from '@/hooks/use-distribution-matrices'; import { useProjectStore } from '@/lib/stores/project-store'; const formSchema = z.object({ name: z.string().min(1, 'Name is required').max(100), documentTypeId: z.coerce.number().int().positive(), codes: z.string().optional(), excludeCodes: z.string().optional(), }); type DistributionMatrixForm = z.infer; const splitCodes = (value?: string): string[] | undefined => { const codes = value ?.split(',') .map((item) => item.trim()) .filter(Boolean); return codes && codes.length > 0 ? codes : undefined; }; export default function DistributionMatricesPage() { const [createOpen, setCreateOpen] = useState(false); const selectedProjectId = useProjectStore((state) => state.selectedProjectId); const { data: matrices = [], isLoading } = useDistributionMatrices(selectedProjectId ?? undefined); const createMatrix = useCreateDistributionMatrix(); const deleteMatrix = useDeleteDistributionMatrix(); const form = useForm({ resolver: zodResolver(formSchema), defaultValues: { name: '', documentTypeId: 1, codes: '', excludeCodes: '3,4', }, }); const onSubmit = (values: DistributionMatrixForm) => { createMatrix.mutate( { name: values.name, projectPublicId: selectedProjectId ?? undefined, documentTypeId: values.documentTypeId, conditions: { codes: splitCodes(values.codes), excludeCodes: splitCodes(values.excludeCodes), }, }, { onSuccess: () => { form.reset(); setCreateOpen(false); }, } ); }; return (

Distribution Matrix

ตั้งค่าการกระจาย RFA หลังอนุมัติผ่าน BullMQ และ Transmittal

Create Distribution Matrix
( Name )} /> ( Document Type ID )} />
( Included Codes )} /> ( Excluded Codes )} />
{isLoading &&
Loading distribution matrices...
}
{matrices.map((matrix) => (
{matrix.name}
Type {matrix.documentTypeId} {(matrix.conditions?.codes ?? []).map((code) => ( {code} ))} {(matrix.conditions?.excludeCodes ?? []).map((code) => ( Exclude {code} ))}
Recipients: {(matrix.recipients ?? []).length}
))} {!isLoading && matrices.length === 0 && (

No Distribution Matrix configured.

)}
); }