Skip to content

Commit 244792a

Browse files
committed
refactor: extract TemplateInsightsControls component
1 parent 1f9acc3 commit 244792a

File tree

2 files changed

+77
-19
lines changed

2 files changed

+77
-19
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import type { Meta, StoryObj } from "@storybook/react-vite";
2+
import type { ComponentProps } from "react";
3+
import { TemplateInsightsControls } from "./TemplateInsightsPage";
4+
5+
const meta: Meta<typeof TemplateInsightsControls> = {
6+
title: "pages/TemplatePage/TemplateInsightsControls",
7+
component: TemplateInsightsControls,
8+
};
9+
10+
export default meta;
11+
type Story = StoryObj<typeof TemplateInsightsControls>;
12+
13+
const defaultArgs: Partial<ComponentProps<typeof TemplateInsightsControls>> = {
14+
dateRange: { startDate: new Date(), endDate: new Date() },
15+
setDateRange: () => {},
16+
searchParams: new URLSearchParams(),
17+
setSearchParams: () => {},
18+
};
19+
20+
export const Day: Story = {
21+
args: {
22+
...defaultArgs,
23+
interval: "day",
24+
},
25+
};
26+
27+
export const Week: Story = {
28+
args: {
29+
...defaultArgs,
30+
interval: "week",
31+
},
32+
};

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

Lines changed: 45 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ import {
4747
} from "react";
4848
import { Helmet } from "react-helmet-async";
4949
import { useQuery } from "react-query";
50-
import { useSearchParams } from "react-router";
50+
import { type SetURLSearchParams, useSearchParams } from "react-router";
5151
import { getLatencyColor } from "utils/latency";
5252
import {
5353
addTime,
@@ -105,24 +105,13 @@ export default function TemplateInsightsPage() {
105105
</Helmet>
106106
<TemplateInsightsPageView
107107
controls={
108-
<>
109-
<IntervalMenu
110-
value={interval}
111-
onChange={(interval) => {
112-
// When going from daily to week we need to set a safe week range
113-
if (interval === "week") {
114-
setDateRange(lastWeeks(DEFAULT_NUMBER_OF_WEEKS));
115-
}
116-
searchParams.set("interval", interval);
117-
setSearchParams(searchParams);
118-
}}
119-
/>
120-
{interval === "day" ? (
121-
<DailyPicker value={dateRange} onChange={setDateRange} />
122-
) : (
123-
<WeekPicker value={dateRange} onChange={setDateRange} />
124-
)}
125-
</>
108+
<TemplateInsightsControls
109+
interval={interval}
110+
dateRange={dateRange}
111+
setDateRange={setDateRange}
112+
searchParams={searchParams}
113+
setSearchParams={setSearchParams}
114+
/>
126115
}
127116
templateInsights={templateInsights}
128117
userLatency={userLatency}
@@ -134,6 +123,43 @@ export default function TemplateInsightsPage() {
134123
);
135124
}
136125

126+
interface TemplateInsightsControlsProps {
127+
interval: "day" | "week";
128+
dateRange: DateRangeValue;
129+
setDateRange: (value: DateRangeValue) => void;
130+
searchParams: URLSearchParams;
131+
setSearchParams: SetURLSearchParams;
132+
}
133+
134+
export const TemplateInsightsControls: FC<TemplateInsightsControlsProps> = ({
135+
interval,
136+
dateRange,
137+
setDateRange,
138+
searchParams,
139+
setSearchParams,
140+
}) => {
141+
return (
142+
<>
143+
<IntervalMenu
144+
value={interval}
145+
onChange={(interval) => {
146+
// When going from daily to week we need to set a safe week range
147+
if (interval === "week") {
148+
setDateRange(lastWeeks(DEFAULT_NUMBER_OF_WEEKS));
149+
}
150+
searchParams.set("interval", interval);
151+
setSearchParams(searchParams);
152+
}}
153+
/>
154+
{interval === "day" ? (
155+
<DailyPicker value={dateRange} onChange={setDateRange} />
156+
) : (
157+
<WeekPicker value={dateRange} onChange={setDateRange} />
158+
)}
159+
</>
160+
);
161+
};
162+
137163
const getDefaultInterval = (template: Template) => {
138164
const now = new Date();
139165
const templateCreateDate = new Date(template.created_at);

0 commit comments

Comments
 (0)