remove.tsx 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import Icon from '../../../../../shared/components/icon'
  2. import Tooltip from '../../../../../shared/components/tooltip'
  3. import { Button } from 'react-bootstrap'
  4. import { useTranslation } from 'react-i18next'
  5. import { UserEmailData } from '../../../../../../../types/user-email'
  6. import { useUserEmailsContext } from '../../../context/user-email-context'
  7. import { postJSON } from '../../../../../infrastructure/fetch-json'
  8. import { UseAsyncReturnType } from '../../../../../shared/hooks/use-async'
  9. function DeleteButton({ children, disabled, onClick }: Button.ButtonProps) {
  10. const { t } = useTranslation()
  11. return (
  12. <Button
  13. bsSize="small"
  14. bsStyle="danger"
  15. disabled={disabled}
  16. onClick={onClick}
  17. >
  18. <Icon type="trash" fw accessibilityLabel={t('remove')} />
  19. </Button>
  20. )
  21. }
  22. type RemoveProps = {
  23. userEmailData: UserEmailData
  24. deleteEmailAsync: UseAsyncReturnType
  25. }
  26. function Remove({ userEmailData, deleteEmailAsync }: RemoveProps) {
  27. const { t } = useTranslation()
  28. const { state, deleteEmail, resetLeaversSurveyExpiration } =
  29. useUserEmailsContext()
  30. const handleRemoveUserEmail = () => {
  31. deleteEmailAsync
  32. .runAsync(
  33. postJSON('/user/emails/delete', {
  34. body: {
  35. email: userEmailData.email,
  36. },
  37. })
  38. )
  39. .then(() => {
  40. deleteEmail(userEmailData.email)
  41. resetLeaversSurveyExpiration(userEmailData)
  42. })
  43. .catch(() => {})
  44. }
  45. if (deleteEmailAsync.isLoading) {
  46. return <DeleteButton disabled />
  47. }
  48. return (
  49. <Tooltip
  50. id={userEmailData.email}
  51. description={
  52. userEmailData.default
  53. ? t('please_change_primary_to_remove')
  54. : t('remove')
  55. }
  56. overlayProps={{ placement: userEmailData.default ? 'left' : 'top' }}
  57. >
  58. <span>
  59. <DeleteButton
  60. disabled={state.isLoading || userEmailData.default}
  61. onClick={handleRemoveUserEmail}
  62. />
  63. </span>
  64. </Tooltip>
  65. )
  66. }
  67. export default Remove