Merge branch 'INDA-330-pii-update' into 'main'
[ProtonMail-WebClient.git] / packages / pass / hooks / useAliasDetails.ts
blobae2ebf512f5310e67bf8ae46f7121a6b43d21667
1 import { useEffect, useMemo } from 'react';
2 import { useSelector } from 'react-redux';
4 import { c } from 'ttag';
6 import useNotifications from '@proton/components/hooks/useNotifications';
7 import { getAliasDetailsIntent } from '@proton/pass/store/actions';
8 import { aliasDetailsRequest } from '@proton/pass/store/actions/requests';
9 import { selectAliasDetails } from '@proton/pass/store/selectors';
10 import type { AliasMailbox, Maybe } from '@proton/pass/types';
12 import { useActionRequest } from './useActionRequest';
14 type UseAliasDetailsConfig = {
15     aliasEmail: string;
16     itemId: string;
17     shareId: string;
18     onAliasDetailsLoaded?: (mailboxes: Maybe<AliasMailbox[]>) => void;
21 export const useAliasDetails = ({ aliasEmail, itemId, shareId, onAliasDetailsLoaded }: UseAliasDetailsConfig) => {
22     const { createNotification } = useNotifications();
23     const aliasDetails = useSelector(selectAliasDetails(aliasEmail));
25     const getAliasDetails = useActionRequest(getAliasDetailsIntent, {
26         requestId: aliasDetailsRequest(aliasEmail),
27         onSuccess: () => onAliasDetailsLoaded?.(aliasDetails),
28         onFailure: () => {
29             createNotification({
30                 type: 'warning',
31                 text: c('Warning').t`Cannot retrieve mailboxes for this alias right now`,
32             });
33         },
34     });
36     useEffect(() => {
37         getAliasDetails.dispatch({ shareId, itemId, aliasEmail });
38     }, [shareId, itemId, aliasEmail]);
40     return useMemo(
41         () => ({ value: aliasDetails ?? [], loading: getAliasDetails.loading }),
42         [aliasDetails, getAliasDetails.loading]
43     );