Revert "Move timezone selection to query parameters"
This reverts commit 4d7930060c.
This commit is contained in:
1 parent
4d7930060c
commit
3136e3590a
19 files changed
+147
-129
No files matched your search
@@ -13,10 +13,10 @@ export function useDateParameters() {
|
||||
const {
|
||||
dateRange: { startDate, endDate, unit },
|
||||
} = useDateRange();
|
||||
const { timezone, toUtc, canonicalizeTimezone } = useTimezone();
|
||||
const { timezone, localToUtc, canonicalizeTimezone } = useTimezone();
|
||||
|
||||
const utcStart = toUtc(startDate);
|
||||
const utcEnd = toUtc(endDate);
|
||||
const utcStart = localToUtc(startDate);
|
||||
const utcEnd = localToUtc(endDate);
|
||||
const startAtValue = +utcStart;
|
||||
const endAtValue = +utcEnd;
|
||||
const isStartValid = Number.isFinite(startAtValue);
|
||||
|
||||
@@ -4,26 +4,24 @@ 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';
|
||||
import { useTimezone } from './useTimezone';
|
||||
|
||||
export function useDateRange(options: { ignoreOffset?: boolean; timezone?: string } = {}) {
|
||||
const {
|
||||
query: { date = '', unit = '', offset = 0, compare = 'prev' },
|
||||
} = useNavigation();
|
||||
const { locale } = useLocale();
|
||||
const { timezone: defaultTimezone } = useTimezone();
|
||||
const timezone = options.timezone ?? defaultTimezone;
|
||||
const ignoreOffset = options.ignoreOffset;
|
||||
const dateRange = useMemo(() => {
|
||||
const dateRangeObject = parseDateRange(
|
||||
date || getItem(DATE_RANGE_CONFIG) || DEFAULT_DATE_RANGE_VALUE,
|
||||
unit,
|
||||
locale,
|
||||
timezone,
|
||||
options.timezone,
|
||||
);
|
||||
|
||||
return !ignoreOffset && offset ? getOffsetDateRange(dateRangeObject, +offset) : dateRangeObject;
|
||||
}, [date, unit, offset, locale, timezone, ignoreOffset]);
|
||||
return !options.ignoreOffset && offset
|
||||
? getOffsetDateRange(dateRangeObject, +offset)
|
||||
: dateRangeObject;
|
||||
}, [date, unit, offset, options]);
|
||||
|
||||
const dateCompare = getCompareDate(compare, dateRange.startDate, dateRange.endDate);
|
||||
|
||||
|
||||
@@ -1,35 +1,22 @@
|
||||
import { formatInTimeZone, fromZonedTime, toZonedTime } from 'date-fns-tz';
|
||||
import { useSyncExternalStore } from 'react';
|
||||
import { TIMEZONE_LEGACY } from '@/lib/constants';
|
||||
import { getTimezone, isValidTimezone, normalizeTimezone } from '@/lib/date';
|
||||
import { TIMEZONE_CONFIG, TIMEZONE_LEGACY } from '@/lib/constants';
|
||||
import { getTimezone } from '@/lib/date';
|
||||
import { setItem } from '@/lib/storage';
|
||||
import { setTimezone, useApp } from '@/store/app';
|
||||
import { useLocale } from './useLocale';
|
||||
import { useNavigation } from './useNavigation';
|
||||
|
||||
function canonicalizeTimezone(timezone: string): string {
|
||||
return TIMEZONE_LEGACY[timezone] ?? normalizeTimezone(timezone);
|
||||
}
|
||||
|
||||
function subscribe() {
|
||||
return () => {};
|
||||
}
|
||||
|
||||
function getServerTimezone() {
|
||||
return 'UTC';
|
||||
}
|
||||
const selector = (state: { timezone: string }) => state.timezone;
|
||||
|
||||
export function useTimezone() {
|
||||
const {
|
||||
query: { timezone: queryTimezone },
|
||||
} = useNavigation();
|
||||
const localTimeZone = canonicalizeTimezone(
|
||||
useSyncExternalStore(subscribe, getTimezone, getServerTimezone),
|
||||
);
|
||||
const requestedTimezone =
|
||||
typeof queryTimezone === 'string' ? canonicalizeTimezone(queryTimezone) : undefined;
|
||||
const timezone =
|
||||
requestedTimezone && isValidTimezone(requestedTimezone) ? requestedTimezone : localTimeZone;
|
||||
const timezone = useApp(selector);
|
||||
const localTimeZone = getTimezone();
|
||||
const { dateLocale } = useLocale();
|
||||
|
||||
const saveTimezone = (value: string) => {
|
||||
setItem(TIMEZONE_CONFIG, value);
|
||||
setTimezone(value);
|
||||
};
|
||||
|
||||
const formatTimezoneDate = (date: string, pattern: string) => {
|
||||
return formatInTimeZone(
|
||||
/^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(\.[0-9]{3})?Z$/.test(date)
|
||||
@@ -89,6 +76,10 @@ export function useTimezone() {
|
||||
return toZonedTime(date, localTimeZone);
|
||||
};
|
||||
|
||||
const canonicalizeTimezone = (timezone: string): string => {
|
||||
return TIMEZONE_LEGACY[timezone] ?? timezone;
|
||||
};
|
||||
|
||||
return {
|
||||
timezone,
|
||||
localTimeZone,
|
||||
@@ -96,6 +87,7 @@ export function useTimezone() {
|
||||
fromUtc,
|
||||
localToUtc,
|
||||
localFromUtc,
|
||||
saveTimezone,
|
||||
formatTimezoneDate,
|
||||
formatSeriesTimezone,
|
||||
canonicalizeTimezone,
|
||||
|
||||
Reference in new issue
Block a user