diff --git a/x-pack/legacy/plugins/apm/public/components/app/ServiceDetails/ServiceIntegrations/index.tsx b/x-pack/legacy/plugins/apm/public/components/app/ServiceDetails/ServiceIntegrations/index.tsx index 9835c01fa10184..4ce3baf5631c8c 100644 --- a/x-pack/legacy/plugins/apm/public/components/app/ServiceDetails/ServiceIntegrations/index.tsx +++ b/x-pack/legacy/plugins/apm/public/components/app/ServiceDetails/ServiceIntegrations/index.tsx @@ -14,6 +14,7 @@ import { i18n } from '@kbn/i18n'; import { memoize } from 'lodash'; import React, { Fragment } from 'react'; import chrome from 'ui/chrome'; +import { idx } from '@kbn/elastic-idx'; import { IUrlParams } from '../../../../context/UrlParamsContext/types'; import { LicenseContext } from '../../../../context/LicenseContext'; import { MachineLearningFlyout } from './MachineLearningFlyout'; @@ -32,7 +33,7 @@ type FlyoutName = null | 'ML' | 'Watcher'; export class ServiceIntegrations extends React.Component { public state: State = { isPopoverOpen: false, activeFlyout: null }; - public getPanelItems = memoize((mlAvailable: boolean) => { + public getPanelItems = memoize((mlAvailable: boolean | undefined) => { let panelItems: EuiContextMenuPanelItemDescriptor[] = []; if (mlAvailable) { panelItems = panelItems.concat(this.getMLPanelItems()); @@ -144,7 +145,9 @@ export class ServiceIntegrations extends React.Component { panels={[ { id: 0, - items: this.getPanelItems(license.features.ml.is_available) + items: this.getPanelItems( + idx(license, _ => _.features.ml.is_available) + ) } ]} /> diff --git a/x-pack/legacy/plugins/apm/public/components/shared/charts/TransactionCharts/index.tsx b/x-pack/legacy/plugins/apm/public/components/shared/charts/TransactionCharts/index.tsx index 76eb7816687dca..ee893553389a13 100644 --- a/x-pack/legacy/plugins/apm/public/components/shared/charts/TransactionCharts/index.tsx +++ b/x-pack/legacy/plugins/apm/public/components/shared/charts/TransactionCharts/index.tsx @@ -18,6 +18,7 @@ import { Location } from 'history'; import React, { Component } from 'react'; import { isEmpty } from 'lodash'; import styled from 'styled-components'; +import { idx } from '@kbn/elastic-idx'; import { NOT_AVAILABLE_LABEL } from '../../../../../common/i18n'; import { Coordinate } from '../../../../../typings/timeseries'; import { ITransactionChartData } from '../../../../selectors/chartSelectors'; @@ -68,7 +69,7 @@ export class TransactionCharts extends Component { : NOT_AVAILABLE_LABEL; }; - public renderMLHeader(hasValidMlLicense: boolean) { + public renderMLHeader(hasValidMlLicense: boolean | undefined) { const { hasMLJob } = this.props; if (!hasValidMlLicense || !hasMLJob) { return null; @@ -140,7 +141,9 @@ export class TransactionCharts extends Component { {license => - this.renderMLHeader(license.features.ml.is_available) + this.renderMLHeader( + idx(license, _ => _.features.ml.is_available) + ) } diff --git a/x-pack/legacy/plugins/apm/public/context/LicenseContext/index.tsx b/x-pack/legacy/plugins/apm/public/context/LicenseContext/index.tsx index 38d869c983a21f..c52258114e4866 100644 --- a/x-pack/legacy/plugins/apm/public/context/LicenseContext/index.tsx +++ b/x-pack/legacy/plugins/apm/public/context/LicenseContext/index.tsx @@ -5,15 +5,14 @@ */ import React from 'react'; import { FETCH_STATUS, useFetcher } from '../../hooks/useFetcher'; -import { loadLicense } from '../../services/rest/xpack'; +import { loadLicense, LicenseApiResponse } from '../../services/rest/xpack'; import { InvalidLicenseNotification } from './InvalidLicenseNotification'; -const initialLicense = { - features: { - watcher: { is_available: false }, - ml: { is_available: false } - }, - license: { is_active: false } +const initialLicense: LicenseApiResponse = { + features: {}, + license: { + is_active: false + } }; export const LicenseContext = React.createContext(initialLicense); diff --git a/x-pack/legacy/plugins/apm/public/services/rest/xpack.ts b/x-pack/legacy/plugins/apm/public/services/rest/xpack.ts index 6f9e4baef399f9..ff4c112c21a172 100644 --- a/x-pack/legacy/plugins/apm/public/services/rest/xpack.ts +++ b/x-pack/legacy/plugins/apm/public/services/rest/xpack.ts @@ -9,30 +9,28 @@ import { callApi } from './callApi'; export interface LicenseApiResponse { license: { - expiry_date_in_millis: number; is_active: boolean; - type: string; }; features: { - beats_management: StringMap; - graph: StringMap; - grokdebugger: StringMap; - index_management: StringMap; - logstash: StringMap; - ml: { + beats_management?: StringMap; + graph?: StringMap; + grokdebugger?: StringMap; + index_management?: StringMap; + logstash?: StringMap; + ml?: { is_available: boolean; license_type: number; has_expired: boolean; enable_links: boolean; show_links: boolean; }; - reporting: StringMap; - rollup: StringMap; - searchprofiler: StringMap; - security: StringMap; - spaces: StringMap; - tilemap: StringMap; - watcher: { + reporting?: StringMap; + rollup?: StringMap; + searchprofiler?: StringMap; + security?: StringMap; + spaces?: StringMap; + tilemap?: StringMap; + watcher?: { is_available: boolean; enable_links: boolean; show_links: boolean;