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}
)}
>
)}
}
href={CONTENT_URL}
>
Go to Repositories
>
}
>
>
);
} else if (repoStatus === 'Pending') {
return (
<>
{' '}
{repoStatus}
>
);
}
};
export default RepositoriesStatus;