Skip to content

Commit c0f4f1d

Browse files
streamichDosantelasticmachine
authored
Enable "Explore underlying data" actions for Lens visualizations (#70047) (#70415)
* refactor: 💡 rename folder to "explore_data" * style: 💄 check for "share" plugin in more semantic way "explore data" actions use Discover URL generator, which is registered in "share" plugin, which is optional plugin, so we check for its existance, because otherwise URL generator is not available. * refactor: 💡 move KibanaURL to a separate file * feat: 🎸 add "Explore underlying data" in-chart action * fix: 🐛 fix imports after refactor * feat: 🎸 add start.filtersFromContext to embeddable plugin * feat: 🎸 add type checkers to data plugin * feat: 🎸 better handle empty filters in Discover URL generator * feat: 🎸 implement .getUrl() method of explore data in-chart act * feat: 🎸 add embeddable.filtersAndTimeRangeFromContext() * feat: 🎸 improve getUrl() method of explore data action * test: 💍 update test mock * fix possible stale hashHistory.location in discover * style: 💄 ensureHashHistoryLocation -> syncHistoryLocations * docs: ✏️ update autogenerated docs * test: 💍 add in-chart "Explore underlying data" unit tests * test: 💍 add in-chart "Explore underlying data" functional tests * test: 💍 clean-up custom time range after panel action tests * chore: 🤖 fix embeddable plugin mocks * chore: 🤖 fix another mock * test: 💍 add support for new action to pie chart service * feat: 🎸 enable "Explore underlying data" action for Lens vis * test: 💍 make tests green again * refactor: 💡 rename trigger contexts * chore: 🤖 fix TypeScript errors Co-authored-by: Anton Dosov <anton.dosov@elastic.co> Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com> Co-authored-by: Anton Dosov <anton.dosov@elastic.co> Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
1 parent 31a48a6 commit c0f4f1d

File tree

19 files changed

+74
-83
lines changed

19 files changed

+74
-83
lines changed

src/plugins/data/public/actions/filters/create_filters_from_range_select.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ import moment from 'moment';
2222
import { esFilters, IFieldType, RangeFilterParams } from '../../../public';
2323
import { getIndexPatterns } from '../../../public/services';
2424
import { deserializeAggConfig } from '../../search/expressions/utils';
25-
import { RangeSelectTriggerContext } from '../../../../embeddable/public';
25+
import { RangeSelectContext } from '../../../../embeddable/public';
2626

27-
export async function createFiltersFromRangeSelectAction(event: RangeSelectTriggerContext['data']) {
27+
export async function createFiltersFromRangeSelectAction(event: RangeSelectContext['data']) {
2828
const column: Record<string, any> = event.table.columns[event.column];
2929

3030
if (!column || !column.meta) {

src/plugins/data/public/actions/filters/create_filters_from_value_click.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import { dataPluginMock } from '../../../public/mocks';
2727
import { setIndexPatterns } from '../../../public/services';
2828
import { mockDataServices } from '../../../public/search/aggs/test_helpers';
2929
import { createFiltersFromValueClickAction } from './create_filters_from_value_click';
30-
import { ValueClickTriggerContext } from '../../../../embeddable/public';
30+
import { ValueClickContext } from '../../../../embeddable/public';
3131

3232
const mockField = {
3333
name: 'bytes',
@@ -39,7 +39,7 @@ const mockField = {
3939
};
4040

4141
describe('createFiltersFromValueClick', () => {
42-
let dataPoints: ValueClickTriggerContext['data']['data'];
42+
let dataPoints: ValueClickContext['data']['data'];
4343

4444
beforeEach(() => {
4545
dataPoints = [

src/plugins/data/public/actions/filters/create_filters_from_value_click.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import { KibanaDatatable } from '../../../../../plugins/expressions/public';
2121
import { deserializeAggConfig } from '../../search/expressions';
2222
import { esFilters, Filter } from '../../../public';
2323
import { getIndexPatterns } from '../../../public/services';
24-
import { ValueClickTriggerContext } from '../../../../embeddable/public';
24+
import { ValueClickContext } from '../../../../embeddable/public';
2525

2626
/**
2727
* For terms aggregations on `__other__` buckets, this assembles a list of applicable filter
@@ -114,7 +114,7 @@ const createFilter = async (
114114
export const createFiltersFromValueClickAction = async ({
115115
data,
116116
negate,
117-
}: ValueClickTriggerContext['data']) => {
117+
}: ValueClickContext['data']) => {
118118
const filters: Filter[] = [];
119119

120120
await Promise.all(

src/plugins/data/public/actions/select_range_action.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@ import {
2424
ActionByType,
2525
} from '../../../../plugins/ui_actions/public';
2626
import { createFiltersFromRangeSelectAction } from './filters/create_filters_from_range_select';
27-
import { RangeSelectTriggerContext } from '../../../embeddable/public';
27+
import { RangeSelectContext } from '../../../embeddable/public';
2828
import { FilterManager, TimefilterContract, esFilters } from '..';
2929

3030
export const ACTION_SELECT_RANGE = 'ACTION_SELECT_RANGE';
3131

32-
export type SelectRangeActionContext = RangeSelectTriggerContext;
32+
export type SelectRangeActionContext = RangeSelectContext;
3333

3434
async function isCompatible(context: SelectRangeActionContext) {
3535
try {

src/plugins/data/public/actions/value_click_action.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,12 @@ import {
2727
import { getOverlays, getIndexPatterns } from '../services';
2828
import { applyFiltersPopover } from '../ui/apply_filters';
2929
import { createFiltersFromValueClickAction } from './filters/create_filters_from_value_click';
30-
import { ValueClickTriggerContext } from '../../../embeddable/public';
30+
import { ValueClickContext } from '../../../embeddable/public';
3131
import { Filter, FilterManager, TimefilterContract, esFilters } from '..';
3232

3333
export const ACTION_VALUE_CLICK = 'ACTION_VALUE_CLICK';
3434

35-
export type ValueClickActionContext = ValueClickTriggerContext;
35+
export type ValueClickActionContext = ValueClickContext;
3636

3737
async function isCompatible(context: ValueClickActionContext) {
3838
try {

src/plugins/embeddable/public/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ export {
4848
EmbeddableOutput,
4949
EmbeddablePanel,
5050
EmbeddableRoot,
51-
ValueClickTriggerContext,
52-
RangeSelectTriggerContext,
51+
ValueClickContext,
52+
RangeSelectContext,
5353
ErrorEmbeddable,
5454
IContainer,
5555
IEmbeddable,

src/plugins/embeddable/public/lib/triggers/triggers.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export interface EmbeddableContext {
2525
embeddable: IEmbeddable;
2626
}
2727

28-
export interface ValueClickTriggerContext<T extends IEmbeddable = IEmbeddable> {
28+
export interface ValueClickContext<T extends IEmbeddable = IEmbeddable> {
2929
embeddable?: T;
3030
data: {
3131
data: Array<{
@@ -39,7 +39,7 @@ export interface ValueClickTriggerContext<T extends IEmbeddable = IEmbeddable> {
3939
};
4040
}
4141

42-
export interface RangeSelectTriggerContext<T extends IEmbeddable = IEmbeddable> {
42+
export interface RangeSelectContext<T extends IEmbeddable = IEmbeddable> {
4343
embeddable?: T;
4444
data: {
4545
table: KibanaDatatable;
@@ -50,16 +50,16 @@ export interface RangeSelectTriggerContext<T extends IEmbeddable = IEmbeddable>
5050
}
5151

5252
export type ChartActionContext<T extends IEmbeddable = IEmbeddable> =
53-
| ValueClickTriggerContext<T>
54-
| RangeSelectTriggerContext<T>;
53+
| ValueClickContext<T>
54+
| RangeSelectContext<T>;
5555

5656
export const isValueClickTriggerContext = (
5757
context: ChartActionContext
58-
): context is ValueClickTriggerContext => context.data && 'data' in context.data;
58+
): context is ValueClickContext => context.data && 'data' in context.data;
5959

6060
export const isRangeSelectTriggerContext = (
6161
context: ChartActionContext
62-
): context is RangeSelectTriggerContext => context.data && 'range' in context.data;
62+
): context is RangeSelectContext => context.data && 'range' in context.data;
6363

6464
export const CONTEXT_MENU_TRIGGER = 'CONTEXT_MENU_TRIGGER';
6565
export const contextMenuTrigger: Trigger<'CONTEXT_MENU_TRIGGER'> = {

src/plugins/ui_actions/public/types.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import { TriggerInternal } from './triggers/trigger_internal';
2222
import { Filter } from '../../data/public';
2323
import { SELECT_RANGE_TRIGGER, VALUE_CLICK_TRIGGER, APPLY_FILTER_TRIGGER } from './triggers';
2424
import { IEmbeddable } from '../../embeddable/public';
25-
import { RangeSelectTriggerContext, ValueClickTriggerContext } from '../../embeddable/public';
25+
import { RangeSelectContext, ValueClickContext } from '../../embeddable/public';
2626

2727
export type TriggerRegistry = Map<TriggerId, TriggerInternal<any>>;
2828
export type ActionRegistry = Map<string, ActionInternal>;
@@ -37,8 +37,8 @@ export type TriggerContext = BaseContext;
3737

3838
export interface TriggerContextMapping {
3939
[DEFAULT_TRIGGER]: TriggerContext;
40-
[SELECT_RANGE_TRIGGER]: RangeSelectTriggerContext;
41-
[VALUE_CLICK_TRIGGER]: ValueClickTriggerContext;
40+
[SELECT_RANGE_TRIGGER]: RangeSelectContext;
41+
[VALUE_CLICK_TRIGGER]: ValueClickContext;
4242
[APPLY_FILTER_TRIGGER]: {
4343
embeddable: IEmbeddable;
4444
filters: Filter[];

x-pack/examples/ui_actions_enhanced_examples/public/dashboard_hello_world_drilldown/index.tsx

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,10 @@ import React from 'react';
88
import { EuiFormRow, EuiFieldText } from '@elastic/eui';
99
import { reactToUiComponent } from '../../../../../src/plugins/kibana_react/public';
1010
import { UiActionsEnhancedDrilldownDefinition as Drilldown } from '../../../../plugins/ui_actions_enhanced/public';
11-
import {
12-
RangeSelectTriggerContext,
13-
ValueClickTriggerContext,
14-
} from '../../../../../src/plugins/embeddable/public';
11+
import { ChartActionContext } from '../../../../../src/plugins/embeddable/public';
1512
import { CollectConfigProps } from '../../../../../src/plugins/kibana_utils/public';
1613

17-
export type ActionContext = RangeSelectTriggerContext | ValueClickTriggerContext;
14+
export type ActionContext = ChartActionContext;
1815

1916
export interface Config {
2017
name: string;

x-pack/examples/ui_actions_enhanced_examples/public/dashboard_to_discover_drilldown/types.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,10 @@
44
* you may not use this file except in compliance with the Elastic License.
55
*/
66

7-
import {
8-
RangeSelectTriggerContext,
9-
ValueClickTriggerContext,
10-
} from '../../../../../src/plugins/embeddable/public';
7+
import { ChartActionContext } from '../../../../../src/plugins/embeddable/public';
118
import { CollectConfigProps as CollectConfigPropsBase } from '../../../../../src/plugins/kibana_utils/public';
129

13-
export type ActionContext = RangeSelectTriggerContext | ValueClickTriggerContext;
10+
export type ActionContext = ChartActionContext;
1411

1512
export interface Config {
1613
/**

0 commit comments

Comments
 (0)