Skip to content

Commit a3835cb

Browse files
committed
feat: show only available change types in dropdown for config changes
Fixes #1642
1 parent 78a1e61 commit a3835cb

File tree

3 files changed

+32
-26
lines changed

3 files changed

+32
-26
lines changed

src/components/Configs/Changes/ConfigChangesFilters/ChangeTypesDropdown.tsx

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,39 @@
1-
import {
2-
ConfigChangesTypeItem,
3-
getConfigsChangesTypesFilter
4-
} from "@flanksource-ui/api/services/configs";
51
import { ChangeIcon } from "@flanksource-ui/components/Icon/ChangeIcon";
62
import TristateReactSelect, {
73
TriStateOptions
84
} from "@flanksource-ui/ui/Dropdowns/TristateReactSelect";
9-
import { useQuery } from "@tanstack/react-query";
10-
import { useCallback } from "react";
5+
import { useMemo } from "react";
116
import { useSearchParams } from "react-router-dom";
127

138
type Props = {
149
onChange?: (value: string | undefined) => void;
1510
searchParamKey?: string;
1611
paramsToReset?: string[];
12+
changeTypes?: Record<string, number>;
13+
isLoading?: boolean;
1714
};
1815

1916
export function ChangesTypesDropdown({
2017
onChange = () => {},
2118
searchParamKey = "changeType",
22-
paramsToReset = []
19+
changeTypes,
20+
paramsToReset = [],
21+
isLoading
2322
}: Props) {
2423
const [searchParams, setSearchParams] = useSearchParams();
2524

26-
const { isLoading, data: configTypeOptions } = useQuery(
27-
["db", "changes_types"],
28-
getConfigsChangesTypesFilter,
29-
{
30-
select: useCallback((data: ConfigChangesTypeItem[] | null) => {
31-
return data?.map(
32-
({ change_type }) =>
33-
({
34-
id: change_type,
35-
label: change_type,
36-
value: change_type,
37-
icon: <ChangeIcon change={{ change_type: change_type }} />
38-
} satisfies TriStateOptions)
39-
);
40-
}, [])
41-
}
42-
);
25+
const configTypeOptions = useMemo(() => {
26+
return changeTypes
27+
? Object.entries(changeTypes).map(([change_type]) => {
28+
return {
29+
id: change_type,
30+
label: change_type,
31+
value: change_type,
32+
icon: <ChangeIcon change={{ change_type: change_type }} />
33+
} satisfies TriStateOptions;
34+
})
35+
: [];
36+
}, [changeTypes]);
4337

4438
const value = searchParams.get(searchParamKey) || undefined;
4539

src/components/Configs/Changes/ConfigChangesFilters/ConfigChangesFilters.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,16 @@ import ConfigChangesDateRangeFilter from "./ConfigChangesDateRangeFIlter";
77
type ConfigChangeFiltersProps = React.HTMLProps<HTMLDivElement> & {
88
paramsToReset?: string[];
99
hideConfigTypeFilter?: boolean;
10+
changeTypes?: Record<string, number>;
11+
isLoading?: boolean;
1012
};
1113

1214
export function ConfigChangeFilters({
1315
className,
1416
paramsToReset,
1517
hideConfigTypeFilter = false,
18+
changeTypes,
19+
isLoading = false,
1620
...props
1721
}: ConfigChangeFiltersProps) {
1822
return (
@@ -23,7 +27,11 @@ export function ConfigChangeFilters({
2327
label="Config Type"
2428
/>
2529
)}
26-
<ChangesTypesDropdown paramsToReset={paramsToReset} />
30+
<ChangesTypesDropdown
31+
changeTypes={changeTypes}
32+
isLoading={isLoading}
33+
paramsToReset={paramsToReset}
34+
/>
2735
<ConfigChangeSeverity paramsToReset={paramsToReset} />
2836
<ConfigChangesDateRangeFilter paramsToReset={paramsToReset} />
2937
</div>

src/pages/config/ConfigChangesPage.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,11 @@ export function ConfigChangesPage() {
175175
<InfoMessage message={errorMessage} />
176176
) : (
177177
<>
178-
<ConfigChangeFilters paramsToReset={["pageIndex", "pageSize"]} />
178+
<ConfigChangeFilters
179+
isLoading={isLoading}
180+
changeTypes={data?.summary}
181+
paramsToReset={["pageIndex", "pageSize"]}
182+
/>
179183
<ConfigChangeHistory
180184
data={changes}
181185
isLoading={isLoading}

0 commit comments

Comments
 (0)