From f27f5c0002a96f428167580714571316d5bd5077 Mon Sep 17 00:00:00 2001 From: Bruno Quaresma Date: Tue, 21 May 2024 16:04:41 -0300 Subject: [PATCH] feat(site): show number of times coder_app is opened (#13335) --- .../TemplateInsightsPage.tsx | 57 ++++++++++++++----- 1 file changed, 42 insertions(+), 15 deletions(-) diff --git a/site/src/pages/TemplatePage/TemplateInsightsPage/TemplateInsightsPage.tsx b/site/src/pages/TemplatePage/TemplateInsightsPage/TemplateInsightsPage.tsx index 5839fb0449..7e824b140e 100644 --- a/site/src/pages/TemplatePage/TemplateInsightsPage/TemplateInsightsPage.tsx +++ b/site/src/pages/TemplatePage/TemplateInsightsPage/TemplateInsightsPage.tsx @@ -52,6 +52,7 @@ import { HelpTooltipTrigger, } from "components/HelpTooltip/HelpTooltip"; import { Loader } from "components/Loader/Loader"; +import { Stack } from "components/Stack/Stack"; import { UserAvatar } from "components/UserAvatar/UserAvatar"; import { useEmbeddedMetadata } from "hooks/useEmbeddedMetadata"; import { useTemplateLayoutContext } from "pages/TemplatePage/TemplateLayout"; @@ -451,7 +452,7 @@ const TemplateUsagePanel: FC = ({ return (
= ({ }, }} /> -
{formatTime(usage.seconds)} -
+ + Opened {usage.times_used.toLocaleString()}{" "} + {usage.times_used === 1 ? "time" : "times"} + +
); })} @@ -869,20 +881,35 @@ const TextValue: FC = ({ children }) => { }; function formatTime(seconds: number): string { - if (seconds < 60) { - return seconds + " seconds"; - } else if (seconds >= 60 && seconds < 3600) { - const minutes = Math.floor(seconds / 60); - return minutes + " minutes"; - } else { - const hours = seconds / 3600; - const minutes = Math.floor(seconds % 3600); - if (minutes === 0) { - return hours.toFixed(0) + " hours"; - } + let value: { + amount: number; + unit: "seconds" | "minutes" | "hours"; + } = { + amount: seconds, + unit: "seconds", + }; - return hours.toFixed(1) + " hours"; + if (seconds >= 60 && seconds < 3600) { + value = { + amount: Math.floor(seconds / 60), + unit: "minutes", + }; + } else { + value = { + amount: seconds / 3600, + unit: "hours", + }; } + + if (value.amount === 1) { + const singularUnit = value.unit.slice(0, -1); + return `${value.amount} ${singularUnit}`; + } + + return `${value.amount.toLocaleString(undefined, { + maximumFractionDigits: 1, + minimumFractionDigits: 0, + })} ${value.unit}`; } function toISOLocal(d: Date, offset: number) {