Bluesky app fork with some witchin' additions 馃挮
at main 1.1 kB view raw
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}