forked from
jollywhoppers.com/witchsky.app
Bluesky app fork with some witchin' additions 馃挮
1import {useEffect, useState} from 'react'
2import {type I18n} from '@lingui/core'
3import {plural} from '@lingui/macro'
4
5export function displayDuration(i18n: I18n, durationInMinutes: number) {
6 const roundedDurationInMinutes = Math.round(durationInMinutes)
7 const hours = Math.floor(roundedDurationInMinutes / 60)
8 const minutes = roundedDurationInMinutes % 60
9 const minutesString = i18n._(
10 plural(minutes, {one: '# minute', other: '# minutes'}),
11 )
12 return hours > 0
13 ? i18n._(
14 minutes > 0
15 ? plural(hours, {
16 one: `# hour ${minutesString}`,
17 other: `# hours ${minutesString}`,
18 })
19 : plural(hours, {
20 one: '# hour',
21 other: '# hours',
22 }),
23 )
24 : minutesString
25}
26
27// Trailing debounce
28export function useDebouncedValue<T>(val: T, delayMs: number): T {
29 const [prev, setPrev] = useState(val)
30
31 useEffect(() => {
32 const timeout = setTimeout(() => setPrev(val), delayMs)
33 return () => clearTimeout(timeout)
34 }, [val, delayMs])
35
36 return prev
37}