"use client"; import React, { FC, Fragment, ReactNode, useEffect, useState } from "react"; import { Dialog, Transition } from "@headlessui/react"; import ButtonClose from "@/shared/ButtonClose"; import Button from "@/shared/Button"; export interface NcModalProps { renderContent: () => ReactNode; renderTrigger?: (openModal: Function) => ReactNode; contentExtraClass?: string; contentPaddingClass?: string; triggerText?: ReactNode; modalTitle?: ReactNode; isOpenProp?: boolean; onCloseModal?: () => void; } const NcModal: FC = ({ renderTrigger, renderContent, contentExtraClass = "max-w-screen-xl", contentPaddingClass = "py-4 px-6 md:py-5", triggerText = "Open Modal", modalTitle = "Modal title", isOpenProp, onCloseModal, }) => { let [isOpen, setIsOpen] = useState(!!isOpenProp); function closeModal() { if (typeof isOpenProp !== "boolean") { setIsOpen(false); } onCloseModal && onCloseModal(); } function openModal() { if (typeof isOpenProp !== "boolean") { setIsOpen(true); } } useEffect(() => { setIsOpen(!!isOpenProp); }, [isOpenProp]); return (
{renderTrigger ? ( renderTrigger(openModal) ) : ( )}
{/* This element is to trick the browser into centering the modal contents. */}
{modalTitle && ( {modalTitle} )}
{renderContent()}
); }; export default NcModal;