| import { useParseDocument } from '@/hooks/document-hooks'; | |
| import { useResetFormOnCloseModal } from '@/hooks/logic-hooks'; | |
| import { IModalProps } from '@/interfaces/common'; | |
| import { Button, Form, Input, Popover } from 'antd'; | |
| import { PropsWithChildren } from 'react'; | |
| import { useTranslation } from 'react-i18next'; | |
| const reg = | |
| /^(((ht|f)tps?):\/\/)?([^!@#$%^&*?.\s-]([^!@#$%^&*?.\s]{0,63}[^!@#$%^&*?.\s])?\.)+[a-z]{2,6}\/?/; | |
| export const PopoverForm = ({ | |
| children, | |
| visible, | |
| switchVisible, | |
| }: PropsWithChildren<IModalProps<any>>) => { | |
| const [form] = Form.useForm(); | |
| const { parseDocument, loading } = useParseDocument(); | |
| const { t } = useTranslation(); | |
| useResetFormOnCloseModal({ | |
| form, | |
| visible, | |
| }); | |
| const onOk = async () => { | |
| const values = await form.validateFields(); | |
| const val = values.url; | |
| if (reg.test(val)) { | |
| const ret = await parseDocument(val); | |
| if (ret?.data?.code === 0) { | |
| form.setFieldValue('result', ret?.data?.data); | |
| form.submit(); | |
| } | |
| } | |
| }; | |
| const content = ( | |
| <Form form={form} name="urlForm"> | |
| <Form.Item | |
| name="url" | |
| rules={[{ required: true, type: 'url' }]} | |
| className="m-0" | |
| > | |
| <Input | |
| onPressEnter={(e) => e.preventDefault()} | |
| placeholder={t('flow.pasteFileLink')} | |
| suffix={ | |
| <Button | |
| type="primary" | |
| onClick={onOk} | |
| size={'small'} | |
| loading={loading} | |
| > | |
| {t('common.submit')} | |
| </Button> | |
| } | |
| /> | |
| </Form.Item> | |
| <Form.Item name={'result'} noStyle /> | |
| </Form> | |
| ); | |
| return ( | |
| <Popover | |
| content={content} | |
| open={visible} | |
| trigger={'click'} | |
| onOpenChange={switchVisible} | |
| > | |
| {children} | |
| </Popover> | |
| ); | |
| }; | |