'use client'; // File: app/(dashboard)/settings/reminder-rules/page.tsx import { useState } from 'react'; import { Plus, Bell, Trash2, Edit2 } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger, } from '@/components/ui/dialog'; import { useReminderRules, useCreateReminderRule, useUpdateReminderRule, useDeleteReminderRule, ReminderRule, } from '@/hooks/use-reminder'; import { ReminderRuleForm } from '@/components/reminder/ReminderRuleForm'; import { ReminderType } from '@/types/workflow'; export default function ReminderRulesPage() { const [createOpen, setCreateOpen] = useState(false); const [editingRule, setEditingRule] = useState(null); const { data: rules = [], isLoading } = useReminderRules(); const createRule = useCreateReminderRule(); const updateRule = useUpdateReminderRule(); const deleteRule = useDeleteReminderRule(); const getReminderTypeColor = (type: ReminderType) => { switch (type) { case ReminderType.DUE_SOON: return 'bg-blue-100 text-blue-800 border-blue-200'; case ReminderType.ON_DUE: return 'bg-yellow-100 text-yellow-800 border-yellow-200'; case ReminderType.OVERDUE: return 'bg-orange-100 text-orange-800 border-orange-200'; case ReminderType.ESCALATION_L1: return 'bg-red-100 text-red-800 border-red-200'; case ReminderType.ESCALATION_L2: return 'bg-purple-100 text-purple-800 border-purple-200'; default: return 'bg-gray-100 text-gray-800 border-gray-200'; } }; return (

Reminder & Escalation Rules

ตั้งค่าการแจ้งเตือนและการยกระดับ (Escalation) เมื่อเกินกำหนด

Create Reminder Rule createRule.mutate(dto, { onSuccess: () => setCreateOpen(false), }) } isLoading={createRule.isPending} />
{isLoading && (
Loading rules...
)}
{rules.map((rule) => (
{rule.name}
{rule.reminderType} {rule.escalationLevel > 0 && ( L{rule.escalationLevel} )} {rule.documentTypeCode && ( {rule.documentTypeCode} )}

Trigger:{' '} {rule.daysBeforeDue === 0 ? 'On Due Date' : rule.daysBeforeDue > 0 ? `${rule.daysBeforeDue} days before` : `${Math.abs(rule.daysBeforeDue)} days after`}

{rule.messageTemplate && (

"{rule.messageTemplate}"

)}
))} {!isLoading && rules.length === 0 && (

No reminder rules defined.

)}
!open && setEditingRule(null)} > Edit Reminder Rule {editingRule && ( updateRule.mutate( { publicId: editingRule.publicId, data: dto }, { onSuccess: () => setEditingRule(null) } ) } isLoading={updateRule.isPending} /> )}
); }