createOwnershipRuleModal.tsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import {Fragment, useCallback, useEffect, useRef} from 'react';
  2. import {css} from '@emotion/react';
  3. import {ModalRenderProps} from 'sentry/actionCreators/modal';
  4. import {t} from 'sentry/locale';
  5. import theme from 'sentry/utils/theme';
  6. import ProjectOwnershipModal from 'sentry/views/settings/project/projectOwnership/modal';
  7. type Props = ModalRenderProps &
  8. Pick<ProjectOwnershipModal['props'], 'organization' | 'project' | 'issueId'> & {
  9. onClose?: () => void;
  10. };
  11. const CreateOwnershipRuleModal = ({Body, Header, closeModal, ...props}: Props) => {
  12. const closeModalTimeoutRef = useRef<number | undefined>(undefined);
  13. useEffect(() => {
  14. return () => {
  15. window.clearInterval(closeModalTimeoutRef.current);
  16. };
  17. }, []);
  18. const handleSuccess = useCallback(() => {
  19. props.onClose?.();
  20. window.clearTimeout(closeModalTimeoutRef.current);
  21. closeModalTimeoutRef.current = window.setTimeout(closeModal, 2000);
  22. }, [props.onClose]);
  23. return (
  24. <Fragment>
  25. <Header closeButton>{t('Create Ownership Rule')}</Header>
  26. <Body>
  27. <ProjectOwnershipModal {...props} onSave={handleSuccess} />
  28. </Body>
  29. </Fragment>
  30. );
  31. };
  32. export const modalCss = css`
  33. @media (min-width: ${theme.breakpoints.small}) {
  34. width: 80%;
  35. }
  36. [role='document'] {
  37. overflow: initial;
  38. }
  39. `;
  40. export default CreateOwnershipRuleModal;