"use client"; import React, { useState } from "react"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, DialogDescription, } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { Badge } from "@/components/ui/badge"; import { TableCategoryValue } from "@/types/tableCategoryValue"; // 기본 색상 팔레트 const DEFAULT_COLORS = [ "#ef4444", // red "#f97316", // orange "#f59e0b", // amber "#eab308", // yellow "#84cc16", // lime "#22c55e", // green "#10b981", // emerald "#14b8a6", // teal "#06b6d4", // cyan "#0ea5e9", // sky "#3b82f6", // blue "#6366f1", // indigo "#8b5cf6", // violet "#a855f7", // purple "#d946ef", // fuchsia "#ec4899", // pink "#64748b", // slate "#6b7280", // gray ]; interface CategoryValueAddDialogProps { open: boolean; onOpenChange: (open: boolean) => void; onAdd: (value: TableCategoryValue) => void; columnLabel: string; } export const CategoryValueAddDialog: React.FC< CategoryValueAddDialogProps > = ({ open, onOpenChange, onAdd, columnLabel }) => { const [valueLabel, setValueLabel] = useState(""); const [description, setDescription] = useState(""); const [color, setColor] = useState("none"); // 라벨에서 코드 자동 생성 const generateCode = (label: string): string => { // 한글을 영문으로 변환하거나, 영문/숫자만 추출하여 대문자로 const cleaned = label .replace(/[^a-zA-Z0-9가-힣\s]/g, "") // 특수문자 제거 .trim() .toUpperCase(); // 영문이 있으면 영문만, 없으면 타임스탬프 기반 const englishOnly = cleaned.replace(/[^A-Z0-9\s]/g, "").replace(/\s+/g, "_"); if (englishOnly.length > 0) { return englishOnly.substring(0, 20); // 최대 20자 } // 영문이 없으면 CATEGORY_TIMESTAMP 형식 return `CATEGORY_${Date.now().toString().slice(-6)}`; }; const handleSubmit = () => { if (!valueLabel.trim()) { return; } const valueCode = generateCode(valueLabel); onAdd({ tableName: "", columnName: "", valueCode, valueLabel: valueLabel.trim(), description: description.trim(), color: color, isDefault: false, }); // 초기화 setValueLabel(""); setDescription(""); setColor("none"); }; return ( 새 카테고리 값 추가 {columnLabel}에 새로운 값을 추가합니다
setValueLabel(e.target.value)} className="h-8 text-xs sm:h-10 sm:text-sm mt-1.5" autoFocus />
{DEFAULT_COLORS.map((c) => (
{color && color !== "none" ? ( 미리보기 ) : ( 배지 없음 )}