From 125a50215a7abb9e0b59dbbc62aee49007b05ffe Mon Sep 17 00:00:00 2001 From: Corentin Thomasset Date: Sun, 24 Jul 2022 18:28:06 +0200 Subject: [PATCH] feat(new-tool): added an ETA calculator --- src/plugins/naive.plugin.ts | 2 + .../eta-calculator/eta-calculator.service.ts | 16 ++++ src/tools/eta-calculator/eta-calculator.vue | 80 +++++++++++++++++++ src/tools/eta-calculator/index.ts | 12 +++ src/tools/index.ts | 3 +- 5 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 src/tools/eta-calculator/eta-calculator.service.ts create mode 100644 src/tools/eta-calculator/eta-calculator.vue create mode 100644 src/tools/eta-calculator/index.ts diff --git a/src/plugins/naive.plugin.ts b/src/plugins/naive.plugin.ts index d4e59f85..46627985 100644 --- a/src/plugins/naive.plugin.ts +++ b/src/plugins/naive.plugin.ts @@ -51,9 +51,11 @@ import { NScrollbar, NGradientText, NCode, + NDatePicker, } from 'naive-ui'; const components = [ + NDatePicker, NCode, NGradientText, NScrollbar, diff --git a/src/tools/eta-calculator/eta-calculator.service.ts b/src/tools/eta-calculator/eta-calculator.service.ts new file mode 100644 index 00000000..6c061a9d --- /dev/null +++ b/src/tools/eta-calculator/eta-calculator.service.ts @@ -0,0 +1,16 @@ +import { formatDuration } from 'date-fns'; + +export function formatMsDuration(duration: number) { + const ms = Math.floor(duration % 1000); + const secs = Math.floor(((duration - ms) / 1000) % 60); + const mins = Math.floor((((duration - ms) / 1000 - secs) / 60) % 60); + const hrs = Math.floor((((duration - ms) / 1000 - secs) / 60 - mins) / 60); + + return ( + formatDuration({ + hours: hrs, + minutes: mins, + seconds: secs, + }) + (ms > 0 ? ` ${ms} ms` : '') + ); +} diff --git a/src/tools/eta-calculator/eta-calculator.vue b/src/tools/eta-calculator/eta-calculator.vue new file mode 100644 index 00000000..62a630ca --- /dev/null +++ b/src/tools/eta-calculator/eta-calculator.vue @@ -0,0 +1,80 @@ + + + + + diff --git a/src/tools/eta-calculator/index.ts b/src/tools/eta-calculator/index.ts new file mode 100644 index 00000000..abda2870 --- /dev/null +++ b/src/tools/eta-calculator/index.ts @@ -0,0 +1,12 @@ +import { Hourglass } from '@vicons/tabler'; +import { defineTool } from '../tool'; + +export const tool = defineTool({ + name: 'ETA calculator', + path: '/eta-calculator', + description: + 'An ETA (Estimated Time of Arrival) calculator to know the approximate end time of a task, for example the moment of ending of a download.', + keywords: ['eta', 'calculator', 'estimated', 'time', 'arrival', 'average'], + component: () => import('./eta-calculator.vue'), + icon: Hourglass, +}); diff --git a/src/tools/index.ts b/src/tools/index.ts index 22613d30..98bb6207 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -11,6 +11,7 @@ import { tool as crontabGenerator } from './crontab-generator'; import { tool as dateTimeConverter } from './date-time-converter'; import { tool as deviceInformation } from './device-information'; import { tool as cypher } from './encryption'; +import { tool as etaCalculator } from './eta-calculator'; import { tool as gitMemo } from './git-memo'; import { tool as hashText } from './hash-text'; import { tool as htmlEntities } from './html-entities'; @@ -59,7 +60,7 @@ export const toolsByCategory: ToolCategory[] = [ { name: 'Math', icon: LockOpen, - components: [mathEvaluator], + components: [mathEvaluator, etaCalculator], }, { name: 'Measurement',