Skip to content

Commit 19400d6

Browse files
fix(site): fix week range for insights (#10173)
1 parent b780bff commit 19400d6

File tree

5 files changed

+26
-89
lines changed

5 files changed

+26
-89
lines changed

site/src/pages/TemplatePage/TemplateInsightsPage/DateRange.tsx

+14-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,15 @@ import Button from "@mui/material/Button";
77
import ArrowRightAltOutlined from "@mui/icons-material/ArrowRightAltOutlined";
88
import Popover from "@mui/material/Popover";
99
import { DateRangePicker, createStaticRanges } from "react-date-range";
10-
import { format, subDays } from "date-fns";
10+
import {
11+
addDays,
12+
addHours,
13+
format,
14+
isToday,
15+
startOfDay,
16+
startOfHour,
17+
subDays,
18+
} from "date-fns";
1119

1220
// The type definition from @types is wrong
1321
declare module "react-date-range" {
@@ -46,9 +54,12 @@ export const DateRange = ({
4654
endDate: ranges[0].endDate as Date,
4755
};
4856
const handleClose = () => {
57+
const now = new Date();
4958
onChange({
50-
startDate: currentRange.startDate,
51-
endDate: currentRange.endDate,
59+
startDate: startOfDay(currentRange.startDate),
60+
endDate: isToday(currentRange.endDate)
61+
? startOfHour(addHours(now, 1))
62+
: startOfDay(addDays(currentRange.endDate, 1)),
5263
});
5364
setIsOpen(false);
5465
};

site/src/pages/TemplatePage/TemplateInsightsPage/TemplateInsightsPage.tsx

+8-3
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,14 @@ import {
3131
UserLatencyInsightsResponse,
3232
} from "api/typesGenerated";
3333
import { ComponentProps, ReactNode } from "react";
34-
import { subDays, addWeeks } from "date-fns";
34+
import { subDays, addWeeks, format } from "date-fns";
3535
import "react-date-range/dist/styles.css";
3636
import "react-date-range/dist/theme/default.css";
3737
import { DateRange as DailyPicker, DateRangeValue } from "./DateRange";
3838
import Link from "@mui/material/Link";
3939
import CheckCircleOutlined from "@mui/icons-material/CheckCircleOutlined";
4040
import CancelOutlined from "@mui/icons-material/CancelOutlined";
41-
import { getDateRangeFilter, lastWeeks } from "./utils";
41+
import { lastWeeks } from "./utils";
4242
import Tooltip from "@mui/material/Tooltip";
4343
import LinkOutlined from "@mui/icons-material/LinkOutlined";
4444
import { InsightsInterval, IntervalMenu } from "./IntervalMenu";
@@ -70,7 +70,8 @@ export default function TemplateInsightsPage() {
7070

7171
const commonFilters = {
7272
template_ids: template.id,
73-
...getDateRangeFilter(dateRange),
73+
start_time: toISOLocal(dateRange.startDate),
74+
end_time: toISOLocal(dateRange.endDate),
7475
};
7576

7677
const insightsFilter = { ...commonFilters, interval };
@@ -780,3 +781,7 @@ function formatTime(seconds: number): string {
780781
return hours.toFixed(1) + " hours";
781782
}
782783
}
784+
785+
function toISOLocal(d: Date) {
786+
return format(d, "yyyy-MM-dd'T'HH:mm:ssxxx");
787+
}

site/src/pages/TemplatePage/TemplateInsightsPage/WeekPicker.tsx

+1-2
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@ export const WeekPicker = ({
2222
}) => {
2323
const anchorRef = useRef<HTMLButtonElement>(null);
2424
const [open, setOpen] = useState(false);
25-
// Why +1? If you get the week 1 and week 2 the diff is 1, but there are 2 weeks
26-
const numberOfWeeks = differenceInWeeks(value.endDate, value.startDate) + 1;
25+
const numberOfWeeks = differenceInWeeks(value.endDate, value.startDate);
2726

2827
const handleClose = () => {
2928
setOpen(false);

site/src/pages/TemplatePage/TemplateInsightsPage/utils.test.ts

-36
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,8 @@
1-
import {
2-
addDays,
3-
addHours,
4-
format,
5-
startOfDay,
6-
startOfHour,
7-
isToday as isTodayDefault,
8-
startOfWeek,
9-
endOfDay,
10-
endOfWeek,
11-
isSunday,
12-
subWeeks,
13-
} from "date-fns";
14-
15-
type GetDateRangeFilterOptions = {
16-
startDate: Date;
17-
endDate: Date;
18-
// Testing purposes
19-
now?: Date;
20-
isToday?: (date: Date) => boolean;
21-
};
22-
23-
export function getDateRangeFilter(props: GetDateRangeFilterOptions) {
24-
const {
25-
startDate,
26-
endDate,
27-
now = new Date(),
28-
isToday = isTodayDefault,
29-
} = props;
30-
31-
return {
32-
start_time: toISOLocal(startOfDay(startDate)),
33-
end_time: toISOLocal(
34-
isToday(endDate)
35-
? startOfHour(addHours(now, 1))
36-
: startOfDay(addDays(endDate, 1)),
37-
),
38-
};
39-
}
40-
41-
function toISOLocal(d: Date) {
42-
return format(d, "yyyy-MM-dd'T'HH:mm:ssxxx");
43-
}
1+
import { startOfDay, subDays } from "date-fns";
442

453
export const lastWeeks = (numberOfWeeks: number) => {
464
const now = new Date();
47-
const startDate = startOfWeek(subWeeks(now, numberOfWeeks));
48-
const endDate = isSunday(now) ? endOfDay(now) : endOfWeek(subWeeks(now, 1));
5+
const endDate = startOfDay(subDays(now, 1));
6+
const startDate = startOfDay(subDays(endDate, 7 * numberOfWeeks));
497
return { startDate, endDate };
508
};

0 commit comments

Comments
 (0)