import React, { useMemo, createElement } from 'react' import { useModalStack } from './ModalRoot' import type { ModalRendererProps } from './types' const ModalIndexContext = React.createContext(null) ModalIndexContext.displayName = 'ModalIndexContext' export const useModalIndex = (): number | null => { return React.useContext(ModalIndexContext) } const ModalRenderer = ({ index }: ModalRendererProps) => { const { stack } = useModalStack() const modalContext = useMemo(() => { return stack[index] }, [stack, index]) if (!modalContext?.component) { return null } return ( {createElement(modalContext.component as React.ComponentType>, { ...modalContext.props, onModalEvent: (...args: unknown[]) => modalContext.emit('modal-event', ...args), })} ) } export default ModalRenderer