Skip to content

Commit

Permalink
Merge pull request #7 from Dosant/d/2022-04-26-script-based-visualiza…
Browse files Browse the repository at this point in the history
…tions

revert defer() workaround
  • Loading branch information
drewdaemon authored Apr 28, 2022
2 parents d41f032 + 2e45815 commit 410a14d
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 44 deletions.
10 changes: 6 additions & 4 deletions src/plugins/vis_type_script/public/kibana_api/kibana_api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,11 @@ export interface VisTypeScriptKibanaApiDeps {
data: DataPublicPluginStart;
}

export interface SearchOptions {
export interface EsSearchOptions {
useKibanaContext: boolean;
}
export type ESSearchRequest = estypes.SearchRequest;
export type ESSearchResponse = estypes.SearchResponse;

export class VisTypeScriptKibanaApi {
constructor(
Expand All @@ -26,9 +28,9 @@ export class VisTypeScriptKibanaApi {
) {}

async esSearch(
payload: estypes.SearchRequest,
{ useKibanaContext = true }: SearchOptions = { useKibanaContext: true }
): Promise<estypes.SearchResponse> {
payload: ESSearchRequest,
{ useKibanaContext = true }: EsSearchOptions = { useKibanaContext: true }
): Promise<ESSearchResponse> {
if (useKibanaContext) {
// TODO: adjust request based on this.visSearchContext
// eslint-disable-next-line no-console
Expand Down
53 changes: 13 additions & 40 deletions src/plugins/vis_type_script/public/renderer/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,13 @@ import React, { useEffect, useState, useMemo } from 'react';
import { createEndpoint, fromIframe } from '@remote-ui/rpc';

import './index.scss';
import type { SearchResponse, AggregationsAggregate } from '@elastic/elasticsearch/lib/api/types';
import type { SearchRequest } from '@kbn/data-plugin/common';
import { IExternalUrl } from '@kbn/core/public';
import { SearchOptions, VisTypeScriptKibanaApi } from '../kibana_api';
import {
EsSearchOptions,
VisTypeScriptKibanaApi,
ESSearchResponse,
ESSearchRequest,
} from '../kibana_api';

export const KIBANA_API_CONSTANT_NAME = 'KIBANA';

Expand All @@ -32,38 +35,11 @@ const getSandboxDocument = (script: string, dependencies: string[], nonce: strin
const endpoint = createEndpoint(fromInsideIframe());
const defer = () => {
const ret = {};
ret.promise = new Promise((resolve, reject) => {
ret.resolve = resolve;
ret.reject = reject;
});
return ret;
}
const searchDeferrals = {};
let searchCounter = 0;
endpoint.expose({
onSearchResult: (searchId, result) => {
searchDeferrals[searchId].resolve(result);
}
});
let onResize = () => {};
const ${KIBANA_API_CONSTANT_NAME} = {
searchEs: (payload, options) => {
const searchId = searchCounter;
searchCounter++;
searchDeferrals[searchId] = defer();
endpoint.call.esSearch(searchId, payload, options);
return searchDeferrals[searchId].promise;
return endpoint.call.esSearch(payload, options);
},
subscribeToResize: (fn) => {
onResize = fn;
Expand Down Expand Up @@ -114,17 +90,14 @@ export const ScriptRenderer: React.FunctionComponent<{
useEffect(() => {
if (!iframeRef.current) throw new Error('Iframe init error');
const iframeEl = iframeRef.current;
const endpoint = createEndpoint<{
onSearchResult: (
searchId: number,
result: SearchResponse<unknown, Record<string, AggregationsAggregate>>
) => {};
}>(fromIframe(iframeEl, { terminate: false }));
const endpoint = createEndpoint(fromIframe(iframeEl, { terminate: false }));

endpoint.expose({
esSearch: async (searchId: number, payload: SearchRequest, options?: SearchOptions) => {
const searchResult = await kibanaApi.esSearch(payload, options);
endpoint.call.onSearchResult(searchId, searchResult);
esSearch: async (
payload: ESSearchRequest,
options?: EsSearchOptions
): Promise<ESSearchResponse> => {
return kibanaApi.esSearch(payload, options);
},
});

Expand Down

0 comments on commit 410a14d

Please sign in to comment.