Merge branch 'feat/inda-383-daily-stat' into 'main'
[ProtonMail-WebClient.git] / packages / activation / src / logic / importers / importers.helpers.ts
blob1eb62af67f9b127b881560c1039445df2443e2a9
1 import type { ApiImportListResponse, ApiImporter } from '@proton/activation/src/api/api.interface';
2 import type { ImportType } from '@proton/activation/src/interface';
4 import type { ActiveImporter, ActiveImportersMap, Importer, ImportersMap } from './importers.interface';
6 export const normalizeImporter = (apiImporter: ApiImporter) => {
7     const importer: Importer = {
8         ID: apiImporter.ID,
9         account: apiImporter.Account,
10         products: apiImporter.Product,
11         provider: apiImporter.Provider,
12         sasl: apiImporter.Sasl,
13     };
14     const activeImporters: ActiveImporter[] = [];
16     if (apiImporter.Active) {
17         Object.entries(apiImporter.Active).forEach(([product, value]) => {
18             if (value) {
19                 const formattedReport: ActiveImporter = {
20                     localID: `${importer.ID}-${product as ImportType}`,
21                     importerID: importer.ID,
22                     product: product as ImportType,
23                     importState: value.State,
24                     startDate: value.CreateTime,
25                     errorCode: value.ErrorCode,
26                     mapping: value.Mapping,
27                     total: value.Total,
28                 };
30                 activeImporters.push(formattedReport);
31             }
32         });
33     }
35     return { importer, activeImporters };
38 export const normalizeImporters = (importersResponse: ApiImportListResponse) => {
39     let imports: Importer[] = [];
40     let activeImports: ActiveImporter[] = [];
42     importersResponse.Importers.forEach((apiImporter) => {
43         const { importer, activeImporters } = normalizeImporter(apiImporter);
45         imports.push(importer);
46         activeImports = activeImports.concat(activeImporters);
47     });
49     const importersMap = imports.reduce<ImportersMap>((acc, importer) => {
50         acc[importer.ID] = importer;
51         return acc;
52     }, {});
54     const activeImportersMap = activeImports.reduce<ActiveImportersMap>((acc, activeImporter) => {
55         acc[activeImporter.localID] = activeImporter;
56         return acc;
57     }, {});
59     return { importersMap, activeImportersMap };