import { ConfigurableParams } from '@/types/common'; import { Checkbox, Form, FormInstance, Input, InputNumber, Select } from 'antd'; import React, { useEffect, useState } from 'react'; interface NestedFormFieldsProps { parentName: string; fields: Record; form: FormInstance; } const NestedFormFields: React.FC = ({ parentName, fields, form }) => { const [selectedType, setSelectedType] = useState(null); useEffect(() => { const currentValue = form.getFieldValue(parentName); if (currentValue?.type && !selectedType) { setSelectedType(currentValue.type); } }, [form, parentName]); const handleTypeChange = (value: string) => { setSelectedType(value); // Get all field configurations for the current type const typeFields = fields[value] || []; // Create an object containing default values for all fields const defaultValues = { type: value, }; // Set default values for each field typeFields.forEach(field => { defaultValues[field.param_name] = field.default_value; }); // Set the entire object as the value of the form field form.setFieldsValue({ [parentName]: defaultValues, }); }; const renderFormItem = (param: ConfigurableParams) => { const type = param.param_type.toLowerCase(); // Use the complete field path const fieldPath = [parentName, param.param_name]; let control; if (type === 'str' || type === 'string') { if (param.valid_values) { control = ( ); } else { control = ; } } else if (type === 'int' || type === 'integer' || type === 'number' || type === 'float') { control = ; } else if (type === 'bool' || type === 'boolean') { control = ; } else { control = ; } return ( {control} ); }; return (
{selectedType && fields[selectedType] && (

{selectedType} Configuration

{fields[selectedType].map(param => renderFormItem(param))}
)}
); }; export default NestedFormFields;