index.tsx 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import {FC, Suspense} from 'react';
  2. import {ErrorBoundary, Loading, Modal, ModalBtnGroup} from '@components';
  3. import ReactModal from 'react-modal';
  4. import {useFormState} from './hooks';
  5. import Info from './Info';
  6. import {FormProvider} from 'react-hook-form';
  7. const style: ReactModal.Styles = {
  8. content: {
  9. width: '560px',
  10. height: '500px',
  11. },
  12. };
  13. type Props = {
  14. visible: boolean,
  15. onClose: () => void,
  16. onFetch: () => void,
  17. id: string,
  18. };
  19. const MenuModal: FC<Props> = function({visible, onClose, id, onFetch}) {
  20. const [{isLoading, formInstance}, onSubmit] = useFormState({
  21. onClose,
  22. id,
  23. visible,
  24. onFetch,
  25. });
  26. const isEdit = Boolean(id);
  27. return (
  28. <Modal
  29. visible={visible}
  30. title={`${isEdit ? '修改' : '新增'}PDA菜单`}
  31. isLoading={isLoading}
  32. style={style}
  33. onSubmit={onSubmit}
  34. onClose={onClose}
  35. testId='menu_modal'
  36. hideBtnGroup
  37. >
  38. <FormProvider {...formInstance}>
  39. <ErrorBoundary>
  40. <Suspense fallback={<Loading tip='正在获取菜单信息' />}>
  41. <Info id={id} />
  42. <ModalBtnGroup isLoading={isLoading} onClose={onClose} />
  43. </Suspense>
  44. </ErrorBoundary>
  45. </FormProvider>
  46. </Modal>
  47. );
  48. };
  49. export default MenuModal;