actions.tsx 1.7 KB

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