import React from 'react'; import { Alert, Button, DescriptionList, DescriptionListDescription, DescriptionListGroup, DescriptionListTerm, Icon, Popover, Spinner, } from '@patternfly/react-core'; import { CheckCircleIcon, ExclamationCircleIcon, ExclamationTriangleIcon, ExternalLinkAltIcon, } from '@patternfly/react-icons'; import { CONTENT_URL } from '../../../../constants'; import { ApiRepositoryResponse } from '../../../../store/contentSourcesApi'; import { convertStringToDate, timestampToDisplayString, } from '../../../../Utilities/time'; import '../../../ImagesTable/ImageBuildStatus.scss'; const getLastIntrospection = ( repoIntrospections: RepositoryStatusProps['repoIntrospections'] ) => { const currentDate = Date.now(); const lastIntrospectionDate = convertStringToDate(repoIntrospections); const timeDeltaInSeconds = Math.floor( (currentDate - lastIntrospectionDate) / 1000 ); if (timeDeltaInSeconds <= 60) { return 'A few seconds ago'; } else if (timeDeltaInSeconds <= 60 * 60) { return 'A few minutes ago'; } else if (timeDeltaInSeconds <= 60 * 60 * 24) { return 'A few hours ago'; } else { return timestampToDisplayString(repoIntrospections); } }; type RepositoryStatusProps = { repoStatus: ApiRepositoryResponse['status']; repoUrl: ApiRepositoryResponse['url']; repoIntrospections: ApiRepositoryResponse['last_introspection_time']; repoFailCount: ApiRepositoryResponse['failed_introspections_count']; }; const RepositoriesStatus = ({ repoStatus, repoUrl, repoIntrospections, repoFailCount, }: RepositoryStatusProps) => { if (repoStatus === 'Valid') { return ( <> {' '} {repoStatus} ); } else if (repoStatus === 'Invalid' || repoStatus === 'Unavailable') { return ( <> {repoUrl ? (

Cannot fetch {repoUrl}

) : ( '' )} {(repoIntrospections || repoFailCount) && ( <> {repoIntrospections && ( Last introspection {getLastIntrospection(repoIntrospections)} )} {repoFailCount && ( Failed attempts {repoFailCount} )}
)} } >
); } else if (repoStatus === 'Pending') { return ( <> {' '} {repoStatus} ); } }; export default RepositoriesStatus;