@@ -11,29 +11,39 @@ import { DateTime } from "luxon";
11
11
import { Job } from "../../api/api" ;
12
12
import BatchChip from "../../misc/BatchChip" ;
13
13
14
- export default function ViewJobs ( ) {
15
- const retColDefs : [
16
- ColDef < Job , number > ,
17
- ColDef < Job > ,
18
- ColDef < Job , string | null > ,
19
- ] = [
14
+ export default function ViewJobs ( { height = "80vh" , url = "/job/grid_sort" } ) {
15
+ const retColDefs : [ ColDef < Job , number > , ColDef < Job , string | null > ] = [
20
16
{
21
17
field : "retry" ,
22
18
headerName : "Retries Used" ,
23
19
sortable : true ,
24
- filter : true ,
25
- } ,
26
- {
27
- valueGetter : ( params ) => 4 - ( params . data ?. retry ?? 0 ) ,
28
- headerName : "Retries Left" ,
29
- sortable : true ,
30
- filter : true ,
20
+ filter : "agMultiColumnFilter" ,
21
+ filterParams : {
22
+ filters : [
23
+ {
24
+ filter : "agNumberColumnFilter" ,
25
+ } ,
26
+ {
27
+ filter : "agSetColumnFilter" ,
28
+ } ,
29
+ ] ,
30
+ } ,
31
31
} ,
32
32
{
33
33
field : "delayed_until" ,
34
34
headerName : "Delayed Until" ,
35
35
sortable : true ,
36
- filter : true ,
36
+ filter : "agMultiColumnFilter" ,
37
+ filterParams : {
38
+ filters : [
39
+ {
40
+ filter : "agDateColumnFilter" ,
41
+ } ,
42
+ {
43
+ filter : "agSetColumnFilter" ,
44
+ } ,
45
+ ] ,
46
+ } ,
37
47
} ,
38
48
] ;
39
49
const colDefs : [
@@ -46,13 +56,53 @@ export default function ViewJobs() {
46
56
ColDef < Job , string > ,
47
57
ColDef < Job , number > ,
48
58
] = [
49
- { field : "id" , headerName : "ID" , sortable : true , filter : true } ,
50
- { field : "url" , headerName : "URL" , sortable : true , filter : true } ,
59
+ {
60
+ field : "id" ,
61
+ headerName : "ID" ,
62
+ sortable : true ,
63
+ filter : "agMultiColumnFilter" ,
64
+ filterParams : {
65
+ filters : [
66
+ {
67
+ filter : "agNumberColumnFilter" ,
68
+ } ,
69
+ {
70
+ filter : "agSetColumnFilter" ,
71
+ } ,
72
+ ] ,
73
+ } ,
74
+ } ,
75
+ {
76
+ field : "url" ,
77
+ headerName : "URL" ,
78
+ sortable : true ,
79
+ filter : "agMultiColumnFilter" ,
80
+ filterParams : {
81
+ filters : [
82
+ {
83
+ filter : "agTextColumnFilter" ,
84
+ } ,
85
+ {
86
+ filter : "agSetColumnFilter" ,
87
+ } ,
88
+ ] ,
89
+ } ,
90
+ } ,
51
91
{
52
92
field : "batches" ,
53
93
headerName : "Batches" ,
54
- sortable : true ,
55
- filter : true ,
94
+ sortable : false ,
95
+ filter : "agMultiColumnFilter" ,
96
+ filterParams : {
97
+ filters : [
98
+ {
99
+ filter : "agNumberColumnFilter" ,
100
+ } ,
101
+ {
102
+ filter : "agSetColumnFilter" ,
103
+ } ,
104
+ ] ,
105
+ } ,
56
106
cellRenderer ( params : ICellRendererParams < Job , number [ ] | undefined > ) {
57
107
return ( params . value ?? [ ] ) . map ( ( batchId ) => (
58
108
< >
@@ -66,7 +116,17 @@ export default function ViewJobs() {
66
116
field : "completed" ,
67
117
headerName : "Archive URL" ,
68
118
sortable : true ,
69
- filter : true ,
119
+ filter : "agMultiColumnFilter" ,
120
+ filterParams : {
121
+ filters : [
122
+ {
123
+ filter : "agDateColumnFilter" ,
124
+ } ,
125
+ {
126
+ filter : "agSetColumnFilter" ,
127
+ } ,
128
+ ] ,
129
+ } ,
70
130
cellRenderer ( params : ICellRendererParams < Job , string | null > ) {
71
131
if ( params . value === null || params . value === undefined ) {
72
132
return null ;
@@ -78,7 +138,22 @@ export default function ViewJobs() {
78
138
return < a href = { archiveURLString } > { archiveURLString } </ a > ;
79
139
} ,
80
140
} ,
81
- { field : "failed" , headerName : "Failed At" , sortable : true , filter : true } ,
141
+ {
142
+ field : "failed" ,
143
+ headerName : "Failed At" ,
144
+ sortable : true ,
145
+ filter : "agMultiColumnFilter" ,
146
+ filterParams : {
147
+ filters : [
148
+ {
149
+ filter : "agDateColumnFilter" ,
150
+ } ,
151
+ {
152
+ filter : "agSetColumnFilter" ,
153
+ } ,
154
+ ] ,
155
+ } ,
156
+ } ,
82
157
{
83
158
headerName : "Retries" ,
84
159
children : retColDefs ,
@@ -87,19 +162,44 @@ export default function ViewJobs() {
87
162
field : "created_at" ,
88
163
headerName : "Created At" ,
89
164
sortable : true ,
90
- filter : true ,
165
+ filter : "agMultiColumnFilter" ,
166
+ filterParams : {
167
+ filters : [
168
+ {
169
+ filter : "agDateColumnFilter" ,
170
+ } ,
171
+ {
172
+ filter : "agSetColumnFilter" ,
173
+ } ,
174
+ ] ,
175
+ } ,
176
+ } ,
177
+ {
178
+ field : "priority" ,
179
+ headerName : "Priority" ,
180
+ sortable : true ,
181
+ filter : "agMultiColumnFilter" ,
182
+ filterParams : {
183
+ filters : [
184
+ {
185
+ filter : "agNumberColumnFilter" ,
186
+ } ,
187
+ {
188
+ filter : "agSetColumnFilter" ,
189
+ } ,
190
+ ] ,
191
+ } ,
91
192
} ,
92
- { field : "priority" , headerName : "Priority" , sortable : true , filter : true } ,
93
193
] ;
94
194
95
195
return (
96
- < div className = "ag-theme-quartz" style = { { height : "80vh" } } >
196
+ < div className = "ag-theme-quartz" style = { { height } } >
97
197
< AgGridReact
98
198
rowModelType = "serverSide"
99
199
columnDefs = { colDefs }
100
200
serverSideDatasource = { {
101
201
getRows ( params : IServerSideGetRowsParams < Job > ) {
102
- fetch ( "/job/grid_sort" , {
202
+ fetch ( url , {
103
203
body : JSON . stringify ( params . request ) ,
104
204
method : "POST" ,
105
205
headers : {
0 commit comments