Skip to content

Commit

Permalink
[Reporting/Discover/Search Sessions] Only use relative time filter wh…
Browse files Browse the repository at this point in the history
…en generating share data (elastic#112588)

* only use relative time filter when generating share data

* Added comment on absolute time filter.

Co-authored-by: Tim Sullivan <[email protected]>

* improve discover search session relative time range test

* update discover tests and types for passing in data plugin to getSharingData function

* updated reporting to pass in data plugin to getSharingData, also updates jest tests

Co-authored-by: Kibana Machine <[email protected]>
Co-authored-by: Tim Sullivan <[email protected]>
Co-authored-by: Anton Dosov <[email protected]>
  • Loading branch information
4 people committed Sep 21, 2021
1 parent faf2b65 commit cb6230a
Show file tree
Hide file tree
Showing 9 changed files with 159 additions and 126 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ export const getTopNavLinks = ({
const sharingData = await getSharingData(
searchSource,
state.appStateContainer.getState(),
services.uiSettings
services
);

services.share.toggleShareContextMenu({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,32 +7,37 @@
*/

import { Capabilities, IUiSettingsClient } from 'kibana/public';
import { IndexPattern } from 'src/plugins/data/public';
import type { IndexPattern } from 'src/plugins/data/public';
import type { DiscoverServices } from '../../../../build_services';
import { dataPluginMock } from '../../../../../../data/public/mocks';
import { createSearchSourceMock } from '../../../../../../data/common/search/search_source/mocks';
import { DOC_HIDE_TIME_COLUMN_SETTING, SORT_DEFAULT_ORDER_SETTING } from '../../../../../common';
import { indexPatternMock } from '../../../../__mocks__/index_pattern';
import { getSharingData, showPublicUrlSwitch } from './get_sharing_data';

describe('getSharingData', () => {
let mockConfig: IUiSettingsClient;
let services: DiscoverServices;

beforeEach(() => {
mockConfig = ({
get: (key: string) => {
if (key === SORT_DEFAULT_ORDER_SETTING) {
return 'desc';
}
if (key === DOC_HIDE_TIME_COLUMN_SETTING) {
services = {
data: dataPluginMock.createStartContract(),
uiSettings: {
get: (key: string) => {
if (key === SORT_DEFAULT_ORDER_SETTING) {
return 'desc';
}
if (key === DOC_HIDE_TIME_COLUMN_SETTING) {
return false;
}
return false;
}
return false;
},
},
} as unknown) as IUiSettingsClient;
} as DiscoverServices;
});

test('returns valid data for sharing', async () => {
const searchSourceMock = createSearchSourceMock({ index: indexPatternMock });
const result = await getSharingData(searchSourceMock, { columns: [] }, mockConfig);
const result = await getSharingData(searchSourceMock, { columns: [] }, services);
expect(result).toMatchInlineSnapshot(`
Object {
"columns": Array [],
Expand All @@ -53,7 +58,7 @@ describe('getSharingData', () => {
const result = await getSharingData(
searchSourceMock,
{ columns: ['column_a', 'column_b'] },
mockConfig
services
);
expect(result).toMatchInlineSnapshot(`
Object {
Expand Down Expand Up @@ -90,7 +95,7 @@ describe('getSharingData', () => {
'cool-field-6',
],
},
mockConfig
services
);
expect(result).toMatchInlineSnapshot(`
Object {
Expand All @@ -116,7 +121,7 @@ describe('getSharingData', () => {
});

test('fields conditionally do not have prepended timeField', async () => {
mockConfig = ({
services.uiSettings = ({
get: (key: string) => {
if (key === DOC_HIDE_TIME_COLUMN_SETTING) {
return true;
Expand All @@ -141,7 +146,7 @@ describe('getSharingData', () => {
'cool-field-6',
],
},
mockConfig
services
);
expect(result).toMatchInlineSnapshot(`
Object {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
* Side Public License, v 1.
*/

import type { Capabilities, IUiSettingsClient } from 'kibana/public';
import { ISearchSource } from '../../../../../../data/common';
import type { Capabilities } from 'kibana/public';
import type { IUiSettingsClient } from 'src/core/public';
import type { DataPublicPluginStart } from 'src/plugins/data/public';
import type { ISearchSource } from 'src/plugins/data/common';
import { DOC_HIDE_TIME_COLUMN_SETTING, SORT_DEFAULT_ORDER_SETTING } from '../../../../../common';
import type { SavedSearch, SortOrder } from '../../../../saved_searches/types';
import { AppState } from '../services/discover_state';
Expand All @@ -19,15 +21,18 @@ import { getSortForSearchSource } from '../../../angular/doc_table';
export async function getSharingData(
currentSearchSource: ISearchSource,
state: AppState | SavedSearch,
config: IUiSettingsClient
services: { uiSettings: IUiSettingsClient; data: DataPublicPluginStart }
) {
const { uiSettings: config, data } = services;
const searchSource = currentSearchSource.createCopy();
const index = searchSource.getField('index')!;

searchSource.setField(
'sort',
getSortForSearchSource(state.sort as SortOrder[], index, config.get(SORT_DEFAULT_ORDER_SETTING))
);
// When sharing externally we preserve relative time values
searchSource.setField('filter', data.query.timefilter.timefilter.createRelativeFilter(index));
searchSource.removeField('highlight');
searchSource.removeField('highlightAll');
searchSource.removeField('aggs');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,8 @@ export function updateSearchSource(

// this is not the default index pattern, it determines that it's not of type rollup
if (indexPatternsUtils.isDefault(indexPattern)) {
searchSource.setField(
'filter',
data.query.timefilter.timefilter.createRelativeFilter(indexPattern)
);
// Set the date range filter fields from timeFilter using the absolute format. Search sessions requires that it be converted from a relative range
searchSource.setField('filter', data.query.timefilter.timefilter.createFilter(indexPattern));
}

if (useNewFieldsApi) {
Expand Down
Loading

0 comments on commit cb6230a

Please sign in to comment.