Skip to content

Commit d65c619

Browse files
committed
wire it all up
1 parent b414acf commit d65c619

File tree

5 files changed

+40
-22
lines changed

5 files changed

+40
-22
lines changed

site/src/api/api.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -304,9 +304,17 @@ export type GetTemplatesOptions = Readonly<{
304304
readonly deprecated?: boolean;
305305
}>;
306306

307+
export type GetTemplatesQuery = Readonly<{
308+
readonly q: string;
309+
}>;
310+
307311
function normalizeGetTemplatesOptions(
308-
options: GetTemplatesOptions = {},
312+
options: GetTemplatesOptions | GetTemplatesQuery = {},
309313
): Record<string, string> {
314+
if ("q" in options) {
315+
return options;
316+
}
317+
310318
const params: Record<string, string> = {};
311319
if (options.deprecated !== undefined) {
312320
params["deprecated"] = String(options.deprecated);
@@ -679,7 +687,7 @@ class ApiMethods {
679687
};
680688

681689
getTemplates = async (
682-
options?: GetTemplatesOptions,
690+
options?: GetTemplatesOptions | GetTemplatesQuery,
683691
): Promise<TypesGen.Template[]> => {
684692
const params = normalizeGetTemplatesOptions(options);
685693
const response = await this.axios.get<TypesGen.Template[]>(

site/src/api/queries/templates.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { MutationOptions, QueryClient, QueryOptions } from "react-query";
2-
import { API, type GetTemplatesOptions } from "api/api";
2+
import { API, type GetTemplatesQuery, type GetTemplatesOptions } from "api/api";
33
import type {
44
CreateTemplateRequest,
55
CreateTemplateVersionRequest,
@@ -38,12 +38,13 @@ export const templateByName = (
3838
};
3939
};
4040

41-
const getTemplatesQueryKey = (options?: GetTemplatesOptions) => [
42-
"templates",
43-
options?.deprecated,
44-
];
41+
const getTemplatesQueryKey = (
42+
options?: GetTemplatesOptions | GetTemplatesQuery,
43+
) => ["templates", options];
4544

46-
export const templates = (options?: GetTemplatesOptions) => {
45+
export const templates = (
46+
options?: GetTemplatesOptions | GetTemplatesQuery,
47+
) => {
4748
return {
4849
queryKey: getTemplatesQueryKey(options),
4950
queryFn: () => API.getTemplates(options),

site/src/pages/TemplatesPage/TemplatesFilter.tsx

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import type { FC } from "react";
2-
import { useSearchParams } from "react-router-dom";
32
import {
43
Filter,
54
MenuSkeleton,
65
SearchFieldSkeleton,
7-
useFilter,
6+
type useFilter,
87
} from "components/Filter/filter";
98
import { useFilterMenu } from "components/Filter/menu";
109
import {
@@ -16,19 +15,16 @@ import { UserAvatar } from "components/UserAvatar/UserAvatar";
1615
import { docs } from "utils/docs";
1716
import { Organization } from "api/typesGenerated";
1817

19-
export const TemplatesFilter: FC = () => {
20-
const searchParamsResult = useSearchParams();
21-
const filter = useFilter({
22-
fallbackFilter: "deprecated:false",
23-
searchParamsResult,
24-
onUpdate: () => {}, // reset pagination
25-
});
18+
interface TemplatesFilterProps {
19+
filter: ReturnType<typeof useFilter>;
20+
}
2621

22+
export const TemplatesFilter: FC<TemplatesFilterProps> = ({ filter }) => {
2723
const organizationMenu = useFilterMenu({
2824
onChange: (option) =>
29-
filter.update({ ...filter.values, template: option?.value }),
25+
filter.update({ ...filter.values, organization: option?.value }),
3026
value: filter.values.organization,
31-
id: "status",
27+
id: "organization",
3228
getSelectedOption: async () => {
3329
if (!filter.values.organization) {
3430
return null;
@@ -47,7 +43,7 @@ export const TemplatesFilter: FC = () => {
4743
<Filter
4844
presets={[
4945
{ query: "", name: "All templates" },
50-
{ query: "deprecated", name: "Deprecated templates" },
46+
{ query: "deprecated:true", name: "Deprecated templates" },
5147
]}
5248
learnMoreLink={docs("/templates#template-filtering")}
5349
isLoading={false}

site/src/pages/TemplatesPage/TemplatesPage.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import type { FC } from "react";
22
import { Helmet } from "react-helmet-async";
33
import { useQuery } from "react-query";
4+
import { useSearchParams } from "react-router-dom";
45
import { templateExamples, templates } from "api/queries/templates";
6+
import { useFilter } from "components/Filter/filter";
57
import { useAuthenticated } from "contexts/auth/RequireAuth";
68
import { useDashboard } from "modules/dashboard/useDashboard";
79
import { pageTitle } from "utils/page";
@@ -11,7 +13,14 @@ export const TemplatesPage: FC = () => {
1113
const { permissions } = useAuthenticated();
1214
const { showOrganizations } = useDashboard();
1315

14-
const templatesQuery = useQuery(templates());
16+
const searchParamsResult = useSearchParams();
17+
const filter = useFilter({
18+
fallbackFilter: "deprecated:false",
19+
searchParamsResult,
20+
onUpdate: () => {}, // reset pagination
21+
});
22+
23+
const templatesQuery = useQuery(templates({ q: filter.query }));
1524
const examplesQuery = useQuery({
1625
...templateExamples(),
1726
enabled: permissions.createTemplates,
@@ -25,6 +34,7 @@ export const TemplatesPage: FC = () => {
2534
</Helmet>
2635
<TemplatesPageView
2736
error={error}
37+
filter={filter}
2838
showOrganizations={showOrganizations}
2939
canCreateTemplates={permissions.createTemplates}
3040
examples={examplesQuery.data}

site/src/pages/TemplatesPage/TemplatesPageView.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { ExternalAvatar } from "components/Avatar/Avatar";
1717
import { AvatarData } from "components/AvatarData/AvatarData";
1818
import { AvatarDataSkeleton } from "components/AvatarData/AvatarDataSkeleton";
1919
import { DeprecatedBadge } from "components/Badges/Badges";
20+
import type { useFilter } from "components/Filter/filter";
2021
import {
2122
HelpTooltip,
2223
HelpTooltipContent,
@@ -174,6 +175,7 @@ const TemplateRow: FC<TemplateRowProps> = ({ showOrganizations, template }) => {
174175

175176
export interface TemplatesPageViewProps {
176177
error?: unknown;
178+
filter: ReturnType<typeof useFilter>;
177179
showOrganizations: boolean;
178180
canCreateTemplates: boolean;
179181
examples: TemplateExample[] | undefined;
@@ -182,6 +184,7 @@ export interface TemplatesPageViewProps {
182184

183185
export const TemplatesPageView: FC<TemplatesPageViewProps> = ({
184186
error,
187+
filter,
185188
showOrganizations,
186189
canCreateTemplates,
187190
examples,
@@ -221,7 +224,7 @@ export const TemplatesPageView: FC<TemplatesPageViewProps> = ({
221224
)}
222225
</PageHeader>
223226

224-
<TemplatesFilter />
227+
<TemplatesFilter filter={filter} />
225228

226229
{error ? (
227230
<ErrorAlert error={error} />

0 commit comments

Comments
 (0)