♻️ refactor: use custom toast component and handle error
This commit is contained in:
parent
075cec58e5
commit
f08081932c
@ -1,5 +1,4 @@
|
|||||||
import React, { useCallback } from 'react';
|
import React, { useCallback, useState } from 'react';
|
||||||
import toast from 'react-hot-toast';
|
|
||||||
import { useNavigate, useParams } from 'react-router-dom';
|
import { useNavigate, useParams } from 'react-router-dom';
|
||||||
|
|
||||||
import { Spinner } from '@material-tailwind/react';
|
import { Spinner } from '@material-tailwind/react';
|
||||||
@ -13,6 +12,7 @@ import {
|
|||||||
LockIcon,
|
LockIcon,
|
||||||
} from 'components/shared/CustomIcon';
|
} from 'components/shared/CustomIcon';
|
||||||
import { Button } from 'components/shared/Button';
|
import { Button } from 'components/shared/Button';
|
||||||
|
import { useToast } from 'components/shared/Toast';
|
||||||
|
|
||||||
interface ProjectRepoCardProps {
|
interface ProjectRepoCardProps {
|
||||||
repository: GitRepositoryDetails;
|
repository: GitRepositoryDetails;
|
||||||
@ -23,32 +23,52 @@ export const ProjectRepoCard: React.FC<ProjectRepoCardProps> = ({
|
|||||||
}) => {
|
}) => {
|
||||||
const client = useGQLClient();
|
const client = useGQLClient();
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const [isLoading, setIsLoading] = React.useState(false);
|
const [isLoading, setIsLoading] = useState(false);
|
||||||
|
|
||||||
const { orgSlug } = useParams();
|
const { orgSlug } = useParams();
|
||||||
|
const { toast, dismiss } = useToast();
|
||||||
|
|
||||||
const createProject = useCallback(async () => {
|
const createProject = useCallback(async () => {
|
||||||
if (!repository) {
|
if (!repository || !orgSlug) {
|
||||||
return;
|
return toast({
|
||||||
|
id: 'missing-repository-or-org-slug',
|
||||||
|
title: 'Repository or organization slug is missing',
|
||||||
|
variant: 'error',
|
||||||
|
onDismiss: dismiss,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
setIsLoading(true);
|
setIsLoading(true);
|
||||||
const { addProject } = await client.addProject(orgSlug!, {
|
const { addProject } = await client.addProject(orgSlug, {
|
||||||
name: `${repository.owner!.login}-${repository.name}`,
|
name: `${repository.owner?.login}-${repository.name}`,
|
||||||
prodBranch: repository.default_branch!,
|
prodBranch: repository.default_branch as string,
|
||||||
repository: repository.full_name,
|
repository: repository.full_name,
|
||||||
// TODO: Compute template from repo
|
// TODO: Compute template from repo
|
||||||
template: 'webapp',
|
template: 'webapp',
|
||||||
});
|
});
|
||||||
|
if (addProject) {
|
||||||
if (Boolean(addProject)) {
|
|
||||||
setIsLoading(false);
|
|
||||||
navigate(`import?projectId=${addProject.id}`);
|
navigate(`import?projectId=${addProject.id}`);
|
||||||
} else {
|
} else {
|
||||||
setIsLoading(false);
|
toast({
|
||||||
toast.error('Failed to create project');
|
id: 'failed-to-create-project',
|
||||||
|
title: 'Failed to create project',
|
||||||
|
variant: 'error',
|
||||||
|
onDismiss: dismiss,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}, [client, repository]);
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
toast({
|
||||||
|
id: 'failed-to-create-project',
|
||||||
|
title: 'Failed to create project',
|
||||||
|
variant: 'error',
|
||||||
|
onDismiss: dismiss,
|
||||||
|
});
|
||||||
|
} finally {
|
||||||
|
setIsLoading(false);
|
||||||
|
}
|
||||||
|
}, [client, repository, orgSlug, setIsLoading, navigate, toast]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
|
Loading…
Reference in New Issue
Block a user