import Link from "next/link"; import z from "zod"; import styles from "./linkComponent.module.scss"; import { FC, useCallback, useState } from "react"; import axios from "axios"; import { Link as LinkType } from "@prisma/client"; import { parseAxiosError, parseAxiosResponse } from "@utils/fetch"; import useUser from "@utils/hooks/useUser"; import multipleClassNames from "@utils/multipleClassNames"; const LinkComponent: FC<{ link: LinkType }> = ({ link }) => { const user = useUser(); const [error, setError] = useState(null); const [deleted, setDeleted] = useState(false); const deleteLink = useCallback(async (id) => { const parseUserInputResult = z.number().safeParse(id); if (!parseUserInputResult.success) { setError(parseUserInputResult.error.message); return; } const response = await axios .post("/api/link/delete", { id }) .then(parseAxiosResponse) .catch(parseAxiosError); if (!response.ok) { setError(JSON.stringify(response.error)); return; } setDeleted(true); }, []); if (deleted) return <>; return (
{link.location}
{user !== null && (
edit deleteLink(link.id)}>delete
)}
); }; export default LinkComponent;