From 6961a16783baffbf5c63b08580ad8a4053607c91 Mon Sep 17 00:00:00 2001 From: Jason Rhodes Date: Tue, 27 Aug 2019 14:28:14 -0400 Subject: [PATCH 1/3] [7.x] [APM] Sets up APM with new shared Kibana core context (#43920) --- .../app/GlobalHelpExtension/index.tsx | 4 +-- .../components/app/Main/UpdateBreadcrumbs.tsx | 4 +-- .../Main/__test__/UpdateBreadcrumbs.test.js | 4 +-- .../app/Main/useUpdateBadgeEffect.ts | 4 +-- .../ServiceIntegrations/WatcherFlyout.tsx | 9 ++++--- .../ServiceIntegrations/index.tsx | 9 ++++--- .../__test__/ServiceOverview.test.tsx | 4 +-- .../components/app/ServiceOverview/index.tsx | 4 +-- .../components/shared/KueryBar/index.tsx | 4 +-- .../Links/DiscoverLinks/DiscoverLink.tsx | 4 +-- .../DiscoverLinks.integration.test.tsx | 4 +-- .../shared/Links/InfraLink.test.tsx | 4 +-- .../components/shared/Links/InfraLink.tsx | 4 +-- .../shared/Links/KibanaLink.test.tsx | 4 +-- .../components/shared/Links/KibanaLink.tsx | 4 +-- .../MachineLearningLinks/MLJobLink.test.tsx | 4 +-- .../MachineLearningLinks/MLLink.test.tsx | 4 +-- .../Links/MachineLearningLinks/MLLink.tsx | 4 +-- .../TransactionActionMenu.tsx | 4 +-- .../__test__/TransactionActionMenu.test.tsx | 4 +-- .../apm/public/context/CoreContext.tsx | 16 ------------ .../InvalidLicenseNotification.tsx | 4 +-- .../plugins/apm/public/hooks/useCore.tsx | 12 --------- x-pack/legacy/plugins/apm/public/index.tsx | 6 ++--- .../apm/public/new-platform/plugin.tsx | 6 ++--- .../siem/public/apps/context/kibana_core.tsx | 25 +++++++++++++++++++ 26 files changed, 79 insertions(+), 80 deletions(-) delete mode 100644 x-pack/legacy/plugins/apm/public/context/CoreContext.tsx delete mode 100644 x-pack/legacy/plugins/apm/public/hooks/useCore.tsx create mode 100644 x-pack/legacy/plugins/siem/public/apps/context/kibana_core.tsx diff --git a/x-pack/legacy/plugins/apm/public/components/app/GlobalHelpExtension/index.tsx b/x-pack/legacy/plugins/apm/public/components/app/GlobalHelpExtension/index.tsx index fb10a65d975bf7..57a0e5ad9ddc4d 100644 --- a/x-pack/legacy/plugins/apm/public/components/app/GlobalHelpExtension/index.tsx +++ b/x-pack/legacy/plugins/apm/public/components/app/GlobalHelpExtension/index.tsx @@ -10,14 +10,14 @@ import React, { Fragment } from 'react'; import styled from 'styled-components'; import url from 'url'; import { px, units } from '../../../style/variables'; -import { useCore } from '../../../hooks/useCore'; +import { useKibanaCore } from '../../../../../observability/public'; const Container = styled.div` margin: ${px(units.minus)} 0; `; export const GlobalHelpExtension: React.SFC = () => { - const core = useCore(); + const core = useKibanaCore(); return ( diff --git a/x-pack/legacy/plugins/apm/public/components/app/Main/UpdateBreadcrumbs.tsx b/x-pack/legacy/plugins/apm/public/components/app/Main/UpdateBreadcrumbs.tsx index 5eb2626f448728..b94860c8fdd8fd 100644 --- a/x-pack/legacy/plugins/apm/public/components/app/Main/UpdateBreadcrumbs.tsx +++ b/x-pack/legacy/plugins/apm/public/components/app/Main/UpdateBreadcrumbs.tsx @@ -8,7 +8,7 @@ import { Location } from 'history'; import { last } from 'lodash'; import React from 'react'; import { InternalCoreStart } from 'src/core/public'; -import { useCore } from '../../../hooks/useCore'; +import { useKibanaCore } from '../../../../../observability/public'; import { getAPMHref } from '../../shared/Links/apm/APMLink'; import { Breadcrumb, ProvideBreadcrumbs } from './ProvideBreadcrumbs'; import { routes } from './route_config'; @@ -45,7 +45,7 @@ class UpdateBreadcrumbsComponent extends React.Component { } export function UpdateBreadcrumbs() { - const core = useCore(); + const core = useKibanaCore(); return ( { - const { chrome } = useCore(); + const { chrome } = useKibanaCore(); useEffect(() => { const uiCapabilities = capabilities.get(); diff --git a/x-pack/legacy/plugins/apm/public/components/app/ServiceDetails/ServiceIntegrations/WatcherFlyout.tsx b/x-pack/legacy/plugins/apm/public/components/app/ServiceDetails/ServiceIntegrations/WatcherFlyout.tsx index 134934ff8425e1..f3497d1235e812 100644 --- a/x-pack/legacy/plugins/apm/public/components/app/ServiceDetails/ServiceIntegrations/WatcherFlyout.tsx +++ b/x-pack/legacy/plugins/apm/public/components/app/ServiceDetails/ServiceIntegrations/WatcherFlyout.tsx @@ -32,11 +32,11 @@ import React, { Component } from 'react'; import styled from 'styled-components'; import { toastNotifications } from 'ui/notify'; import { InternalCoreStart } from 'src/core/public'; +import { KibanaCoreContext } from '../../../../../../observability/public'; import { IUrlParams } from '../../../../context/UrlParamsContext/types'; import { KibanaLink } from '../../../shared/Links/KibanaLink'; import { createErrorGroupWatch, Schedule } from './createErrorGroupWatch'; import { ElasticDocsLink } from '../../../shared/Links/ElasticDocsLink'; -import { CoreContext } from '../../../../context/CoreContext'; type ScheduleKey = keyof Schedule; @@ -83,7 +83,8 @@ export class WatcherFlyout extends Component< WatcherFlyoutProps, WatcherFlyoutState > { - static contextType = CoreContext; + static contextType = KibanaCoreContext; + context!: React.ContextType; public state: WatcherFlyoutState = { schedule: 'daily', threshold: 10, @@ -156,7 +157,7 @@ export class WatcherFlyout extends Component< }; public createWatch = () => { - const core: InternalCoreStart = this.context; + const core = this.context; const { serviceName } = this.props.urlParams; if (!serviceName) { @@ -278,7 +279,7 @@ export class WatcherFlyout extends Component< return null; } - const core: InternalCoreStart = this.context; + const core = this.context; const userTimezoneSetting = getUserTimezone(core); const dailyTime = this.state.daily; const inputTime = `${dailyTime}Z`; // Add tz to make into UTC 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 513c58d7a834a6..8a5d7ad10f22b3 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 @@ -13,13 +13,12 @@ import { import { i18n } from '@kbn/i18n'; import { memoize } from 'lodash'; import React, { Fragment } from 'react'; -import { InternalCoreStart } from 'src/core/public'; import { idx } from '@kbn/elastic-idx'; +import { KibanaCoreContext } from '../../../../../../observability/public'; import { IUrlParams } from '../../../../context/UrlParamsContext/types'; import { LicenseContext } from '../../../../context/LicenseContext'; import { MachineLearningFlyout } from './MachineLearningFlyout'; import { WatcherFlyout } from './WatcherFlyout'; -import { CoreContext } from '../../../../context/CoreContext'; interface Props { urlParams: IUrlParams; @@ -31,7 +30,9 @@ interface State { type FlyoutName = null | 'ML' | 'Watcher'; export class ServiceIntegrations extends React.Component { - static contextType = CoreContext; + static contextType = KibanaCoreContext; + context!: React.ContextType; + public state: State = { isPopoverOpen: false, activeFlyout: null }; public getPanelItems = memoize((mlAvailable: boolean | undefined) => { @@ -67,7 +68,7 @@ export class ServiceIntegrations extends React.Component { }; public getWatcherPanelItems = () => { - const core: InternalCoreStart = this.context; + const core = this.context; return [ { diff --git a/x-pack/legacy/plugins/apm/public/components/app/ServiceOverview/__test__/ServiceOverview.test.tsx b/x-pack/legacy/plugins/apm/public/components/app/ServiceOverview/__test__/ServiceOverview.test.tsx index b29428cc555eda..599f6c91e09e00 100644 --- a/x-pack/legacy/plugins/apm/public/components/app/ServiceOverview/__test__/ServiceOverview.test.tsx +++ b/x-pack/legacy/plugins/apm/public/components/app/ServiceOverview/__test__/ServiceOverview.test.tsx @@ -11,7 +11,7 @@ import { toastNotifications } from 'ui/notify'; import * as callApmApi from '../../../../services/rest/callApmApi'; import { ServiceOverview } from '..'; import * as urlParamsHooks from '../../../../hooks/useUrlParams'; -import * as coreHooks from '../../../../hooks/useCore'; +import * as kibanaCore from '../../../../../../observability/public/context/kibana_core'; import { InternalCoreStart } from 'src/core/public'; import * as useLocalUIFilters from '../../../../hooks/useLocalUIFilters'; import { FETCH_STATUS } from '../../../../hooks/useFetcher'; @@ -39,7 +39,7 @@ describe('Service Overview -> View', () => { end: 'myEnd' } }); - spyOn(coreHooks, 'useCore').and.returnValue(coreMock); + spyOn(kibanaCore, 'useKibanaCore').and.returnValue(coreMock); jest.spyOn(useLocalUIFilters, 'useLocalUIFilters').mockReturnValue({ filters: [], diff --git a/x-pack/legacy/plugins/apm/public/components/app/ServiceOverview/index.tsx b/x-pack/legacy/plugins/apm/public/components/app/ServiceOverview/index.tsx index 69609752ffefac..1e2fc98843d290 100644 --- a/x-pack/legacy/plugins/apm/public/components/app/ServiceOverview/index.tsx +++ b/x-pack/legacy/plugins/apm/public/components/app/ServiceOverview/index.tsx @@ -14,8 +14,8 @@ import { useFetcher } from '../../../hooks/useFetcher'; import { NoServicesMessage } from './NoServicesMessage'; import { ServiceList } from './ServiceList'; import { useUrlParams } from '../../../hooks/useUrlParams'; -import { useCore } from '../../../hooks/useCore'; import { useTrackPageview } from '../../../../../infra/public'; +import { useKibanaCore } from '../../../../../observability/public'; import { PROJECTION } from '../../../../common/projections/typings'; import { LocalUIFilters } from '../../shared/LocalUIFilters'; import { callApmApi } from '../../../services/rest/callApmApi'; @@ -29,7 +29,7 @@ const initalData = { let hasDisplayedToast = false; export function ServiceOverview() { - const core = useCore(); + const core = useKibanaCore(); const { urlParams: { start, end }, uiFilters diff --git a/x-pack/legacy/plugins/apm/public/components/shared/KueryBar/index.tsx b/x-pack/legacy/plugins/apm/public/components/shared/KueryBar/index.tsx index 9fe8be856ece4b..bc5d2932201584 100644 --- a/x-pack/legacy/plugins/apm/public/components/shared/KueryBar/index.tsx +++ b/x-pack/legacy/plugins/apm/public/components/shared/KueryBar/index.tsx @@ -27,7 +27,7 @@ import { useUrlParams } from '../../../hooks/useUrlParams'; import { history } from '../../../utils/history'; import { useMatchedRoutes } from '../../../hooks/useMatchedRoutes'; import { RouteName } from '../../app/Main/route_config/route_names'; -import { useCore } from '../../../hooks/useCore'; +import { useKibanaCore } from '../../../../../observability/public'; import { getAPMIndexPattern } from '../../../services/rest/savedObjects'; const Container = styled.div` @@ -86,7 +86,7 @@ function getSuggestions( } export function KueryBar() { - const core = useCore(); + const core = useKibanaCore(); const [state, setState] = useState({ indexPattern: null, suggestions: [], diff --git a/x-pack/legacy/plugins/apm/public/components/shared/Links/DiscoverLinks/DiscoverLink.tsx b/x-pack/legacy/plugins/apm/public/components/shared/Links/DiscoverLinks/DiscoverLink.tsx index 0673ab5e75cc64..17bb7373b6b9fc 100644 --- a/x-pack/legacy/plugins/apm/public/components/shared/Links/DiscoverLinks/DiscoverLink.tsx +++ b/x-pack/legacy/plugins/apm/public/components/shared/Links/DiscoverLinks/DiscoverLink.tsx @@ -11,7 +11,7 @@ import rison, { RisonValue } from 'rison-node'; import { useAPMIndexPattern } from '../../../../hooks/useAPMIndexPattern'; import { useLocation } from '../../../../hooks/useLocation'; import { getTimepickerRisonData } from '../rison_helpers'; -import { useCore } from '../../../../hooks/useCore'; +import { useKibanaCore } from '../../../../../../observability/public'; interface Props { query: { @@ -31,7 +31,7 @@ interface Props { } export function DiscoverLink({ query = {}, ...rest }: Props) { - const core = useCore(); + const core = useKibanaCore(); const apmIndexPattern = useAPMIndexPattern(); const location = useLocation(); diff --git a/x-pack/legacy/plugins/apm/public/components/shared/Links/DiscoverLinks/__test__/DiscoverLinks.integration.test.tsx b/x-pack/legacy/plugins/apm/public/components/shared/Links/DiscoverLinks/__test__/DiscoverLinks.integration.test.tsx index 80cecd8ea7f4d8..d9ca32f78f4dcb 100644 --- a/x-pack/legacy/plugins/apm/public/components/shared/Links/DiscoverLinks/__test__/DiscoverLinks.integration.test.tsx +++ b/x-pack/legacy/plugins/apm/public/components/shared/Links/DiscoverLinks/__test__/DiscoverLinks.integration.test.tsx @@ -14,7 +14,7 @@ import { getRenderedHref } from '../../../../../utils/testHelpers'; import { DiscoverErrorLink } from '../DiscoverErrorLink'; import { DiscoverSpanLink } from '../DiscoverSpanLink'; import { DiscoverTransactionLink } from '../DiscoverTransactionLink'; -import * as hooks from '../../../../../hooks/useCore'; +import * as kibanaCore from '../../../../../../../observability/public/context/kibana_core'; import { InternalCoreStart } from 'src/core/public'; jest.mock('ui/kfetch'); @@ -34,7 +34,7 @@ beforeAll(() => { } } as unknown) as InternalCoreStart; - jest.spyOn(hooks, 'useCore').mockReturnValue(coreMock); + jest.spyOn(kibanaCore, 'useKibanaCore').mockReturnValue(coreMock); }); afterAll(() => { diff --git a/x-pack/legacy/plugins/apm/public/components/shared/Links/InfraLink.test.tsx b/x-pack/legacy/plugins/apm/public/components/shared/Links/InfraLink.test.tsx index 9925d87a159cad..d5518f6a961950 100644 --- a/x-pack/legacy/plugins/apm/public/components/shared/Links/InfraLink.test.tsx +++ b/x-pack/legacy/plugins/apm/public/components/shared/Links/InfraLink.test.tsx @@ -8,7 +8,7 @@ import { Location } from 'history'; import React from 'react'; import { getRenderedHref } from '../../../utils/testHelpers'; import { InfraLink } from './InfraLink'; -import * as hooks from '../../../hooks/useCore'; +import * as kibanaCore from '../../../../../observability/public/context/kibana_core'; import { InternalCoreStart } from 'src/core/public'; const coreMock = ({ @@ -19,7 +19,7 @@ const coreMock = ({ } } as unknown) as InternalCoreStart; -jest.spyOn(hooks, 'useCore').mockReturnValue(coreMock); +jest.spyOn(kibanaCore, 'useKibanaCore').mockReturnValue(coreMock); test('InfraLink produces the correct URL', async () => { const href = await getRenderedHref( diff --git a/x-pack/legacy/plugins/apm/public/components/shared/Links/InfraLink.tsx b/x-pack/legacy/plugins/apm/public/components/shared/Links/InfraLink.tsx index eda64b4bbedb2d..192fafadba4c01 100644 --- a/x-pack/legacy/plugins/apm/public/components/shared/Links/InfraLink.tsx +++ b/x-pack/legacy/plugins/apm/public/components/shared/Links/InfraLink.tsx @@ -9,7 +9,7 @@ import { compact } from 'lodash'; import React from 'react'; import url from 'url'; import { fromQuery } from './url_helpers'; -import { useCore } from '../../../hooks/useCore'; +import { useKibanaCore } from '../../../../../observability/public'; interface InfraQueryParams { time?: number; @@ -24,7 +24,7 @@ interface Props extends EuiLinkAnchorProps { } export function InfraLink({ path, query = {}, ...rest }: Props) { - const core = useCore(); + const core = useKibanaCore(); const nextSearch = fromQuery(query); const href = url.format({ pathname: core.http.basePath.prepend('/app/infra'), diff --git a/x-pack/legacy/plugins/apm/public/components/shared/Links/KibanaLink.test.tsx b/x-pack/legacy/plugins/apm/public/components/shared/Links/KibanaLink.test.tsx index 24637f971bf3c8..c01d198b65b5a1 100644 --- a/x-pack/legacy/plugins/apm/public/components/shared/Links/KibanaLink.test.tsx +++ b/x-pack/legacy/plugins/apm/public/components/shared/Links/KibanaLink.test.tsx @@ -8,7 +8,7 @@ import { Location } from 'history'; import React from 'react'; import { getRenderedHref } from '../../../utils/testHelpers'; import { KibanaLink } from './KibanaLink'; -import * as hooks from '../../../hooks/useCore'; +import * as kibanaCore from '../../../../../observability/public/context/kibana_core'; import { InternalCoreStart } from 'src/core/public'; describe('KibanaLink', () => { @@ -21,7 +21,7 @@ describe('KibanaLink', () => { } } as unknown) as InternalCoreStart; - jest.spyOn(hooks, 'useCore').mockReturnValue(coreMock); + jest.spyOn(kibanaCore, 'useKibanaCore').mockReturnValue(coreMock); }); afterEach(() => { diff --git a/x-pack/legacy/plugins/apm/public/components/shared/Links/KibanaLink.tsx b/x-pack/legacy/plugins/apm/public/components/shared/Links/KibanaLink.tsx index 53fe9da7346444..de62d5e46070a0 100644 --- a/x-pack/legacy/plugins/apm/public/components/shared/Links/KibanaLink.tsx +++ b/x-pack/legacy/plugins/apm/public/components/shared/Links/KibanaLink.tsx @@ -7,7 +7,7 @@ import { EuiLink, EuiLinkAnchorProps } from '@elastic/eui'; import React from 'react'; import url from 'url'; -import { useCore } from '../../../hooks/useCore'; +import { useKibanaCore } from '../../../../../observability/public'; interface Props extends EuiLinkAnchorProps { path?: string; @@ -15,7 +15,7 @@ interface Props extends EuiLinkAnchorProps { } export function KibanaLink({ path, ...rest }: Props) { - const core = useCore(); + const core = useKibanaCore(); const href = url.format({ pathname: core.http.basePath.prepend('/app/kibana'), hash: path diff --git a/x-pack/legacy/plugins/apm/public/components/shared/Links/MachineLearningLinks/MLJobLink.test.tsx b/x-pack/legacy/plugins/apm/public/components/shared/Links/MachineLearningLinks/MLJobLink.test.tsx index c577a38029d29a..524a2d225c84c4 100644 --- a/x-pack/legacy/plugins/apm/public/components/shared/Links/MachineLearningLinks/MLJobLink.test.tsx +++ b/x-pack/legacy/plugins/apm/public/components/shared/Links/MachineLearningLinks/MLJobLink.test.tsx @@ -8,7 +8,7 @@ import { Location } from 'history'; import React from 'react'; import { getRenderedHref } from '../../../../utils/testHelpers'; import { MLJobLink } from './MLJobLink'; -import * as hooks from '../../../../hooks/useCore'; +import * as kibanaCore from '../../../../../../observability/public/context/kibana_core'; import { InternalCoreStart } from 'src/core/public'; describe('MLJobLink', () => { @@ -21,7 +21,7 @@ describe('MLJobLink', () => { } } as unknown) as InternalCoreStart; - spyOn(hooks, 'useCore').and.returnValue(coreMock); + spyOn(kibanaCore, 'useKibanaCore').and.returnValue(coreMock); }); afterEach(() => { diff --git a/x-pack/legacy/plugins/apm/public/components/shared/Links/MachineLearningLinks/MLLink.test.tsx b/x-pack/legacy/plugins/apm/public/components/shared/Links/MachineLearningLinks/MLLink.test.tsx index 5f66cf8563260c..73f8bb2c7a2132 100644 --- a/x-pack/legacy/plugins/apm/public/components/shared/Links/MachineLearningLinks/MLLink.test.tsx +++ b/x-pack/legacy/plugins/apm/public/components/shared/Links/MachineLearningLinks/MLLink.test.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { getRenderedHref } from '../../../../utils/testHelpers'; import { MLLink } from './MLLink'; import * as savedObjects from '../../../../services/rest/savedObjects'; -import * as hooks from '../../../../hooks/useCore'; +import * as kibanaCore from '../../../../../../observability/public/context/kibana_core'; import { InternalCoreStart } from 'src/core/public'; jest.mock('ui/kfetch'); @@ -22,7 +22,7 @@ const coreMock = ({ } } as unknown) as InternalCoreStart; -jest.spyOn(hooks, 'useCore').mockReturnValue(coreMock); +jest.spyOn(kibanaCore, 'useKibanaCore').mockReturnValue(coreMock); jest .spyOn(savedObjects, 'getAPMIndexPattern') diff --git a/x-pack/legacy/plugins/apm/public/components/shared/Links/MachineLearningLinks/MLLink.tsx b/x-pack/legacy/plugins/apm/public/components/shared/Links/MachineLearningLinks/MLLink.tsx index e0b9331d28496f..0fe80b729f0104 100644 --- a/x-pack/legacy/plugins/apm/public/components/shared/Links/MachineLearningLinks/MLLink.tsx +++ b/x-pack/legacy/plugins/apm/public/components/shared/Links/MachineLearningLinks/MLLink.tsx @@ -10,7 +10,7 @@ import url from 'url'; import rison, { RisonValue } from 'rison-node'; import { useLocation } from '../../../../hooks/useLocation'; import { getTimepickerRisonData, TimepickerRisonData } from '../rison_helpers'; -import { useCore } from '../../../../hooks/useCore'; +import { useKibanaCore } from '../../../../../../observability/public'; interface MlRisonData { ml?: { @@ -25,7 +25,7 @@ interface Props { } export function MLLink({ children, path = '', query = {} }: Props) { - const core = useCore(); + const core = useKibanaCore(); const location = useLocation(); const risonQuery: MlRisonData & TimepickerRisonData = getTimepickerRisonData( diff --git a/x-pack/legacy/plugins/apm/public/components/shared/TransactionActionMenu/TransactionActionMenu.tsx b/x-pack/legacy/plugins/apm/public/components/shared/TransactionActionMenu/TransactionActionMenu.tsx index 2e3382f71b2049..317fac87eea5a7 100644 --- a/x-pack/legacy/plugins/apm/public/components/shared/TransactionActionMenu/TransactionActionMenu.tsx +++ b/x-pack/legacy/plugins/apm/public/components/shared/TransactionActionMenu/TransactionActionMenu.tsx @@ -24,7 +24,7 @@ import { DiscoverTransactionLink } from '../Links/DiscoverLinks/DiscoverTransact import { InfraLink } from '../Links/InfraLink'; import { useUrlParams } from '../../../hooks/useUrlParams'; import { fromQuery } from '../Links/url_helpers'; -import { useCore } from '../../../hooks/useCore'; +import { useKibanaCore } from '../../../../../observability/public'; function getInfraMetricsQuery(transaction: Transaction) { const plus5 = new Date(transaction['@timestamp']); @@ -66,7 +66,7 @@ export const TransactionActionMenu: FunctionComponent = ( ) => { const { transaction } = props; - const core = useCore(); + const core = useKibanaCore(); const [isOpen, setIsOpen] = useState(false); diff --git a/x-pack/legacy/plugins/apm/public/components/shared/TransactionActionMenu/__test__/TransactionActionMenu.test.tsx b/x-pack/legacy/plugins/apm/public/components/shared/TransactionActionMenu/__test__/TransactionActionMenu.test.tsx index 89adbd5c0d832a..8442f300aa0fc0 100644 --- a/x-pack/legacy/plugins/apm/public/components/shared/TransactionActionMenu/__test__/TransactionActionMenu.test.tsx +++ b/x-pack/legacy/plugins/apm/public/components/shared/TransactionActionMenu/__test__/TransactionActionMenu.test.tsx @@ -11,7 +11,7 @@ import { TransactionActionMenu } from '../TransactionActionMenu'; import { Transaction } from '../../../../../typings/es_schemas/ui/Transaction'; import * as Transactions from './mockData'; import * as apmIndexPatternHooks from '../../../../hooks/useAPMIndexPattern'; -import * as coreHoooks from '../../../../hooks/useCore'; +import * as kibanaCore from '../../../../../../observability/public/context/kibana_core'; import { ISavedObject } from '../../../../services/rest/savedObjects'; import { InternalCoreStart } from 'src/core/public'; @@ -40,7 +40,7 @@ describe('TransactionActionMenu component', () => { jest .spyOn(apmIndexPatternHooks, 'useAPMIndexPattern') .mockReturnValue({ id: 'foo' } as ISavedObject); - jest.spyOn(coreHoooks, 'useCore').mockReturnValue(coreMock); + jest.spyOn(kibanaCore, 'useKibanaCore').mockReturnValue(coreMock); }); afterEach(() => { diff --git a/x-pack/legacy/plugins/apm/public/context/CoreContext.tsx b/x-pack/legacy/plugins/apm/public/context/CoreContext.tsx deleted file mode 100644 index 0bf39e4d9dadb6..00000000000000 --- a/x-pack/legacy/plugins/apm/public/context/CoreContext.tsx +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import React, { createContext } from 'react'; -import { InternalCoreStart } from 'src/core/public'; - -const CoreContext = createContext({} as InternalCoreStart); -const CoreProvider: React.SFC<{ core: InternalCoreStart }> = props => { - const { core, ...restProps } = props; - return ; -}; - -export { CoreContext, CoreProvider }; diff --git a/x-pack/legacy/plugins/apm/public/context/LicenseContext/InvalidLicenseNotification.tsx b/x-pack/legacy/plugins/apm/public/context/LicenseContext/InvalidLicenseNotification.tsx index ffd85412be0f45..1c340f4b4f3c77 100644 --- a/x-pack/legacy/plugins/apm/public/context/LicenseContext/InvalidLicenseNotification.tsx +++ b/x-pack/legacy/plugins/apm/public/context/LicenseContext/InvalidLicenseNotification.tsx @@ -6,10 +6,10 @@ import { EuiButton, EuiEmptyPrompt } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React from 'react'; -import { useCore } from '../../hooks/useCore'; +import { useKibanaCore } from '../../../../observability/public'; export function InvalidLicenseNotification() { - const core = useCore(); + const core = useKibanaCore(); const manageLicenseURL = core.http.basePath.prepend( '/app/kibana#/management/elasticsearch/license_management' ); diff --git a/x-pack/legacy/plugins/apm/public/hooks/useCore.tsx b/x-pack/legacy/plugins/apm/public/hooks/useCore.tsx deleted file mode 100644 index 06942019d65308..00000000000000 --- a/x-pack/legacy/plugins/apm/public/hooks/useCore.tsx +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { useContext } from 'react'; -import { CoreContext } from '../context/CoreContext'; - -export function useCore() { - return useContext(CoreContext); -} diff --git a/x-pack/legacy/plugins/apm/public/index.tsx b/x-pack/legacy/plugins/apm/public/index.tsx index 20d111333e4e1f..bc1e6f9e714ac9 100644 --- a/x-pack/legacy/plugins/apm/public/index.tsx +++ b/x-pack/legacy/plugins/apm/public/index.tsx @@ -19,16 +19,16 @@ import { plugin } from './new-platform'; import { REACT_APP_ROOT_ID } from './new-platform/plugin'; import './style/global_overrides.css'; import template from './templates/index.html'; -import { CoreProvider } from './context/CoreContext'; +import { KibanaCoreContextProvider } from '../../observability/public'; const { core } = npStart; // render APM feedback link in global help menu core.chrome.setHelpExtension(domElement => { ReactDOM.render( - + - , + , domElement ); return () => { diff --git a/x-pack/legacy/plugins/apm/public/new-platform/plugin.tsx b/x-pack/legacy/plugins/apm/public/new-platform/plugin.tsx index abd793245cbb69..c9a1e583a3cb09 100644 --- a/x-pack/legacy/plugins/apm/public/new-platform/plugin.tsx +++ b/x-pack/legacy/plugins/apm/public/new-platform/plugin.tsx @@ -9,8 +9,8 @@ import ReactDOM from 'react-dom'; import { Router, Route, Switch } from 'react-router-dom'; import styled from 'styled-components'; import { InternalCoreStart } from 'src/core/public'; +import { KibanaCoreContextProvider } from '../../../observability/public'; import { history } from '../utils/history'; -import { CoreProvider } from '../context/CoreContext'; import { LocationProvider } from '../context/LocationContext'; import { UrlParamsProvider } from '../context/UrlParamsContext'; import { px, unit, units } from '../style/variables'; @@ -57,7 +57,7 @@ export class Plugin { public start(core: InternalCoreStart) { const { i18n } = core; ReactDOM.render( - + @@ -65,7 +65,7 @@ export class Plugin { - , + , document.getElementById(REACT_APP_ROOT_ID) ); } diff --git a/x-pack/legacy/plugins/siem/public/apps/context/kibana_core.tsx b/x-pack/legacy/plugins/siem/public/apps/context/kibana_core.tsx new file mode 100644 index 00000000000000..778e138c5fa6c0 --- /dev/null +++ b/x-pack/legacy/plugins/siem/public/apps/context/kibana_core.tsx @@ -0,0 +1,25 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { createContext, useContext } from 'react'; +import { InternalCoreStart } from '../../../../../../src/core/public'; + +interface AppMountContext { + core: InternalCoreStart; +} + +// TODO: Replace CoreStart/CoreSetup with AppMountContext +// see: https://github.com/elastic/kibana/pull/41007 + +export const KibanaCoreContext = createContext({} as AppMountContext['core']); + +export const KibanaCoreContextProvider: React.FC<{ core: AppMountContext['core'] }> = props => ( + +); + +export function useKibanaCore() { + return useContext(KibanaCoreContext); +} From 8f93d6507fcf8161468c204d19a31e040d87791b Mon Sep 17 00:00:00 2001 From: Jason Rhodes Date: Wed, 28 Aug 2019 06:47:05 -0400 Subject: [PATCH 2/3] Backporting shared observability plugin to 7.x so it can be used going forward --- x-pack/legacy/plugins/observability/README.md | 19 ++++++++++++++ .../components/example_shared_component.tsx | 15 +++++++++++ .../public/context/kibana_core.tsx | 25 +++++++++++++++++++ .../plugins/observability/public/index.tsx | 9 +++++++ 4 files changed, 68 insertions(+) create mode 100644 x-pack/legacy/plugins/observability/README.md create mode 100644 x-pack/legacy/plugins/observability/public/components/example_shared_component.tsx create mode 100644 x-pack/legacy/plugins/observability/public/context/kibana_core.tsx create mode 100644 x-pack/legacy/plugins/observability/public/index.tsx diff --git a/x-pack/legacy/plugins/observability/README.md b/x-pack/legacy/plugins/observability/README.md new file mode 100644 index 00000000000000..f7d8365fe6c802 --- /dev/null +++ b/x-pack/legacy/plugins/observability/README.md @@ -0,0 +1,19 @@ +# Observability Shared Resources + +This "faux" plugin serves as a place to statically share resources, helpers, and components across observability plugins. There is some discussion still happening about the best way to do this, but this is one suggested method that will work for now and has the benefit of adopting our pre-defined build and compile tooling out of the box. + +Files found here can be imported from any other x-pack plugin, with the caveat that these shared components should all be exposed from either `public/index` or `server/index` so that the platform can attempt to monitor breaking changes in this shared API. + +# for a file found at `x-pack/legacy/plugins/infra/public/components/Example.tsx` + +```ts +import { ExampleSharedComponent } from '../../../observability/public'; +``` + +### Plugin registration and config + +There is no plugin registration code or config in this folder because it's a "faux" plugin only being used to share code between other plugins. Plugins using this code do not need to register a dependency on this plugin unless this plugin ever exports functionality that relies on Kibana core itself (rather than being static DI components and utilities only, as it is now). + +### Directory structure + +Code meant to be shared by the UI should live in `public/` and be explicity exported from `public/index` while server helpers etc should live in `server/` and be explicitly exported from `server/index`. Code that needs to be shared across client and server should be exported from both places (not put in `common`, etc). diff --git a/x-pack/legacy/plugins/observability/public/components/example_shared_component.tsx b/x-pack/legacy/plugins/observability/public/components/example_shared_component.tsx new file mode 100644 index 00000000000000..e7cac9e3d70151 --- /dev/null +++ b/x-pack/legacy/plugins/observability/public/components/example_shared_component.tsx @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React from 'react'; + +interface Props { + message?: string; +} + +export function ExampleSharedComponent({ message = 'See how it loads.' }: Props) { + return

This is an example of an observability shared component. {message}

; +} diff --git a/x-pack/legacy/plugins/observability/public/context/kibana_core.tsx b/x-pack/legacy/plugins/observability/public/context/kibana_core.tsx new file mode 100644 index 00000000000000..778e138c5fa6c0 --- /dev/null +++ b/x-pack/legacy/plugins/observability/public/context/kibana_core.tsx @@ -0,0 +1,25 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { createContext, useContext } from 'react'; +import { InternalCoreStart } from '../../../../../../src/core/public'; + +interface AppMountContext { + core: InternalCoreStart; +} + +// TODO: Replace CoreStart/CoreSetup with AppMountContext +// see: https://github.com/elastic/kibana/pull/41007 + +export const KibanaCoreContext = createContext({} as AppMountContext['core']); + +export const KibanaCoreContextProvider: React.FC<{ core: AppMountContext['core'] }> = props => ( + +); + +export function useKibanaCore() { + return useContext(KibanaCoreContext); +} diff --git a/x-pack/legacy/plugins/observability/public/index.tsx b/x-pack/legacy/plugins/observability/public/index.tsx new file mode 100644 index 00000000000000..49e5a6d787a553 --- /dev/null +++ b/x-pack/legacy/plugins/observability/public/index.tsx @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { KibanaCoreContext, KibanaCoreContextProvider, useKibanaCore } from './context/kibana_core'; +import { ExampleSharedComponent } from './components/example_shared_component'; + +export { ExampleSharedComponent, KibanaCoreContext, KibanaCoreContextProvider, useKibanaCore }; From 08dc7fe853c56fe88b788dacbdd33c068f16ff42 Mon Sep 17 00:00:00 2001 From: Jason Rhodes Date: Wed, 28 Aug 2019 09:53:57 -0400 Subject: [PATCH 3/3] Removing rogue strange folder added to SIEM app during cherry pick --- .../siem/public/apps/context/kibana_core.tsx | 25 ------------------- 1 file changed, 25 deletions(-) delete mode 100644 x-pack/legacy/plugins/siem/public/apps/context/kibana_core.tsx diff --git a/x-pack/legacy/plugins/siem/public/apps/context/kibana_core.tsx b/x-pack/legacy/plugins/siem/public/apps/context/kibana_core.tsx deleted file mode 100644 index 778e138c5fa6c0..00000000000000 --- a/x-pack/legacy/plugins/siem/public/apps/context/kibana_core.tsx +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import React, { createContext, useContext } from 'react'; -import { InternalCoreStart } from '../../../../../../src/core/public'; - -interface AppMountContext { - core: InternalCoreStart; -} - -// TODO: Replace CoreStart/CoreSetup with AppMountContext -// see: https://github.com/elastic/kibana/pull/41007 - -export const KibanaCoreContext = createContext({} as AppMountContext['core']); - -export const KibanaCoreContextProvider: React.FC<{ core: AppMountContext['core'] }> = props => ( - -); - -export function useKibanaCore() { - return useContext(KibanaCoreContext); -}