UNPKG

zent

Version:

一套前端设计语言和基于React的实现

36 lines (35 loc) 1.35 kB
import { __assign } from "tslib"; import { createElement, forwardRef, useContext } from 'react'; import { isForwardRef } from 'react-is'; import PopoverContext from './Context'; function isClassComponent(component) { var _a; return !!((_a = component === null || component === void 0 ? void 0 : component.prototype) === null || _a === void 0 ? void 0 : _a.isReactComponent); } export function usePopover() { var ctx = useContext(PopoverContext); if (ctx === null) { throw new Error('usePopover must be used as child of Popover'); } return ctx.popover; } export function exposePopover(propName) { return function expose(Base) { var componentName = Base.displayName || Base.constructor.name || 'Component'; var shouldPassRef = isClassComponent(Base) || isForwardRef(Base); var comp = forwardRef(function (props, ref) { var _a; var popover = usePopover(); var childProps = (_a = {}, _a[propName] = popover, _a); if (shouldPassRef) { childProps.ref = ref; } return createElement(Base, __assign(__assign({}, props), childProps)); }); comp.displayName = "withPopover(" + componentName + ")"; return comp; }; } export default exposePopover('popover');