'use client'; import { useState } from 'react'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'; import { Switch } from '@/components/ui/switch'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { Search } from 'lucide-react'; import type { ClassificationRule, RuleRegistrationType, RuleType, MatchingType, } from '@/types/process'; import { RULE_TYPE_OPTIONS, MATCHING_TYPE_OPTIONS } from '@/types/process'; interface RuleModalProps { open: boolean; onOpenChange: (open: boolean) => void; onAdd: (rule: Omit) => void; editRule?: ClassificationRule; } export function RuleModal({ open, onOpenChange, onAdd, editRule }: RuleModalProps) { const [registrationType, setRegistrationType] = useState( editRule?.registrationType || 'pattern' ); const [ruleType, setRuleType] = useState(editRule?.ruleType || '품목코드'); const [matchingType, setMatchingType] = useState( editRule?.matchingType || 'startsWith' ); const [conditionValue, setConditionValue] = useState(editRule?.conditionValue || ''); const [priority, setPriority] = useState(editRule?.priority || 10); const [description, setDescription] = useState(editRule?.description || ''); const [isActive, setIsActive] = useState(editRule?.isActive ?? true); const handleSubmit = () => { if (!conditionValue.trim()) { alert('조건 값을 입력해주세요.'); return; } onAdd({ registrationType, ruleType, matchingType, conditionValue: conditionValue.trim(), priority, description: description.trim() || undefined, isActive, }); // Reset form setRegistrationType('pattern'); setRuleType('품목코드'); setMatchingType('startsWith'); setConditionValue(''); setPriority(10); setDescription(''); setIsActive(true); onOpenChange(false); }; return ( 규칙 추가
{/* 등록 방식 */}
setRegistrationType(v as RuleRegistrationType)} >
{/* 규칙 유형 */}
{/* 매칭 방식 */}
{/* 조건 값 */}
setConditionValue(e.target.value)} placeholder="예: SCR-, E-, STEEL-" className="flex-1" />

Enter 키를 누르거나 검색 버튼을 클릭하세요

{/* 우선순위 */}
setPriority(Number(e.target.value))} min={1} max={100} className="w-24" />

낮을수록 먼저 적용됩니다

{/* 설명 */}
setDescription(e.target.value)} placeholder="규칙에 대한 설명" />
{/* 활성 상태 */}
); }