import FieldWrapper from '@/components/seal-form/field-wrapper'; import SealInput from '@/components/seal-form/seal-input'; import SealSelect from '@/components/seal-form/seal-select'; import { INPUT_WIDTH } from '@/constants'; import { InfoCircleOutlined } from '@ant-design/icons'; import { useIntl } from '@umijs/max'; import { Form, InputNumber, Slider, Tooltip } from 'antd'; import _ from 'lodash'; import { forwardRef, memo, useCallback, useEffect, useId, useImperativeHandle, useMemo } from 'react'; import { ParamsSchema } from '../config/types'; import CustomLabelStyles from '../style/custom-label.less'; type ParamsSettingsFormProps = { top_n?: number; model?: string; }; type ParamsSettingsProps = { ref?: any; parametersTitle?: React.ReactNode; selectedModel?: string; showModelSelector?: boolean; params?: Record; model?: string; modelList: Global.BaseOption[]; onValuesChange?: (changeValues: any, value: Record) => void; setParams: (params: any) => void; onModelChange?: (model: string) => void; globalParams?: Record; paramsConfig?: ParamsSchema[]; initialValues?: Record; extra?: React.ReactNode; }; const ParamsSettings: React.FC = forwardRef( ( { setParams, onValuesChange, onModelChange, parametersTitle, selectedModel, globalParams, initialValues, paramsConfig, modelList, params, showModelSelector = true, extra }, ref ) => { const intl = useIntl(); const [form] = Form.useForm(); const formId = useId(); useImperativeHandle(ref, () => ({ form })); useEffect(() => { let model = selectedModel || ''; if (showModelSelector) { model = model || _.get(modelList, '[0].value'); } form.setFieldsValue({ model: model, ...initialValues }); setParams({ model: model, ...initialValues }); onModelChange?.(model); }, [modelList, showModelSelector, selectedModel, initialValues]); const handleModelChange = useCallback( (value: string) => { onModelChange?.(value); }, [onModelChange] ); const handleOnFinish = (values: any) => { console.log('handleOnFinish', values); }; const handleOnFinishFailed = (errorInfo: any) => { console.log('handleOnFinishFailed', errorInfo); }; const handleValuesChange = useCallback( (changedValues: any, allValues: any) => { setParams?.(allValues); onValuesChange?.(changedValues, allValues); }, [onValuesChange, setParams] ); const handleFieldValueChange = useCallback( (val: any, field: string) => { const values = form.getFieldsValue(); form.setFieldsValue({ ...values, [field]: val }); setParams({ ...values, [field]: val }); onValuesChange?.( { [field]: val }, { ...values, [field]: val } ); }, [form, setParams, onValuesChange] ); useEffect(() => { form.setFieldsValue(globalParams); }, [globalParams]); const renderLabel = useCallback( (args: { field: string; label: string; description: string }) => { return ( {args.description ? ( {args.label} ) : ( {args.label} )} handleFieldValueChange(val, args.field)} > ); }, [form, handleFieldValueChange] ); const renderDescription = useCallback( (item: ParamsSchema) => { if (!item.description) { return null; } if (item.description.html) { return (
); } return intl.formatMessage({ id: item.description.text }); }, [intl] ); const renderFields = useMemo(() => { console.log('paramsConfig++++++++++++'); if (!paramsConfig?.length) { return null; } return paramsConfig.map((item: ParamsSchema) => { if (item.type === 'InputNumber') { return ( ); } if (item.type === 'TextArea') { return ( ); } if (item.type === 'Select') { return ( ); } if (item.type === 'Slider') { return ( handleFieldValueChange(val, item.name)} > ); } return null; }); }, [paramsConfig, params, renderDescription, intl]); return (
{ <>

{parametersTitle || ( {intl.formatMessage({ id: 'playground.parameters' })} )}

name="model" rules={[ { required: true, message: intl.formatMessage( { id: 'common.form.rule.select' }, { name: intl.formatMessage({ id: 'playground.model' }) } ) } ]} > } {renderFields} {extra}
); } ); export default memo(ParamsSettings);