Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 32 additions & 19 deletions src/core_plugins/kibana/public/discover/controllers/discover.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ import { StateProvider } from 'ui/state_management/state';
import { migrateLegacyQuery } from 'ui/utils/migrateLegacyQuery';
import { FilterManagerProvider } from 'ui/filter_manager';
import { SavedObjectsClientProvider } from 'ui/saved_objects';
import { visualizationLoader } from 'ui/visualize/loader/visualization_loader';
import { VisualizeLoaderProvider } from 'ui/visualize/loader/visualize_loader';
import { recentlyAccessed } from 'ui/persisted_log';
import { getDocLink } from 'ui/documentation_links';
import '../components/fetch_error';
Expand Down Expand Up @@ -157,6 +157,8 @@ function discoverController(
localStorage,
breadcrumbState
) {
const visualizeLoader = Private(VisualizeLoaderProvider);
let visualizeHandler;
const Vis = Private(VisProvider);
const docTitle = Private(DocTitleProvider);
const HitSortFn = Private(PluginsKibanaDiscoverHitSortFnProvider);
Expand Down Expand Up @@ -687,9 +689,7 @@ function discoverController(
Promise
.resolve(responseHandler(tabifiedData))
.then(resp => {
$scope.visData = resp;
const visEl = $element.find('#discoverHistogram')[0];
visualizationLoader.render(visEl, $scope.vis, $scope.visData, $scope.uiState, { listenOnChange: true });
visualizeHandler.render(resp);
});
}

Expand Down Expand Up @@ -836,33 +836,46 @@ function discoverController(
if ($scope.vis) {
const visState = $scope.vis.getEnabledState();
visState.aggs = visStateAggs;

$scope.vis.setState(visState);
} else {
$scope.vis = new Vis($scope.indexPattern, {
title: savedSearch.title,
return;
}

const visSavedObject = {
indexPattern: $scope.indexPattern.id,
visState: {
type: 'histogram',
title: savedSearch.title,
params: {
addLegend: false,
addTimeMarker: true
},
aggs: visStateAggs
});
}
};

$scope.searchSource.onRequestStart((searchSource, searchRequest) => {
return $scope.vis.getAggConfig().onSearchRequestStart(searchSource, searchRequest);
});
$scope.vis = new Vis(
$scope.searchSource.getField('index'),
visSavedObject.visState
);
visSavedObject.vis = $scope.vis;

$scope.searchSource.setField('aggs', function () {
return $scope.vis.getAggConfig().toDsl();
});
}
$scope.searchSource.onRequestStart((searchSource, searchRequest) => {
return $scope.vis.getAggConfig().onSearchRequestStart(searchSource, searchRequest);
});

$scope.vis.filters = {
timeRange: timefilter.getTime()
};
$scope.searchSource.setField('aggs', function () {
return $scope.vis.getAggConfig().toDsl();
});

$timeout(async () => {
const visEl = $element.find('#discoverHistogram')[0];
visualizeHandler = await visualizeLoader.embedVisualizationWithSavedObject(visEl, visSavedObject, {
autoFetch: false,
});
});
}


