import React, { useCallback } from 'react'; import toast from 'react-hot-toast'; import { useNavigate, useParams } from 'react-router-dom'; import { Chip, IconButton, Spinner } from '@material-tailwind/react'; import { relativeTimeISO } from '../../../utils/time'; import { GitRepositoryDetails } from '../../../types'; import { useGQLClient } from '../../../context/GQLClientContext'; interface ProjectRepoCardProps { repository: GitRepositoryDetails; } const ProjectRepoCard: React.FC = ({ repository }) => { const client = useGQLClient(); const navigate = useNavigate(); const [isLoading, setIsLoading] = React.useState(false); const { orgSlug } = useParams(); const createProject = useCallback(async () => { if (!repository) { return; } setIsLoading(true); const { addProject } = await client.addProject(orgSlug!, { name: `${repository.owner!.login}-${repository.name}`, prodBranch: repository.default_branch!, repository: repository.full_name, // TODO: Compute template from repo template: 'webapp', }); if (Boolean(addProject)) { setIsLoading(false); navigate(`import?projectId=${addProject.id}`); } else { setIsLoading(false); toast.error('Failed to create project'); } }, [client, repository]); return (
^
{repository.full_name} {repository.visibility === 'private' && ( )}

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

{isLoading ? ( ) : (
{'>'}
)}
); }; export default ProjectRepoCard;