UNPKG

@enact/ui

Version:

A collection of simplified unstyled cross-platform UI components for Enact

68 lines (63 loc) 2.47 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = exports.FloatingLayerContext = void 0; exports.useFloatingLayerDecorator = useFloatingLayerDecorator; var _useClass = _interopRequireDefault(require("@enact/core/useClass")); var _react = require("react"); var _FloatingLayerContainer = _interopRequireDefault(require("./FloatingLayerContainer")); var _jsxRuntime = require("react/jsx-runtime"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } var FloatingLayerContext = exports.FloatingLayerContext = /*#__PURE__*/(0, _react.createContext)(); /** * Configuration for `useFloatingLayerDecorator` * * @typedef {Object} useFloatingLayerDecoratorConfig * @memberof ui/FloatingLayerDecorator * @property {Function} [floatLayerId] Floating layer id * @private */ /** * Object returned by `useFloatingLayerDecorator` * * @typedef {Object} useFloatingLayerDecoratorInterface * @memberof ui/FloatingLayerDecorator * @property {Function} provideFloatingLayer Provide the wrapper DOM elements * @private */ /** * Close all floating layers registered in the same id * * @param {useFloatingLayerDecoratorConfig} config Configuration options * @returns {useFloatingLayerDecoratorInterface} * @private */ function useFloatingLayerDecorator() { var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var className = config.className, _config$floatLayerId = config.floatLayerId, floatLayerId = _config$floatLayerId === void 0 ? 'floatLayer' : _config$floatLayerId; var floating = (0, _useClass["default"])(_FloatingLayerContainer["default"], { floatLayerId: floatLayerId }); (0, _react.useEffect)(function () { floating.load(); }, []); // eslint-disable-line react-hooks/exhaustive-deps var provideFloatingLayer = (0, _react.useCallback)(function (children) { return /*#__PURE__*/(0, _jsxRuntime.jsx)(FloatingLayerContext, { value: floating.registry.register, children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", { className: className, children: [children, /*#__PURE__*/(0, _jsxRuntime.jsx)("div", { id: floatLayerId, ref: floating.setFloatingLayer }, "floatLayer")] }) }); }, [className, floating, floatLayerId]); return { provideFloatingLayer: provideFloatingLayer }; } var _default = exports["default"] = useFloatingLayerDecorator;