Skip to content

Commit 59a940e

Browse files
committed
Update DateRangeSelector to use sveltekit-search-params to manage URL state
1 parent 53270f8 commit 59a940e

File tree

1 file changed

+20
-28
lines changed

1 file changed

+20
-28
lines changed

frontend/src/lib/components/DateRangeSelector/DateRangeSelector.svelte

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
CUSTOM,
1111
DATE_RANGE_START_PARAM,
1212
DATE_RANGE_END_PARAM,
13-
type DateRangeOption,
1413
getDateRangeByValue
1514
} from '$lib/constants/date-ranges';
1615
import { Button } from '$lib/components/ui/button';
@@ -19,8 +18,6 @@
1918
2019
import { cn } from '$lib/utils';
2120
import { RangeCalendar } from '$lib/components/ui/range-calendar/index';
22-
import { page } from '$app/stores';
23-
import { parseDateRangeParams } from '$lib/util/date-ranges';
2421
2522
const params = queryParameters(
2623
{
@@ -35,12 +32,31 @@
3532
dateStyle: 'medium'
3633
});
3734
38-
let selectDateRange: DateRangeOption | undefined = $state(undefined);
35+
let selectDateRange = $derived(getDateRangeByValue(params[DATE_RANGE_PARAM]));
36+
3937
let calendarDateRange: DateRange | undefined = $state({
4038
start: undefined,
4139
end: undefined
4240
});
4341
42+
// Update `calendarDateRange` when `selectDateRange` (preset selection) changes
43+
$effect(() => {
44+
const selectedRange = selectDateRange?.getRange();
45+
const isCustomPreset = selectDateRange?.value === CUSTOM;
46+
untrack(() => {
47+
calendarDateRange = {
48+
start: fromAbsolute(
49+
isCustomPreset ? params[DATE_RANGE_START_PARAM] : selectedRange?.[0],
50+
getLocalTimeZone()
51+
),
52+
end: fromAbsolute(
53+
isCustomPreset ? params[DATE_RANGE_END_PARAM] : selectedRange?.[1],
54+
getLocalTimeZone()
55+
)
56+
};
57+
});
58+
});
59+
4460
let dateRangePopoverOpen = $state(false);
4561
let calendarDateRangePopoverOpen = $state(false);
4662
@@ -70,30 +86,6 @@
7086
}
7187
}
7288
73-
$effect(() => {
74-
const url = new URL($page.url);
75-
untrack(() => {
76-
const { dateRangeValue, startTimestamp, endTimestamp } = parseDateRangeParams(
77-
url.searchParams
78-
);
79-
// console.log({ dateRangeValue, startTimestamp, endTimestamp });
80-
// console.log(JSON.parse(JSON.stringify(params)));
81-
82-
// TODO: Use `params` and handle converting non-custom ranges (ex. "Past 1 Month")
83-
selectDateRange = getDateRangeByValue(dateRangeValue);
84-
calendarDateRange = {
85-
start: fromAbsolute(Number(startTimestamp), getLocalTimeZone()),
86-
end: fromAbsolute(Number(endTimestamp), getLocalTimeZone())
87-
};
88-
89-
// selectDateRange = getDateRangeByValue(params[DATE_RANGE_PARAM]);
90-
// calendarDateRange = {
91-
// start: fromAbsolute(params[DATE_RANGE_START_PARAM], getLocalTimeZone()),
92-
// end: fromAbsolute(params[DATE_RANGE_END_PARAM], getLocalTimeZone())
93-
// };
94-
});
95-
});
96-
9789
function getNonCustomDateRanges() {
9890
return DATE_RANGES.filter((range) => range.value !== CUSTOM);
9991
}

0 commit comments

Comments
 (0)