diff --git a/src/platform/plugins/shared/data/public/search/search_service.ts b/src/platform/plugins/shared/data/public/search/search_service.ts index 4463258057db6..75adf3ada3b18 100644 --- a/src/platform/plugins/shared/data/public/search/search_service.ts +++ b/src/platform/plugins/shared/data/public/search/search_service.ts @@ -242,7 +242,6 @@ export class SearchService implements Plugin { fieldFormats, dataViews, inspector, - screenshotMode, scriptedFieldsEnabled, share, cps, diff --git a/src/platform/plugins/shared/data/public/search/session/sessions_mgmt/flyout/flyout.test.tsx b/src/platform/plugins/shared/data/public/search/session/sessions_mgmt/flyout/flyout.test.tsx index 290498379c917..0dfa2d99555c2 100644 --- a/src/platform/plugins/shared/data/public/search/session/sessions_mgmt/flyout/flyout.test.tsx +++ b/src/platform/plugins/shared/data/public/search/session/sessions_mgmt/flyout/flyout.test.tsx @@ -52,6 +52,7 @@ const setup = () => { render( ', () => { expect(screen.getByRole('columnheader', { name: 'Status' })).toBeInTheDocument(); }); - describe('when the header close button is clicked', () => { - it('calls the onClose callback', async () => { - const { onClose, user } = setup(); - const closeButton = screen.getByLabelText('Close this dialog'); - await user.click(closeButton); - expect(onClose).toHaveBeenCalled(); - }); - }); - describe('when the footer close button is clicked', () => { it('calls the onClose callback', async () => { const { onClose, user } = setup(); diff --git a/src/platform/plugins/shared/data/public/search/session/sessions_mgmt/flyout/flyout.tsx b/src/platform/plugins/shared/data/public/search/session/sessions_mgmt/flyout/flyout.tsx index bdc49650be4db..a6ae5583fbadb 100644 --- a/src/platform/plugins/shared/data/public/search/session/sessions_mgmt/flyout/flyout.tsx +++ b/src/platform/plugins/shared/data/public/search/session/sessions_mgmt/flyout/flyout.tsx @@ -11,12 +11,10 @@ import { EuiBetaBadge, EuiButtonEmpty, EuiFlexGroup, - EuiFlyout, EuiFlyoutBody, EuiFlyoutFooter, EuiFlyoutHeader, EuiTitle, - useGeneratedHtmlId, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; @@ -28,11 +26,10 @@ import { SearchSessionsMgmtTable } from '../components/table'; import type { SearchUsageCollector } from '../../../collectors'; import type { BackgroundSearchOpenedHandler, LocatorsStart } from '../types'; import { getColumns } from './get_columns'; -import { FLYOUT_WIDTH } from './constants'; import type { ISearchSessionEBTManager } from '../../ebt_manager'; export const Flyout = ({ - onClose, + flyoutId, api, coreStart, usageCollector, @@ -43,8 +40,9 @@ export const Flyout = ({ appId, trackingProps, onBackgroundSearchOpened, + onClose, }: { - onClose: () => void; + flyoutId: string; api: SearchSessionsMgmtAPI; coreStart: CoreStart; usageCollector: SearchUsageCollector; @@ -55,14 +53,14 @@ export const Flyout = ({ appId?: string; trackingProps: { openedFrom: string }; onBackgroundSearchOpened?: BackgroundSearchOpenedHandler; + onClose: () => void; }) => { - const flyoutId = useGeneratedHtmlId(); const technicalPreviewLabel = i18n.translate('data.session_mgmt.technical_preview_label', { defaultMessage: 'Technical preview', }); return ( - + <> @@ -98,6 +96,6 @@ export const Flyout = ({ - + ); }; diff --git a/src/platform/plugins/shared/data/public/search/session/sessions_mgmt/flyout/get_flyout.tsx b/src/platform/plugins/shared/data/public/search/session/sessions_mgmt/flyout/get_flyout.tsx index de0ab25dbc5f6..9cb3a56b44cb6 100644 --- a/src/platform/plugins/shared/data/public/search/session/sessions_mgmt/flyout/get_flyout.tsx +++ b/src/platform/plugins/shared/data/public/search/session/sessions_mgmt/flyout/get_flyout.tsx @@ -12,6 +12,7 @@ import type { CoreStart } from '@kbn/core/public'; import { toMountPoint } from '@kbn/react-kibana-mount'; import { createKibanaReactContext } from '@kbn/kibana-react-plugin/public'; import type { SharePluginStart } from '@kbn/share-plugin/public'; +import { htmlIdGenerator } from '@elastic/eui'; import type { ISessionsClient } from '../../../..'; import { SearchSessionsMgmtAPI } from '../lib/api'; import type { SearchUsageCollector } from '../../../collectors'; @@ -21,6 +22,8 @@ import type { BackgroundSearchOpenedHandler } from '../types'; import { FLYOUT_WIDTH } from './constants'; import type { ISearchSessionEBTManager } from '../../ebt_manager'; +const flyoutIdGenerator = htmlIdGenerator('searchSessionsFlyout'); + export function openSearchSessionsFlyout({ coreStart, kibanaVersion, @@ -42,6 +45,7 @@ export function openSearchSessionsFlyout({ appId: string; trackingProps: { openedFrom: string }; onBackgroundSearchOpened?: BackgroundSearchOpenedHandler; + onClose?: () => void; }) => { const api = new SearchSessionsMgmtAPI(sessionsClient, config, { notifications: coreStart.notifications, @@ -51,15 +55,22 @@ export function openSearchSessionsFlyout({ }); const { Provider: KibanaReactContextProvider } = createKibanaReactContext(coreStart); + const flyoutId = flyoutIdGenerator(); + const closeFlyout = async () => { + await flyout.close(); + attrs.onClose?.(); + }; + const flyout = coreStart.overlays.openFlyout( toMountPoint( coreStart.rendering.addContext( flyout.close()} + flyoutId={flyoutId} + onClose={closeFlyout} onBackgroundSearchOpened={(params) => { attrs.onBackgroundSearchOpened?.(params); - flyout.close(); + closeFlyout(); }} appId={attrs.appId} api={api} @@ -76,8 +87,9 @@ export function openSearchSessionsFlyout({ coreStart ), { - hideCloseButton: true, size: FLYOUT_WIDTH, + ['aria-labelledby']: flyoutId, + onClose: closeFlyout, } ); diff --git a/src/platform/plugins/shared/data/public/search/types.ts b/src/platform/plugins/shared/data/public/search/types.ts index 2f786ffea1318..2db49902c189e 100644 --- a/src/platform/plugins/shared/data/public/search/types.ts +++ b/src/platform/plugins/shared/data/public/search/types.ts @@ -75,6 +75,7 @@ export interface ISearchStart { appId: string; trackingProps: { openedFrom: string }; onBackgroundSearchOpened?: BackgroundSearchOpenedHandler; + onClose?: () => void; }) => void; /** * Feature flag value to make it easier to use in different plugins diff --git a/src/platform/plugins/shared/discover/public/application/main/components/top_nav/app_menu_actions/get_background_search_flyout.tsx b/src/platform/plugins/shared/discover/public/application/main/components/top_nav/app_menu_actions/get_background_search_flyout.tsx index bda6d2a2634c4..d735d4ad7511c 100644 --- a/src/platform/plugins/shared/discover/public/application/main/components/top_nav/app_menu_actions/get_background_search_flyout.tsx +++ b/src/platform/plugins/shared/discover/public/application/main/components/top_nav/app_menu_actions/get_background_search_flyout.tsx @@ -7,15 +7,15 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import type { AppMenuItemType } from '@kbn/core-chrome-app-menu-components'; +import type { DiscoverAppMenuItemType, DiscoverAppMenuRunAction } from '@kbn/discover-utils'; import { AppMenuActionId } from '@kbn/discover-utils'; import { i18n } from '@kbn/i18n'; export const getBackgroundSearchFlyout = ({ onClick, }: { - onClick: () => void; -}): AppMenuItemType => { + onClick: DiscoverAppMenuRunAction; +}): DiscoverAppMenuItemType => { return { id: AppMenuActionId.backgroundsearch, order: 6, diff --git a/src/platform/plugins/shared/discover/public/application/main/components/top_nav/use_top_nav_links.tsx b/src/platform/plugins/shared/discover/public/application/main/components/top_nav/use_top_nav_links.tsx index 7119d2fa07172..25d6ef7cff28f 100644 --- a/src/platform/plugins/shared/discover/public/application/main/components/top_nav/use_top_nav_links.tsx +++ b/src/platform/plugins/shared/discover/public/application/main/components/top_nav/use_top_nav_links.tsx @@ -139,7 +139,7 @@ export const useTopNavLinks = ({ services.capabilities.discover_v2.storeSearchSession ) { const backgroundSearchFlyoutMenuItem = getBackgroundSearchFlyout({ - onClick: () => { + onClick: ({ context: { onFinishAction } }) => { services.data.search.showSearchSessionsFlyout({ appId, trackingProps: { openedFrom: 'background search button' }, @@ -147,6 +147,7 @@ export const useTopNavLinks = ({ event?.preventDefault(); dispatch(internalStateActions.openSearchSessionInNewTab({ searchSession: session })); }, + onClose: onFinishAction, }); }, });