// GeneralDialog.tsx import React, { useState, useImperativeHandle, forwardRef, ReactNode } from 'react'; import { Button } from "antd"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeading } from './dialog'; interface GeneralDialogProps { title?: string; handleOk?: () => void; onClose?: (open: boolean) => void; children: ReactNode; confirmText?: string; initialOpen?: boolean; trigger?: ReactNode; // New trigger prop } export interface GeneralDialogRef { open: () => void; close: () => void; } const GeneralDialog: React.ForwardRefRenderFunction = ({ children, handleOk, title, onClose, confirmText, initialOpen = false, trigger, // Destructure the trigger prop }, ref) => { const [open, setOpen] = useState(initialOpen); const handleClose = (value: boolean) => { setOpen(value); onClose?.(value); }; // Expose open and close methods to parent component via ref useImperativeHandle(ref, () => ({ open: () => setOpen(true), close: () => setOpen(false), })); return ( <> {trigger && React.cloneElement(trigger as React.ReactElement, { onClick: () => setOpen(true) })} {title && {title}} {children}
); }; export default forwardRef(GeneralDialog);