Skip to content

Commit 6c03dd2

Browse files
author
Liza Katz
authored
Fix disco filters #2 (#50061) (#50121)
* closes #44349, as well as SDH issue #64 * added tests to cover fix * eslint * Fixed test import
1 parent 719b834 commit 6c03dd2

File tree

2 files changed

+39
-8
lines changed

2 files changed

+39
-8
lines changed

src/plugins/data/public/query/filter_manager/filter_manager.test.ts

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -184,14 +184,15 @@ describe('filter_manager', () => {
184184
expect(updateListener.callCount).toBe(1);
185185
});
186186

187-
test('app state should accept array', async () => {
187+
test('app state should accept array and preserve order', async () => {
188188
const f1 = getFilter(esFilters.FilterStateStore.APP_STATE, false, false, 'age', 34);
189189
const f2 = getFilter(esFilters.FilterStateStore.APP_STATE, false, false, 'gender', 'female');
190+
190191
filterManager.addFilters([f1]);
191192
filterManager.addFilters([f2]);
192193
const appFilters = filterManager.getAppFilters();
193194
expect(appFilters).toHaveLength(2);
194-
expect(appFilters).toEqual([f2, f1]);
195+
expect(appFilters).toEqual([f1, f2]);
195196
expect(filterManager.getGlobalFilters()).toHaveLength(0);
196197
});
197198

@@ -206,7 +207,7 @@ describe('filter_manager', () => {
206207
expect(updateListener.callCount).toBe(1);
207208
});
208209

209-
test('global state should be accept array', async () => {
210+
test('global state should be accept array and preserve order', async () => {
210211
const f1 = getFilter(esFilters.FilterStateStore.GLOBAL_STATE, false, false, 'age', 34);
211212
const f2 = getFilter(
212213
esFilters.FilterStateStore.GLOBAL_STATE,
@@ -215,11 +216,36 @@ describe('filter_manager', () => {
215216
'gender',
216217
'female'
217218
);
219+
218220
filterManager.addFilters([f1, f2]);
219221
expect(filterManager.getAppFilters()).toHaveLength(0);
220222
const globalFilters = filterManager.getGlobalFilters();
221223
expect(globalFilters).toHaveLength(2);
222-
expect(globalFilters).toEqual([f2, f1]);
224+
expect(globalFilters).toEqual([f1, f2]);
225+
});
226+
227+
test('mixed filters: global filters should stay in the beginning', async () => {
228+
const f1 = getFilter(esFilters.FilterStateStore.GLOBAL_STATE, false, false, 'age', 34);
229+
const f2 = getFilter(esFilters.FilterStateStore.APP_STATE, false, false, 'gender', 'female');
230+
filterManager.addFilters([f1, f2]);
231+
const filters = filterManager.getFilters();
232+
expect(filters).toHaveLength(2);
233+
expect(filters).toEqual([f1, f2]);
234+
});
235+
236+
test('mixed filters: global filters should move to the beginning', async () => {
237+
const f1 = getFilter(esFilters.FilterStateStore.APP_STATE, false, false, 'age', 34);
238+
const f2 = getFilter(
239+
esFilters.FilterStateStore.GLOBAL_STATE,
240+
false,
241+
false,
242+
'gender',
243+
'female'
244+
);
245+
filterManager.addFilters([f1, f2]);
246+
const filters = filterManager.getFilters();
247+
expect(filters).toHaveLength(2);
248+
expect(filters).toEqual([f2, f1]);
223249
});
224250

225251
test('add multiple filters at once', async () => {

src/plugins/data/public/query/filter_manager/filter_manager.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,16 @@ export class FilterManager {
7777

7878
private handleStateUpdate(newFilters: esFilters.Filter[]) {
7979
// global filters should always be first
80+
8081
newFilters.sort(({ $state: a }: esFilters.Filter, { $state: b }: esFilters.Filter): number => {
81-
return a!.store === esFilters.FilterStateStore.GLOBAL_STATE &&
82-
b!.store !== esFilters.FilterStateStore.GLOBAL_STATE
83-
? -1
84-
: 1;
82+
if (a!.store === b!.store) {
83+
return 0;
84+
} else {
85+
return a!.store === esFilters.FilterStateStore.GLOBAL_STATE &&
86+
b!.store !== esFilters.FilterStateStore.GLOBAL_STATE
87+
? -1
88+
: 1;
89+
}
8590
});
8691

8792
const filtersUpdated = !_.isEqual(this.filters, newFilters);

0 commit comments

Comments
 (0)