diff --git a/src/platform/packages/shared/kbn-es-query/src/filters/helpers/extract_time_filter.ts b/src/platform/packages/shared/kbn-es-query/src/filters/helpers/extract_time_filter.ts index 3f0254fc40f37..884cb0ac0901f 100644 --- a/src/platform/packages/shared/kbn-es-query/src/filters/helpers/extract_time_filter.ts +++ b/src/platform/packages/shared/kbn-es-query/src/filters/helpers/extract_time_filter.ts @@ -12,20 +12,18 @@ import { Filter, isRangeFilter, RangeFilter } from '../build_filters'; import { TimeRange } from './types'; import { convertRangeFilterToTimeRangeString } from './convert_range_filter'; -export function extractTimeFilter(timeFieldName: string, filters: Filter[]) { - const [timeRangeFilter, restOfFilters] = partition(filters, (obj: Filter) => { - let key; - - if (isRangeFilter(obj)) { - key = keys(obj.query.range)[0]; - } - - return Boolean(key && key === timeFieldName); - }); +export function extractTimeFilter( + timeFieldName: string, + filters: Filter[] +): { restOfFilters: Filter[]; timeRangeFilter?: RangeFilter } { + const [timeRangeFilter, restOfFilters] = partition( + filters, + (f: Filter): f is RangeFilter => isRangeFilter(f) && timeFieldName === keys(f.query.range)[0] + ); return { restOfFilters, - timeRangeFilter: timeRangeFilter[0] as RangeFilter | undefined, + timeRangeFilter: timeRangeFilter[0], }; } @@ -33,7 +31,9 @@ export function extractTimeRange( filters: Filter[], timeFieldName?: string ): { restOfFilters: Filter[]; timeRange?: TimeRange } { - if (!timeFieldName) return { restOfFilters: filters, timeRange: undefined }; + if (!timeFieldName) { + return { restOfFilters: filters }; + } const { timeRangeFilter, restOfFilters } = extractTimeFilter(timeFieldName, filters); return { restOfFilters, diff --git a/src/platform/plugins/shared/chart_expressions/expression_xy/public/components/xy_chart.tsx b/src/platform/plugins/shared/chart_expressions/expression_xy/public/components/xy_chart.tsx index 157a5d32e7913..fef5abfc5d05b 100644 --- a/src/platform/plugins/shared/chart_expressions/expression_xy/public/components/xy_chart.tsx +++ b/src/platform/plugins/shared/chart_expressions/expression_xy/public/components/xy_chart.tsx @@ -661,12 +661,16 @@ export function XYChart({ ? getAccessorByDimension(dataLayers[0].xAccessor, table.columns) : undefined; const xAxisColumnIndex = table.columns.findIndex((el) => el.id === xAccessor); - const context: BrushEvent['data'] = { range: [min, max], table, column: xAxisColumnIndex, - ...(isEsqlMode ? { timeFieldName: table.columns[xAxisColumnIndex].name } : {}), + ...(isEsqlMode + ? { + timeFieldName: + table.columns[xAxisColumnIndex].meta.sourceParams?.sourceField?.toString(), + } + : {}), }; onSelectRange(context); }; diff --git a/src/platform/test/functional/apps/discover/esql/_esql_view.ts b/src/platform/test/functional/apps/discover/esql/_esql_view.ts index a15d541fdd3b5..9c701dba419fa 100644 --- a/src/platform/test/functional/apps/discover/esql/_esql_view.ts +++ b/src/platform/test/functional/apps/discover/esql/_esql_view.ts @@ -26,6 +26,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const esql = getService('esql'); const dashboardAddPanel = getService('dashboardAddPanel'); const dataViews = getService('dataViews'); + const elasticChart = getService('elasticChart'); + const filterBar = getService('filterBar'); + const { common, discover, dashboard, header, timePicker, unifiedFieldList, unifiedSearch } = getPageObjects([ 'common', @@ -236,6 +239,36 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const cell = await dataGrid.getCellElementExcludingControlColumns(0, 0); expect(await cell.getVisibleText()).to.be('1'); }); + + it('should allow brushing time series', async () => { + await timePicker.setDefaultAbsoluteRange(); + await discover.selectTextBaseLang(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); + + const testQuery = `from logstash-* | limit 100`; + + await monacoEditor.setCodeEditorValue(testQuery); + await testSubjects.click('querySubmitButton'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + + const initialTimeConfig = await timePicker.getTimeConfigAsAbsoluteTimes(); + expect(initialTimeConfig.start).to.equal(timePicker.defaultStartTime); + expect(initialTimeConfig.end).to.equal(timePicker.defaultEndTime); + + const renderingCount = await elasticChart.getVisualizationRenderingCount(); + await discover.brushHistogram(); + await discover.waitUntilSearchingHasFinished(); + // no filter pill created for time brush + expect(await filterBar.getFilterCount()).to.be(0); + // chart and time picker updated + await elasticChart.waitForRenderingCount(renderingCount + 1); + const updatedTimeConfig = await timePicker.getTimeConfigAsAbsoluteTimes(); + expect(updatedTimeConfig.start).to.be('Sep 20, 2015 @ 08:41:22.854'); + expect(updatedTimeConfig.end).to.be('Sep 21, 2015 @ 04:14:56.951'); + }); }); describe('errors', () => {