mirror of
https://github.com/umami-software/umami.git
synced 2026-02-10 15:47:13 +01:00
38 lines
1.2 KiB
TypeScript
38 lines
1.2 KiB
TypeScript
import { useMemo } from 'react';
|
|
import { useLocale } from '@/components/hooks/useLocale';
|
|
import { useNavigation } from '@/components/hooks/useNavigation';
|
|
import { DATE_RANGE_CONFIG, DEFAULT_DATE_RANGE_VALUE } from '@/lib/constants';
|
|
import { getCompareDate, getOffsetDateRange, parseDateRange } from '@/lib/date';
|
|
import { getItem } from '@/lib/storage';
|
|
|
|
export function useDateRange(options: { ignoreOffset?: boolean; timezone?: string } = {}) {
|
|
const {
|
|
query: { date = '', unit = '', offset = 0, compare = 'prev' },
|
|
} = useNavigation();
|
|
const { locale } = useLocale();
|
|
const dateRange = useMemo(() => {
|
|
const dateRangeObject = parseDateRange(
|
|
date || getItem(DATE_RANGE_CONFIG) || DEFAULT_DATE_RANGE_VALUE,
|
|
unit,
|
|
locale,
|
|
options.timezone,
|
|
);
|
|
|
|
return !options.ignoreOffset && offset
|
|
? getOffsetDateRange(dateRangeObject, +offset)
|
|
: dateRangeObject;
|
|
}, [date, unit, offset, options]);
|
|
|
|
const dateCompare = getCompareDate(compare, dateRange.startDate, dateRange.endDate);
|
|
|
|
return {
|
|
date,
|
|
unit,
|
|
offset,
|
|
compare,
|
|
isAllTime: date.endsWith(`:all`),
|
|
isCustomRange: date.startsWith('range:'),
|
|
dateRange,
|
|
dateCompare,
|
|
};
|
|
}
|