Skip to content

Commit 92006aa

Browse files
committed
refactor: Clean up some filter logic
1 parent 32ebe81 commit 92006aa

File tree

2 files changed

+48
-27
lines changed

2 files changed

+48
-27
lines changed

site/src/components/Filter/filter.tsx

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,18 @@ export const MenuSkeleton = () => (
130130
<BaseSkeleton sx={{ minWidth: 200, flexShrink: 0 }} />
131131
);
132132

133+
type FilterProps = {
134+
filter: ReturnType<typeof useFilter>;
135+
skeleton: ReactNode;
136+
isLoading: boolean;
137+
learnMoreLink: string;
138+
learnMoreLabel2?: string;
139+
learnMoreLink2?: string;
140+
error?: unknown;
141+
options?: ReactNode;
142+
presets: PresetFilter[];
143+
};
144+
133145
export const Filter = ({
134146
filter,
135147
isLoading,
@@ -140,17 +152,7 @@ export const Filter = ({
140152
learnMoreLabel2,
141153
learnMoreLink2,
142154
presets,
143-
}: {
144-
filter: ReturnType<typeof useFilter>;
145-
skeleton: ReactNode;
146-
isLoading: boolean;
147-
learnMoreLink: string;
148-
learnMoreLabel2?: string;
149-
learnMoreLink2?: string;
150-
error?: unknown;
151-
options?: ReactNode;
152-
presets: PresetFilter[];
153-
}) => {
155+
}: FilterProps) => {
154156
const shouldDisplayError = hasError(error) && isApiValidationError(error);
155157
const hasFilterQuery = filter.query !== "";
156158
const [searchQuery, setSearchQuery] = useState(filter.query);

site/src/pages/WorkspacesPage/filter/filter.tsx

Lines changed: 35 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,22 @@ import { UserFilterMenu, UserMenu } from "components/Filter/UserFilter";
1818
import { workspaceFilterQuery } from "utils/filters";
1919
import { docs } from "utils/docs";
2020

21-
const PRESET_FILTERS = [
22-
{ query: workspaceFilterQuery.me, name: "My workspaces" },
23-
{ query: workspaceFilterQuery.all, name: "All workspaces" },
21+
type FilterPreset = {
22+
query: string;
23+
name: string;
24+
};
25+
26+
// Can't use as const declarations to make arrays deep readonly because that
27+
// interferes with the type contracts for Filter
28+
const PRESET_FILTERS: FilterPreset[] = [
29+
{
30+
query: workspaceFilterQuery.me,
31+
name: "My workspaces",
32+
},
33+
{
34+
query: workspaceFilterQuery.all,
35+
name: "All workspaces",
36+
},
2437
{
2538
query: workspaceFilterQuery.running,
2639
name: "Running workspaces",
@@ -31,26 +44,32 @@ const PRESET_FILTERS = [
3144
},
3245
];
3346

34-
export const WorkspacesFilter = ({
35-
filter,
36-
error,
37-
menus,
38-
}: {
47+
// Defined outside component so that the array doesn't get reconstructed each render
48+
const PRESETS_WITH_DORMANT: FilterPreset[] = [
49+
...PRESET_FILTERS,
50+
{
51+
query: workspaceFilterQuery.dormant,
52+
name: "Dormant workspaces",
53+
},
54+
];
55+
56+
type WorkspaceFilterProps = {
3957
filter: ReturnType<typeof useFilter>;
4058
error?: unknown;
4159
menus: {
4260
user?: UserFilterMenu;
4361
template: TemplateFilterMenu;
4462
status: StatusFilterMenu;
4563
};
46-
}) => {
47-
const presets = [...PRESET_FILTERS];
48-
if (useIsWorkspaceActionsEnabled()) {
49-
presets.push({
50-
query: workspaceFilterQuery.dormant,
51-
name: "Dormant workspaces",
52-
});
53-
}
64+
};
65+
66+
export const WorkspacesFilter = ({
67+
filter,
68+
error,
69+
menus,
70+
}: WorkspaceFilterProps) => {
71+
const actionsEnabled = useIsWorkspaceActionsEnabled();
72+
const presets = actionsEnabled ? PRESET_FILTERS : PRESETS_WITH_DORMANT;
5473

5574
return (
5675
<Filter

0 commit comments

Comments
 (0)