modal-content.tsx 2.4 KB

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