function resolveIndexPatternLoading() {
const {
loaded: loadedIndexPattern,
Expand Down
2 changes: 1 addition & 1 deletion src/core_plugins/kibana/public/discover/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ <h2>Searching</h2>
</header>

<div id="discoverHistogram"
ng-if="vis && rows.length !== 0"
ng-show="vis && rows.length !== 0"
style="display: flex; height: 200px"
>
</div>
Expand Down
47 changes: 33 additions & 14 deletions src/ui/public/visualize/loader/embedded_visualize_handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import { VisualizeDataLoader } from './visualize_data_loader';
interface EmbeddedVisualizeHandlerParams extends VisualizeLoaderParams {
Private: IPrivate;
queryFilter: any;
autoFetch?: boolean;
}

const RENDER_COMPLETE_EVENT = 'render_complete';
Expand Down Expand Up @@ -78,6 +79,7 @@ export class EmbeddedVisualizeHandler {
private dataLoader: VisualizeDataLoader;

private dataSubject: Rx.Subject<any>;
private autoFetch: boolean;

constructor(
private readonly element: HTMLElement,
Expand All @@ -86,7 +88,16 @@ export class EmbeddedVisualizeHandler {
) {
const { searchSource, vis } = savedObject;

const { appState, uiState, queryFilter, timeRange, filters, query, Private } = params;
const {
appState,
uiState,
queryFilter,
timeRange,
filters,
query,
Private,
autoFetch,
} = params;

this.dataLoaderParams = {
searchSource,
Expand All @@ -99,6 +110,8 @@ export class EmbeddedVisualizeHandler {
forceFetch: false,
};

this.autoFetch = !(autoFetch === false);

// Listen to the first RENDER_COMPLETE_EVENT to resolve this promise
this.firstRenderComplete = new Promise(resolve => {
this.listeners.once(RENDER_COMPLETE_EVENT, resolve);
Expand Down Expand Up @@ -193,6 +206,25 @@ export class EmbeddedVisualizeHandler {
return this.element;
}

/**
* renders visualization with provided data
* @param visData: visualization data
*/
public render = (visData: any = null) => {
return visualizationLoader
.render(this.element, this.vis, visData, this.uiState, {
listenOnChange: false,
})
.then(() => {
if (!this.loaded) {
this.loaded = true;
if (this.autoFetch) {
this.fetchAndRender();
}
}
});
};

/**
* Opens the inspector for the embedded visualization. This will return an
* handler to the inspector to close and interact with it.
Expand Down Expand Up @@ -285,17 +317,4 @@ export class EmbeddedVisualizeHandler {
return data;
});
};

private render = (visData: any = null) => {
return visualizationLoader
.render(this.element, this.vis, visData, this.uiState, {
listenOnChange: false,
})
.then(() => {
if (!this.loaded) {
this.loaded = true;
this.fetchAndRender();
}
});
};
}
15 changes: 15 additions & 0 deletions test/functional/apps/discover/_discover.js
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,22 @@ export default function ({ getService, getPageObjects }) {
expect(ticks).to.eql(['2015-09-20 00:00', '2015-09-21 00:00', '2015-09-22 00:00', '2015-09-23 00:00']);
});

it('should modify the time range when a bar is clicked', async function () {
await PageObjects.header.setAbsoluteRange(fromTime, toTime);
await PageObjects.discover.clickHistogramBar(0);
const actualTimeString = await PageObjects.header.getPrettyDuration();
expect(actualTimeString).to.be('September 20th 2015, 00:00:00.000 to September 20th 2015, 03:00:00.000');
});

it('should modify the time range when the histogram is brushed', async function () {
await PageObjects.header.setAbsoluteRange(fromTime, toTime);
await PageObjects.discover.brushHistogram(0, 1);
const actualTimeString = await PageObjects.header.getPrettyDuration();
expect(actualTimeString).to.be('September 19th 2015, 23:52:17.080 to September 20th 2015, 02:59:51.112');
});

it('should show correct initial chart interval of Auto', async function () {
await PageObjects.header.setAbsoluteRange(fromTime, toTime);
const actualInterval = await PageObjects.discover.getChartInterval();

const expectedInterval = 'Auto';
Expand Down
14 changes: 14 additions & 0 deletions test/functional/page_objects/discover_page.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ export function DiscoverPageProvider({ getService, getPageObjects }) {
const find = getService('find');
const flyout = getService('flyout');
const PageObjects = getPageObjects(['header', 'common']);
const browser = getService('browser');

const getRemote = () => (
getService('remote')
Expand Down Expand Up @@ -121,6 +122,19 @@ export function DiscoverPageProvider({ getService, getPageObjects }) {
await testSubjects.click('discoverOpenButton');
}

async clickHistogramBar(i) {
const bars = await find.allByCssSelector(`.series.histogram rect`);
await bars[i].click();
}

async brushHistogram(from, to) {
const bars = await find.allByCssSelector('.series.histogram rect');
await browser.moveMouseTo(bars[from], 0, -5);
await browser.pressMouseButton();
await browser.moveMouseTo(bars[to], 0, -5);
await browser.releaseMouseButton();
}

async getCurrentQueryName() {
return await testSubjects.getVisibleText('discoverCurrentQuery');
}
Expand Down