import React, { useEffect, useState } from 'react'; import { Form, Input, InputTag, Modal, Select, Space, Tag, } from '@arco-design/web-react'; import useForm from '@arco-design/web-react/es/Form/useForm'; import { IconInfoCircle } from '@arco-design/web-react/icon'; import { useAppDispatch, useAppSelector } from '../../app/hooks'; import { selectPlatformConf } from '../globalConf/globalConfSlice'; import { CategoryConfig, SubscribeConfig } from '../../utils/type'; import getTargetName from '../targetName/targetNameReq'; import { useUpdateSubMutation, useNewSubMutation } from './subscribeConfigSlice'; function SubscribeTag({ value, onChange, disabled, }: { value?: string[]; onChange?: (arg0: string[]) => void; disabled?: boolean; }) { const [valueState, setValueState] = useState(value || []); const handleSetValue = (newVal: string[]) => { setValueState(newVal); if (onChange) { onChange(newVal); } }; useEffect(() => { if (value) { setValueState(value); } }, [value]); if (disabled) { return 不支持标签; } return ( { valueState.length === 0 && 全部标签 } ); } SubscribeTag.defaultProps = { value: [], onChange: null, disabled: false, }; interface SubscribeModalProp { visible: boolean; setVisible: (arg0: boolean) => void; groupNumber: string; initval?: SubscribeConfig | null; } function SubscribeModal({ visible, setVisible, groupNumber, initval, }: SubscribeModalProp) { const [form] = useForm(); const [confirmLoading, setConfirmLoading] = useState(false); const platformConf = useAppSelector(selectPlatformConf); const [updateSub] = useUpdateSubMutation(); const [newSub] = useNewSubMutation(); const dispatch = useAppDispatch(); const onSubmit = () => { form.validate().then((value: SubscribeConfig) => { const newVal = { ...value }; if (typeof newVal.tags !== 'object') { newVal.tags = []; } if (typeof newVal.cats !== 'object') { newVal.cats = []; } if (newVal.target === '') { newVal.target = 'default'; } let postPromise: ReturnType; if (initval) { postPromise = updateSub({ groupNumber: parseInt(groupNumber, 10), sub: newVal, }); } else { postPromise = newSub({ groupNumber: parseInt(groupNumber, 10), sub: newVal, }); } setConfirmLoading(true); postPromise.then(() => { setConfirmLoading(false); setVisible(false); form.clearFields(); }); }); }; const [hasTarget, setHasTarget] = useState(false); const [categories, setCategories] = useState({} as CategoryConfig); const [enableTags, setEnableTags] = useState(false); const setPlatformStates = (platform: string) => { setHasTarget(platformConf[platform].hasTarget); setCategories(platformConf[platform].categories); setEnableTags(platformConf[platform].enabledTag); }; const handlePlatformSelected = (platform: string) => { setPlatformStates(platform); form.setFieldValue('cats', []); if (!platformConf[platform].hasTarget) { dispatch(getTargetName(platform, 'default')).then((res) => { form.setFieldsValue({ targetName: res, target: '', }); }); } else { form.setFieldsValue({ targetName: '', target: '', }); } }; useEffect(() => { if (initval) { const { platformName } = initval; setPlatformStates(platformName); form.setFieldsValue(initval); } else { form.clearFields(); } }, [initval, form, platformConf]); return ( setVisible(false)} confirmLoading={confirmLoading} onOk={onSubmit} >
new Promise((resolve) => { dispatch(getTargetName(form.getFieldValue('platformName'), value)) .then((res) => { if (res) { form.setFieldsValue({ targetName: res, }); resolve(); } else { form.setFieldsValue({ targetName: '', }); callback('账号不正确,请重新检查账号'); resolve(); } }) .catch(() => { callback('服务器错误,请稍后再试'); resolve(); }); }), }, ]} > } placeholder={hasTarget ? '获取方式见文档' : '此平台不需要账号'} /> 0, message: '请至少选择一个分类进行订阅', }, ]} >
); } SubscribeModal.defaultProps = { initval: null, }; export default SubscribeModal;