"use client"; import React from "react"; import { cn } from "@/lib/utils"; import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { Switch } from "@/components/ui/switch"; import { Slider } from "@/components/ui/slider"; import { Checkbox } from "@/components/ui/checkbox"; import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"; import { Label } from "@/components/ui/label"; import { FieldConfig } from "@/types/admin-panel"; interface FieldRendererProps { field: FieldConfig; value: any; error?: string; disabled?: boolean; onChange: (value: any) => void; onBlur?: () => void; className?: string; } export function FieldRenderer({ field, value, error, disabled = false, onChange, onBlur, className }: FieldRendererProps) { const isDisabled = disabled || field.disabled; const isReadOnly = field.readOnly; // Use custom render function if provided if (field.render) { return (
{field.render(field, value, onChange)}
); } const commonProps = { id: field.id, disabled: isDisabled, readOnly: isReadOnly, placeholder: field.placeholder, onBlur, className: cn( error && "border-destructive focus-visible:ring-destructive", className ), }; const renderField = () => { switch (field.type) { case "input": case "email": case "url": case "tel": return ( onChange(e.target.value)} /> ); case "password": return ( onChange(e.target.value)} /> ); case "number": return ( onChange(e.target.value ? Number(e.target.value) : "")} /> ); case "textarea": return (