Skip to content

Commit

Permalink
feat: 🎸 add TriggerContextMapping interface
Browse files Browse the repository at this point in the history
  • Loading branch information
streamich committed Feb 20, 2020
1 parent c1badaa commit 110a90e
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -303,13 +303,14 @@ export class VisualizeEmbeddable extends Embeddable<VisualizeInput, VisualizeOut
}

if (!this.input.disableTriggers) {
const triggerId = event.name === 'brush' ? selectRangeTrigger.id : valueClickTrigger.id;
const triggerId: 'SELECT_RANGE_TRIGGER' | 'VALUE_CLICK_TRIGGER' =
event.name === 'brush' ? selectRangeTrigger.id : valueClickTrigger.id;
const params: EmbeddableVisTriggerContext = {
embeddable: this,
timeFieldName: this.vis.indexPattern.timeFieldName,
data: event.data,
};
npStart.plugins.uiActions.getTrigger<EmbeddableVisTrigger>(triggerId).exec(params);
npStart.plugins.uiActions.getTrigger(triggerId).exec(params);
}
})
);
Expand Down
12 changes: 12 additions & 0 deletions src/plugins/embeddable/public/bootstrap.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,27 @@
*/

import { UiActionsSetup } from 'src/plugins/ui_actions/public';
import { Trigger } from '../../ui_actions/public';
import {
applyFilterTrigger,
contextMenuTrigger,
createFilterAction,
panelBadgeTrigger,
selectRangeTrigger,
valueClickTrigger,
EmbeddableVisTrigger,
} from './lib';

declare module '../../ui_actions/public' {
export interface TriggerContextMapping {
SELECT_RANGE_TRIGGER: EmbeddableVisTrigger;
VALUE_CLICK_TRIGGER: EmbeddableVisTrigger;
CONTEXT_MENU_TRIGGER: Trigger;
APPLY_FILTER_TRIGGER: Trigger;
PANEL_BADGE_TRIGGER: Trigger;
}
}

/**
* This method initializes Embeddable plugin with initial set of
* triggers and actions.
Expand Down
1 change: 1 addition & 0 deletions src/plugins/ui_actions/public/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ export { UiActionsServiceParams, UiActionsService } from './service';
export { Action, createAction, IncompatibleActionError } from './actions';
export { buildContextMenuForActions } from './context_menu';
export { Trigger, TriggerContext, TriggerContextParams } from './triggers';
export { TriggerContextMapping } from './types';

/**
* @deprecated
Expand Down
17 changes: 12 additions & 5 deletions src/plugins/ui_actions/public/service/ui_actions_service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,12 @@
* under the License.
*/

import { TriggerRegistry, ActionRegistry, TriggerToActionsRegistry } from '../types';
import {
TriggerRegistry,
ActionRegistry,
TriggerToActionsRegistry,
TriggerContextMapping,
} from '../types';
import { Action } from '../actions';
import { Trigger, TriggerContextParams } from '../triggers/trigger';
import { TriggerInternal } from '../triggers/trigger_internal';
Expand Down Expand Up @@ -59,11 +64,13 @@ export class UiActionsService {
this.triggerToActions.set(trigger.id, []);
};

public readonly getTrigger = <T extends Trigger<any, any>>(id: string): TriggerContract<T> => {
const trigger = this.triggers.get(id);
public readonly getTrigger = <T extends keyof TriggerContextMapping>(
triggerId: T
): TriggerContract<TriggerContextMapping[T]> => {
const trigger = this.triggers.get(triggerId as string);

if (!trigger) {
throw new Error(`Trigger [triggerId = ${id}] does not exist.`);
throw new Error(`Trigger [triggerId = ${triggerId}] does not exist.`);
}

return trigger.contract;
Expand Down Expand Up @@ -140,7 +147,7 @@ export class UiActionsService {
triggerId: string,
params: TriggerContextParams<T>
) => {
const trigger = this.getTrigger<T>(triggerId);
const trigger = this.getTrigger<any>(triggerId);
await trigger.exec(params);
};

Expand Down
5 changes: 5 additions & 0 deletions src/plugins/ui_actions/public/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,12 @@

import { Action } from './actions/action';
import { TriggerInternal } from './triggers/trigger_internal';
import { Trigger } from './triggers';

export type TriggerRegistry = Map<string, TriggerInternal<any>>;
export type ActionRegistry = Map<string, Action>;
export type TriggerToActionsRegistry = Map<string, string[]>;

export interface TriggerContextMapping {
[key: string]: Trigger<any, any>;
}

0 comments on commit 110a90e

Please sign in to comment.