import { Authorization } from '@/constants/authorization'; import { useSetModalState } from '@/hooks/common-hooks'; import { useSetSelectedRecord } from '@/hooks/logic-hooks'; import { useHandleSubmittable } from '@/hooks/login-hooks'; import api from '@/utils/api'; import { getAuthorization } from '@/utils/authorization-util'; import { UploadOutlined } from '@ant-design/icons'; import { Button, Form, FormItemProps, Input, InputNumber, Select, Switch, Upload, } from 'antd'; import { UploadChangeParam, UploadFile } from 'antd/es/upload'; import { pick } from 'lodash'; import { Link } from 'lucide-react'; import React, { useCallback, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { BeginQueryType } from '../constant'; import { BeginQuery } from '../interface'; import { PopoverForm } from './popover-form'; import styles from './index.less'; interface IProps { parameters: BeginQuery[]; ok(parameters: any[]): void; isNext?: boolean; loading?: boolean; submitButtonDisabled?: boolean; } const DebugContent = ({ parameters, ok, isNext = true, loading = false, submitButtonDisabled = false, }: IProps) => { const { t } = useTranslation(); const [form] = Form.useForm(); const { visible, hideModal: hidePopover, switchVisible, showModal: showPopover, } = useSetModalState(); const { setRecord, currentRecord } = useSetSelectedRecord(); const { submittable } = useHandleSubmittable(form); const [isUploading, setIsUploading] = useState(false); const handleShowPopover = useCallback( (idx: number) => () => { setRecord(idx); showPopover(); }, [setRecord, showPopover], ); const normFile = (e: any) => { if (Array.isArray(e)) { return e; } return e?.fileList; }; const onChange = useCallback( (optional: boolean) => ({ fileList }: UploadChangeParam) => { if (!optional) { setIsUploading(fileList.some((x) => x.status === 'uploading')); } }, [], ); const renderWidget = useCallback( (q: BeginQuery, idx: number) => { const props: FormItemProps & { key: number } = { key: idx, label: q.name ?? q.key, name: idx, }; if (q.optional === false) { props.rules = [{ required: true }]; } const urlList: { url: string; result: string }[] = form.getFieldValue(idx) || []; const BeginQueryTypeMap = { [BeginQueryType.Line]: ( ), [BeginQueryType.Paragraph]: ( ), [BeginQueryType.Options]: ( ), [BeginQueryType.File]: (
0 ? 'mb-1' : ''} noStyle >
), [BeginQueryType.Integer]: ( ), [BeginQueryType.Boolean]: ( ), }; return ( BeginQueryTypeMap[q.type as BeginQueryType] ?? BeginQueryTypeMap[BeginQueryType.Paragraph] ); }, [form, handleShowPopover, onChange, switchVisible, t, visible], ); const onOk = useCallback(async () => { const values = await form.validateFields(); const nextValues = Object.entries(values).map(([key, value]) => { const item = parameters[Number(key)]; let nextValue = value; if (Array.isArray(value)) { nextValue = ``; value.forEach((x) => { nextValue += x?.originFileObj instanceof File ? `${x.name}\n${x.response?.data}\n----\n` : `${x.url}\n${x.result}\n----\n`; }); } return { ...item, value: nextValue }; }); ok(nextValues); }, [form, ok, parameters]); return ( <>
{ if (name === 'urlForm') { const { basicForm } = forms; const urlInfo = basicForm.getFieldValue(currentRecord) || []; basicForm.setFieldsValue({ [currentRecord]: [...urlInfo, { ...values, name: values.url }], }); hidePopover(); } }} >
{parameters.map((x, idx) => { return renderWidget(x, idx); })}
); }; export default DebugContent;