"use client"; import React, { useState, useEffect } from "react"; import { Delete } from "lucide-react"; import { Dialog, DialogPortal, DialogOverlay, } from "@/components/ui/dialog"; import * as DialogPrimitive from "@radix-ui/react-dialog"; import { PackageUnitModal, PACKAGE_UNITS, type PackageUnit, } from "./PackageUnitModal"; interface NumberInputModalProps { open: boolean; onOpenChange: (open: boolean) => void; unit?: string; initialValue?: number; initialPackageUnit?: string; min?: number; maxValue?: number; onConfirm: (value: number, packageUnit?: string) => void; } export function NumberInputModal({ open, onOpenChange, unit = "EA", initialValue = 0, initialPackageUnit, min = 0, maxValue = 999999, onConfirm, }: NumberInputModalProps) { const [displayValue, setDisplayValue] = useState(""); const [packageUnit, setPackageUnit] = useState(undefined); const [isPackageModalOpen, setIsPackageModalOpen] = useState(false); useEffect(() => { if (open) { setDisplayValue(initialValue > 0 ? String(initialValue) : ""); setPackageUnit(initialPackageUnit); } }, [open, initialValue, initialPackageUnit]); const handleNumberClick = (num: string) => { const newStr = displayValue + num; const numericValue = parseInt(newStr, 10); setDisplayValue(numericValue > maxValue ? String(maxValue) : newStr); }; const handleBackspace = () => setDisplayValue((prev) => prev.slice(0, -1)); const handleClear = () => setDisplayValue(""); const handleMax = () => setDisplayValue(String(maxValue)); const handleConfirm = () => { const numericValue = parseInt(displayValue, 10) || 0; const finalValue = Math.max(min, Math.min(maxValue, numericValue)); onConfirm(finalValue, packageUnit); onOpenChange(false); }; const handlePackageUnitSelect = (selected: PackageUnit) => { setPackageUnit(selected); }; const matchedUnit = packageUnit ? PACKAGE_UNITS.find((u) => u.value === packageUnit) : null; const packageUnitLabel = matchedUnit?.label ?? null; const packageUnitEmoji = matchedUnit?.emoji ?? "πŸ“¦"; const displayText = displayValue ? parseInt(displayValue, 10).toLocaleString() : ""; return ( <> {/* νŒŒλž€ 헀더 */}
μ΅œλŒ€ {maxValue.toLocaleString()} {unit}
{/* 숫자 ν‘œμ‹œ μ˜μ—­ */}
{displayText ? ( {displayText} ) : ( 0 )}
{/* μ•ˆλ‚΄ ν…μŠ€νŠΈ */}

μˆ˜λŸ‰μ„ μž…λ ₯ν•˜μ„Έμš”

{/* ν‚€νŒ¨λ“œ 4x4 */}
{/* 1ν–‰: 7 8 9 ← (μ£Όν™©) */} {["7", "8", "9"].map((n) => ( ))} {/* 2ν–‰: 4 5 6 C (μ£Όν™©) */} {["4", "5", "6"].map((n) => ( ))} {/* 3ν–‰: 1 2 3 MAX (νŒŒλž€) */} {["1", "2", "3"].map((n) => ( ))} {/* 4ν–‰: 0 / 확인 (초둝, 3μΉΈ) */}
{/* 포μž₯ λ‹¨μœ„ 선택 λͺ¨λ‹¬ */} ); }