1
0

HookModal.tsx 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import React, { PropsWithChildren } from 'react';
  2. import ConfirmModal from '../ConfirmModal';
  3. import { ConfirmProps } from '../confirm';
  4. interface HookModalProps {
  5. afterClose: (...args: any[]) => void;
  6. config: ConfirmProps
  7. }
  8. export interface HookModalRef {
  9. destroy: () => void;
  10. update: (newConfig: ConfirmProps) => void
  11. }
  12. // eslint-disable-next-line max-len
  13. const HookModal = ({ afterClose, config, ...props }: PropsWithChildren<HookModalProps>, ref: React.Ref<any>) => {
  14. const [innerConfig, setInnerConfig] = React.useState(config);
  15. React.useImperativeHandle(ref, () => ({
  16. destroy: () => {
  17. setInnerConfig(originConfig => ({
  18. ...originConfig,
  19. visible: false,
  20. }));
  21. },
  22. update: newConfig => {
  23. setInnerConfig(originConfig => ({
  24. ...originConfig,
  25. ...newConfig,
  26. }));
  27. },
  28. }));
  29. const mergeAfterClose = () => {
  30. config?.afterClose?.();
  31. afterClose();
  32. };
  33. return (
  34. <ConfirmModal
  35. {...innerConfig}
  36. afterClose={mergeAfterClose}
  37. // visible={!visible ? visible : undefined}
  38. />
  39. );
  40. };
  41. export default React.forwardRef<HookModalRef, HookModalProps>(HookModal);