Cleanup - unused files / unused exports / duplicate exports
[ProtonMail-WebClient.git] / applications / drive / src / app / components / SharedPage / Layout / useDownloadNotifications.tsx
blobe8c5eaf7f35d2af792c43e5e9952ad3e59b82a91
1 import { useEffect } from 'react';
3 import { c } from 'ttag';
5 import type { NotificationType } from '@proton/components';
6 import { useNotifications } from '@proton/components';
8 import {
9     isTransferCanceled,
10     isTransferDone,
11     isTransferFailed,
12     isTransferPausedByConnection,
13 } from '../../../utils/transfer';
14 import type { Download } from '../../TransferManager/transfer';
16 export function useDownloadNotifications(downloads: Download[]) {
17     const { createNotification, hideNotification } = useNotifications();
19     let type: NotificationType = 'info';
20     let text: string | undefined;
21     let expiration: number | undefined = -1;
22     let showCloseButton = false;
24     if (downloads.some(isTransferPausedByConnection)) {
25         type = 'warning';
26         text = c('Info').t`Download paused due to connection issue; it will resume automatically`;
27     }
29     if (downloads.some(isTransferDone)) {
30         text = c('Info').t`Download finished`;
31         expiration = undefined;
32         showCloseButton = true;
33     }
35     if (downloads.some(isTransferFailed)) {
36         type = 'error';
37         const error = downloads[0].error;
38         if (error) {
39             text = c('Info').t`Download failed due to ${error}`;
40         } else {
41             text = c('Info').t`Download failed`;
42         }
43         showCloseButton = true;
44     }
46     if (downloads.some(isTransferCanceled)) {
47         type = 'warning';
48         text = c('Info').t`Download canceled`;
49         expiration = 5000;
50         showCloseButton = true;
51     }
53     useEffect(() => {
54         if (!text) {
55             return;
56         }
58         const notificationId = createNotification({
59             type,
60             text,
61             expiration,
62             showCloseButton,
63         });
64         return () => {
65             hideNotification(notificationId);
66         };
67     }, [type, text]);