modal-content.tsx 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import { useState, Dispatch, SetStateAction } from 'react'
  2. import { Modal, Button } from 'react-bootstrap'
  3. import { useTranslation, Trans } from 'react-i18next'
  4. import getMeta from '../../../../utils/meta'
  5. import LeaveModalForm, { LeaveModalFormProps } from './modal-form'
  6. import { ExposedSettings } from '../../../../../../types/exposed-settings'
  7. type LeaveModalContentProps = {
  8. handleHide: () => void
  9. inFlight: boolean
  10. setInFlight: Dispatch<SetStateAction<boolean>>
  11. }
  12. function LeaveModalContentBlock({
  13. setInFlight,
  14. isFormValid,
  15. setIsFormValid,
  16. }: LeaveModalFormProps) {
  17. const { t } = useTranslation()
  18. const { isOverleaf } = getMeta('ol-ExposedSettings') as ExposedSettings
  19. const hasPassword = getMeta('ol-hasPassword') as boolean
  20. if (isOverleaf && !hasPassword) {
  21. return (
  22. <p>
  23. <b>
  24. <a href="/user/password/reset">{t('delete_acct_no_existing_pw')}</a>
  25. </b>
  26. </p>
  27. )
  28. }
  29. return (
  30. <LeaveModalForm
  31. setInFlight={setInFlight}
  32. isFormValid={isFormValid}
  33. setIsFormValid={setIsFormValid}
  34. />
  35. )
  36. }
  37. function LeaveModalContent({
  38. handleHide,
  39. inFlight,
  40. setInFlight,
  41. }: LeaveModalContentProps) {
  42. const { t } = useTranslation()
  43. const [isFormValid, setIsFormValid] = useState(false)
  44. return (
  45. <>
  46. <Modal.Header closeButton>
  47. <Modal.Title>{t('delete_account')}</Modal.Title>
  48. </Modal.Header>
  49. <Modal.Body>
  50. <p>
  51. <Trans
  52. i18nKey="delete_account_warning_message_3"
  53. components={[<strong />]} // eslint-disable-line react/jsx-key
  54. />
  55. </p>
  56. <LeaveModalContentBlock
  57. setInFlight={setInFlight}
  58. isFormValid={isFormValid}
  59. setIsFormValid={setIsFormValid}
  60. />
  61. </Modal.Body>
  62. <Modal.Footer>
  63. <Button type="button" disabled={inFlight} onClick={handleHide}>
  64. {t('cancel')}
  65. </Button>
  66. <Button
  67. form="leave-form"
  68. type="submit"
  69. bsStyle="danger"
  70. disabled={inFlight || !isFormValid}
  71. >
  72. {inFlight ? <>{t('deleting')}…</> : t('delete')}
  73. </Button>
  74. </Modal.Footer>
  75. </>
  76. )
  77. }
  78. export default LeaveModalContent