29 lines
1000 B
TypeScript
29 lines
1000 B
TypeScript
import { useCallback, useMemo } from 'react';
|
|||
|
|
import { useSetting } from '../state/hooks/settings';
|
||
|
|
import { settingsAtom } from '../state/settings';
|
||
|
|
import {
|
||
|
|
TimestampStyle,
|
||
|
|
formatShortAge,
|
||
|
|
formatTimestamp,
|
||
|
|
TimestampPrefs,
|
||
|
|
} from '../utils/formatTimestamp';
|
||
|
|
|
||
|
|
/**
|
||
|
|
* [Gitea #139] Timestamp formatting bound to the user's clock/date settings.
|
||
|
|
* `format(ts)` is the everyday "auto" style; pass a style for the others.
|
||
|
|
*/
|
||
|
|
export function useTimestampFormatter() {
|
||
|
|
const [hour24Clock] = useSetting(settingsAtom, 'hour24Clock');
|
||
|
|
const [dateFormatString] = useSetting(settingsAtom, 'dateFormatString');
|
||
|
|
const prefs = useMemo<TimestampPrefs>(
|
||
|
|
() => ({ hour24Clock, dateFormatString }),
|
||
|
|
[hour24Clock, dateFormatString],
|
||
|
|
);
|
||
|
|
const format = useCallback(
|
||
|
|
(ts: number, style: TimestampStyle = 'auto') => formatTimestamp(ts, prefs, style),
|
||
|
|
[prefs],
|
||
|
|
);
|
||
|
|
const shortAge = useCallback((ts: number) => formatShortAge(ts, prefs), [prefs]);
|
||
|
|
return { format, shortAge, prefs };
|
||
|
|
}
|