clone-project-modal.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import React, { memo, useCallback, useState } from 'react'
  2. import PropTypes from 'prop-types'
  3. import CloneProjectModalContent from './clone-project-modal-content'
  4. import AccessibleModal from '../../../shared/components/accessible-modal'
  5. function CloneProjectModal({
  6. show,
  7. handleHide,
  8. handleAfterCloned,
  9. projectId,
  10. projectName,
  11. }) {
  12. const [inFlight, setInFlight] = useState(false)
  13. const onHide = useCallback(() => {
  14. if (!inFlight) {
  15. handleHide()
  16. }
  17. }, [handleHide, inFlight])
  18. return (
  19. <AccessibleModal
  20. animation
  21. show={show}
  22. onHide={onHide}
  23. id="clone-project-modal"
  24. // backdrop="static" will disable closing the modal by clicking
  25. // outside of the modal element
  26. backdrop={inFlight ? 'static' : undefined}
  27. >
  28. <CloneProjectModalContent
  29. handleHide={onHide}
  30. inFlight={inFlight}
  31. setInFlight={setInFlight}
  32. handleAfterCloned={handleAfterCloned}
  33. projectId={projectId}
  34. projectName={projectName}
  35. />
  36. </AccessibleModal>
  37. )
  38. }
  39. CloneProjectModal.propTypes = {
  40. handleHide: PropTypes.func.isRequired,
  41. show: PropTypes.bool.isRequired,
  42. handleAfterCloned: PropTypes.func.isRequired,
  43. projectId: PropTypes.string,
  44. projectName: PropTypes.string,
  45. }
  46. export default memo(CloneProjectModal)