import * as React from 'react'; import { Component } from 'react'; import { Omit } from 'utility-types'; import PopoverContext, { IPopoverContext } from './PopoverContext'; import Popover from './Popover'; /** * A high order component to expose imperative APIs for popover. * * Adds a popover prop to component. */ export function exposePopover(propName: N) { return function expose( Base: React.ComponentType ) { return class ExposePopover extends Component { static contextType = PopoverContext; context!: IPopoverContext; render() { const { _zentPopover: popover } = this.context || ({} as IPopoverContext); const { registerDescendant, unregisterDescendant, ...others } = popover; const context = { [propName]: others, }; return ; } }; }; } export default exposePopover('popover') as ( Comp: React.ComponentType ) => React.ComponentType>;