import React from 'react'; import { Artifact } from './Artifact'; import type { IArtifact, IExpectedArtifact } from '../../domain'; import './artifactList.less'; export interface IResolvedArtifactListProps { artifacts: IArtifact[]; resolvedExpectedArtifacts?: IExpectedArtifact[]; showingExpandedArtifacts: boolean; } export class ResolvedArtifactList extends React.Component { constructor(props: IResolvedArtifactListProps) { super(props); } public render() { let { artifacts, resolvedExpectedArtifacts } = this.props; const { showingExpandedArtifacts } = this.props; artifacts = artifacts || []; resolvedExpectedArtifacts = resolvedExpectedArtifacts || []; const defaultArtifactRefs: Set = resolvedExpectedArtifacts.reduce((set, rea) => { if (rea && rea.defaultArtifact && rea.defaultArtifact.reference) { set.add(rea.defaultArtifact.reference); } return set; }, new Set()); const decoratedArtifacts = artifacts.filter(({ name, reference, type }) => (name || reference) && type); const decoratedExpectedArtifacts = resolvedExpectedArtifacts .map((rea) => rea.boundArtifact) .filter(({ name, reference, type }) => (name || reference) && type); // if there's none, don't show it if (!showingExpandedArtifacts || (decoratedArtifacts.length === 0 && decoratedExpectedArtifacts.length === 0)) { return null; } // if we're exceeding the limit, don't show it if (!showingExpandedArtifacts) { return null; } const halfIndex = Math.ceil(decoratedArtifacts.length / 2); const columns = [decoratedArtifacts.slice(0, halfIndex), decoratedArtifacts.slice(halfIndex)]; return (
Artifacts
{columns.map((artifactSubset: IArtifact[], colNum: number) => { return (
{artifactSubset.map((artifact: IArtifact, i: number) => { const { reference } = artifact; const isDefault = defaultArtifactRefs.has(reference); return (
); })}
); })}
{decoratedArtifacts.length > decoratedExpectedArtifacts.length && (
{decoratedArtifacts.length - decoratedExpectedArtifacts.length} received artifacts were not consumed
)}
); } }