From c102d6c2746bb1b59850e824322cc42b145b53aa Mon Sep 17 00:00:00 2001 From: mehdilouraoui <37937348+mehdilouraoui@users.noreply.github.com> Date: Thu, 24 Feb 2022 17:15:26 +0100 Subject: [PATCH] feat(recap): add total folder count on recap (#124) --- .../components/common/pictos/picto.tsx | 72 +++++++++++++++++++ src/renderer/utils/dashboard-recap.ts | 21 ++++++ src/renderer/utils/pst-extractor.ts | 14 ++-- .../views/dashboard/DashboardRecap.tsx | 54 ++++++++++++-- .../views/dashboard/DashboardRecapItem.tsx | 8 ++- static/locales/en-GB/translation.json | 23 ++++-- static/locales/fr-FR/translation.json | 27 ++++--- 7 files changed, 191 insertions(+), 28 deletions(-) diff --git a/src/renderer/components/common/pictos/picto.tsx b/src/renderer/components/common/pictos/picto.tsx index 8a8ff63c..6adfe2c2 100644 --- a/src/renderer/components/common/pictos/picto.tsx +++ b/src/renderer/components/common/pictos/picto.tsx @@ -414,6 +414,78 @@ export const TrashPicto: React.FC = () => ( ); +export const FolderPicto: React.FC = () => ( + + + + + + + + + + + + + + + + {" "} + +); + export const ExtremeDatePicto: React.FC = () => ( { + const folderList: FolderListItem[] = []; + pst.forEach((folder) => { + const { id, name, type, children } = folder; + if (isPstFolder(folder)) { + folderList.push({ id, name, type }); + } + const childFolders = children?.filter(isPstFolder); + if (childFolders) folderList.push(...getPstListOfFolder(childFolders)); + }); + return folderList; +}; diff --git a/src/renderer/utils/pst-extractor.ts b/src/renderer/utils/pst-extractor.ts index 5dbb99b0..afa38cc3 100644 --- a/src/renderer/utils/pst-extractor.ts +++ b/src/renderer/utils/pst-extractor.ts @@ -14,16 +14,16 @@ export const getExtremumDate = ( dates: PstEmail[], compare: "max" | "min", messageType: "receivedDate" | "sentTime" -): string => +): Date => new Date( Math[compare]( ...dates.map((date) => new Date(date[messageType]!).getTime()) ) - ).toDateString(); + ); interface ExtremeMailDates { - max: string; - min: string; + maxDate: Date; + minDate: Date; } export const getExtremeMailsDates = ( extractTables: PstExtractTables @@ -36,8 +36,8 @@ export const getExtremeMailsDates = ( const extremumMaxR = getExtremumDate(dates, "max", "receivedDate"); const extremumMinR = getExtremumDate(dates, "min", "receivedDate"); - const max = extremumMaxR > extremumMaxS ? extremumMaxR : extremumMaxS; - const min = extremumMinR < extremumMinS ? extremumMinR : extremumMinS; + const maxDate = extremumMaxR > extremumMaxS ? extremumMaxR : extremumMaxS; + const minDate = extremumMinR < extremumMinS ? extremumMinR : extremumMinS; - return { max, min }; + return { maxDate, minDate }; }; diff --git a/src/renderer/views/dashboard/DashboardRecap.tsx b/src/renderer/views/dashboard/DashboardRecap.tsx index 05f22f19..3661c1fd 100644 --- a/src/renderer/views/dashboard/DashboardRecap.tsx +++ b/src/renderer/views/dashboard/DashboardRecap.tsx @@ -6,12 +6,14 @@ import { Card } from "../../components/common/card/Card"; import { ContactPicto, ExtremeDatePicto, + FolderPicto, MailPicto, MailSentPicto, TrashPicto, } from "../../components/common/pictos/picto"; import { usePstStore } from "../../store/PSTStore"; import { + getPstListOfFolder, getPstMailsPercentage, getPstTotalContacts, getPstTotalDeletedMails, @@ -33,6 +35,7 @@ export const DashboardRecap: FC = () => { const switchView = useCallback(() => { setIsRecapReady(true); }, []); + const { pstFile, deletedFolder, extractTables } = usePstStore(); // mails received @@ -59,8 +62,17 @@ export const DashboardRecap: FC = () => { // contact const contactTotal = getPstTotalContacts(extractTables?.contacts); + if (!pstFile) return null; + + // folders + const totalFolderSize = getPstListOfFolder(pstFile.children).length; + // dates extrêmes - const { min, max } = getExtremeMailsDates(extractTables!); + const { minDate, maxDate } = getExtremeMailsDates(extractTables!); + // TODO: move to default config (?) + const extremeDateFormatParam: Intl.DateTimeFormatOptions = { + dateStyle: "full", + }; return ( {isRecapReady ? ( @@ -87,7 +99,7 @@ export const DashboardRecap: FC = () => { picto={} /> } /> @@ -109,14 +121,48 @@ export const DashboardRecap: FC = () => { style.dashboard__recap__informations__item } > - {t("dashboard.recap.extremum.min", { min })} + {t("dashboard.recap.extremum.minDate", { + formatParams: { + minDate: extremeDateFormatParam, + }, + minDate, + })} + + + {t("dashboard.recap.extremum.maxDate", { + formatParams: { + maxDate: extremeDateFormatParam, + }, + maxDate, + })} + + + +
+
+ +
+ +
+ + {t("dashboard.recap.folderLabel")} - {t("dashboard.recap.extremum.max", { max })} + {t("dashboard.recap.folder", { + count: totalFolderSize, + })}
diff --git a/src/renderer/views/dashboard/DashboardRecapItem.tsx b/src/renderer/views/dashboard/DashboardRecapItem.tsx index 1692bab7..de68165a 100644 --- a/src/renderer/views/dashboard/DashboardRecapItem.tsx +++ b/src/renderer/views/dashboard/DashboardRecapItem.tsx @@ -36,7 +36,7 @@ export const DashboardRecapItem: FC = ({ - {contact} {t("dashboard.recap.contacts")} + {t("dashboard.recap.contact", { count: contact })} ) : ( @@ -54,12 +54,14 @@ export const DashboardRecapItem: FC = ({ - {mails ?? 0} {t("dashboard.recap.mails")} + {t("dashboard.recap.mail", { count: mails ?? 0 })} - {attachements} {t("dashboard.recap.pc")} + {t("dashboard.recap.attachement", { + count: attachements, + })} )} diff --git a/static/locales/en-GB/translation.json b/static/locales/en-GB/translation.json index 59d5855e..26aeff7e 100644 --- a/static/locales/en-GB/translation.json +++ b/static/locales/en-GB/translation.json @@ -32,13 +32,24 @@ "dashboard.informations.to": "Recipient(s)", "dashboard.informations.type": "Type", "dashboard.recap.cardTitle": "Summary", - "dashboard.recap.contacts": "Contacts", - "dashboard.recap.deletedMessages": "Deleted messages", - "dashboard.recap.extremum.max": "Max: {{ max, number }}", - "dashboard.recap.extremum.min": "Min: {{ min, number }}", + "dashboard.recap.contactsTitle": "Contacts", + "dashboard.recap.contact_zero": "No contact", + "dashboard.recap.contact_one": "{{ count }} contact", + "dashboard.recap.contact_other": "{{ count }} contacts", + "dashboard.recap.deletedMessages": "Deleted message(s)", + "dashboard.recap.folderLabel": "File(s)", + "dashboard.recap.folder_zero": "No file", + "dashboard.recap.folder_one": "{{ count }} file", + "dashboard.recap.folder_other": "{{ count }} files", + "dashboard.recap.extremum.maxDate": "Max: {{ maxDate, datetime }}", + "dashboard.recap.extremum.minDate": "Min: {{ minDate, datetime }}", "dashboard.recap.extremum": "Extreme dates", - "dashboard.recap.mails": "Emails", - "dashboard.recap.pc": "pc", + "dashboard.recap.mail_zero": "No mail", + "dashboard.recap.mail_one": "{{ count }} mail", + "dashboard.recap.mail_other": "{{ count }} mails", + "dashboard.recap.attachement_zero": "No attachement", + "dashboard.recap.attachement_one": "{{ count }} attachement", + "dashboard.recap.attachement_other": "{{ count }} attachements", "dashboard.recap.receivedMessages": "Messages received", "dashboard.recap.selectFolder.choosePlaceholder": "Choose your deleted messages folder", "dashboard.recap.selectFolder.selector": "To view your PST summary, select your deleted emails folder", diff --git a/static/locales/fr-FR/translation.json b/static/locales/fr-FR/translation.json index 188cbbb9..c196fff6 100644 --- a/static/locales/fr-FR/translation.json +++ b/static/locales/fr-FR/translation.json @@ -32,18 +32,29 @@ "dashboard.informations.to": "Destinataire(s)", "dashboard.informations.type": "Type", "dashboard.recap.cardTitle": "Synthèse", - "dashboard.recap.contacts": "Contacts", - "dashboard.recap.deletedMessages": "Messages supprimés", - "dashboard.recap.extremum.max": "Max : {{ max, number }}", - "dashboard.recap.extremum.min": "Min : {{ min, number }}", + "dashboard.recap.contactsTitle": "Contact(s)", + "dashboard.recap.contact_zero": "Aucun contact", + "dashboard.recap.contact_one": "{{ count }} contact", + "dashboard.recap.contact_other": "{{ count }} contacts", + "dashboard.recap.deletedMessages": "Message(s) supprimé(s)", + "dashboard.recap.folderLabel": "Dossier(s)", + "dashboard.recap.folder_zero": "Aucun dossier", + "dashboard.recap.folder_one": "{{ count }} dossier", + "dashboard.recap.folder_other": "{{ count }} dossiers", + "dashboard.recap.extremum.maxDate": "Max : {{ maxDate, datetime }}", + "dashboard.recap.extremum.minDate": "Min : {{ minDate, datetime }}", "dashboard.recap.extremum": "Dates extrêmes", - "dashboard.recap.mails": "Mails", - "dashboard.recap.pc": "pj", - "dashboard.recap.receivedMessages": "Messages reçus", + "dashboard.recap.mail_zero": "Aucun email", + "dashboard.recap.mail_one": "{{ count }} email", + "dashboard.recap.mail_other": "{{ count }} emails", + "dashboard.recap.attachement_zero": "Aucune pièce jointe", + "dashboard.recap.attachement_one": "{{ count }} pièce jointe", + "dashboard.recap.attachement_other": "{{ count }} pièces jointes", + "dashboard.recap.receivedMessages": "Message(s) reçu(s)", "dashboard.recap.selectFolder.choosePlaceholder": "Choisissez votre dossier de messages supprimés", "dashboard.recap.selectFolder.selector": "Pour afficher la synthèse de votre PST, sélectionnez votre dossier de mails supprimés", "dashboard.recap.selectFolder.validate": "Valider mon choix", - "dashboard.recap.sentMessages": "Messages envoyés", + "dashboard.recap.sentMessages": "Message(s) envoyé(s)", "dashboard.viewer.breadcrumb.domain": "Domaine", "dashboard.viewer.breadcrumb.id.correspondant": "{{history.domain}} > Correspondant", "dashboard.viewer.breadcrumb.id.domain": "Domaine",