import React, { useCallback, useState } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; import { Spinner } from '@snowballtools/material-tailwind-react-fork'; import { relativeTimeISO } from 'utils/time'; import { GitRepositoryDetails } from '../../../../types/types'; import { useGQLClient } from 'context/GQLClientContext'; import { ArrowRightCircleIcon, GithubIcon, LockIcon, } from 'components/shared/CustomIcon'; import { Button } from 'components/shared/Button'; import { useToast } from 'components/shared/Toast'; interface ProjectRepoCardProps { repository: GitRepositoryDetails; } export const ProjectRepoCard: React.FC = ({ repository, }) => { const client = useGQLClient(); const navigate = useNavigate(); const [isLoading, setIsLoading] = useState(false); const { orgSlug } = useParams(); const { toast, dismiss } = useToast(); const createProject = useCallback(async () => { if (!repository || !orgSlug) { return toast({ id: 'missing-repository-or-org-slug', title: 'Repository or organization slug is missing', variant: 'error', onDismiss: dismiss, }); } navigate(`configure`, { state: { repository: { owner: repository.owner?.login, name: repository.name, defaultBranch: repository.default_branch, fullName: repository.full_name, }, orgSlug, }, } ); }, [client, repository, orgSlug, setIsLoading, navigate, toast]); return (
{/* Icon container */}
{/* Content */}

{repository.full_name}

{repository.updated_at && relativeTimeISO(repository.updated_at)}

{repository.visibility === 'private' && (
Private
)}
{/* Right action */} {isLoading ? ( ) : ( )}
); };