| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- import { useTranslation } from 'react-i18next'
- import { UserEmailData } from '../../../../../../../types/user-email'
- import { useUserEmailsContext } from '../../../context/user-email-context'
- import { postJSON } from '../../../../../infrastructure/fetch-json'
- import { UseAsyncReturnType } from '../../../../../shared/hooks/use-async'
- import OLTooltip from '@/features/ui/components/ol/ol-tooltip'
- import OLIconButton, {
- OLIconButtonProps,
- } from '@/features/ui/components/ol/ol-icon-button'
- import getMeta from '@/utils/meta'
- type DeleteButtonProps = Pick<
- OLIconButtonProps,
- 'disabled' | 'isLoading' | 'onClick'
- >
- function DeleteButton({ disabled, isLoading, onClick }: DeleteButtonProps) {
- const { t } = useTranslation()
- return (
- <OLIconButton
- variant="danger"
- disabled={disabled}
- isLoading={isLoading}
- size="sm"
- onClick={onClick}
- accessibilityLabel={t('remove') || ''}
- icon="delete"
- />
- )
- }
- type RemoveProps = {
- userEmailData: UserEmailData
- deleteEmailAsync: UseAsyncReturnType
- }
- function Remove({ userEmailData, deleteEmailAsync }: RemoveProps) {
- const { t } = useTranslation()
- const { state, deleteEmail, resetLeaversSurveyExpiration, setLoading } =
- useUserEmailsContext()
- const isManaged = getMeta('ol-isManagedAccount')
- const getTooltipText = () => {
- if (isManaged) {
- return t('your_account_is_managed_by_your_group_admin')
- }
- return userEmailData.default
- ? t('please_change_primary_to_remove')
- : t('remove')
- }
- const handleRemoveUserEmail = () => {
- deleteEmailAsync
- .runAsync(
- postJSON('/user/emails/delete', {
- body: {
- email: userEmailData.email,
- },
- })
- )
- .then(() => {
- deleteEmail(userEmailData.email)
- resetLeaversSurveyExpiration(userEmailData)
- // Reset the global loading state before this row is unmounted
- setLoading(false)
- })
- .catch(() => {
- setLoading(false)
- })
- }
- if (deleteEmailAsync.isLoading) {
- return <DeleteButton isLoading />
- }
- return (
- <OLTooltip
- id={userEmailData.email}
- description={getTooltipText()}
- overlayProps={{ placement: userEmailData.default ? 'left' : 'top' }}
- >
- <span>
- <DeleteButton
- disabled={state.isLoading || userEmailData.default}
- onClick={handleRemoveUserEmail}
- />
- </span>
- </OLTooltip>
- )
- }
- export default Remove
|