Skip to content

Commit 8e9b094

Browse files
committed
[Discover] Fix sorting by _score behavior (#92132)
1 parent 6b5c289 commit 8e9b094

4 files changed

Lines changed: 92 additions & 4 deletions

File tree

src/plugins/discover/public/__mocks__/config.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,15 @@
66
* Side Public License, v 1.
77
*/
88

9-
import { IUiSettingsClient } from '../../../../core/public';
9+
import { IUiSettingsClient } from 'kibana/public';
10+
import { SORT_DEFAULT_ORDER_SETTING } from '../../common';
1011

1112
export const configMock = ({
1213
get: (key: string) => {
1314
if (key === 'defaultIndex') {
1415
return 'the-index-pattern-id';
16+
} else if (key === SORT_DEFAULT_ORDER_SETTING) {
17+
return 'desc';
1518
}
1619

1720
return '';
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the Elastic License
4+
* 2.0 and the Server Side Public License, v 1; you may not use this file except
5+
* in compliance with, at your election, the Elastic License 2.0 or the Server
6+
* Side Public License, v 1.
7+
*/
8+
9+
import { getStateColumnActions } from './columns';
10+
import { configMock } from '../../../../__mocks__/config';
11+
import { indexPatternMock } from '../../../../__mocks__/index_pattern';
12+
import { indexPatternsMock } from '../../../../__mocks__/index_patterns';
13+
import { Capabilities } from '../../../../../../../core/types';
14+
import { AppState } from '../../discover_state';
15+
16+
function getStateColumnAction(state: {}, setAppState: (state: Partial<AppState>) => void) {
17+
return getStateColumnActions({
18+
capabilities: ({
19+
discover: {
20+
save: false,
21+
},
22+
} as unknown) as Capabilities,
23+
config: configMock,
24+
indexPattern: indexPatternMock,
25+
indexPatterns: indexPatternsMock,
26+
useNewFieldsApi: true,
27+
setAppState,
28+
state,
29+
});
30+
}
31+
32+
describe('Test column actions', () => {
33+
test('getStateColumnActions with empty state', () => {
34+
const setAppState = jest.fn();
35+
const actions = getStateColumnAction({}, setAppState);
36+
37+
actions.onAddColumn('_score');
38+
expect(setAppState).toHaveBeenCalledWith({ columns: ['_score'], sort: [['_score', 'desc']] });
39+
actions.onAddColumn('test');
40+
expect(setAppState).toHaveBeenCalledWith({ columns: ['test'] });
41+
});
42+
test('getStateColumnActions with columns and sort in state', () => {
43+
const setAppState = jest.fn();
44+
const actions = getStateColumnAction(
45+
{ columns: ['first', 'second'], sort: [['first', 'desc']] },
46+
setAppState
47+
);
48+
49+
actions.onAddColumn('_score');
50+
expect(setAppState).toHaveBeenCalledWith({
51+
columns: ['first', 'second', '_score'],
52+
sort: [['first', 'desc']],
53+
});
54+
setAppState.mockClear();
55+
actions.onAddColumn('third');
56+
expect(setAppState).toHaveBeenCalledWith({
57+
columns: ['first', 'second', 'third'],
58+
sort: [['first', 'desc']],
59+
});
60+
setAppState.mockClear();
61+
actions.onRemoveColumn('first');
62+
expect(setAppState).toHaveBeenCalledWith({
63+
columns: ['second'],
64+
sort: [],
65+
});
66+
setAppState.mockClear();
67+
actions.onSetColumns(['first', 'second', 'third']);
68+
expect(setAppState).toHaveBeenCalledWith({
69+
columns: ['first', 'second', 'third'],
70+
});
71+
setAppState.mockClear();
72+
73+
actions.onMoveColumn('second', 0);
74+
expect(setAppState).toHaveBeenCalledWith({
75+
columns: ['second', 'first'],
76+
});
77+
});
78+
});

src/plugins/discover/public/application/angular/doc_table/actions/columns.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@
55
* in compliance with, at your election, the Elastic License 2.0 or the Server
66
* Side Public License, v 1.
77
*/
8-
import { Capabilities } from 'kibana/public';
8+
import { Capabilities, IUiSettingsClient } from 'kibana/public';
99
import { popularizeField } from '../../../helpers/popularize_field';
1010
import { IndexPattern, IndexPatternsContract } from '../../../../kibana_services';
1111
import { AppState } from '../../discover_state';
12+
import { SORT_DEFAULT_ORDER_SETTING } from '../../../../../common';
1213

1314
/**
1415
* Helper function to provide a fallback to a single _source column if the given array of columns
@@ -54,13 +55,15 @@ export function moveColumn(columns: string[], columnName: string, newIndex: numb
5455

5556
export function getStateColumnActions({
5657
capabilities,
58+
config,
5759
indexPattern,
5860
indexPatterns,
5961
useNewFieldsApi,
6062
setAppState,
6163
state,
6264
}: {
6365
capabilities: Capabilities;
66+
config: IUiSettingsClient;
6467
indexPattern: IndexPattern;
6568
indexPatterns: IndexPatternsContract;
6669
useNewFieldsApi: boolean;
@@ -72,7 +75,10 @@ export function getStateColumnActions({
7275
popularizeField(indexPattern, columnName, indexPatterns);
7376
}
7477
const columns = addColumn(state.columns || [], columnName, useNewFieldsApi);
75-
setAppState({ columns });
78+
const defaultOrder = config.get(SORT_DEFAULT_ORDER_SETTING);
79+
const sort =
80+
columnName === '_score' && !state.sort?.length ? [['_score', defaultOrder]] : state.sort;
81+
setAppState({ columns, sort });
7682
}
7783

7884
function onRemoveColumn(columnName: string) {

src/plugins/discover/public/application/components/discover.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,13 +104,14 @@ export function Discover({
104104
() =>
105105
getStateColumnActions({
106106
capabilities,
107+
config,
107108
indexPattern,
108109
indexPatterns,
109110
setAppState,
110111
state,
111112
useNewFieldsApi,
112113
}),
113-
[capabilities, indexPattern, indexPatterns, setAppState, state, useNewFieldsApi]
114+
[capabilities, config, indexPattern, indexPatterns, setAppState, state, useNewFieldsApi]
114115
);
115116

116117
const onOpenInspector = useCallback(() => {

0 commit comments

Comments
 (0)