'use client'; // File: components/ai/intent-classification/pattern-form.tsx // Change Log // - 2026-05-19: สร้าง Pattern Form (Create/Update) (ADR-024). import { useState } from 'react'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, } from '@/components/ui/dialog'; import type { IntentPattern, PatternType, PatternLanguage, } from '@/lib/services/ai-intent.service'; interface PatternFormProps { open: boolean; onClose: () => void; onSubmit: (data: { patternType: PatternType; patternValue: string; language?: PatternLanguage; priority?: number; }) => void; /** ถ้ามี = edit mode */ initial?: IntentPattern; isLoading?: boolean; } /** * Dialog Form สำหรับสร้าง/แก้ไข Intent Pattern */ export function PatternForm({ open, onClose, onSubmit, initial, isLoading, }: PatternFormProps) { const isEdit = !!initial; const [patternType, setPatternType] = useState( initial?.patternType || 'keyword' ); const [patternValue, setPatternValue] = useState(initial?.patternValue || ''); const [language, setLanguage] = useState( initial?.language || 'any' ); const [priority, setPriority] = useState(initial?.priority || 100); const [regexError, setRegexError] = useState(null); /** Validate regex ใน frontend ก่อนส่ง */ const validateRegex = (value: string): boolean => { if (patternType !== 'regex') return true; try { new RegExp(value); setRegexError(null); return true; } catch (err) { setRegexError(err instanceof Error ? err.message : 'Invalid regex'); return false; } }; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (!validateRegex(patternValue)) return; onSubmit({ patternType, patternValue, language, priority }); }; return ( !v && onClose()}> {isEdit ? 'แก้ไข Pattern' : 'เพิ่ม Pattern ใหม่'}
{/* Pattern Type */}
{/* Pattern Value */}
{ setPatternValue(e.target.value); if (patternType === 'regex') validateRegex(e.target.value); }} placeholder={ patternType === 'keyword' ? 'สรุป, drawing, rfa' : '\\brfa\\b' } maxLength={255} required /> {regexError && (

{regexError}

)}
{/* Language */}
{/* Priority */}
setPriority(Number(e.target.value))} min={1} max={9999} />
); }