From c9974a887dfba823e01dd7508e59cebaf36f5993 Mon Sep 17 00:00:00 2001 From: Isitha Subasinghe Date: Tue, 1 Nov 2022 15:04:16 +1100 Subject: [PATCH] fix: show pending workflows in workflow list Fixes #9812 (#9909) Signed-off-by: juchao --- .../components/workflows-list/workflows-list.tsx | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/ui/src/app/workflows/components/workflows-list/workflows-list.tsx b/ui/src/app/workflows/components/workflows-list/workflows-list.tsx index 83530db9e52f..5082997df92a 100644 --- a/ui/src/app/workflows/components/workflows-list/workflows-list.tsx +++ b/ui/src/app/workflows/components/workflows-list/workflows-list.tsx @@ -2,7 +2,7 @@ import {Page, SlidingPanel} from 'argo-ui'; import * as React from 'react'; import {RouteComponentProps} from 'react-router-dom'; import * as models from '../../../../models'; -import {labels, Workflow, WorkflowPhase, WorkflowPhases} from '../../../../models'; +import {labels, NODE_PHASE, Workflow, WorkflowPhase, WorkflowPhases} from '../../../../models'; import {uiUrl} from '../../../shared/base'; import {BasePage} from '../../../shared/components/base-page'; @@ -242,6 +242,18 @@ export class WorkflowsList extends BasePage, State> { return dt; } + private nullSafeTimeFilter(minStartedAt: Date, maxStartedAt: Date, startedStr: string, isPending: boolean): boolean { + // looser check for startedStr is intentional to also check for undefined + if (startedStr == null) { + // return true if isPending + // else false + return isPending; + } + const started: Date = new Date(startedStr); + + return started > minStartedAt && started < maxStartedAt; + } + private fetchWorkflows(namespace: string, selectedPhases: WorkflowPhase[], selectedLabels: string[], minStartedAt: Date, maxStartedAt: Date, pagination: Pagination): void { if (this.listWatch) { this.listWatch.stop(); @@ -249,7 +261,7 @@ export class WorkflowsList extends BasePage, State> { this.listWatch = new ListWatch( () => services.workflows.list(namespace, selectedPhases, selectedLabels, pagination).then(x => { - x.items = x.items && x.items.filter(w => new Date(w.status.startedAt) > minStartedAt && new Date(w.status.startedAt) < maxStartedAt); + x.items = x.items && x.items.filter(w => this.nullSafeTimeFilter(minStartedAt, maxStartedAt, w.status.startedAt, w.status.phase === NODE_PHASE.PENDING)); return x; }), (resourceVersion: string) => services.workflows.watchFields({namespace, phases: selectedPhases, labels: selectedLabels, resourceVersion}),