Skip to content

Commit 5c47bdf

Browse files
committed
Add action filter
1 parent bf39e76 commit 5c47bdf

File tree

2 files changed

+62
-1
lines changed

2 files changed

+62
-1
lines changed

site/src/pages/AuditPage/AuditFilter.tsx

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
1+
import { AuditActions } from "api/typesGenerated"
12
import { UserFilterMenu, UserMenu } from "components/Filter/UserFilter"
23
import {
34
Filter,
5+
FilterMenu,
46
MenuSkeleton,
7+
OptionItem,
58
SearchFieldSkeleton,
69
useFilter,
710
} from "components/Filter/filter"
11+
import { UseFilterMenuOptions, useFilterMenu } from "components/Filter/menu"
12+
import { BaseOption } from "components/Filter/options"
13+
import capitalize from "lodash/capitalize"
814

915
export const AuditFilter = ({
1016
filter,
@@ -15,20 +21,65 @@ export const AuditFilter = ({
1521
error?: unknown
1622
menus: {
1723
user: UserFilterMenu
24+
action: ActionFilterMenu
1825
}
1926
}) => {
2027
return (
2128
<Filter
2229
isLoading={menus.user.isInitializing}
2330
filter={filter}
2431
error={error}
25-
options={<UserMenu {...menus.user} />}
32+
options={
33+
<>
34+
<ActionMenu {...menus.action} />
35+
<UserMenu {...menus.user} />
36+
</>
37+
}
2638
skeleton={
2739
<>
2840
<SearchFieldSkeleton />
2941
<MenuSkeleton />
42+
<MenuSkeleton />
3043
</>
3144
}
3245
/>
3346
)
3447
}
48+
49+
export const useActionFilterMenu = ({
50+
value,
51+
onChange,
52+
}: Pick<UseFilterMenuOptions<BaseOption>, "value" | "onChange">) => {
53+
const actionOptions: BaseOption[] = AuditActions.map((action) => ({
54+
value: action,
55+
label: capitalize(action),
56+
}))
57+
return useFilterMenu({
58+
onChange,
59+
value,
60+
id: "status",
61+
getSelectedOption: async () =>
62+
actionOptions.find((option) => option.value === value) ?? null,
63+
getOptions: async () => actionOptions,
64+
})
65+
}
66+
67+
export type ActionFilterMenu = ReturnType<typeof useActionFilterMenu>
68+
69+
const ActionMenu = (menu: ActionFilterMenu) => {
70+
return (
71+
<FilterMenu
72+
id="action-menu"
73+
menu={menu}
74+
label={
75+
menu.selectedOption ? (
76+
<OptionItem option={menu.selectedOption} />
77+
) : (
78+
"All actions"
79+
)
80+
}
81+
>
82+
{(itemProps) => <OptionItem {...itemProps} />}
83+
</FilterMenu>
84+
)
85+
}

site/src/pages/AuditPage/AuditPage.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { useDashboard } from "components/Dashboard/DashboardProvider"
1111
import { usePagination } from "hooks"
1212
import { useQuery } from "@tanstack/react-query"
1313
import { getAuditLogs } from "api/api"
14+
import { useActionFilterMenu } from "./AuditFilter"
1415

1516
const AuditPage: FC = () => {
1617
const dashboard = useDashboard()
@@ -30,6 +31,14 @@ const AuditPage: FC = () => {
3031
username: option?.value,
3132
}),
3233
})
34+
const actionMenu = useActionFilterMenu({
35+
value: filter.values.action,
36+
onChange: (option) =>
37+
filter.update({
38+
...filter.values,
39+
action: option?.value,
40+
}),
41+
})
3342
const { audit_log: isAuditLogVisible } = useFeatureVisibility()
3443
const { data, error } = useQuery({
3544
queryKey: ["auditLogs", filter.query, pagination.page],
@@ -62,6 +71,7 @@ const AuditPage: FC = () => {
6271
filter,
6372
menus: {
6473
user: userMenu,
74+
action: actionMenu,
6575
},
6676
}
6777
: {

0 commit comments

Comments
 (0)