Skip to content

Commit

Permalink
[8.12] Fix for TriggersActionsUi not being present on the same place …
Browse files Browse the repository at this point in the history
…in different KibanaContexts (elastic#173388) (elastic#173587)

# Backport

This will backport the following commits from `main` to `8.12`:
- [Fix for TriggersActionsUi not being present on the same place in
different KibanaContexts
(elastic#173388)](elastic#173388)

<!--- Backport version: 8.9.7 -->

### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sqren/backport)

<!--BACKPORT [{"author":{"name":"Coen
Warmer","email":"[email protected]"},"sourceCommit":{"committedDate":"2023-12-19T05:32:22Z","message":"Fix
for TriggersActionsUi not being present on the same place in different
KibanaContexts (elastic#173388)\n\nCo-authored-by: kibanamachine
<[email protected]>","sha":"857f2dfe7fd62743dab91fd1e24e753df1e88dd0","branchLabelMapping":{"^v8.13.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:skip","backport:prev-minor","v8.12.0","Team:obs-ux-infra_services","Team:obs-ux-management","v8.13.0"],"number":173388,"url":"https://github.com/elastic/kibana/pull/173388","mergeCommit":{"message":"Fix
for TriggersActionsUi not being present on the same place in different
KibanaContexts (elastic#173388)\n\nCo-authored-by: kibanamachine
<[email protected]>","sha":"857f2dfe7fd62743dab91fd1e24e753df1e88dd0"}},"sourceBranch":"main","suggestedTargetBranches":["8.12"],"targetPullRequestStates":[{"branch":"8.12","label":"v8.12.0","labelRegex":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"},{"branch":"main","label":"v8.13.0","labelRegex":"^v8.13.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/173388","number":173388,"mergeCommit":{"message":"Fix
for TriggersActionsUi not being present on the same place in different
KibanaContexts (elastic#173388)\n\nCo-authored-by: kibanamachine
<[email protected]>","sha":"857f2dfe7fd62743dab91fd1e24e753df1e88dd0"}}]}]
BACKPORT-->

Co-authored-by: Coen Warmer <[email protected]>
  • Loading branch information
kibanamachine and CoenWarmer authored Dec 19, 2023
1 parent 79a0f48 commit 0ead2df
Show file tree
Hide file tree
Showing 62 changed files with 687 additions and 562 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ import { render as testLibRender } from '@testing-library/react';
import { coreMock } from '@kbn/core/public/mocks';
import { __IntlProvider as IntlProvider } from '@kbn/i18n-react';
import translations from '@kbn/translations-plugin/translations/ja-JP.json';

import { mockObservabilityAIAssistantService } from '@kbn/observability-ai-assistant-plugin/public';
import { observabilityAIAssistantPluginMock } from '@kbn/observability-ai-assistant-plugin/public/mock';
import { RouterProvider } from '@kbn/typed-react-router-config';
import { AppContextProvider } from '../context/app_context';
import { RedirectToHomeIfUnauthorized } from '../routes/components/redirect_to_home_if_unauthorized';
Expand Down Expand Up @@ -62,14 +61,7 @@ export const render = (component: React.ReactNode, params?: { show: boolean }) =
http: coreStart.http,
application: coreStart.application,
notifications: coreStart.notifications,
observabilityAIAssistant: {
service: mockObservabilityAIAssistantService,
useGenAIConnectors: () => ({
loading: false,
selectConnector: () => {},
reloadConnectors: () => {},
}),
},
observabilityAIAssistant: observabilityAIAssistantPluginMock.createStartContract(),
uiSettings: coreStart.uiSettings,
setBreadcrumbs: () => {},
}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,11 @@
import { EuiFlexItem, EuiSpacer } from '@elastic/eui';
import { i18n } from '@kbn/i18n';
import {
useObservabilityAIAssistant,
ContextualInsight,
type Message,
MessageRole,
} from '@kbn/observability-ai-assistant-plugin/public';
import React, { useMemo, useState } from 'react';
import { useApmPluginContext } from '../../../../context/apm_plugin/use_apm_plugin_context';
import { APMError } from '../../../../../typings/es_schemas/ui/apm_error';
import { Transaction } from '../../../../../typings/es_schemas/ui/transaction';
import { ErrorSampleDetailTabContent } from './error_sample_detail';
Expand All @@ -25,7 +24,9 @@ export function ErrorSampleContextualInsight({
error: APMError;
transaction?: Transaction;
}) {
const aiAssistant = useObservabilityAIAssistant();
const {
observabilityAIAssistant: { ObservabilityAIAssistantContextualInsight },
} = useApmPluginContext();

const [logStacktrace, setLogStacktrace] = useState('');
const [exceptionStacktrace, setExceptionStacktrace] = useState('');
Expand Down Expand Up @@ -72,10 +73,10 @@ ${exceptionStacktrace}`
];
}, [error, transaction, logStacktrace, exceptionStacktrace]);

return aiAssistant.isEnabled() && messages ? (
return ObservabilityAIAssistantContextualInsight && messages ? (
<>
<EuiFlexItem>
<ContextualInsight
<ObservabilityAIAssistantContextualInsight
messages={messages}
title={i18n.translate(
'xpack.apm.errorGroupContextualInsight.explainErrorTitle',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import {
import { apmLabsButton } from '@kbn/observability-plugin/common';
import { i18n } from '@kbn/i18n';
import React from 'react';
import { ObservabilityAIAssistantActionMenuItem } from '@kbn/observability-ai-assistant-plugin/public';
import { getAlertingCapabilities } from '../../../alerting/utils/get_alerting_capabilities';
import { getLegacyApmHref } from '../../../shared/links/apm/apm_link';
import { useApmPluginContext } from '../../../../context/apm_plugin/use_apm_plugin_context';
Expand All @@ -24,7 +23,12 @@ import { InspectorHeaderLink } from './inspector_header_link';
import { Labs } from './labs';

export function ApmHeaderActionMenu() {
const { core, plugins, config } = useApmPluginContext();
const {
core,
plugins,
config,
observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem },
} = useApmPluginContext();
const { search } = window.location;
const { application, http } = core;
const { basePath } = http;
Expand Down Expand Up @@ -97,7 +101,9 @@ export function ApmHeaderActionMenu() {
})}
</EuiHeaderLink>
<InspectorHeaderLink />
<ObservabilityAIAssistantActionMenuItem />
{ObservabilityAIAssistantActionMenuItem ? (
<ObservabilityAIAssistantActionMenuItem />
) : null}
</EuiHeaderLinks>
);
}
79 changes: 37 additions & 42 deletions x-pack/plugins/apm/public/components/routing/app_root/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import {
} from '@kbn/kibana-react-plugin/public';
import { RedirectAppLinks } from '@kbn/shared-ux-link-redirect-app';
import { Storage } from '@kbn/kibana-utils-plugin/public';
import { ObservabilityAIAssistantProvider } from '@kbn/observability-ai-assistant-plugin/public';
import {
HeaderMenuPortal,
InspectorContextProvider,
Expand Down Expand Up @@ -75,48 +74,44 @@ export function ApmAppRoot({
services={{ ...core, ...pluginsStart, storage, ...apmServices }}
>
<i18nCore.Context>
<ObservabilityAIAssistantProvider
value={apmPluginContextValue.observabilityAIAssistant.service}
>
<TimeRangeIdContextProvider>
<RouterProvider history={history} router={apmRouter as any}>
<ApmErrorBoundary>
<RedirectDependenciesToDependenciesInventory>
<RedirectWithDefaultEnvironment>
<RedirectWithDefaultDateRange>
<RedirectWithOffset>
<TrackPageview>
<UpdateExecutionContextOnRouteChange>
<BreadcrumbsContextProvider>
<UrlParamsProvider>
<LicenseProvider>
<AnomalyDetectionJobsContextProvider>
<InspectorContextProvider>
<ApmThemeProvider>
<MountApmHeaderActionMenu />
<TimeRangeIdContextProvider>
<RouterProvider history={history} router={apmRouter as any}>
<ApmErrorBoundary>
<RedirectDependenciesToDependenciesInventory>
<RedirectWithDefaultEnvironment>
<RedirectWithDefaultDateRange>
<RedirectWithOffset>
<TrackPageview>
<UpdateExecutionContextOnRouteChange>
<BreadcrumbsContextProvider>
<UrlParamsProvider>
<LicenseProvider>
<AnomalyDetectionJobsContextProvider>
<InspectorContextProvider>
<ApmThemeProvider>
<MountApmHeaderActionMenu />

<Route
component={
ScrollToTopOnPathChange
}
/>
<RouteRenderer />
</ApmThemeProvider>
</InspectorContextProvider>
</AnomalyDetectionJobsContextProvider>
</LicenseProvider>
</UrlParamsProvider>
</BreadcrumbsContextProvider>
</UpdateExecutionContextOnRouteChange>
</TrackPageview>
</RedirectWithOffset>
</RedirectWithDefaultDateRange>
</RedirectWithDefaultEnvironment>
</RedirectDependenciesToDependenciesInventory>
</ApmErrorBoundary>
</RouterProvider>
</TimeRangeIdContextProvider>
</ObservabilityAIAssistantProvider>
<Route
component={
ScrollToTopOnPathChange
}
/>
<RouteRenderer />
</ApmThemeProvider>
</InspectorContextProvider>
</AnomalyDetectionJobsContextProvider>
</LicenseProvider>
</UrlParamsProvider>
</BreadcrumbsContextProvider>
</UpdateExecutionContextOnRouteChange>
</TrackPageview>
</RedirectWithOffset>
</RedirectWithDefaultDateRange>
</RedirectWithDefaultEnvironment>
</RedirectDependenciesToDependenciesInventory>
</ApmErrorBoundary>
</RouterProvider>
</TimeRangeIdContextProvider>
</i18nCore.Context>
</KibanaContextProvider>
</ApmPluginContext.Provider>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import { AppMountParameters, CoreStart } from '@kbn/core/public';
import { themeServiceMock } from '@kbn/core/public/mocks';
import { ExploratoryViewPublicPluginsStart } from '../plugin';
import { renderApp } from '.';
import { mockObservabilityAIAssistantService } from '@kbn/observability-ai-assistant-plugin/public';
import { mockService } from '@kbn/observability-ai-assistant-plugin/public/mock';

describe('renderApp', () => {
const originalConsole = global.console;
Expand Down Expand Up @@ -43,7 +43,7 @@ describe('renderApp', () => {
},
},
usageCollection: { reportUiCounter: noop },
observabilityAIAssistant: { service: mockObservabilityAIAssistantService },
observabilityAIAssistant: { service: mockService },
} as unknown as ExploratoryViewPublicPluginsStart;

const core = {
Expand Down
65 changes: 30 additions & 35 deletions x-pack/plugins/exploratory_view/public/application/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import { KibanaContextProvider, KibanaThemeProvider } from '@kbn/kibana-react-pl
import { RedirectAppLinks } from '@kbn/shared-ux-link-redirect-app';
import { Storage } from '@kbn/kibana-utils-plugin/public';
import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/public';
import { ObservabilityAIAssistantProvider } from '@kbn/observability-ai-assistant-plugin/public';
import { PluginContext } from '../context/plugin_context';
import { routes } from '../routes';
import { ExploratoryViewPublicPluginsStart } from '../plugin';
Expand Down Expand Up @@ -68,47 +67,43 @@ export const renderApp = ({
const ApplicationUsageTrackingProvider =
usageCollection?.components.ApplicationUsageTrackingProvider ?? React.Fragment;

const aiAssistantService = plugins.observabilityAIAssistant.service;

ReactDOM.render(
<EuiErrorBoundary>
<ApplicationUsageTrackingProvider>
<KibanaThemeProvider theme$={theme$}>
<ObservabilityAIAssistantProvider value={aiAssistantService}>
<KibanaContextProvider
services={{
...core,
...plugins,
storage: new Storage(localStorage),
isDev,
<KibanaContextProvider
services={{
...core,
...plugins,
storage: new Storage(localStorage),
isDev,
}}
>
<PluginContext.Provider
value={{
appMountParameters,
}}
>
<PluginContext.Provider
value={{
appMountParameters,
}}
>
<Router history={history}>
<EuiThemeProvider darkMode={isDarkMode}>
<i18nCore.Context>
<div
className={APP_WRAPPER_CLASS}
data-test-subj="exploratoryViewMainContainer"
<Router history={history}>
<EuiThemeProvider darkMode={isDarkMode}>
<i18nCore.Context>
<div
className={APP_WRAPPER_CLASS}
data-test-subj="exploratoryViewMainContainer"
>
<RedirectAppLinks
coreStart={{
application: core.application,
}}
>
<RedirectAppLinks
coreStart={{
application: core.application,
}}
>
<App />
</RedirectAppLinks>
</div>
</i18nCore.Context>
</EuiThemeProvider>
</Router>
</PluginContext.Provider>
</KibanaContextProvider>
</ObservabilityAIAssistantProvider>
<App />
</RedirectAppLinks>
</div>
</i18nCore.Context>
</EuiThemeProvider>
</Router>
</PluginContext.Provider>
</KibanaContextProvider>
</KibanaThemeProvider>
</ApplicationUsageTrackingProvider>
</EuiErrorBoundary>,
Expand Down
2 changes: 2 additions & 0 deletions x-pack/plugins/exploratory_view/public/application/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import { EmbeddableStateTransfer } from '@kbn/embeddable-plugin/public';
import { NavigationPublicPluginStart } from '@kbn/navigation-plugin/public';
import { IStorageWrapper } from '@kbn/kibana-utils-plugin/public';
import { DataPublicPluginStart } from '@kbn/data-plugin/public';
import type { ObservabilityAIAssistantPluginStart } from '@kbn/observability-ai-assistant-plugin/public';
import { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public';
import { LensPublicStart } from '@kbn/lens-plugin/public';
import { SharePluginStart } from '@kbn/share-plugin/public';
Expand All @@ -41,6 +42,7 @@ export interface ObservabilityAppServices {
lens: LensPublicStart;
navigation: NavigationPublicPluginStart;
notifications: NotificationsStart;
observabilityAIAssistant: ObservabilityAIAssistantPluginStart;
overlays: OverlayStart;
savedObjectsClient: SavedObjectsStart['client'];
share: SharePluginStart;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,32 @@ import { sampleAttribute } from '../../configurations/test_data/sample_attribute
import * as pluginHook from '../../../../../hooks/use_plugin_context';
import { TypedLensByValueInput } from '@kbn/lens-plugin/public';
import { ExpViewActionMenuContent } from './action_menu';
import { observabilityAIAssistantPluginMock } from '@kbn/observability-ai-assistant-plugin/public/mock';

jest.spyOn(pluginHook, 'usePluginContext').mockReturnValue({
appMountParameters: {
setHeaderActionMenu: jest.fn(),
},
} as any);

const mockObservabilityAIAssistant = observabilityAIAssistantPluginMock.createStartContract();

jest.mock('../../hooks/use_kibana', () => {
const originalModule = jest.requireActual('../../hooks/use_kibana');
return {
...originalModule,
useKibana: () => {
const { services } = originalModule.useKibana();
return {
services: {
...services,
observabilityAIAssistant: mockObservabilityAIAssistant,
},
};
},
};
});

describe('Action Menu', function () {
afterAll(() => {
jest.clearAllMocks();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,9 @@ import React, { useState } from 'react';
import { EuiButton, EuiFlexGroup, EuiFlexItem } from '@elastic/eui';
import { i18n } from '@kbn/i18n';
import { LensEmbeddableInput, TypedLensByValueInput } from '@kbn/lens-plugin/public';
import {
ObservabilityAIAssistantActionMenuItem,
useObservabilityAIAssistantOptional,
} from '@kbn/observability-ai-assistant-plugin/public';
import { useKibana } from '@kbn/kibana-react-plugin/public';
import { EmbedAction } from '../../header/embed_action';
import { ObservabilityAppServices } from '../../../../../application/types';
import { AddToCaseAction } from '../../header/add_to_case_action';
import { useKibana } from '../../hooks/use_kibana';

export function ExpViewActionMenuContent({
timeRange,
Expand All @@ -25,16 +20,16 @@ export function ExpViewActionMenuContent({
timeRange?: { from: string; to: string };
lensAttributes: TypedLensByValueInput['attributes'] | null;
}) {
const kServices = useKibana<ObservabilityAppServices>().services;

const { lens, isDev } = kServices;
const {
lens,
isDev,
observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem },
} = useKibana().services;

const [isSaveOpen, setIsSaveOpen] = useState(false);

const LensSaveModalComponent = lens.SaveModalComponent;

const service = useObservabilityAIAssistantOptional();

return (
<>
<EuiFlexGroup
Expand Down Expand Up @@ -99,7 +94,7 @@ export function ExpViewActionMenuContent({
})}
</EuiButton>
</EuiFlexItem>
{service?.isEnabled() ? (
{ObservabilityAIAssistantActionMenuItem ? (
<EuiFlexItem>
<ObservabilityAIAssistantActionMenuItem />
</EuiFlexItem>
Expand Down
Loading

0 comments on commit 0ead2df

Please sign in to comment.