Skip to content

Commit

Permalink
[Discover] Dismiss other flyouts
Browse files Browse the repository at this point in the history
  • Loading branch information
jughosta committed Sep 24, 2024
1 parent 12c628a commit c991440
Show file tree
Hide file tree
Showing 10 changed files with 65 additions and 10 deletions.
1 change: 1 addition & 0 deletions packages/kbn-discover-utils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ export {
getVisibleColumns,
canPrependTimeFieldColumn,
DiscoverFlyouts,
dismissAllFlyoutsExceptFor,
dismissFlyouts,
} from './src';

Expand Down
14 changes: 12 additions & 2 deletions packages/kbn-discover-utils/src/utils/dismiss_flyouts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ export enum DiscoverFlyouts {
esqlDocs = 'esqlDocs',
}

const ALL_FLYOUTS = Object.values(DiscoverFlyouts);
const AllDiscoverFlyouts = Object.values(DiscoverFlyouts);

const getFlyoutCloseButton = (flyout: DiscoverFlyouts): HTMLElement | null => {
switch (flyout) {
Expand All @@ -28,11 +28,21 @@ const getFlyoutCloseButton = (flyout: DiscoverFlyouts): HTMLElement | null => {
}
};

export const dismissFlyouts = (selectedFlyouts: DiscoverFlyouts[] = ALL_FLYOUTS) => {
export const dismissFlyouts = (
selectedFlyouts: DiscoverFlyouts[] = AllDiscoverFlyouts,
excludedFlyout?: DiscoverFlyouts
) => {
selectedFlyouts.forEach((flyout) => {
if (flyout === excludedFlyout) {
return;
}
const closeButton = getFlyoutCloseButton(flyout);
if (closeButton) {
closeButton.click?.();
}
});
};

export const dismissAllFlyoutsExceptFor = (excludedFlyout: DiscoverFlyouts) => {
dismissFlyouts(AllDiscoverFlyouts, excludedFlyout);
};
2 changes: 1 addition & 1 deletion packages/kbn-discover-utils/src/utils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@ export * from './get_field_value';
export * from './calc_field_counts';
export * from './get_visible_columns';
export { isLegacyTableEnabled } from './is_legacy_table_enabled';
export { DiscoverFlyouts, dismissFlyouts } from './dismiss_flyouts';
export { DiscoverFlyouts, dismissAllFlyoutsExceptFor, dismissFlyouts } from './dismiss_flyouts';
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import { type DataView, DataViewType } from '@kbn/data-views-plugin/public';
import { DataViewPickerProps } from '@kbn/unified-search-plugin/public';
import { ENABLE_ESQL } from '@kbn/esql-utils';
import { TextBasedLanguages } from '@kbn/esql-utils';
import { DiscoverFlyouts, dismissAllFlyoutsExceptFor } from '@kbn/discover-utils';
import { useSavedSearchInitial } from '../../state_management/discover_state_provider';
import { ESQL_TRANSITION_MODAL_KEY } from '../../../../../common/constants';
import { useInternalStateSelector } from '../../state_management/discover_internal_state_container';
Expand Down Expand Up @@ -233,6 +234,12 @@ export const DiscoverTopNav = ({
uiSettings,
]);

const onESQLDocsFlyoutVisibilityChanged = useCallback((isOpen: boolean) => {
if (isOpen) {
dismissAllFlyoutsExceptFor(DiscoverFlyouts.esqlDocs);
}
}, []);

const searchBarCustomization = useDiscoverCustomization('search_bar');

const SearchBar = useMemo(
Expand Down Expand Up @@ -278,6 +285,7 @@ export const DiscoverTopNav = ({
<searchBarCustomization.PrependFilterBar />
) : undefined
}
onESQLDocsFlyoutVisibilityChanged={onESQLDocsFlyoutVisibilityChanged}
/>
{isESQLToDataViewTransitionModalVisible && (
<ESQLToDataViewTransitionModal onClose={onESQLToDataViewTransitionModalClose} />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,14 @@
* License v3.0 only", or the "Server Side Public License, v 1".
*/

import React, { useMemo } from 'react';
import React, { useEffect, useMemo } from 'react';
import type { DataView } from '@kbn/data-views-plugin/public';
import { Filter, Query, AggregateQuery, isOfAggregateQueryType } from '@kbn/es-query';
import { AggregateQuery, Filter, isOfAggregateQueryType, Query } from '@kbn/es-query';
import type { DataTableRecord } from '@kbn/discover-utils/types';
import type { DocViewFilterFn } from '@kbn/unified-doc-viewer/types';
import type { DataTableColumnsMeta } from '@kbn/unified-data-table';
import type { DocViewsRegistry } from '@kbn/unified-doc-viewer';
import { DiscoverFlyouts, dismissAllFlyoutsExceptFor } from '@kbn/discover-utils';
import { UnifiedDocViewerFlyout } from '@kbn/unified-doc-viewer-plugin/public';
import { useDiscoverServices } from '../../hooks/use_discover_services';
import { useFlyoutActions } from './use_flyout_actions';
Expand Down Expand Up @@ -88,6 +89,10 @@ export function DiscoverGridFlyout({
return getDocViewer({ record: actualHit });
}, [flyoutCustomization, getDocViewerAccessor, actualHit]);

useEffect(() => {
dismissAllFlyoutsExceptFor(DiscoverFlyouts.docViewer);
}, []);

return (
<UnifiedDocViewerFlyout
flyoutTitle={docViewer.title}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import { isEqual, isObject } from 'lodash';
import type { LensEmbeddableOutput, Suggestion } from '@kbn/lens-plugin/public';
import type { Datatable } from '@kbn/expressions-plugin/common';
import { EditLensConfigPanelComponent } from '@kbn/lens-plugin/public/plugin';
import { DiscoverFlyouts, dismissAllFlyoutsExceptFor } from '@kbn/discover-utils';
import { deriveLensSuggestionFromLensAttributes } from '../utils/external_vis_context';

import {
Expand Down Expand Up @@ -144,5 +145,13 @@ export function ChartConfigPanel({
currentSuggestionType,
]);

return isPlainRecord ? editLensConfigPanel : null;
const flyoutElement = isPlainRecord ? editLensConfigPanel : null;

useEffect(() => {
if (flyoutElement) {
dismissAllFlyoutsExceptFor(DiscoverFlyouts.lensEdit);
}
}, [flyoutElement]);

return flyoutElement;
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,13 @@ import { FEEDBACK_LINK } from '@kbn/esql-utils';
import { LanguageDocumentationFlyout } from '@kbn/language-documentation';
import type { IUnifiedSearchPluginServices } from '../types';

export const ESQLMenuPopover = () => {
export interface ESQLMenuPopoverProps {
onESQLDocsFlyoutVisibilityChanged?: (isOpen: boolean) => void;
}

export const ESQLMenuPopover: React.FC<ESQLMenuPopoverProps> = ({
onESQLDocsFlyoutVisibilityChanged,
}) => {
const kibana = useKibana<IUnifiedSearchPluginServices>();

const { docLinks } = kibana.services;
Expand All @@ -34,6 +40,14 @@ export const ESQLMenuPopover = () => {
setIsESQLMenuPopoverOpen(false);
}, [isLanguageComponentOpen]);

const onHelpMenuVisibilityChange = useCallback(
(status: boolean) => {
setIsLanguageComponentOpen(status);
onESQLDocsFlyoutVisibilityChanged?.(status);
},
[setIsLanguageComponentOpen, onESQLDocsFlyoutVisibilityChanged]
);

const esqlPanelItems = useMemo(() => {
const panelItems: EuiContextMenuPanelProps['items'] = [];
panelItems.push(
Expand Down Expand Up @@ -122,7 +136,7 @@ export const ESQLMenuPopover = () => {
searchInDescription
linkToDocumentation={docLinks?.links?.query?.queryESQL ?? ''}
isHelpMenuOpen={isLanguageComponentOpen}
onHelpMenuVisibilityChange={setIsLanguageComponentOpen}
onHelpMenuVisibilityChange={onHelpMenuVisibilityChange}
/>
</>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ import { NoDataPopover } from './no_data_popover';
import { shallowEqual } from '../utils/shallow_equal';
import { AddFilterPopover } from './add_filter_popover';
import { DataViewPicker, DataViewPickerProps } from '../dataview_picker';
import { ESQLMenuPopover } from './esql_menu_popover';
import { ESQLMenuPopover, type ESQLMenuPopoverProps } from './esql_menu_popover';

import { FilterButtonGroup } from '../filter_bar/filter_button_group/filter_button_group';
import type {
Expand Down Expand Up @@ -186,6 +186,7 @@ export interface QueryBarTopRowProps<QT extends Query | AggregateQuery = Query>
submitOnBlur?: boolean;
renderQueryInputAppend?: () => React.ReactNode;
disableExternalPadding?: boolean;
onESQLDocsFlyoutVisibilityChanged?: ESQLMenuPopoverProps['onESQLDocsFlyoutVisibilityChanged'];
}

export const SharingMetaFields = React.memo(function SharingMetaFields({
Expand Down Expand Up @@ -774,7 +775,11 @@ export const QueryBarTopRow = React.memo(
wrap
>
{props.dataViewPickerOverride || renderDataViewsPicker()}
{Boolean(isQueryLangSelected) && <ESQLMenuPopover />}
{Boolean(isQueryLangSelected) && (
<ESQLMenuPopover
onESQLDocsFlyoutVisibilityChanged={props.onESQLDocsFlyoutVisibilityChanged}
/>
)}
<EuiFlexItem
grow={!shouldShowDatePickerAsBadge()}
style={{ minWidth: shouldShowDatePickerAsBadge() ? 'auto' : 320, maxWidth: '100%' }}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,7 @@ export function createSearchBar({
dataTestSubj={props.dataTestSubj}
filtersForSuggestions={props.filtersForSuggestions}
prependFilterBar={props.prependFilterBar}
onESQLDocsFlyoutVisibilityChanged={props.onESQLDocsFlyoutVisibilityChanged}
/>
</core.i18n.Context>
</KibanaContextProvider>
Expand Down
2 changes: 2 additions & 0 deletions src/plugins/unified_search/public/search_bar/search_bar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ export interface SearchBarOwnProps<QT extends AggregateQuery | Query = Query> {
submitOnBlur?: boolean;

renderQueryInputAppend?: () => React.ReactNode;
onESQLDocsFlyoutVisibilityChanged?: QueryBarTopRowProps['onESQLDocsFlyoutVisibilityChanged'];
}

export type SearchBarProps<QT extends Query | AggregateQuery = Query> = SearchBarOwnProps<QT> &
Expand Down Expand Up @@ -660,6 +661,7 @@ class SearchBarUI<QT extends (Query | AggregateQuery) | Query = Query> extends C
suggestionsAbstraction={this.props.suggestionsAbstraction}
renderQueryInputAppend={this.props.renderQueryInputAppend}
disableExternalPadding={this.props.displayStyle === 'withBorders'}
onESQLDocsFlyoutVisibilityChanged={this.props.onESQLDocsFlyoutVisibilityChanged}
/>
</div>
);
Expand Down

0 comments on commit c991440

Please sign in to comment.