@@ -27,6 +27,7 @@ import theme from '@elastic/eui/dist/eui_theme_light.json';
2727import { IExpressionLoaderParams , RenderError } from './types' ;
2828import { ExpressionAstExpression , IInterpreterRenderHandlers } from '../common' ;
2929import { ExpressionLoader } from './loader' ;
30+ import { ExpressionRendererEvent } from './render' ;
3031
3132// Accept all options of the runner as props except for the
3233// dom element which is provided by the component itself
@@ -36,6 +37,7 @@ export interface ReactExpressionRendererProps extends IExpressionLoaderParams {
3637 expression : string | ExpressionAstExpression ;
3738 renderError ?: ( error ?: string | null ) => React . ReactElement | React . ReactElement [ ] ;
3839 padding ?: 'xs' | 's' | 'm' | 'l' | 'xl' ;
40+ onEvent ?: ( event : ExpressionRendererEvent ) => void ;
3941}
4042
4143export type ReactExpressionRendererType = React . ComponentType < ReactExpressionRendererProps > ;
@@ -60,6 +62,7 @@ export const ReactExpressionRenderer = ({
6062 padding,
6163 renderError,
6264 expression,
65+ onEvent,
6366 ...expressionLoaderOptions
6467} : ReactExpressionRendererProps ) => {
6568 const mountpoint : React . MutableRefObject < null | HTMLDivElement > = useRef ( null ) ;
@@ -99,6 +102,13 @@ export const ReactExpressionRenderer = ({
99102 }
100103 : expressionLoaderOptions . onRenderError ,
101104 } ) ;
105+ if ( onEvent ) {
106+ subs . push (
107+ expressionLoaderRef . current . events$ . subscribe ( event => {
108+ onEvent ( event ) ;
109+ } )
110+ ) ;
111+ }
102112 subs . push (
103113 expressionLoaderRef . current . loading$ . subscribe ( ( ) => {
104114 hasHandledErrorRef . current = false ;
@@ -123,7 +133,7 @@ export const ReactExpressionRenderer = ({
123133
124134 errorRenderHandlerRef . current = null ;
125135 } ;
126- } , [ hasCustomRenderErrorHandler ] ) ;
136+ } , [ hasCustomRenderErrorHandler , onEvent ] ) ;
127137
128138 // Re-fetch data automatically when the inputs change
129139 useShallowCompareEffect (
0 commit comments