1
- /* eslint-disable max-lines */
2
-
3
1
/*!
4
2
* Licensed to the Apache Software Foundation (ASF) under one
5
3
* or more contributor license agreements. See the NOTICE file
18
16
* specific language governing permissions and limitations
19
17
* under the License.
20
18
*/
21
- import { Flex , Link , HStack , type SelectValueChangeDetails } from "@chakra-ui/react" ;
19
+ import { Flex , Link } from "@chakra-ui/react" ;
22
20
import type { ColumnDef } from "@tanstack/react-table" ;
23
- import { useCallback , useState } from "react" ;
21
+ import { useState } from "react" ;
24
22
import { Link as RouterLink , useParams , useSearchParams } from "react-router-dom" ;
25
23
26
24
import { useTaskInstanceServiceGetTaskInstances } from "openapi/queries" ;
27
- import type { TaskInstanceResponse , TaskInstanceState } from "openapi/requests/types.gen" ;
25
+ import type { TaskInstanceResponse } from "openapi/requests/types.gen" ;
28
26
import { ClearTaskInstanceButton } from "src/components/Clear" ;
29
27
import { DataTable } from "src/components/DataTable" ;
30
28
import { useTableURLState } from "src/components/DataTable/useTableUrlState" ;
31
29
import { ErrorAlert } from "src/components/ErrorAlert" ;
32
30
import { MarkTaskInstanceAsButton } from "src/components/MarkAs" ;
33
- import { SearchBar } from "src/components/SearchBar" ;
34
31
import { StateBadge } from "src/components/StateBadge" ;
35
32
import Time from "src/components/Time" ;
36
- import { Select } from "src/components/ui" ;
37
33
import { SearchParamsKeys , type SearchParamsKeysType } from "src/constants/searchParams" ;
38
- import { taskInstanceStateOptions as stateOptions } from "src/constants/stateOptions" ;
39
- import { capitalize , getDuration , useAutoRefresh , isStatePending } from "src/utils" ;
34
+ import { getDuration , useAutoRefresh , isStatePending } from "src/utils" ;
40
35
import { getTaskInstanceLink } from "src/utils/links" ;
41
36
37
+ import { TaskInstancesFilter } from "./TaskInstancesFilter" ;
38
+
42
39
type TaskInstanceRow = { row : { original : TaskInstanceResponse } } ;
43
40
const {
44
41
END_DATE : END_DATE_PARAM ,
@@ -151,7 +148,7 @@ const taskInstanceColumns = (
151
148
152
149
export const TaskInstances = ( ) => {
153
150
const { dagId, runId, taskId } = useParams ( ) ;
154
- const [ searchParams , setSearchParams ] = useSearchParams ( ) ;
151
+ const [ searchParams ] = useSearchParams ( ) ;
155
152
const { setTableURLState, tableURLState } = useTableURLState ( ) ;
156
153
const { pagination, sorting } = tableURLState ;
157
154
const [ sort ] = sorting ;
@@ -166,39 +163,6 @@ export const TaskInstances = () => {
166
163
searchParams . get ( NAME_PATTERN_PARAM ) ?? undefined ,
167
164
) ;
168
165
169
- const handleStateChange = useCallback (
170
- ( { value } : SelectValueChangeDetails < string > ) => {
171
- const [ val , ...rest ] = value ;
172
-
173
- if ( ( val === undefined || val === "all" ) && rest . length === 0 ) {
174
- searchParams . delete ( STATE_PARAM ) ;
175
- } else {
176
- searchParams . delete ( STATE_PARAM ) ;
177
- value . filter ( ( state ) => state !== "all" ) . map ( ( state ) => searchParams . append ( STATE_PARAM , state ) ) ;
178
- }
179
- setTableURLState ( {
180
- pagination : { ...pagination , pageIndex : 0 } ,
181
- sorting,
182
- } ) ;
183
- setSearchParams ( searchParams ) ;
184
- } ,
185
- [ pagination , searchParams , setSearchParams , setTableURLState , sorting ] ,
186
- ) ;
187
-
188
- const handleSearchChange = ( value : string ) => {
189
- if ( value ) {
190
- searchParams . set ( NAME_PATTERN_PARAM , value ) ;
191
- } else {
192
- searchParams . delete ( NAME_PATTERN_PARAM ) ;
193
- }
194
- setTableURLState ( {
195
- pagination : { ...pagination , pageIndex : 0 } ,
196
- sorting,
197
- } ) ;
198
- setTaskDisplayNamePattern ( value ) ;
199
- setSearchParams ( searchParams ) ;
200
- } ;
201
-
202
166
const refetchInterval = useAutoRefresh ( { } ) ;
203
167
204
168
const { data, error, isLoading } = useTaskInstanceServiceGetTaskInstances (
@@ -224,55 +188,10 @@ export const TaskInstances = () => {
224
188
225
189
return (
226
190
< >
227
- < HStack >
228
- < Select . Root
229
- collection = { stateOptions }
230
- maxW = "250px"
231
- multiple
232
- onValueChange = { handleStateChange }
233
- value = { hasFilteredState ? filteredState : [ "all" ] }
234
- >
235
- < Select . Trigger
236
- { ...( hasFilteredState ? { clearable : true } : { } ) }
237
- colorPalette = "blue"
238
- isActive = { Boolean ( filteredState ) }
239
- >
240
- < Select . ValueText >
241
- { ( ) =>
242
- hasFilteredState ? (
243
- < HStack gap = "10px" >
244
- { filteredState . map ( ( state ) => (
245
- < StateBadge key = { state } state = { state as TaskInstanceState } >
246
- { state === "none" ? "No Status" : capitalize ( state ) }
247
- </ StateBadge >
248
- ) ) }
249
- </ HStack >
250
- ) : (
251
- "All States"
252
- )
253
- }
254
- </ Select . ValueText >
255
- </ Select . Trigger >
256
- < Select . Content >
257
- { stateOptions . items . map ( ( option ) => (
258
- < Select . Item item = { option } key = { option . label } >
259
- { option . value === "all" ? (
260
- option . label
261
- ) : (
262
- < StateBadge state = { option . value as TaskInstanceState } > { option . label } </ StateBadge >
263
- ) }
264
- </ Select . Item >
265
- ) ) }
266
- </ Select . Content >
267
- </ Select . Root >
268
- < SearchBar
269
- buttonProps = { { disabled : true } }
270
- defaultValue = { taskDisplayNamePattern ?? "" }
271
- hideAdvanced
272
- onChange = { handleSearchChange }
273
- placeHolder = "Search Tasks"
274
- />
275
- </ HStack >
191
+ < TaskInstancesFilter
192
+ setTaskDisplayNamePattern = { setTaskDisplayNamePattern }
193
+ taskDisplayNamePattern = { taskDisplayNamePattern }
194
+ />
276
195
< DataTable
277
196
columns = { taskInstanceColumns ( dagId , runId , taskId ) }
278
197
data = { data ?. task_instances ?? [ ] }
0 commit comments