Skip to content

Commit

Permalink
added Types for on(...).
Browse files Browse the repository at this point in the history
  • Loading branch information
Kuznietsov committed Jun 21, 2021
1 parent 292c382 commit 8ef2837
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 4 deletions.
41 changes: 41 additions & 0 deletions src/plugins/expressions/common/expression_renderers/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,3 +80,44 @@ export interface IInterpreterRenderHandlers {
*/
uiState?: unknown;
}

type DefaultEmitters<T extends IInterpreterRenderHandlers> = Pick<T, 'done' | 'reload' | 'update'>;

export class DefaultInterpreterRenderHandlers<Emitters = {}> implements IInterpreterRenderHandlers {
done() {}
onDestroy(fn: () => void) {}
reload() {}
update(params: any) {}
event(event: any) {}
getRenderMode() {
return 'noInteractivity' as RenderMode;
}
isSyncColorsEnabled() {
return false;
}
hasCompatibleActions?: (event: any) => Promise<boolean>;

on(event: keyof Emitters | keyof DefaultEmitters<this>, fn: (...args: any) => void) {
if (this[event as keyof this]) {
const eventCall = this[event as keyof this];
if (!eventCall || typeof eventCall !== 'function') return true;

const updatedEvent = (...args: unknown[]) => {
const preventFromCallingListener: void | boolean = eventCall(...args);
if (fn && typeof fn === 'function' && preventFromCallingListener === null) {
fn(...args);
}
return preventFromCallingListener;
};
this[event as keyof this] = (updatedEvent as unknown) as typeof eventCall;
}
}

uiState?: unknown;
}

export type InterpreterRenderHandlers<T = {}> = T & DefaultInterpreterRenderHandlers<T>;

export function getDefaultHandlers<T = {}>(): InterpreterRenderHandlers<T> {
return new DefaultInterpreterRenderHandlers<T>() as InterpreterRenderHandlers<T>;
}
15 changes: 11 additions & 4 deletions src/plugins/expressions/public/render.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,12 @@ import { Observable } from 'rxjs';
import { filter } from 'rxjs/operators';
import { ExpressionRenderError, RenderErrorHandlerFnType, IExpressionLoaderParams } from './types';
import { renderErrorHandler as defaultRenderErrorHandler } from './render_error_handler';
import { IInterpreterRenderHandlers, ExpressionAstExpression, RenderMode } from '../common';
import {
ExpressionAstExpression,
RenderMode,
getDefaultHandlers,
InterpreterRenderHandlers,
} from '../common';

import { getRenderersRegistry } from './services';

Expand Down Expand Up @@ -45,7 +50,7 @@ export class ExpressionRenderHandler {
private renderSubject: Rx.BehaviorSubject<number | null>;
private eventsSubject: Rx.Subject<unknown>;
private updateSubject: Rx.Subject<UpdateValue | null>;
private handlers: IInterpreterRenderHandlers;
private handlers: InterpreterRenderHandlers;
private onRenderError: RenderErrorHandlerFnType;

constructor(
Expand All @@ -71,8 +76,9 @@ export class ExpressionRenderHandler {

this.updateSubject = new Rx.Subject();
this.update$ = this.updateSubject.asObservable();

this.handlers = getDefaultHandlers();
this.handlers = {
on: this.handlers.on,
onDestroy: (fn: any) => {
this.destroyFn = fn;
},
Expand All @@ -89,6 +95,7 @@ export class ExpressionRenderHandler {
event: (data) => {
this.eventsSubject.next(data);
},

getRenderMode: () => {
return renderMode || 'display';
},
Expand Down Expand Up @@ -126,7 +133,7 @@ export class ExpressionRenderHandler {
...this.handlers,
uiState,
} as any);
} catch (e) {
} catch (e: any) {
return this.handleRenderError(e);
}
};
Expand Down

0 comments on commit 8ef2837

Please sign in to comment.