actions.tsx 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { useEffect } from 'react'
  2. import { useTranslation } from 'react-i18next'
  3. import MakePrimary from './actions/make-primary'
  4. import Remove from './actions/remove'
  5. import Icon from '../../../../shared/components/icon'
  6. import useAsync from '../../../../shared/hooks/use-async'
  7. import { useUserEmailsContext } from '../../context/user-email-context'
  8. import { UserEmailData } from '../../../../../../types/user-email'
  9. type ActionsProps = {
  10. userEmailData: UserEmailData
  11. }
  12. function Actions({ userEmailData }: ActionsProps) {
  13. const { t } = useTranslation()
  14. const { setLoading: setUserEmailsContextLoading } = useUserEmailsContext()
  15. const makePrimaryAsync = useAsync()
  16. const deleteEmailAsync = useAsync()
  17. useEffect(() => {
  18. setUserEmailsContextLoading(
  19. makePrimaryAsync.isLoading || deleteEmailAsync.isLoading
  20. )
  21. }, [
  22. setUserEmailsContextLoading,
  23. makePrimaryAsync.isLoading,
  24. deleteEmailAsync.isLoading,
  25. ])
  26. useEffect(() => {
  27. if (makePrimaryAsync.isLoading && !deleteEmailAsync.isIdle) {
  28. deleteEmailAsync.reset()
  29. }
  30. }, [makePrimaryAsync.isLoading, deleteEmailAsync])
  31. useEffect(() => {
  32. if (deleteEmailAsync.isLoading && !makePrimaryAsync.isIdle) {
  33. makePrimaryAsync.reset()
  34. }
  35. }, [deleteEmailAsync.isLoading, makePrimaryAsync])
  36. return (
  37. <>
  38. <MakePrimary
  39. userEmailData={userEmailData}
  40. makePrimaryAsync={makePrimaryAsync}
  41. />{' '}
  42. <Remove
  43. userEmailData={userEmailData}
  44. deleteEmailAsync={deleteEmailAsync}
  45. />
  46. {(makePrimaryAsync.isError || deleteEmailAsync.isError) && (
  47. <div className="text-danger small">
  48. <Icon type="exclamation-triangle" fw />{' '}
  49. {t('error_performing_request')}
  50. </div>
  51. )}
  52. </>
  53. )
  54. }
  55. export default Actions