Im getting the following error when i try to run npm build after implementing the PATCH method
Type error: Type ‘OmitWithTag<typeof import(“C:/Users/bevan/OneDrive/Desktop/Projects/issue-tracker/app/api/issues/route”), “config” | “generateStaticParams” | “revalidate” | “dynamic” | “dynamicParams” | … 10 more … | “PATCH”, “”>’ does not satisfy the constraint ‘{ [x: string]: never; }’.
Property ‘issueSchema’ is incompatible with index signature.
Type ‘ZodObject<{ title: ZodString; description: ZodString; }, “strip”, ZodTypeAny, { title: string; description: string; }, { title: string; description: string; }>’
is not assignable to type ‘never’.
6 |
7 | // Check that the entry is a valid entry
8 | checkFields<Diff<{
| ^
9 | GET?: Function
10 | HEAD?: Function
11 | OPTIONS?: Function
C:\Users\bevan\OneDrive\Desktop\Projects\issue-tracker\app\api\issues\[id]\route.ts
import { issueSchema } from "@/app/validationSchemas";
import { NextRequest, NextResponse } from "next/server";
import prisma from "@/prisma/client";
export async function PATCH(
request: NextRequest,
{ params }: { params: { id: string } }
) {
const body = await request.json();
const validation = issueSchema.safeParse(body);
if (!validation.success)
return NextResponse.json(validation.error.format(), { status: 400 });
const issue = await prisma.issue.findUnique({
where: { id: parseInt(params.id) },
});
if (!issue)
return NextResponse.json({ error: "Invalid issue" }, { status: 404 });
const updatedIssue = await prisma.issue.update({
where: { id: issue.id },
data: {
title: body.title,
description: body.description,
},
});
return NextResponse.json(updatedIssue);
}
C:\Users\bevan\OneDrive\Desktop\Projects\issue-tracker\app\issues\_components\IssueForm.tsx
"use client";
import { Button, Callout, Text, TextField } from "@radix-ui/themes";
import dynamic from "next/dynamic";
import { useForm, Controller } from "react-hook-form";
import axios from "axios";
import "easymde/dist/easymde.min.css";
import { useRouter } from "next/navigation";
import { useState } from "react";
import { zodResolver } from "@hookform/resolvers/zod";
import { issueSchema } from "@/app/validationSchemas";
import { z } from "zod";
import ErrorMessage from "@/app/components/ErrorMessage";
import Spinner from "@/app/components/Spinner";
import { Issue } from "@prisma/client";
const SimpleMDE = dynamic(() => import("react-simplemde-editor"), {
ssr: false,
});
type IssueFormData = z.infer<typeof issueSchema>;
const IssueForm = ({ issue }: { issue?: Issue }) => {
const router = useRouter();
const {
register,
control,
handleSubmit,
formState: { errors },
} = useForm<IssueFormData>({
resolver: zodResolver(issueSchema),
});
const [error, setError] = useState("");
const [isSubmitting, setSubmitting] = useState(false);
const onSubmit = handleSubmit(async (data) => {
try {
setSubmitting(true);
if (issue) await axios.patch("/api/issues/" + issue.id, data);
else await axios.post("/api/issues", data);
router.push("/issues");
} catch (error) {
setSubmitting(false);
setError("An unexpected error occured");
}
});
return (
<div className="max-w-xl">
{error && (
<Callout.Root color="red" className="mb-5">
<Callout.Text>{error}</Callout.Text>
</Callout.Root>
)}
<form className=" space-y-3" onSubmit={onSubmit}>
<TextField.Root>
<TextField.Input
defaultValue={issue?.title}
placeholder="Title"
{...register("title")}
/>
</TextField.Root>
<ErrorMessage>{errors.title?.message}</ErrorMessage>
<Controller
name="description"
control={control}
defaultValue={issue?.description}
render={({ field }) => (
<SimpleMDE placeholder="Description" {...field} />
)}
/>
<ErrorMessage>{errors.description?.message}</ErrorMessage>
<Button disabled={isSubmitting}>
{issue ? "Update Issue" : "Submit New Issue"}{" "}
{isSubmitting && <Spinner />}
</Button>
</form>
</div>
);
};
export default IssueForm;
Can provide more code snippets if needed. Any help would be appreciated. Thank you