1
+ import { AuditActions } from "api/typesGenerated"
1
2
import { UserFilterMenu , UserMenu } from "components/Filter/UserFilter"
2
3
import {
3
4
Filter ,
5
+ FilterMenu ,
4
6
MenuSkeleton ,
7
+ OptionItem ,
5
8
SearchFieldSkeleton ,
6
9
useFilter ,
7
10
} 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"
8
14
9
15
export const AuditFilter = ( {
10
16
filter,
@@ -15,20 +21,65 @@ export const AuditFilter = ({
15
21
error ?: unknown
16
22
menus : {
17
23
user : UserFilterMenu
24
+ action : ActionFilterMenu
18
25
}
19
26
} ) => {
20
27
return (
21
28
< Filter
22
29
isLoading = { menus . user . isInitializing }
23
30
filter = { filter }
24
31
error = { error }
25
- options = { < UserMenu { ...menus . user } /> }
32
+ options = {
33
+ < >
34
+ < ActionMenu { ...menus . action } />
35
+ < UserMenu { ...menus . user } />
36
+ </ >
37
+ }
26
38
skeleton = {
27
39
< >
28
40
< SearchFieldSkeleton />
29
41
< MenuSkeleton />
42
+ < MenuSkeleton />
30
43
</ >
31
44
}
32
45
/>
33
46
)
34
47
}
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
+ }
0 commit comments