"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.LensWrapper = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _react = _interopRequireWildcard(require("react")); var _public = require("@kbn/embeddable-plugin/public"); var _react2 = require("@emotion/react"); var _eui = require("@elastic/eui"); var _use_kibana = require("../../hooks/use_kibana"); var _chart_placeholder = require("./chart_placeholder"); var _datemath = require("../../utils/datemath"); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ const LensWrapper = ({ attributes, dateRange, filters, lastReloadRequestTime, loading = false, query, ...props }) => { const { euiTheme } = (0, _eui.useEuiTheme)(); const [intersectionObserverEntry, setIntersectionObserverEntry] = (0, _react.useState)(); const [embeddableLoaded, setEmbeddableLoaded] = (0, _react.useState)(false); const [state, setState] = (0, _react.useState)({ attributes, dateRange, filters, lastReloadRequestTime, query }); const ref = (0, _react.useRef)(null); const observerRef = (0, _react.useRef)(new IntersectionObserver(([value]) => setIntersectionObserverEntry(value), { root: ref.current })); (0, _react.useEffect)(() => { const { current: currentObserver } = observerRef; currentObserver.disconnect(); const { current } = ref; if (current) { currentObserver.observe(current); } return () => currentObserver.disconnect(); }, [ref]); (0, _react.useEffect)(() => { if (intersectionObserverEntry !== null && intersectionObserverEntry !== void 0 && intersectionObserverEntry.isIntersecting) { setState({ attributes, dateRange, filters, lastReloadRequestTime, query }); } }, [attributes, dateRange, filters, intersectionObserverEntry === null || intersectionObserverEntry === void 0 ? void 0 : intersectionObserverEntry.isIntersecting, lastReloadRequestTime, query]); const onLoad = (0, _react.useCallback)(() => { if (!embeddableLoaded) { setEmbeddableLoaded(true); } }, [embeddableLoaded]); const parsedDateRange = (0, _react.useMemo)(() => { const { from = state.dateRange.from, to = state.dateRange.to } = (0, _datemath.parseDateRange)(state.dateRange); return { from, to }; }, [state.dateRange]); const isLoading = loading || !state.attributes; return /*#__PURE__*/_react.default.createElement("div", { css: (0, _react2.css)` position: relative; border-radius: ${euiTheme.size.s}; overflow: hidden; height: 100%; .echLegend .echLegendList { display: flex; } .echMetric { border-radius: ${euiTheme.border.radius.medium}; pointer-events: none; } `, ref: ref }, /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, isLoading && !embeddableLoaded ? /*#__PURE__*/_react.default.createElement(_chart_placeholder.ChartPlaceholder, { style: props.style }) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, isLoading && /*#__PURE__*/_react.default.createElement(_chart_placeholder.ChartLoadingProgress, { hasTopMargin: !props.hidePanelTitles }), /*#__PURE__*/_react.default.createElement(EmbeddableComponentMemo, (0, _extends2.default)({}, props, { attributes: state.attributes, filters: state.filters, lastReloadRequestTime: state.lastReloadRequestTime, onLoad: onLoad, query: state.query, timeRange: parsedDateRange, viewMode: _public.ViewMode.VIEW }))))); }; exports.LensWrapper = LensWrapper; const EmbeddableComponentMemo = /*#__PURE__*/_react.default.memo(({ attributes, ...props }) => { const { services: { lens } } = (0, _use_kibana.useKibanaContextForPlugin)(); const EmbeddableComponent = lens.EmbeddableComponent; if (!attributes) { return /*#__PURE__*/_react.default.createElement(_chart_placeholder.ChartPlaceholder, { style: props.style }); } return /*#__PURE__*/_react.default.createElement(EmbeddableComponent, (0, _extends2.default)({}, props, { attributes: attributes })); });