2020import React , { useCallback , useEffect , useRef , useState } from "react" ;
2121import { Alert , AlertIcon , Box , Divider , Text } from "@chakra-ui/react" ;
2222
23- import useSelection from "src/dag/useSelection" ;
2423import { useGridData } from "src/api" ;
2524import Time from "src/components/Time" ;
2625import { getDuration } from "src/datetime_utils" ;
2726
2827import Row from "./Row" ;
2928
3029interface Props {
30+ runId : string | null ;
31+ taskId : string | null ;
3132 openGroupIds : string [ ] ;
3233 gridScrollRef : React . RefObject < HTMLDivElement > ;
3334 ganttScrollRef : React . RefObject < HTMLDivElement > ;
3435}
3536
36- const Gantt = ( { openGroupIds, gridScrollRef, ganttScrollRef } : Props ) => {
37+ const Gantt = ( {
38+ runId,
39+ taskId,
40+ openGroupIds,
41+ gridScrollRef,
42+ ganttScrollRef,
43+ } : Props ) => {
3744 const ganttRef = useRef < HTMLDivElement > ( null ) ;
3845 const [ top , setTop ] = useState ( 0 ) ;
3946 const [ width , setWidth ] = useState ( 500 ) ;
4047 const [ height , setHeight ] = useState ( "100%" ) ;
41- const {
42- selected : { runId , taskId } ,
43- } = useSelection ( ) ;
48+ const [ startDate , setStartDate ] = useState < string | null | undefined > ( ) ;
49+ const [ endDate , setEndDate ] = useState < string | null | undefined > ( ) ;
50+
4451 const {
4552 data : { dagRuns, groups } ,
4653 } = useGridData ( ) ;
@@ -106,15 +113,6 @@ const Gantt = ({ openGroupIds, gridScrollRef, ganttScrollRef }: Props) => {
106113
107114 const dagRun = dagRuns . find ( ( dr ) => dr . runId === runId ) ;
108115
109- const [ startDate , setStartDate ] = useState (
110- dagRun ?. queuedAt || dagRun ?. startDate
111- ) ;
112-
113- const [ endDate , setEndDate ] = useState (
114- // @ts -ignore
115- dagRun ?. endDate ?? moment ( ) . add ( 1 , "s" ) . toString ( )
116- ) ;
117-
118116 // Check if any task instance dates are outside the bounds of the dag run dates and update our min start and max end
119117 const setGanttDuration = useCallback (
120118 (
@@ -136,21 +134,30 @@ const Gantt = ({ openGroupIds, gridScrollRef, ganttScrollRef }: Props) => {
136134
137135 if ( end && ( ! endDate || Date . parse ( end ) > Date . parse ( endDate ) ) ) {
138136 setEndDate ( end ) ;
137+ } else if ( ! end ) {
138+ // @ts -ignore
139+ setEndDate ( moment ( ) . add ( 1 , "s" ) . toString ( ) ) ;
139140 }
140141 } ,
141142 [ startDate , endDate , setStartDate , setEndDate ]
142143 ) ;
143144
145+ // Reset state when the dagrun changes
144146 useEffect ( ( ) => {
145- groups . children ?. forEach ( ( task ) => {
146- const taskInstance = task . instances . find ( ( ti ) => ti . runId === runId ) ;
147- setGanttDuration (
148- taskInstance ?. queuedDttm ,
149- taskInstance ?. startDate ,
150- taskInstance ?. endDate
151- ) ;
152- } ) ;
153- } , [ groups . children , runId , setGanttDuration ] ) ;
147+ if ( startDate !== dagRun ?. queuedAt && startDate !== dagRun ?. startDate ) {
148+ setStartDate ( dagRun ?. queuedAt || dagRun ?. startDate ) ;
149+ }
150+ if ( ! endDate || endDate !== dagRun ?. endDate ) {
151+ // @ts -ignore
152+ setEndDate ( dagRun ?. endDate ?? moment ( ) . add ( 1 , "s" ) . toString ( ) ) ;
153+ }
154+ } , [
155+ dagRun ?. queuedAt ,
156+ dagRun ?. startDate ,
157+ dagRun ?. endDate ,
158+ startDate ,
159+ endDate ,
160+ ] ) ;
154161
155162 const numBars = Math . round ( width / 100 ) ;
156163 const runDuration = getDuration ( startDate , endDate ) ;
0 commit comments