import { UISref, useCurrentStateAndParams, useRouter } from '@uirouter/react'; import { isEmpty, trim } from 'lodash'; import * as React from 'react'; import { BuildDetailsScrollContainerContext } from './BuildDetailsScrollContainerContext'; import { BuildInfoDetails } from './BuildInfoDetails'; import { BuildInfoSummaryCard } from './BuildInfoSummaryCard'; import type { Application } from '../../application'; import type { ICiBuild } from '../domain'; import { useDataSource } from '../../presentation'; import { Spinner } from '../../widgets'; import './builds.less'; interface IBuildProps { app: Application; } export function Builds({ app }: IBuildProps) { const dataSource = app.getDataSource('builds'); const { data: builds, status, loaded } = useDataSource(dataSource); const { stateService: { go }, } = useRouter(); const { params, state } = useCurrentStateAndParams(); const buildDetailsScrollContainer = React.useRef(null); React.useEffect(() => { dataSource.activate(); }, []); React.useEffect(() => { if (!isEmpty(builds) && !state.name.includes('.build.buildTab')) { go('home.applications.application.builds.build.buildTab', { buildId: builds[0].id, tab: 'logs' }); } }, [builds]); if (!loaded) { return (
); } if (status === 'ERROR') { return (

There was an error loading builds.

); } const { repoType, repoProjectKey, repoSlug } = app.attributes; const hasAllConfig = [repoType, repoProjectKey, repoSlug].every((attr) => trim(attr)); if (!hasAllConfig) { return (
Welcome! To get started with Builds, you'll need to add a repository to your app's configuration.
); } if (isEmpty(builds)) { return (
Welcome! To get started with Builds, you'll need to make sure that RocketCI is configured for this app.
Please visit{' '} RocketCI {' '} for more details.
); } const selectedBuild = params.buildId ? builds.find((build) => build.id === params.buildId) : null; return ( <>
{builds.map((build) => ( go('home.applications.application.builds.build.buildTab', { buildId: build.id, tab: 'logs' }) } /> ))}
{selectedBuild && ( )}
); }