From a7258a62cef05d81cccb5fe869bb474d02d8a23b Mon Sep 17 00:00:00 2001 From: vadimkibana Date: Tue, 6 Sep 2022 13:13:23 +0200 Subject: [PATCH 1/3] allow variables in URL Drilldown title --- .../public/drilldowns/drilldown_definition.ts | 20 ++++++++++++---- .../ui_actions_service_enhancements.ts | 10 ++++++++ .../public/lib/url_drilldown.tsx | 23 +++++++++++++++++-- 3 files changed, 46 insertions(+), 7 deletions(-) diff --git a/src/plugins/ui_actions_enhanced/public/drilldowns/drilldown_definition.ts b/src/plugins/ui_actions_enhanced/public/drilldowns/drilldown_definition.ts index 1efe08490bf30c..f890d7b326ce25 100644 --- a/src/plugins/ui_actions_enhanced/public/drilldowns/drilldown_definition.ts +++ b/src/plugins/ui_actions_enhanced/public/drilldowns/drilldown_definition.ts @@ -6,13 +6,14 @@ * Side Public License, v 1. */ -import { LicenseType } from '@kbn/licensing-plugin/public'; -import { ActionExecutionContext } from '@kbn/ui-actions-plugin/public'; -import { PersistableStateDefinition } from '@kbn/kibana-utils-plugin/common'; -import { +import type { LicenseType } from '@kbn/licensing-plugin/public'; +import type { ActionExecutionContext } from '@kbn/ui-actions-plugin/public'; +import type { PersistableStateDefinition, UiComponent } from '@kbn/kibana-utils-plugin/common'; +import type { ActionFactoryDefinition, BaseActionConfig, BaseActionFactoryContext, + SerializedAction, SerializedEvent, } from '../dynamic_actions'; @@ -109,10 +110,19 @@ export interface DrilldownDefinition< /** * Should return an internationalized name of the drilldown, which will be - * displayed to the user. + * displayed to the user as the name of drilldown factory when configuring a drilldown. */ getDisplayName: () => string; + /** + * Name of the drilldown instance displayed to the user at the moment of + * drilldown execution. Should be internationalized. + */ + readonly actionMenuItem?: UiComponent<{ + config: Omit, "factoryId">; + context: ExecutionContext | ActionExecutionContext; + }>; + /** * isCompatible during execution * Could be used to prevent drilldown from execution diff --git a/src/plugins/ui_actions_enhanced/public/services/ui_actions_service_enhancements.ts b/src/plugins/ui_actions_enhanced/public/services/ui_actions_service_enhancements.ts index 9de325e281357a..b2467ed9962821 100644 --- a/src/plugins/ui_actions_enhanced/public/services/ui_actions_service_enhancements.ts +++ b/src/plugins/ui_actions_enhanced/public/services/ui_actions_service_enhancements.ts @@ -110,6 +110,7 @@ export class UiActionsServiceEnhancements createConfig, isConfigValid, getDisplayName, + actionMenuItem, euiIcon, execute, getHref, @@ -143,6 +144,15 @@ export class UiActionsServiceEnhancements type: factoryId, getIconType: () => euiIcon, getDisplayName: () => serializedAction.name, + MenuItem: actionMenuItem ? (() => { + const comp = actionMenuItem(); + return { + render: (el, {context}) => { + comp.render(el, {context, config: serializedAction}); + }, + unmount: comp.unmount, + }; + }) : undefined, execute: async (context) => await execute(serializedAction.config, context), getHref: getHref ? async (context) => getHref(serializedAction.config, context) : undefined, isCompatible: isCompatible diff --git a/x-pack/plugins/drilldowns/url_drilldown/public/lib/url_drilldown.tsx b/x-pack/plugins/drilldowns/url_drilldown/public/lib/url_drilldown.tsx index 7ecdd4250cbc9a..8db991ecec11fc 100644 --- a/x-pack/plugins/drilldowns/url_drilldown/public/lib/url_drilldown.tsx +++ b/x-pack/plugins/drilldowns/url_drilldown/public/lib/url_drilldown.tsx @@ -15,9 +15,9 @@ import { SELECT_RANGE_TRIGGER, VALUE_CLICK_TRIGGER, } from '@kbn/embeddable-plugin/public'; -import { ROW_CLICK_TRIGGER } from '@kbn/ui-actions-plugin/public'; +import { ActionExecutionContext, ROW_CLICK_TRIGGER } from '@kbn/ui-actions-plugin/public'; import type { Query, Filter, TimeRange } from '@kbn/es-query'; -import { CollectConfigProps as CollectConfigPropsBase } from '@kbn/kibana-utils-plugin/public'; +import type { CollectConfigProps as CollectConfigPropsBase, UiComponent } from '@kbn/kibana-utils-plugin/public'; import { reactToUiComponent, UrlTemplateEditorVariable, @@ -36,6 +36,7 @@ import { txtUrlDrilldownDisplayName } from './i18n'; import { getEventVariableList, getEventScopeValues } from './variables/event_variables'; import { getContextVariableList, getContextScopeValues } from './variables/context_variables'; import { getGlobalVariableList } from './variables/global_variables'; +import type {SerializedAction} from '@kbn/ui-actions-enhanced-plugin/common/types'; interface EmbeddableQueryInput extends EmbeddableInput { query?: Query; @@ -82,6 +83,24 @@ export class UrlDrilldown implements Drilldown txtUrlDrilldownDisplayName; + public readonly actionMenuItem: UiComponent<{config: Omit, 'factoryId'>; context: ActionContext | ActionExecutionContext;}> = reactToUiComponent(({config, context}) => { + const [title, setTitle] = React.useState(config.name); + React.useEffect(() => { + let unmounted = false; + const variables = this.getRuntimeVariables(context); + urlDrilldownCompileUrl(title, variables, false) + .then((result) => { + if (unmounted) return; + if (title !== result) setTitle(result); + }) + .catch(() => {}); + return () => { + unmounted = true; + }; + }, [config.name, context]); + return <>{title}; + }); + public readonly euiIcon = 'link'; supportedTriggers(): UrlTrigger[] { From 18ae81b43aa9de566076dcaabb6f1cc0908629e2 Mon Sep 17 00:00:00 2001 From: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Date: Tue, 6 Sep 2022 11:42:19 +0000 Subject: [PATCH 2/3] [CI] Auto-commit changed files from 'node scripts/eslint --no-cache --fix' --- .../public/drilldowns/drilldown_definition.ts | 2 +- .../ui_actions_service_enhancements.ts | 20 ++++++++++--------- .../public/lib/url_drilldown.tsx | 12 ++++++++--- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/plugins/ui_actions_enhanced/public/drilldowns/drilldown_definition.ts b/src/plugins/ui_actions_enhanced/public/drilldowns/drilldown_definition.ts index f890d7b326ce25..4cbd2038dfef40 100644 --- a/src/plugins/ui_actions_enhanced/public/drilldowns/drilldown_definition.ts +++ b/src/plugins/ui_actions_enhanced/public/drilldowns/drilldown_definition.ts @@ -119,7 +119,7 @@ export interface DrilldownDefinition< * drilldown execution. Should be internationalized. */ readonly actionMenuItem?: UiComponent<{ - config: Omit, "factoryId">; + config: Omit, 'factoryId'>; context: ExecutionContext | ActionExecutionContext; }>; diff --git a/src/plugins/ui_actions_enhanced/public/services/ui_actions_service_enhancements.ts b/src/plugins/ui_actions_enhanced/public/services/ui_actions_service_enhancements.ts index b2467ed9962821..9b80a3316d2f11 100644 --- a/src/plugins/ui_actions_enhanced/public/services/ui_actions_service_enhancements.ts +++ b/src/plugins/ui_actions_enhanced/public/services/ui_actions_service_enhancements.ts @@ -144,15 +144,17 @@ export class UiActionsServiceEnhancements type: factoryId, getIconType: () => euiIcon, getDisplayName: () => serializedAction.name, - MenuItem: actionMenuItem ? (() => { - const comp = actionMenuItem(); - return { - render: (el, {context}) => { - comp.render(el, {context, config: serializedAction}); - }, - unmount: comp.unmount, - }; - }) : undefined, + MenuItem: actionMenuItem + ? () => { + const comp = actionMenuItem(); + return { + render: (el, { context }) => { + comp.render(el, { context, config: serializedAction }); + }, + unmount: comp.unmount, + }; + } + : undefined, execute: async (context) => await execute(serializedAction.config, context), getHref: getHref ? async (context) => getHref(serializedAction.config, context) : undefined, isCompatible: isCompatible diff --git a/x-pack/plugins/drilldowns/url_drilldown/public/lib/url_drilldown.tsx b/x-pack/plugins/drilldowns/url_drilldown/public/lib/url_drilldown.tsx index 8db991ecec11fc..5c3596e4b2c024 100644 --- a/x-pack/plugins/drilldowns/url_drilldown/public/lib/url_drilldown.tsx +++ b/x-pack/plugins/drilldowns/url_drilldown/public/lib/url_drilldown.tsx @@ -17,7 +17,10 @@ import { } from '@kbn/embeddable-plugin/public'; import { ActionExecutionContext, ROW_CLICK_TRIGGER } from '@kbn/ui-actions-plugin/public'; import type { Query, Filter, TimeRange } from '@kbn/es-query'; -import type { CollectConfigProps as CollectConfigPropsBase, UiComponent } from '@kbn/kibana-utils-plugin/public'; +import type { + CollectConfigProps as CollectConfigPropsBase, + UiComponent, +} from '@kbn/kibana-utils-plugin/public'; import { reactToUiComponent, UrlTemplateEditorVariable, @@ -32,11 +35,11 @@ import { urlDrilldownCompileUrl, UiActionsEnhancedBaseActionFactoryContext as BaseActionFactoryContext, } from '@kbn/ui-actions-enhanced-plugin/public'; +import type { SerializedAction } from '@kbn/ui-actions-enhanced-plugin/common/types'; import { txtUrlDrilldownDisplayName } from './i18n'; import { getEventVariableList, getEventScopeValues } from './variables/event_variables'; import { getContextVariableList, getContextScopeValues } from './variables/context_variables'; import { getGlobalVariableList } from './variables/global_variables'; -import type {SerializedAction} from '@kbn/ui-actions-enhanced-plugin/common/types'; interface EmbeddableQueryInput extends EmbeddableInput { query?: Query; @@ -83,7 +86,10 @@ export class UrlDrilldown implements Drilldown txtUrlDrilldownDisplayName; - public readonly actionMenuItem: UiComponent<{config: Omit, 'factoryId'>; context: ActionContext | ActionExecutionContext;}> = reactToUiComponent(({config, context}) => { + public readonly actionMenuItem: UiComponent<{ + config: Omit, 'factoryId'>; + context: ActionContext | ActionExecutionContext; + }> = reactToUiComponent(({ config, context }) => { const [title, setTitle] = React.useState(config.name); React.useEffect(() => { let unmounted = false; From 4d9683eb314f0a420a33c30186219ef163591304 Mon Sep 17 00:00:00 2001 From: vadimkibana Date: Thu, 8 Sep 2022 14:28:16 +0200 Subject: [PATCH 3/3] remove dependency array --- .../drilldowns/url_drilldown/public/lib/url_drilldown.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/drilldowns/url_drilldown/public/lib/url_drilldown.tsx b/x-pack/plugins/drilldowns/url_drilldown/public/lib/url_drilldown.tsx index 5c3596e4b2c024..f1a25398c7e4ce 100644 --- a/x-pack/plugins/drilldowns/url_drilldown/public/lib/url_drilldown.tsx +++ b/x-pack/plugins/drilldowns/url_drilldown/public/lib/url_drilldown.tsx @@ -103,7 +103,7 @@ export class UrlDrilldown implements Drilldown { unmounted = true; }; - }, [config.name, context]); + }); return <>{title}; });