First I have tried looking on Google for an answer before asking this question. I am not sure why the linter is complaining about my code. I am getting the following warning:
./components/blocks/Contact.tsx
119:6  Warning: React Hook useEffect has missing dependencies: 'errors.email', 'errors.message', 'errors.name', and 'errors.phone'. Either include them or remove the dependency array.  react-hooks/exhaustive-deps
Tried wrapping my statements and code inside a function FormOnSubmit Still no luck.
Would highly appreciate if someone can share some advice on this on how to deal this.
My code:
"use client"
import { useCallback, useEffect, useState } from "react"
import { useForm, SubmitHandler } from "react-hook-form"
import { zodResolver } from "@hookform/resolvers/zod"
import { z, ZodType } from "zod"
import validator from "validator"
import { FiUser, FiMail, FiPhone } from "react-icons/fi"
import { cn } from "@/lib/utils"
import { MaxWidthWrapper } from "@/components/ui"
import Button from "./Button"
import Alert from "./Alert"
const Contact = () => {
  const [characterLimit] = useState<number>(150)
  const [personName, setPersonName] = useState<string>()
  const [isSubmitted, setIsSubmitted] = useState<boolean>(false)
  const [showSuccess, setShowSuccess] = useState<boolean>(false)
  const [newMessage, setNewMessage] = useState<Contact>({
    name: "",
    email: "",
    phone: "",
    message: ""
  })
  const schema: ZodType<Contact> = z.object({
    name: z
      .string()
      .min(4, { message: "Naam moet minimaal 4 teken(s) bevatten" })
      .max(20, { message: "Naam mag maximaal 20 teken(s) bevatten" }),
    email: z.string().email({ message: "Ongeldig e-mailadres" }),
    phone: z
      .string()
      .min(10, { message: "Telefoonnummer moet minimaal 10 teken(s) bevatten" })
      .refine(validator.isMobilePhone, { message: "Ongeldige invoer" }),
    message: z
      .string()
      .min(20, { message: "Bericht moet minimaal 20 teken(s) bevatten" })
      .max(characterLimit, {
        message: `Bericht mag maximaal ${characterLimit} teken(s) bevatten`
      })
      .refine(validator.escape)
  })
  const {
    register,
    handleSubmit,
    reset,
    formState,
    clearErrors,
    formState: { errors, isSubmitSuccessful }
  } = useForm<Contact>({
    resolver: zodResolver(schema),
    defaultValues: {},
    reValidateMode: "onSubmit"
  })
  const handleInputChange = (
    e: React.FormEvent<HTMLInputElement> | React.FormEvent<HTMLTextAreaElement>
  ) => {
    setNewMessage({
      ...newMessage,
      [e.currentTarget.name]: e.currentTarget.value
    })
    e.currentTarget.name === "name" && clearErrors("name")
    e.currentTarget.name === "email" && clearErrors("email")
    e.currentTarget.name === "phone" && clearErrors("phone")
    e.currentTarget.name === "message" && clearErrors("message")
  }
  const onSubmit: SubmitHandler<Contact> = useCallback(
    (data) => {
      return new Promise<void>((resolve) => {
        resolve()
        setIsSubmitted(true)
        setPersonName(data.name)
        console.table(data)
        setNewMessage({
          ...newMessage,
          ...data
        })
      })
    },
    [newMessage]
  )
  useEffect(() => {
    const FormOnSubmit = () => {
      if (errors.email || errors.message || errors.name || errors.phone) {
        setShowSuccess(false)
      }
      if (isSubmitSuccessful) {
        setShowSuccess(true)
        reset({
          name: "",
          email: "",
          phone: "",
          message: ""
        })
        setNewMessage({ name: "", email: "", phone: "", message: "" })
      }
    }
    FormOnSubmit()
  }, [])
  const name = register("name")
  const email = register("email")
  const phone = register("phone")
  const message = register("message")
  return (
    <MaxWidthWrapper container>
      <div className="max-w-6xl pb-16 mx-auto text-midnight pt-7">
        <h2 className="text-3xl leading-none text-center sm:text-5xl lg:text-6xl font-playfair">
          Stel hier al je vragen!
        </h2>
        <p className="max-w-lg pt-4 pb-8 mx-auto text-center text-md">
          Lorem ipsum dolor sit amet consectetur adipisicing elit. In, odio
          illum reprehenderit necessitatibus esse ex eos dolor sapiente.
        </p>
        <form autoComplete="off" onSubmit={handleSubmit(onSubmit)}>
          <div className="gap-8 space-y-4 lg:gap-20 md:flex md:space-y-0">
            <div className="w-full space-y-4">
              <label className="block space-y-3">
                <span className="text-lg md:text-xl font-playfair">
                  Naam en achternaam*
                </span>
                <div className="relative flex items-center group">
                  <FiUser className="absolute w-6 h-6 pointer-events-none left-5 stroke-midnight" />
                  <input
                    {...name}
                    onChange={handleInputChange}
                    value={newMessage.name}
                    className={cn(
                      errors.name
                        ? "placeholder:text-red-800 border-red-800"
                        : "placeholder:text-midnight border-midnight",
                      "w-full py-3 text-sm md:text-base pr-5 bg-white border-1 text-midnight outline-none pl-14 rounded-xl disabled:bg-gray-100 disabled:placeholder:text-gray-400"
                    )}
                    placeholder="Naam en achternaam"
                  />
                </div>
                {errors.name && (
                  <p className="text-xs font-bold text-red-800">
                    {errors.name.message}
                  </p>
                )}
              </label>
              <label className="block space-y-3">
                <span className="text-lg md:text-xl font-playfair">
                  E-mailadres*
                </span>
                <div className="relative flex items-center group text-midnight">
                  <FiMail className="absolute w-6 h-6 pointer-events-none left-5" />
                  <input
                    {...email}
                    onChange={handleInputChange}
                    value={newMessage.email}
                    className={cn(
                      errors.email
                        ? "placeholder:text-red-800 border-red-800"
                        : "placeholder:text-midnight border-midnight",
                      "w-full py-3 text-sm md:text-base pr-5 bg-white border-1 text-midnight outline-none pl-14 rounded-xl disabled:bg-gray-100 disabled:placeholder:text-gray-400"
                    )}
                    placeholder="E-mailadres"
                  />
                </div>
                {errors.email && (
                  <p className="text-xs font-bold text-red-800">
                    {errors.email.message}
                  </p>
                )}
              </label>
              <label className="relative block space-y-3">
                <span className="text-lg md:text-xl font-playfair">
                  Telefoonnummer*
                </span>
                <div className="relative flex items-center group text-midnight">
                  <FiPhone className="absolute w-6 h-6 pointer-events-none left-5"></FiPhone>
                  <input
                    {...phone}
                    onChange={handleInputChange}
                    value={newMessage.phone}
                    maxLength={10}
                    className={cn(
                      errors.phone
                        ? "placeholder:text-red-800 border-red-800"
                        : "placeholder:text-midnight border-midnight",
                      "w-full py-3 text-sm md:text-base pr-5 bg-white border-1 text-midnight outline-none pl-14 rounded-xl disabled:bg-gray-100 disabled:placeholder:text-gray-400"
                    )}
                    placeholder="Telefoonnummer"
                  />
                </div>
                {errors.phone && (
                  <p className="text-xs font-bold text-red-800">
                    {errors.phone.message}
                  </p>
                )}
              </label>
            </div>
            <div className="w-full space-y-3">
              <label className="block space-y-3">
                <span className="text-lg md:text-xl font-playfair">
                  Je bericht*
                </span>
                <textarea
                  {...message}
                  onChange={handleInputChange}
                  value={newMessage.message}
                  rows={10}
                  className={cn(
                    errors.message
                      ? "placeholder:text-red-800 border-red-800"
                      : "placeholder:text-midnight border-midnight",
                    "w-full px-5 py-3 text-sm md:text-base bg-white text-midnight border-1 outline-none resize-none rounded-xl disabled:bg-gray-100 disabled:placeholder:text-gray-400"
                  )}
                  placeholder="Bericht..."
                />
                {errors.message && (
                  <p className="text-xs font-bold text-red-800">
                    {errors.message.message}
                  </p>
                )}
              </label>
              <div className="flex justify-between">
                <div
                  className={cn(
                    "badge font-semibold text-xs",
                    newMessage.message.length > characterLimit &&
                      "badge-error bg-red-800 text-white"
                  )}
                >
                  {newMessage.message.length}/{characterLimit}
                </div>
                <Button
                  buttonType="submit"
                  text="Versturen"
                  buttonClass="btn-secondary"
                />
              </div>
            </div>
          </div>
          {showSuccess && isSubmitted && (
            <Alert
              type="success"
              message={`Bedankt ${personName} voor het versturen van je bericht`}
            />
          )}
        </form>
      </div>
    </MaxWidthWrapper>
  )
}
export default Contact
 
    