diff --git a/src/plugins/embeddable/public/embeddable_panel/panel_header/use_embeddable_panel_badges.tsx b/src/plugins/embeddable/public/embeddable_panel/panel_header/use_embeddable_panel_badges.tsx
index 0e8bcdd8ac9c79..7d8fa41a51158c 100644
--- a/src/plugins/embeddable/public/embeddable_panel/panel_header/use_embeddable_panel_badges.tsx
+++ b/src/plugins/embeddable/public/embeddable_panel/panel_header/use_embeddable_panel_badges.tsx
@@ -106,18 +106,30 @@ export const useEmbeddablePanelBadges = (
const badgeComponents = useMemo(
() =>
- badges?.map((badge) => (
- badge.execute({ embeddable, trigger: panelBadgeTrigger })}
- onClickAriaLabel={badge.getDisplayName({ embeddable, trigger: panelBadgeTrigger })}
- data-test-subj={`embeddablePanelBadge-${badge.id}`}
- >
- {badge.getDisplayName({ embeddable, trigger: panelBadgeTrigger })}
-
- )),
+ badges?.map((badge) => {
+ const badgeComponent = (
+ badge.execute({ embeddable, trigger: panelBadgeTrigger })}
+ onClickAriaLabel={badge.getDisplayName({ embeddable, trigger: panelBadgeTrigger })}
+ data-test-subj={`embeddablePanelBadge-${badge.id}`}
+ >
+ {badge.getDisplayName({ embeddable, trigger: panelBadgeTrigger })}
+
+ );
+
+ const tooltip = badge.getDisplayNameTooltip
+ ? badge.getDisplayNameTooltip({ embeddable, trigger: panelBadgeTrigger })
+ : '';
+
+ return tooltip ? (
+ {badgeComponent}
+ ) : (
+ badgeComponent
+ );
+ }),
[badges, embeddable]
);
diff --git a/src/plugins/input_control_vis/kibana.jsonc b/src/plugins/input_control_vis/kibana.jsonc
index c4a0df59b8e15a..129396f15ace68 100644
--- a/src/plugins/input_control_vis/kibana.jsonc
+++ b/src/plugins/input_control_vis/kibana.jsonc
@@ -12,10 +12,11 @@
"expressions",
"visDefaultEditor",
"visualizations",
- "unifiedSearch"
+ "unifiedSearch",
+ "uiActions"
],
"requiredBundles": [
- "kibanaReact"
+ "kibanaReact", "embeddable"
]
}
}
diff --git a/src/plugins/input_control_vis/public/deprecation_badge.ts b/src/plugins/input_control_vis/public/deprecation_badge.ts
new file mode 100644
index 00000000000000..5c65301066800b
--- /dev/null
+++ b/src/plugins/input_control_vis/public/deprecation_badge.ts
@@ -0,0 +1,54 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+import { Action } from '@kbn/ui-actions-plugin/public';
+
+import { Embeddable, ViewMode } from '@kbn/embeddable-plugin/public';
+import { i18n } from '@kbn/i18n';
+import { VisualizeInput } from '@kbn/visualizations-plugin/public';
+
+export const ACTION_DEPRECATION_BADGE = 'ACTION_INPUT_CONTROL_DEPRECATION_BADGE';
+
+export interface DeprecationBadgeActionContext {
+ embeddable: Embeddable;
+}
+
+export class InputControlDeprecationBadge implements Action {
+ public id = ACTION_DEPRECATION_BADGE;
+ public type = ACTION_DEPRECATION_BADGE;
+ public disabled = true;
+
+ public getDisplayName() {
+ return i18n.translate('inputControl.deprecationBadgeAction.deprecationBadgeLabel', {
+ defaultMessage: 'Deprecated',
+ });
+ }
+
+ public getIconType() {
+ return 'warning';
+ }
+
+ public getDisplayNameTooltip() {
+ return i18n.translate('inputControl.deprecationBadgeAction.deprecationWarningDescription', {
+ defaultMessage:
+ 'Input controls are deprecated and will be removed in a future release. Use the new Controls to filter and interact with your dashboard data.',
+ });
+ }
+
+ public async isCompatible({ embeddable }: DeprecationBadgeActionContext) {
+ return (
+ embeddable.getInput().viewMode === ViewMode.EDIT &&
+ embeddable.getInput()?.savedVis?.type === 'input_control_vis'
+ );
+ }
+
+ public async execute() {
+ // do nothing
+ return;
+ }
+}
diff --git a/src/plugins/input_control_vis/public/plugin.ts b/src/plugins/input_control_vis/public/plugin.ts
index 07a71e450ac72f..3cd54c2596a299 100644
--- a/src/plugins/input_control_vis/public/plugin.ts
+++ b/src/plugins/input_control_vis/public/plugin.ts
@@ -15,10 +15,13 @@ import {
} from '@kbn/unified-search-plugin/public';
import { Plugin as ExpressionsPublicPlugin } from '@kbn/expressions-plugin/public';
import { VisualizationsSetup, VisualizationsStart } from '@kbn/visualizations-plugin/public';
+import { UiActionsStart } from '@kbn/ui-actions-plugin/public';
+import { PANEL_BADGE_TRIGGER } from '@kbn/embeddable-plugin/public';
import { createInputControlVisFn } from './input_control_fn';
import { getInputControlVisRenderer } from './input_control_vis_renderer';
import { createInputControlVisTypeDefinition } from './input_control_vis_type';
import { InputControlPublicConfig } from '../config';
+import { InputControlDeprecationBadge } from './deprecation_badge';
type InputControlVisCoreSetup = CoreSetup;
@@ -48,6 +51,7 @@ export interface InputControlVisPluginStartDependencies {
visualizations: VisualizationsStart;
data: DataPublicPluginStart;
unifiedSearch: UnifiedSearchPublicPluginStart;
+ uiActions: UiActionsStart;
}
/** @internal */
@@ -78,5 +82,12 @@ export class InputControlVisPlugin implements Plugin {
public start(core: CoreStart, deps: InputControlVisPluginStartDependencies) {
// nothing to do here
+ const { uiActions } = deps;
+
+ const deprecationBadge = new InputControlDeprecationBadge();
+
+ uiActions.addTriggerAction(PANEL_BADGE_TRIGGER, deprecationBadge);
+
+ return {};
}
}
diff --git a/src/plugins/input_control_vis/tsconfig.json b/src/plugins/input_control_vis/tsconfig.json
index dbe5d4e2f28d70..876a37b925391f 100644
--- a/src/plugins/input_control_vis/tsconfig.json
+++ b/src/plugins/input_control_vis/tsconfig.json
@@ -23,6 +23,8 @@
"@kbn/i18n-react",
"@kbn/test-jest-helpers",
"@kbn/config-schema",
+ "@kbn/ui-actions-plugin",
+ "@kbn/embeddable-plugin",
],
"exclude": [
"target/**/*",