"use client";
import { WidgetComponent } from "@/types/screen";
import InputWidget from "./widgets/InputWidget";
import SelectWidget from "./widgets/SelectWidget";
import TextareaWidget from "./widgets/TextareaWidget";
import { Calendar, CheckSquare, Radio, FileText, Hash, Database } from "lucide-react";
interface WidgetFactoryProps {
widget: WidgetComponent;
value?: string;
onChange?: (value: string) => void;
className?: string;
}
export default function WidgetFactory({ widget, value, onChange, className }: WidgetFactoryProps) {
// 웹 타입에 따라 적절한 컴포넌트 렌더링
switch (widget.widgetType) {
case "text":
return ;
case "number":
return ;
case "date":
return (
{widget.label && (
)}
onChange?.(e.target.value)}
required={widget.required}
readOnly={widget.readonly}
className="w-full rounded-md border border-gray-300 py-2 pr-3 pl-10 text-sm focus:border-blue-500 focus:ring-1 focus:ring-blue-500 focus:outline-none"
/>
);
case "code":
return (
{widget.label && (
)}
onChange?.(e.target.value)}
required={widget.required}
readOnly={widget.readonly}
className="w-full rounded-md border border-gray-300 py-2 pr-3 pl-10 font-mono text-sm focus:border-blue-500 focus:ring-1 focus:ring-blue-500 focus:outline-none"
/>
);
case "entity":
return (
{widget.label && (
)}
onChange?.(e.target.value)}
required={widget.required}
readOnly={widget.readonly}
className="w-full rounded-md border border-gray-300 py-2 pr-3 pl-10 text-sm focus:border-blue-500 focus:ring-1 focus:ring-blue-500 focus:outline-none"
/>
);
case "file":
return (
{widget.label && (
)}
onChange?.(e.target.files?.[0]?.name || "")}
required={widget.required}
disabled={widget.readonly}
className="w-full rounded-md border border-gray-300 py-2 pr-3 pl-10 text-sm file:mr-4 file:rounded-md file:border-0 file:bg-blue-50 file:px-4 file:py-1 file:text-sm file:font-medium file:text-blue-700 hover:file:bg-blue-100 focus:border-blue-500 focus:ring-1 focus:ring-blue-500 focus:outline-none"
/>
);
case "select":
return ;
case "checkbox":
return (
);
case "radio":
return (
{widget.label && (
)}
);
case "textarea":
return ;
default:
return (
지원하지 않는 위젯 타입
타입: {widget.widgetType}
);
}
}