29 lines
820 B
TypeScript
Executable File
29 lines
820 B
TypeScript
Executable File
import {DateFormatter} from '@internationalized/date';
|
|
import {useMemo, useRef} from 'react';
|
|
import {useSelectedLocale} from './selected-locale';
|
|
import {shallowEqual} from '../utils/shallow-equal';
|
|
|
|
export function useDateFormatter(
|
|
options?: Intl.DateTimeFormatOptions
|
|
): DateFormatter {
|
|
// Reuse last options object if it is shallowly equal, which allows the useMemo result to also be reused.
|
|
const lastOptions = useRef<Intl.DateTimeFormatOptions | undefined | null>(
|
|
null
|
|
);
|
|
if (
|
|
options &&
|
|
lastOptions.current &&
|
|
shallowEqual(options as any, lastOptions.current)
|
|
) {
|
|
options = lastOptions.current;
|
|
}
|
|
|
|
lastOptions.current = options;
|
|
|
|
const {localeCode} = useSelectedLocale();
|
|
return useMemo(
|
|
() => new DateFormatter(localeCode, options),
|
|
[localeCode, options]
|
|
);
|
|
}
|