Bluesky app fork with some witchin' additions 馃挮
witchsky.app
bluesky
fork
client
1import {useState} from 'react'
2import {type I18n} from '@lingui/core'
3import {useLingui} from '@lingui/react'
4
5import {useGetTimeAgo} from '#/lib/hooks/useTimeAgo'
6import {useTickEveryMinute} from '#/state/shell'
7
8export function TimeElapsed({
9 timestamp,
10 children,
11 timeToString,
12}: {
13 timestamp: string
14 children: ({timeElapsed}: {timeElapsed: string}) => React.ReactElement
15 timeToString?: (i18n: I18n, timeElapsed: string) => string
16}) {
17 const {i18n} = useLingui()
18 const ago = useGetTimeAgo()
19 const tick = useTickEveryMinute()
20 const [timeElapsed, setTimeAgo] = useState(() =>
21 timeToString ? timeToString(i18n, timestamp) : ago(timestamp, tick),
22 )
23
24 const [prevTick, setPrevTick] = useState(tick)
25 if (prevTick !== tick) {
26 setPrevTick(tick)
27 setTimeAgo(
28 timeToString ? timeToString(i18n, timestamp) : ago(timestamp, tick),
29 )
30 }
31
32 return children({timeElapsed})
33}