From be27e6281ae46b6b7638ccb908a0161ba8892162 Mon Sep 17 00:00:00 2001 From: lmossman Date: Thu, 8 Sep 2022 16:29:33 -0700 Subject: [PATCH] save progress --- airbyte-webapp/src/locales/en.json | 1 + .../components/StatusView.tsx | 22 ++++++++++++++++--- .../src/services/job/JobService.tsx | 7 +++--- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/airbyte-webapp/src/locales/en.json b/airbyte-webapp/src/locales/en.json index 43415b301efb..cf3acb18d50a 100644 --- a/airbyte-webapp/src/locales/en.json +++ b/airbyte-webapp/src/locales/en.json @@ -257,6 +257,7 @@ "sources.syncNow": "Sync now", "sources.source": "Source", "sources.noSync": "No sync yet", + "sources.linkedJobNotFound": "The linked job could not be found", "sources.emptySchema": "Schema is empty", "sources.noSources": "Source list is empty", "sources.sourceSettings": "Source Settings", diff --git a/airbyte-webapp/src/pages/ConnectionPage/pages/ConnectionItemPage/components/StatusView.tsx b/airbyte-webapp/src/pages/ConnectionPage/pages/ConnectionItemPage/components/StatusView.tsx index 4b07bfa9fed7..a811844385a1 100644 --- a/airbyte-webapp/src/pages/ConnectionPage/pages/ConnectionItemPage/components/StatusView.tsx +++ b/airbyte-webapp/src/pages/ConnectionPage/pages/ConnectionItemPage/components/StatusView.tsx @@ -7,6 +7,7 @@ import { Button, ContentCard, LoadingButton } from "components"; import { Tooltip } from "components/base/Tooltip"; import EmptyResource from "components/EmptyResourceBlock"; import { RotateIcon } from "components/icons/RotateIcon"; +import { useAttemptLink } from "components/JobItem/attemptLinkUtils"; import { getFrequencyType } from "config/utils"; import { Action, Namespace } from "core/analytics"; @@ -51,15 +52,22 @@ const StatusView: React.FC = ({ connection }) => { const [activeJob, setActiveJob] = useState(); const [jobPageSize, setJobPageSize] = useState(JOB_PAGE_SIZE_INCREMENT); const analyticsService = useAnalyticsService(); - const { jobs, isPreviousData: isJobPageLoading } = useListJobs({ + const { jobId: linkedJobId } = useAttemptLink(); + const { + jobs, + totalJobCount, + isPreviousData: isJobPageLoading, + } = useListJobs({ configId: connection.connectionId, configTypes: ["sync", "reset_connection"], + includingJobId: linkedJobId ? Number(linkedJobId) : undefined, pagination: { pageSize: jobPageSize, }, }); - const moreJobPagesAvailable = jobs.length === jobPageSize; + const linkedJobNotFound = linkedJobId && jobs.length === 0; + const moreJobPagesAvailable = !linkedJobNotFound && jobPageSize < totalJobCount; useEffect(() => { const jobRunningOrPending = getJobRunningOrPending(jobs); @@ -73,6 +81,8 @@ const StatusView: React.FC = ({ connection }) => { // We need to disable button when job is canceled but the job list still has a running job } as ActiveJob) ); + + setJobPageSize(jobs.length); }, [jobs]); const { openConfirmationModal, closeConfirmationModal } = useConfirmationModalService(); @@ -170,7 +180,13 @@ const StatusView: React.FC = ({ connection }) => { } > - {jobs.length ? : } />} + {jobs.length ? ( + + ) : linkedJobNotFound ? ( + } description="test description" /> + ) : ( + } /> + )} {(moreJobPagesAvailable || isJobPageLoading) && ( diff --git a/airbyte-webapp/src/services/job/JobService.tsx b/airbyte-webapp/src/services/job/JobService.tsx index ac4d58e6d955..074a064a725c 100644 --- a/airbyte-webapp/src/services/job/JobService.tsx +++ b/airbyte-webapp/src/services/job/JobService.tsx @@ -9,7 +9,7 @@ import { JobDebugInfoRead, JobInfoRead, JobListRequestBody, - JobWithAttemptsRead, + JobReadList, Pagination, } from "../../core/request/AirbyteClient"; import { useSuspenseQuery } from "../connector/useSuspenseQuery"; @@ -36,8 +36,9 @@ export const useListJobs = (listParams: JobListRequestBody) => { keepPreviousData: true, suspense: true, }); - // cast to JobWithAttemptsRead[] because (suspense: true) means we will never get undefined - return { jobs: result.data?.jobs as JobWithAttemptsRead[], isPreviousData: result.isPreviousData }; + // cast to JobReadList because (suspense: true) means we will never get undefined + const jobReadList = result.data as JobReadList; + return { jobs: jobReadList.jobs, totalJobCount: jobReadList.totalJobCount, isPreviousData: result.isPreviousData }; }; export const useGetJob = (id: number, enabled = true) => {