import { UISref, useCurrentStateAndParams } from '@uirouter/react'; import classNames from 'classnames'; import * as React from 'react'; import { BuildInfoArtifactsTab } from './BuildInfoArtifactsTab'; import { BuildInfoLogsTab } from './BuildInfoLogsTab'; import type { ICiBuild } from '../domain'; import { duration, relativeTime } from '../../utils'; const infoConfigByBuildStatus: { [key: string]: { statusClass?: string; text: string } } = { SUCCEEDED: { statusClass: 'pass', text: 'Passed', }, FAILED: { statusClass: 'fail', text: 'Failed', }, INCOMPLETE: { statusClass: 'building', text: 'Running', }, ABORTED: { statusClass: 'canceled', text: 'Canceled', }, }; interface IBuildInfoDetailsProps { build: ICiBuild; } export function BuildInfoDetails({ build }: IBuildInfoDetailsProps) { const { params } = useCurrentStateAndParams(); return (

Build #{build.number}

{infoConfigByBuildStatus[build.result]?.text} {relativeTime(build.startTime + build.duration)}
Commit
{' '} {build.commitId} {' '} by {build.author}
Message
{build.commitMessage}

Duration
{duration(build.duration)}
Job
{build.fullDisplayName}
Branch
{build.branchName}
{build.repoLink && ( <>
Repository
{build.projectKey}/{build.repoSlug}
)}
Pull Request
{build.pullRequestNumber?.length < 1 ? (
N/A
) : (
{build.pullRequestNumber}
)}
); } interface IBuildInfoOutputProps { build: ICiBuild; tab: 'logs' | 'artifacts'; } function BuildInfoOutput({ build, tab }: IBuildInfoOutputProps) { return ( <>
Build Log
{build.artifacts.length} {build.artifacts.length === 1 ? 'Artifact' : 'Artifacts'} generated
{tab === 'logs' ? : null} {tab === 'artifacts' ? : null}
); }