"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.Overview = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _lodash = require("lodash"); var _react = _interopRequireWildcard(require("react")); var _eui = require("@elastic/eui"); var _i18nReact = require("@kbn/i18n-react"); var _public = require("@kbn/kibana-react-plugin/public"); var _sharedUxPageKibanaTemplate = require("@kbn/shared-ux-page-kibana-template"); var _sharedUxAvatarSolution = require("@kbn/shared-ux-avatar-solution"); var _sharedUxPageAnalyticsNoData = require("@kbn/shared-ux-page-analytics-no-data"); var _sharedUxLinkRedirectApp = require("@kbn/shared-ux-link-redirect-app"); var _common = require("../../../common"); var _add_data = require("../add_data"); var _manage_data = require("../manage_data"); var _news_feed = require("../news_feed"); var _ui_metric = require("../../lib/ui_metric"); 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 and the Server Side Public License, v 1; you may not use this file except * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ const sortByOrder = (featureA, featureB) => (featureA.order || Infinity) - (featureB.order || Infinity); const Overview = ({ newsFetchResult, solutions, features }) => { var _share$url$locators$g, _share$url$locators$g2; const [isNewKibanaInstance, setNewKibanaInstance] = (0, _react.useState)(false); const [hasESData, setHasESData] = (0, _react.useState)(false); const [hasDataView, setHasDataView] = (0, _react.useState)(false); const [isLoading, setIsLoading] = (0, _react.useState)(true); const { services } = (0, _public.useKibana)(); const { http, docLinks, dataViews, share, uiSettings, application, chrome, dataViewEditor, customBranding } = services; const addBasePath = http.basePath.prepend; const IS_DARK_THEME = uiSettings.get('theme:darkMode'); // Home does not have a locator implemented, so hard-code it here. const addDataHref = addBasePath('/app/integrations/browse'); const devToolsHref = (_share$url$locators$g = share.url.locators.get('CONSOLE_APP_LOCATOR')) === null || _share$url$locators$g === void 0 ? void 0 : _share$url$locators$g.useUrl({}); const managementHref = (_share$url$locators$g2 = share.url.locators.get('MANAGEMENT_APP_LOCATOR')) === null || _share$url$locators$g2 === void 0 ? void 0 : _share$url$locators$g2.useUrl({ sectionId: '' }); const getFeaturesByCategory = category => features.filter(feature => feature.showOnHomePage && feature.category === category).sort(sortByOrder); const getSolutionGraphicURL = solutionId => `/plugins/kibanaReact/assets/solutions_${solutionId}.svg`; const findFeatureById = featureId => features.find(({ id }) => id === featureId); const kibanaApps = features.filter(({ solutionId }) => solutionId === 'kibana').sort(sortByOrder); const addDataFeatures = getFeaturesByCategory('data'); const manageDataFeatures = getFeaturesByCategory('admin'); const devTools = findFeatureById('console'); // Show card for console if none of the manage data plugins are available, most likely in OSS if (manageDataFeatures.length < 1 && devTools) { manageDataFeatures.push(devTools); } (0, _react.useEffect)(() => { const fetchIsNewKibanaInstance = async () => { const checkData = async () => { const hasUserDataViewValue = await dataViews.hasData.hasUserDataView(); const hasESDataValue = await dataViews.hasData.hasESData(); setNewKibanaInstance(!hasUserDataViewValue && hasESDataValue || !hasESDataValue); setHasDataView(hasUserDataViewValue); setHasESData(hasESDataValue); }; await checkData().catch(e => { setNewKibanaInstance(false); setHasDataView(true); setHasESData(true); setIsLoading(false); }); setIsLoading(false); }; fetchIsNewKibanaInstance(); }, [dataViews]); const renderAppCard = appId => { const app = kibanaApps.find(({ id }) => id === appId); return app ? /*#__PURE__*/_react.default.createElement(_eui.EuiFlexItem, { className: "kbnOverviewApps__item", key: appId }, /*#__PURE__*/_react.default.createElement(_sharedUxLinkRedirectApp.RedirectAppLinksKibanaProvider, (0, _extends2.default)({ coreStart: { application: { currentAppId$: application.currentAppId$, navigateToUrl: application.navigateToUrl } } }, application), /*#__PURE__*/_react.default.createElement(_sharedUxLinkRedirectApp.RedirectAppLinksContainer, null, /*#__PURE__*/_react.default.createElement(_eui.EuiCard, { description: (app === null || app === void 0 ? void 0 : app.subtitle) || '', href: addBasePath(app.path), onClick: () => { (0, _ui_metric.trackUiMetric)(_ui_metric.METRIC_TYPE.CLICK, `app_card_${appId}`); }, image: addBasePath(`/plugins/${_common.PLUGIN_ID}/assets/kibana_${appId}_${IS_DARK_THEME ? 'dark' : 'light'}.svg`), title: app.title, titleElement: "h3", titleSize: "s" })))) : null; }; // Dashboard and discover are displayed in larger cards const mainApps = ['dashboard', 'discover']; const remainingApps = kibanaApps.map(({ id }) => id).filter(id => !mainApps.includes(id)); const onDataViewCreated = () => { setNewKibanaInstance(false); }; if (isLoading) { return /*#__PURE__*/_react.default.createElement(_eui.EuiFlexGroup, { justifyContent: "center", alignItems: "center" }, /*#__PURE__*/_react.default.createElement(_eui.EuiFlexItem, { grow: false }, /*#__PURE__*/_react.default.createElement(_eui.EuiLoadingSpinner, { size: "xl" }))); } if (isNewKibanaInstance) { const analyticsServices = { coreStart: { application, chrome, docLinks, http, customBranding }, dataViews: { ...dataViews, hasData: { ...dataViews.hasData, // We've already called this, so we can optimize the analytics services to // use the already-retrieved data to avoid a double-call. hasESData: () => Promise.resolve(hasESData), hasUserDataView: () => Promise.resolve(hasDataView) } }, dataViewEditor }; return /*#__PURE__*/_react.default.createElement(_sharedUxPageAnalyticsNoData.AnalyticsNoDataPageKibanaProvider, analyticsServices, /*#__PURE__*/_react.default.createElement(_sharedUxPageAnalyticsNoData.AnalyticsNoDataPage, { onDataViewCreated: onDataViewCreated })); } return /*#__PURE__*/_react.default.createElement(_sharedUxPageKibanaTemplate.KibanaPageTemplate, { pageHeader: { iconType: 'logoKibana', pageTitle: /*#__PURE__*/_react.default.createElement(_i18nReact.FormattedMessage, { defaultMessage: "Analytics", id: "kibanaOverview.header.title" }), rightSideItems: (0, _public.overviewPageActions)({ addDataHref, application, devToolsHref, hidden: isNewKibanaInstance, managementHref, showDevToolsLink: !!devTools, showManagementLink: !!manageDataFeatures }), bottomBorder: true }, panelled: false }, /*#__PURE__*/_react.default.createElement(_sharedUxPageKibanaTemplate.KibanaPageTemplate.Section, { bottomBorder: true, "aria-labelledby": "kbnOverviewApps__title", className: "kbnOverviewApps" }, /*#__PURE__*/_react.default.createElement(_eui.EuiScreenReaderOnly, null, /*#__PURE__*/_react.default.createElement("h2", { id: "kbnOverviewApps__title" }, /*#__PURE__*/_react.default.createElement(_i18nReact.FormattedMessage, { id: "kibanaOverview.apps.title", defaultMessage: "Explore these apps" }))), mainApps.length ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_eui.EuiFlexGroup, { className: "kbnOverviewApps__group kbnOverviewApps__group--primary", justifyContent: "center" }, mainApps.map(renderAppCard)), /*#__PURE__*/_react.default.createElement(_eui.EuiSpacer, { size: "l" })) : null, remainingApps.length ? /*#__PURE__*/_react.default.createElement(_eui.EuiFlexGroup, { className: "kbnOverviewApps__group kbnOverviewApps__group--secondary", justifyContent: "center" }, remainingApps.map(renderAppCard)) : null), /*#__PURE__*/_react.default.createElement(_sharedUxPageKibanaTemplate.KibanaPageTemplate.Section, { bottomBorder: true, paddingSize: "xl" }, /*#__PURE__*/_react.default.createElement(_eui.EuiFlexGroup, { alignItems: "flexStart", className: `kbnOverviewSupplements ${newsFetchResult && newsFetchResult.feedItems.length ? 'kbnOverviewSupplements--hasNews' : 'kbnOverviewSupplements--noNews'}` }, newsFetchResult && newsFetchResult.feedItems.length ? /*#__PURE__*/_react.default.createElement(_eui.EuiFlexItem, { grow: 1 }, /*#__PURE__*/_react.default.createElement(_news_feed.NewsFeed, { newsFetchResult: newsFetchResult })) : null, /*#__PURE__*/_react.default.createElement(_eui.EuiFlexItem, { grow: 3 }, solutions.length ? /*#__PURE__*/_react.default.createElement("section", { "aria-labelledby": "kbnOverviewMore__title", className: "kbnOverviewMore" }, /*#__PURE__*/_react.default.createElement(_eui.EuiTitle, { size: "s" }, /*#__PURE__*/_react.default.createElement("h2", { id: "kbnOverviewMore__title" }, /*#__PURE__*/_react.default.createElement(_i18nReact.FormattedMessage, { id: "kibanaOverview.more.title", defaultMessage: "Do more with Elastic" }))), /*#__PURE__*/_react.default.createElement(_eui.EuiSpacer, { size: "m" }), /*#__PURE__*/_react.default.createElement(_eui.EuiFlexGroup, { className: "kbnOverviewMore__content" }, solutions.map(({ id, title, description, icon, path }) => /*#__PURE__*/_react.default.createElement(_eui.EuiFlexItem, { className: "kbnOverviewMore__item", key: id }, /*#__PURE__*/_react.default.createElement(_sharedUxLinkRedirectApp.RedirectAppLinksKibanaProvider, (0, _extends2.default)({ coreStart: { application: { currentAppId$: application.currentAppId$, navigateToUrl: application.navigateToUrl } } }, application), /*#__PURE__*/_react.default.createElement(_sharedUxLinkRedirectApp.RedirectAppLinksContainer, null, /*#__PURE__*/_react.default.createElement(_eui.EuiCard, { className: `kbnOverviewSolution ${id}`, description: description ? description : '', href: addBasePath(path), icon: /*#__PURE__*/_react.default.createElement(_sharedUxAvatarSolution.KibanaSolutionAvatar, { name: title, iconType: icon, size: "xl" }), image: addBasePath(getSolutionGraphicURL((0, _lodash.snakeCase)(id))), title: title, titleElement: "h3", titleSize: "xs", onClick: () => { (0, _ui_metric.trackUiMetric)(_ui_metric.METRIC_TYPE.CLICK, `solution_panel_${id}`); } }))))))) : /*#__PURE__*/_react.default.createElement(_eui.EuiFlexGroup, { className: `kbnOverviewData ${addDataFeatures.length === 1 && manageDataFeatures.length === 1 ? 'kbnOverviewData--compressed' : 'kbnOverviewData--expanded'}` }, /*#__PURE__*/_react.default.createElement(_eui.EuiFlexItem, null, /*#__PURE__*/_react.default.createElement(_add_data.AddData, { addBasePath: addBasePath, features: addDataFeatures })), /*#__PURE__*/_react.default.createElement(_eui.EuiFlexItem, null, /*#__PURE__*/_react.default.createElement(_manage_data.ManageData, { addBasePath: addBasePath, features: manageDataFeatures })))))), /*#__PURE__*/_react.default.createElement(_public.OverviewPageFooter, { addBasePath: addBasePath, path: _common.PLUGIN_PATH, onSetDefaultRoute: () => { (0, _ui_metric.trackUiMetric)(_ui_metric.METRIC_TYPE.CLICK, 'set_kibana_overview_as_default_route'); }, onChangeDefaultRoute: () => { (0, _ui_metric.trackUiMetric)(_ui_metric.METRIC_TYPE.CLICK, 'change_to_different_default_route'); } })); }; exports.Overview = Overview;