From f84ea79fa5af0520b8e0d4378a3b451222364f3c Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Tue, 18 Feb 2025 15:48:40 -0700 Subject: [PATCH] [canvas] remove usage of EmbeddableInput type (#211512) Part of effort to remove legacy EmbeddableInput type. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../expression_types/embeddable.ts | 10 ++++------ .../functions/external/embeddable.ts | 10 ++++------ .../functions/external/saved_lens.ts | 11 +++++------ .../functions/external/saved_map.ts | 5 +---- .../functions/external/saved_search.ts | 13 +------------ .../functions/external/saved_visualization.ts | 4 +--- .../renderers/embeddable/embeddable.tsx | 15 +++++---------- .../embeddable/embeddable_input_to_expression.ts | 4 ++-- .../input_type_to_expression/embeddable.test.ts | 13 ++++++------- .../input_type_to_expression/embeddable.ts | 3 +-- .../public/components/hooks/use_canvas_api.tsx | 5 ++--- .../platform/plugins/private/canvas/tsconfig.json | 1 - .../plugins/private/canvas/types/embeddables.ts | 9 --------- 13 files changed, 32 insertions(+), 71 deletions(-) diff --git a/x-pack/platform/plugins/private/canvas/canvas_plugin_src/expression_types/embeddable.ts b/x-pack/platform/plugins/private/canvas/canvas_plugin_src/expression_types/embeddable.ts index e1cdd16a6bad4..6a46d20572bd3 100644 --- a/x-pack/platform/plugins/private/canvas/canvas_plugin_src/expression_types/embeddable.ts +++ b/x-pack/platform/plugins/private/canvas/canvas_plugin_src/expression_types/embeddable.ts @@ -6,14 +6,12 @@ */ import { ExpressionTypeDefinition } from '@kbn/expressions-plugin/common'; -import { EmbeddableInput } from '../../types'; import { EmbeddableTypes } from './embeddable_types'; export const EmbeddableExpressionType = 'embeddable'; -export type { EmbeddableInput }; export { EmbeddableTypes }; -export interface EmbeddableExpression { +export interface EmbeddableExpression { /** * The type of the expression result */ @@ -21,7 +19,7 @@ export interface EmbeddableExpression { /** * The input to be passed to the embeddable */ - input: Input; + input: Record; /** * The type of embeddable */ @@ -35,11 +33,11 @@ export interface EmbeddableExpression { export const embeddableType = (): ExpressionTypeDefinition< typeof EmbeddableExpressionType, - EmbeddableExpression + EmbeddableExpression > => ({ name: EmbeddableExpressionType, to: { - render: (embeddableExpression: EmbeddableExpression) => { + render: (embeddableExpression: EmbeddableExpression) => { return { type: 'render', as: EmbeddableExpressionType, diff --git a/x-pack/platform/plugins/private/canvas/canvas_plugin_src/functions/external/embeddable.ts b/x-pack/platform/plugins/private/canvas/canvas_plugin_src/functions/external/embeddable.ts index aee62f2c3de2a..9010ced179fb7 100644 --- a/x-pack/platform/plugins/private/canvas/canvas_plugin_src/functions/external/embeddable.ts +++ b/x-pack/platform/plugins/private/canvas/canvas_plugin_src/functions/external/embeddable.ts @@ -13,7 +13,7 @@ import { } from '@kbn/expressions-plugin/common'; import { MigrateFunction, MigrateFunctionsObject } from '@kbn/kibana-utils-plugin/common'; import { SavedObjectReference } from '@kbn/core/types'; -import { ExpressionValueFilter, EmbeddableInput } from '../../../types'; +import { ExpressionValueFilter } from '../../../types'; import { EmbeddableExpressionType, EmbeddableExpression } from '../../expression_types'; import { getFunctionHelp } from '../../../i18n'; import { getQueryFilters } from '../../../common/lib/build_embeddable_filters'; @@ -36,13 +36,11 @@ const baseEmbeddableInput = { renderMode: 'noInteractivity', }; -type Return = EmbeddableExpression; - type EmbeddableFunction = ExpressionFunctionDefinition< 'embeddable', ExpressionValueFilter | null, Arguments, - Return + EmbeddableExpression >; export function embeddableFunctionFactory({ @@ -56,7 +54,7 @@ export function embeddableFunctionFactory({ migrateFn: MigrateFunction ): MigrateFunction => (state: ExpressionAstFunction): ExpressionAstFunction => { - const embeddableInput = decode(state.arguments.config[0] as string) as EmbeddableInput; + const embeddableInput = decode(state.arguments.config[0] as string); const embeddableType = state.arguments.type[0]; @@ -92,7 +90,7 @@ export function embeddableFunctionFactory({ fn: (input, args) => { const filters = input ? input.and : []; - const embeddableInput = decode(args.config) as EmbeddableInput; + const embeddableInput = decode(args.config); return { type: EmbeddableExpressionType, diff --git a/x-pack/platform/plugins/private/canvas/canvas_plugin_src/functions/external/saved_lens.ts b/x-pack/platform/plugins/private/canvas/canvas_plugin_src/functions/external/saved_lens.ts index a69ecb724a641..347b6ec0eb37f 100644 --- a/x-pack/platform/plugins/private/canvas/canvas_plugin_src/functions/external/saved_lens.ts +++ b/x-pack/platform/plugins/private/canvas/canvas_plugin_src/functions/external/saved_lens.ts @@ -11,7 +11,7 @@ import { Filter as DataFilter } from '@kbn/es-query'; import type { TimeRange } from '@kbn/es-query'; import { SavedObjectReference } from '@kbn/core/types'; import { getQueryFilters } from '../../../common/lib/build_embeddable_filters'; -import { ExpressionValueFilter, EmbeddableInput, TimeRange as TimeRangeArg } from '../../../types'; +import { ExpressionValueFilter, TimeRange as TimeRangeArg } from '../../../types'; import { EmbeddableTypes, EmbeddableExpressionType, @@ -25,25 +25,24 @@ interface Arguments { palette?: PaletteOutput; } -export type SavedLensInput = EmbeddableInput & { +export interface SavedLensInput { + title?: string; savedObjectId: string; timeRange?: TimeRange; filters: DataFilter[]; palette?: PaletteOutput; -}; +} const defaultTimeRange = { from: 'now-15m', to: 'now', }; -type Return = EmbeddableExpression; - export function savedLens(): ExpressionFunctionDefinition< 'savedLens', ExpressionValueFilter | null, Arguments, - Return + EmbeddableExpression > { const { help, args: argHelp } = getFunctionHelp().savedLens; return { diff --git a/x-pack/platform/plugins/private/canvas/canvas_plugin_src/functions/external/saved_map.ts b/x-pack/platform/plugins/private/canvas/canvas_plugin_src/functions/external/saved_map.ts index 41ea76e4905cc..cdb70a11d359f 100644 --- a/x-pack/platform/plugins/private/canvas/canvas_plugin_src/functions/external/saved_map.ts +++ b/x-pack/platform/plugins/private/canvas/canvas_plugin_src/functions/external/saved_map.ts @@ -6,7 +6,6 @@ */ import { ExpressionFunctionDefinition } from '@kbn/expressions-plugin/common'; -import type { MapSerializedState } from '@kbn/maps-plugin/public'; import { SavedObjectReference } from '@kbn/core/types'; import { ExpressionValueFilter, MapCenter, TimeRange as TimeRangeArg } from '../../../types'; import { @@ -29,13 +28,11 @@ const defaultTimeRange = { to: 'now', }; -type Output = EmbeddableExpression; - export function savedMap(): ExpressionFunctionDefinition< 'savedMap', ExpressionValueFilter | null, Arguments, - Output + EmbeddableExpression > { const { help, args: argHelp } = getFunctionHelp().savedMap; return { diff --git a/x-pack/platform/plugins/private/canvas/canvas_plugin_src/functions/external/saved_search.ts b/x-pack/platform/plugins/private/canvas/canvas_plugin_src/functions/external/saved_search.ts index 089d39ea6299e..8883f59d22561 100644 --- a/x-pack/platform/plugins/private/canvas/canvas_plugin_src/functions/external/saved_search.ts +++ b/x-pack/platform/plugins/private/canvas/canvas_plugin_src/functions/external/saved_search.ts @@ -6,10 +6,7 @@ */ import type { ExpressionFunctionDefinition } from '@kbn/expressions-plugin/common'; -import type { SearchEmbeddableSerializedState } from '@kbn/discover-plugin/public'; import type { SavedObjectReference } from '@kbn/core/types'; -import type { Filter } from '@kbn/es-query'; -import type { ViewMode } from '@kbn/presentation-publishing'; import { EmbeddableTypes, EmbeddableExpressionType, @@ -24,19 +21,11 @@ interface Arguments { id: string; } -type Output = EmbeddableExpression< - Partial & { - id: string; - filters?: Filter[]; - viewMode?: ViewMode; - } ->; - export function savedSearch(): ExpressionFunctionDefinition< 'savedSearch', ExpressionValueFilter | null, Arguments, - Output + EmbeddableExpression > { const { help, args: argHelp } = getFunctionHelp().savedSearch; return { diff --git a/x-pack/platform/plugins/private/canvas/canvas_plugin_src/functions/external/saved_visualization.ts b/x-pack/platform/plugins/private/canvas/canvas_plugin_src/functions/external/saved_visualization.ts index 7efb620634c03..3100442e7df85 100644 --- a/x-pack/platform/plugins/private/canvas/canvas_plugin_src/functions/external/saved_visualization.ts +++ b/x-pack/platform/plugins/private/canvas/canvas_plugin_src/functions/external/saved_visualization.ts @@ -26,8 +26,6 @@ interface Arguments { title: string | null; } -type Output = EmbeddableExpression; - const defaultTimeRange = { from: 'now-15m', to: 'now', @@ -37,7 +35,7 @@ export function savedVisualization(): ExpressionFunctionDefinition< 'savedVisualization', ExpressionValueFilter | null, Arguments, - Output + EmbeddableExpression > { const { help, args: argHelp } = getFunctionHelp().savedVisualization; return { diff --git a/x-pack/platform/plugins/private/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx b/x-pack/platform/plugins/private/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx index 834fec6247705..b10d6332e2d80 100644 --- a/x-pack/platform/plugins/private/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx +++ b/x-pack/platform/plugins/private/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx @@ -22,12 +22,7 @@ import { import { BehaviorSubject } from 'rxjs'; import { CANVAS_EMBEDDABLE_CLASSNAME } from '../../../common/lib'; import { RendererStrings } from '../../../i18n'; -import { - CanvasContainerApi, - EmbeddableInput, - RendererFactory, - RendererHandlers, -} from '../../../types'; +import { CanvasContainerApi, RendererFactory, RendererHandlers } from '../../../types'; import { EmbeddableExpression } from '../../expression_types/embeddable'; import { StartDeps } from '../../plugin'; import { embeddableInputToExpression } from './embeddable_input_to_expression'; @@ -46,7 +41,7 @@ const renderReactEmbeddable = ({ }: { type: string; uuid: string; - input: EmbeddableInput; + input: { filters?: Filter[] }; container: CanvasContainerApi; handlers: RendererHandlers; core: CoreStart; @@ -75,7 +70,7 @@ const renderReactEmbeddable = ({ key={`${type}_${uuid}`} onAnyStateChange={(newState) => { const newExpression = embeddableInputToExpression( - newState.rawState as unknown as EmbeddableInput, + newState.rawState, type, undefined, true @@ -117,7 +112,7 @@ const renderReactEmbeddable = ({ export const embeddableRendererFactory = ( core: CoreStart, plugins: StartDeps -): RendererFactory & { canvasApi: CanvasContainerApi }> => { +): RendererFactory => { return () => ({ name: 'embeddable', displayName: strings.getDisplayName(), @@ -146,7 +141,7 @@ export const embeddableRendererFactory = ( return ReactDOM.unmountComponentAtNode(domNode); }); } else { - api.setFilters(input.filters); + api.setFilters((input as { filters?: Filter[] }).filters); } }, }); diff --git a/x-pack/platform/plugins/private/canvas/canvas_plugin_src/renderers/embeddable/embeddable_input_to_expression.ts b/x-pack/platform/plugins/private/canvas/canvas_plugin_src/renderers/embeddable/embeddable_input_to_expression.ts index 05bfeec448ab2..f4e6075f64edc 100644 --- a/x-pack/platform/plugins/private/canvas/canvas_plugin_src/renderers/embeddable/embeddable_input_to_expression.ts +++ b/x-pack/platform/plugins/private/canvas/canvas_plugin_src/renderers/embeddable/embeddable_input_to_expression.ts @@ -6,7 +6,7 @@ */ import type { PaletteRegistry } from '@kbn/coloring'; -import { EmbeddableTypes, EmbeddableInput } from '../../expression_types'; +import { EmbeddableTypes } from '../../expression_types'; import { toExpression as mapToExpression } from './input_type_to_expression/map'; import { toExpression as visualizationToExpression } from './input_type_to_expression/visualization'; import { toExpression as lensToExpression } from './input_type_to_expression/lens'; @@ -25,7 +25,7 @@ export function embeddableInputToExpression< UseGenericEmbeddable extends boolean, ConditionalReturnType = UseGenericEmbeddable extends true ? string : string | undefined >( - input: Omit, + input: object, embeddableType: string, palettes?: PaletteRegistry, useGenericEmbeddable?: UseGenericEmbeddable diff --git a/x-pack/platform/plugins/private/canvas/canvas_plugin_src/renderers/embeddable/input_type_to_expression/embeddable.test.ts b/x-pack/platform/plugins/private/canvas/canvas_plugin_src/renderers/embeddable/input_type_to_expression/embeddable.test.ts index 3e0d4a1c890af..0ad0f239d9f79 100644 --- a/x-pack/platform/plugins/private/canvas/canvas_plugin_src/renderers/embeddable/input_type_to_expression/embeddable.test.ts +++ b/x-pack/platform/plugins/private/canvas/canvas_plugin_src/renderers/embeddable/input_type_to_expression/embeddable.test.ts @@ -6,7 +6,6 @@ */ import { toExpression } from './embeddable'; -import { EmbeddableInput } from '../../../../types'; import { decode } from '../../../../common/lib/embeddable_dataurl'; import { fromExpression } from '@kbn/interpreter'; @@ -19,7 +18,7 @@ describe('toExpression', () => { }; it('converts to an embeddable expression', () => { - const input: EmbeddableInput = baseEmbeddableInput; + const input = baseEmbeddableInput; const expression = toExpression(input, 'visualization'); const ast = fromExpression(expression); @@ -34,7 +33,7 @@ describe('toExpression', () => { }); it('includes optional input values', () => { - const input: EmbeddableInput = { + const input = { ...baseEmbeddableInput, title: 'title', timeRange: { @@ -55,7 +54,7 @@ describe('toExpression', () => { }); it('includes empty panel title', () => { - const input: EmbeddableInput = { + const input = { ...baseEmbeddableInput, title: '', }; @@ -76,7 +75,7 @@ describe('toExpression', () => { filters: [], }; it('converts to an embeddable expression', () => { - const input: EmbeddableInput = baseEmbeddableInput; + const input = baseEmbeddableInput; const expression = toExpression(input, 'visualization'); const ast = fromExpression(expression); @@ -91,7 +90,7 @@ describe('toExpression', () => { }); it('includes optional input values', () => { - const input: EmbeddableInput = { + const input = { ...baseEmbeddableInput, title: 'title', timeRange: { @@ -112,7 +111,7 @@ describe('toExpression', () => { }); it('includes empty panel title', () => { - const input: EmbeddableInput = { + const input = { ...baseEmbeddableInput, title: '', }; diff --git a/x-pack/platform/plugins/private/canvas/canvas_plugin_src/renderers/embeddable/input_type_to_expression/embeddable.ts b/x-pack/platform/plugins/private/canvas/canvas_plugin_src/renderers/embeddable/input_type_to_expression/embeddable.ts index 584c0925fe416..b2e5939480017 100644 --- a/x-pack/platform/plugins/private/canvas/canvas_plugin_src/renderers/embeddable/input_type_to_expression/embeddable.ts +++ b/x-pack/platform/plugins/private/canvas/canvas_plugin_src/renderers/embeddable/input_type_to_expression/embeddable.ts @@ -6,8 +6,7 @@ */ import { encode } from '../../../../common/lib/embeddable_dataurl'; -import { EmbeddableInput } from '../../../expression_types'; -export function toExpression(input: Omit, embeddableType: string): string { +export function toExpression(input: object, embeddableType: string): string { return `embeddable config="${encode(input)}" type="${embeddableType}" | render`; } diff --git a/x-pack/platform/plugins/private/canvas/public/components/hooks/use_canvas_api.tsx b/x-pack/platform/plugins/private/canvas/public/components/hooks/use_canvas_api.tsx index ad218bb9dc672..3744c0839447e 100644 --- a/x-pack/platform/plugins/private/canvas/public/components/hooks/use_canvas_api.tsx +++ b/x-pack/platform/plugins/private/canvas/public/components/hooks/use_canvas_api.tsx @@ -9,7 +9,6 @@ import { useCallback, useMemo } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { BehaviorSubject, Subject } from 'rxjs'; -import { EmbeddableInput } from '@kbn/embeddable-plugin/common'; import { ViewMode } from '@kbn/presentation-publishing'; import { embeddableInputToExpression } from '../../../canvas_plugin_src/renderers/embeddable/embeddable_input_to_expression'; @@ -28,7 +27,7 @@ export const useCanvasApi: () => CanvasContainerApi = () => { const dispatch = useDispatch(); const createNewEmbeddable = useCallback( - (type: string, embeddableInput: EmbeddableInput) => { + (type: string, embeddableInput: object) => { if (trackCanvasUiMetric) { trackCanvasUiMetric(METRIC_TYPE.CLICK, type); } @@ -60,7 +59,7 @@ export const useCanvasApi: () => CanvasContainerApi = () => { initialState, }: { panelType: string; - initialState: EmbeddableInput; + initialState: object; }) => { createNewEmbeddable(panelType, initialState); }, diff --git a/x-pack/platform/plugins/private/canvas/tsconfig.json b/x-pack/platform/plugins/private/canvas/tsconfig.json index f408562de24ef..7dc039bccbf35 100644 --- a/x-pack/platform/plugins/private/canvas/tsconfig.json +++ b/x-pack/platform/plugins/private/canvas/tsconfig.json @@ -31,7 +31,6 @@ "@kbn/charts-plugin", "@kbn/data-plugin", "@kbn/share-plugin", - "@kbn/discover-plugin", "@kbn/embeddable-plugin", "@kbn/expressions-plugin", "@kbn/expression-error-plugin", diff --git a/x-pack/platform/plugins/private/canvas/types/embeddables.ts b/x-pack/platform/plugins/private/canvas/types/embeddables.ts index 142dde0cfc61d..5a91a92d8a100 100644 --- a/x-pack/platform/plugins/private/canvas/types/embeddables.ts +++ b/x-pack/platform/plugins/private/canvas/types/embeddables.ts @@ -5,9 +5,6 @@ * 2.0. */ -import type { TimeRange } from '@kbn/es-query'; -import { Filter } from '@kbn/es-query'; -import { EmbeddableInput as Input } from '@kbn/embeddable-plugin/common'; import type { HasAppContext, HasDisableTriggers, @@ -18,12 +15,6 @@ import type { } from '@kbn/presentation-publishing'; import type { CanAddNewPanel, HasSerializedChildState } from '@kbn/presentation-containers'; -export type EmbeddableInput = Input & { - timeRange?: TimeRange; - filters?: Filter[]; - savedObjectId?: string; -}; - export type CanvasContainerApi = PublishesViewMode & CanAddNewPanel & HasDisableTriggers &