remove.tsx 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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. return (
  11. <Button
  12. bsSize="small"
  13. bsStyle="danger"
  14. disabled={disabled}
  15. onClick={onClick}
  16. >
  17. {children}
  18. </Button>
  19. )
  20. }
  21. type RemoveProps = {
  22. userEmailData: UserEmailData
  23. deleteEmailAsync: UseAsyncReturnType
  24. }
  25. function Remove({ userEmailData, deleteEmailAsync }: RemoveProps) {
  26. const { t } = useTranslation()
  27. const { state, deleteEmail } = useUserEmailsContext()
  28. const handleRemoveUserEmail = () => {
  29. deleteEmailAsync
  30. .runAsync(
  31. postJSON('/user/emails/delete', {
  32. body: {
  33. email: userEmailData.email,
  34. },
  35. })
  36. )
  37. .then(() => {
  38. deleteEmail(userEmailData.email)
  39. })
  40. .catch(() => {})
  41. }
  42. if (deleteEmailAsync.isLoading) {
  43. return <DeleteButton disabled>{t('deleting')}...</DeleteButton>
  44. }
  45. return (
  46. <Tooltip
  47. id={userEmailData.email}
  48. description={
  49. userEmailData.default
  50. ? t('please_change_primary_to_remove')
  51. : t('remove')
  52. }
  53. overlayProps={{ placement: userEmailData.default ? 'left' : 'top' }}
  54. >
  55. <span>
  56. <DeleteButton
  57. disabled={state.isLoading || userEmailData.default}
  58. onClick={handleRemoveUserEmail}
  59. >
  60. <Icon
  61. type="trash"
  62. fw
  63. accessibilityLabel={
  64. userEmailData.default
  65. ? t('please_change_primary_to_remove')
  66. : t('remove')
  67. }
  68. />
  69. </DeleteButton>
  70. </span>
  71. </Tooltip>
  72. )
  73. }
  74. export default Remove