import React from "react"; import { useRouter } from "next/router"; import { mutate } from "swr"; // react-hook-form import { useForm } from "react-hook-form"; // headless ui import { Dialog, Transition } from "@headlessui/react"; // services import modulesService from "services/modules.service"; // ui import { Button, Input } from "components/ui"; // types import type { IModule, ModuleLink } from "types"; // fetch-keys import { MODULE_DETAILS } from "constants/fetch-keys"; type Props = { isOpen: boolean; module: IModule | undefined; handleClose: () => void; }; const defaultValues: ModuleLink = { title: "", url: "", }; export const ModuleLinkModal: React.FC = ({ isOpen, module, handleClose }) => { const router = useRouter(); const { workspaceSlug, projectId, moduleId } = router.query; const { register, formState: { errors, isSubmitting }, handleSubmit, reset, setError, } = useForm({ defaultValues, }); const onSubmit = async (formData: ModuleLink) => { if (!workspaceSlug || !projectId || !moduleId) return; const previousLinks = module?.link_module.map((l) => ({ title: l.title, url: l.url })); const payload: Partial = { links_list: [...(previousLinks ?? []), formData], }; await modulesService .patchModule(workspaceSlug as string, projectId as string, moduleId as string, payload) .then((res) => { mutate(MODULE_DETAILS(moduleId as string)); onClose(); }) .catch((err) => { Object.keys(err).map((key) => { setError(key as keyof ModuleLink, { message: err[key].join(", "), }); }); }); }; const onClose = () => { handleClose(); const timeout = setTimeout(() => { reset(defaultValues); clearTimeout(timeout); }, 500); }; return (
Add Link
); };