UNPKG

@looker/extension-sdk-react

Version:
125 lines (124 loc) 5.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ExtensionConnector = void 0; var _isEqual = _interopRequireDefault(require("lodash/isEqual")); var _react = _interopRequireWildcard(require("react")); var _reactRouterDom = require("react-router-dom"); var _extensionSdk = require("@looker/extension-sdk"); var _ErrorMessage = require("../ErrorMessage"); var _RouteChangeListener = require("../RouteChangeListener"); var _get_initial_route_entries = require("../utils/get_initial_route_entries"); var _setup_close_popovers = require("../utils/setup_close_popovers"); function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); } function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; } var ExtensionConnector = _ref => { var { contextData, updateContextData, connectedCallback, unloadedCallback, onPathnameChange, onRouteChange, hostTracksRoute = true, loadingComponent, requiredLookerVersion, chattyTimeout, children } = _ref; var contextDataRef = (0, _react.useRef)(contextData); var [initialRouteData, setInitialRouteData] = (0, _react.useState)(); var [hostRouteData, setHostRouteData] = (0, _react.useState)({ route: '' }); var [initializing, setInitializing] = (0, _react.useState)(true); var [initializeError, setInitializeError] = (0, _react.useState)(); (0, _react.useEffect)(() => { contextDataRef.current = contextData; }, [contextData]); var setInitialRouteAndRouteState = (0, _react.useCallback)((route, routeState) => { if (hostTracksRoute) { setInitialRouteData({ route, routeState }); } }, [hostTracksRoute, setInitialRouteData]); var hostChangedRoute = (0, _react.useCallback)((_route, routeState) => { var route = _route.startsWith('/') ? _route : '/' + _route; if (route !== hostRouteData.route || !(0, _isEqual.default)(routeState, hostRouteData.routeState)) { setHostRouteData({ route, routeState }); updateContextData({ route, routeState }); } }, [setHostRouteData, updateContextData]); var visualizationDataReceivedCallback = (0, _react.useCallback)(visualizationData => { updateContextData({ visualizationData }); }, [updateContextData]); var tileHostDataChangedCallback = (0, _react.useCallback)(partialHostData => { if (contextDataRef.current.tileSDK) { var { tileSDK } = contextDataRef.current; tileSDK.tileHostDataChanged(partialHostData); updateContextData({ tileHostData: tileSDK.tileHostData }); } }, [updateContextData]); (0, _react.useEffect)(() => { var initialize = function () { var _ref2 = _asyncToGenerator(function* () { try { var extensionHost = yield (0, _extensionSdk.connectExtensionHost)({ setInitialRoute: setInitialRouteAndRouteState, requiredLookerVersion, hostChangedRoute, chattyTimeout, visualizationDataReceivedCallback, tileHostDataChangedCallback }); connectedCallback(extensionHost); setInitializing(false); } catch (error) { console.error(error); setInitializeError(error.message || 'Extension failed to initialize.'); setInitializing(false); } }); return function initialize() { return _ref2.apply(this, arguments); }; }(); initialize(); return () => { unloadedCallback(); }; }, []); (0, _react.useEffect)(() => { return initializing ? undefined : (0, _setup_close_popovers.setupClosePopoversListener)(contextData.extensionSDK); }, [initializing]); return _react.default.createElement(_react.default.Fragment, null, initializing ? loadingComponent : _react.default.createElement(_react.default.Fragment, null, initializeError ? _react.default.createElement(_ErrorMessage.ErrorMessage, { errorMessage: initializeError }) : _react.default.createElement(_react.default.Fragment, null, hostTracksRoute ? _react.default.createElement(_reactRouterDom.MemoryRouter, { initialEntries: (0, _get_initial_route_entries.getInitialRouteEntries)(initialRouteData) }, _react.default.createElement(_RouteChangeListener.RouteChangeListener, { onRouteChange: onRouteChange, onPathnameChange: onPathnameChange, extensionHost: contextData.extensionSDK, hostRoute: hostRouteData.route, hostRouteState: hostRouteData.routeState }), children) : _react.default.createElement(_react.default.Fragment, null, children)))); }; exports.ExtensionConnector = ExtensionConnector; //# sourceMappingURL=ExtensionConnector.js.map