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( 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] ); }