import { Controller, type FieldValues, type UseFormReturn, } from "react-hook-form"; import { useTranslation } from "react-i18next"; import { Field, FieldContent, FieldDescription, FieldLabel, FieldSet, } from "@/components/ui/field"; import { Input } from "@/components/ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Switch } from "@/components/ui/switch"; import type { PackerSchemaField } from "@/types/memshell"; type Props = { form: UseFormReturn; fields: PackerSchemaField[]; baseName?: string; }; export function PackerCustomConfigFields({ form, fields, baseName = "packerCustomConfig", }: Readonly>) { const { t } = useTranslation("common"); if (fields.length === 0) { return null; } const supportedFields = fields.filter((field) => ["BOOLEAN", "STRING", "ENUM", "INTEGER"].includes(field.type), ); if (supportedFields.length === 0) { return null; } const getFieldDescription = (schemaField: PackerSchemaField) => { if (!schemaField.description && !schemaField.descriptionI18nKey) { return undefined; } if (!schemaField.descriptionI18nKey) { return schemaField.description; } return t(schemaField.descriptionI18nKey, { defaultValue: schemaField.description ?? schemaField.descriptionI18nKey, }); }; return ( {t("packerParams", { defaultValue: "Packer Params" })} {supportedFields.map((schemaField) => { const fieldName = `${baseName}.${schemaField.key}` as any; const fieldDescription = getFieldDescription(schemaField); return ( { switch (schemaField.type) { case "BOOLEAN": return ( {schemaField.key} {fieldDescription ? ( {fieldDescription} ) : null} ); case "ENUM": return ( {schemaField.key} {fieldDescription ? ( {fieldDescription} ) : null} ); case "INTEGER": return ( {schemaField.key} { const raw = event.target.value; if (raw === "") { field.onChange(undefined); return; } const parsed = Number.parseInt(raw, 10); field.onChange( Number.isFinite(parsed) ? parsed : undefined, ); }} /> {fieldDescription ? ( {fieldDescription} ) : null} ); case "STRING": return ( {schemaField.key} {fieldDescription ? ( {fieldDescription} ) : null} ); default: return <>; } }} /> ); })} ); }