diff --git a/lib/pluralize.js b/lib/pluralize.js new file mode 100644 index 00000000..df430492 --- /dev/null +++ b/lib/pluralize.js @@ -0,0 +1,10 @@ +// pluralize(1, 'apple') => '1 apple' +// pluralize(2, 'apple') => '2 apples' +// pluralize(2, 'apple', false) => 'apples' + +export default function pluralize(count, singular, includeCount = true) { + return ( + (includeCount ? `${count} ` : '') + + (count === 1 ? singular : singular + 's') + ) +} diff --git a/src/app/harbor/signpost/signpost.tsx b/src/app/harbor/signpost/signpost.tsx index ad9ae839..70c2ab68 100644 --- a/src/app/harbor/signpost/signpost.tsx +++ b/src/app/harbor/signpost/signpost.tsx @@ -10,6 +10,8 @@ import Cookies from 'js-cookie' import FeedItems from './feed-items' import { getWakaSessions } from '@/app/utils/waka' +import pluralize from '../../../../lib/pluralize.js' + export default function Signpost() { let wakaKey: string | null = null let hasHb: boolean | null = null @@ -47,13 +49,13 @@ export default function Signpost() { }) }, []) - const hms = wakaSessions - ? new Date(wakaSessions.reduce((a, p) => (a += p.total), 0) * 1_000) - .toISOString() - .slice(11, 19) - .split(':') - .map((s) => Number(s)) - : null + const wakaDuration = wakaSessions?.reduce((a, p) => (a += p.total), 0) + const hms = { hours: 0, minutes: 0, seconds: 0 } + if (wakaDuration) { + hms.hours = Math.floor(wakaDuration / 3600) + hms.minutes = Math.floor((wakaDuration % 3600) / 60) + hms.seconds = wakaDuration % 10 + } // Show or hide instructions for installing Hackatime const [showInstructions, setShowInstructions] = useState(!hasHb) @@ -91,16 +93,16 @@ export default function Signpost() {
{hasHb ? ( <> - {hms ? ( + {wakaDuration ? (
- You've logged {hms[0]} hour{hms[0] !== 1 ? 's' : ''},{' '}
- {hms[1]} minute{hms[1] !== 1 ? 's' : ''},{' '}
+ You've logged {pluralize(hms.hours, 'hour')},{' '}
+ {pluralize(hms.minutes, 'minute')},{' '}
- and {hms[2]} second{hms[2] !== 1 ? 's' : ''} of coding time
- so far!
+ and {pluralize(hms.seconds, 'second')} of coding time so
+ far!