Skip to content

Commit

Permalink
Revert "Query Filter \ Filter Manager: de-angularize and move to data…
Browse files Browse the repository at this point in the history
… plugin (#37311)"

This reverts commit 531e2b0.
  • Loading branch information
Spencer committed Jul 2, 2019
1 parent 0f5bfc0 commit 8452918
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 39 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ describe('filter_manager', () => {
let updateListener: sinon.SinonSpy<any[], any>;

let filterManager: FilterManager;
let indexPatterns: StubIndexPatterns;
let indexPatterns: any;
let readyFilters: Filter[];

beforeEach(() => {
Expand Down Expand Up @@ -440,24 +440,6 @@ describe('filter_manager', () => {
expect(globalStateStub.filters.length).toBe(3);
});

test('should de-dupe globalStateStub filters being set', async () => {
const f1 = getFilter(FilterStateStore.GLOBAL_STATE, false, false, 'age', 34);
const f2 = _.cloneDeep(f1);
await filterManager.setFilters([f1, f2]);
expect(filterManager.getAppFilters()).toHaveLength(0);
expect(filterManager.getGlobalFilters()).toHaveLength(1);
expect(filterManager.getFilters()).toHaveLength(1);
});

test('should de-dupe appStateStub filters being set', async () => {
const f1 = getFilter(FilterStateStore.APP_STATE, false, false, 'age', 34);
const f2 = _.cloneDeep(f1);
await filterManager.setFilters([f1, f2]);
expect(filterManager.getAppFilters()).toHaveLength(1);
expect(filterManager.getGlobalFilters()).toHaveLength(0);
expect(filterManager.getFilters()).toHaveLength(1);
});

test('should mutate global filters on appStateStub filter changes', async function() {
const idx = 1;
await filterManager.addFilters(readyFilters, true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
import { Filter, isFilterPinned, FilterStateStore } from '@kbn/es-query';

import _ from 'lodash';
import { Subject } from 'rxjs';
import { Subject, Subscription } from 'rxjs';

import { npSetup } from 'ui/new_platform';

Expand All @@ -42,13 +42,20 @@ import { IndexPatterns } from '../../index_patterns';
export class FilterManager {
private indexPatterns: IndexPatterns;
private filters: Filter[] = [];
private updated$: Subject<void> = new Subject();
private fetch$: Subject<void> = new Subject();
private updated$: Subject<any> = new Subject();
private fetch$: Subject<any> = new Subject();
private updateSubscription$: Subscription | undefined;

constructor(indexPatterns: IndexPatterns) {
this.indexPatterns = indexPatterns;
}

destroy() {
if (this.updateSubscription$) {
this.updateSubscription$.unsubscribe();
}
}

private mergeIncomingFilters(partitionedFilters: PartitionedFilters): Filter[] {
const globalFilters = partitionedFilters.globalFilters;
const appFilters = partitionedFilters.appFilters;
Expand All @@ -67,11 +74,11 @@ export class FilterManager {
appFilters.splice(i, 1);
});

return FilterManager.mergeFilters(appFilters, globalFilters);
return uniqFilters(appFilters.reverse().concat(globalFilters.reverse())).reverse();
}

private static mergeFilters(appFilters: Filter[], globalFilters: Filter[]): Filter[] {
return uniqFilters(appFilters.reverse().concat(globalFilters.reverse())).reverse();
private filtersUpdated(newFilters: Filter[]): boolean {
return !_.isEqual(this.filters, newFilters);
}

private static partitionFilters(filters: Filter[]): PartitionedFilters {
Expand All @@ -83,6 +90,9 @@ export class FilterManager {
}

private handleStateUpdate(newFilters: Filter[]) {
// This is where the angular update magic \ syncing diget happens
const filtersUpdated = this.filtersUpdated(newFilters);

// global filters should always be first
newFilters.sort(
(a: Filter, b: Filter): number => {
Expand All @@ -96,8 +106,6 @@ export class FilterManager {
}
);

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

this.filters = newFilters;
if (filtersUpdated) {
this.updated$.next();
Expand Down Expand Up @@ -147,28 +155,24 @@ export class FilterManager {
pinFilterStatus = uiSettings.get('filters:pinnedByDefault');
}

// Set the store of all filters. For now.
// In the future, all filters should come in with filter state store already set.
// set the store of all filters
// TODO: is this necessary?
const store = pinFilterStatus ? FilterStateStore.GLOBAL_STATE : FilterStateStore.APP_STATE;
FilterManager.setFiltersStore(filters, store);

const mappedFilters = await mapAndFlattenFilters(this.indexPatterns, filters);

// This is where we add new filters to the correct place (app \ global)
const newPartitionedFilters = FilterManager.partitionFilters(mappedFilters);
const currentFilters = this.getPartitionedFilters();
currentFilters.appFilters.push(...newPartitionedFilters.appFilters);
currentFilters.globalFilters.push(...newPartitionedFilters.globalFilters);
const partitionFilters = this.getPartitionedFilters();
partitionFilters.appFilters.push(...newPartitionedFilters.appFilters);
partitionFilters.globalFilters.push(...newPartitionedFilters.globalFilters);

const newFilters = this.mergeIncomingFilters(currentFilters);
const newFilters = this.mergeIncomingFilters(partitionFilters);
this.handleStateUpdate(newFilters);
}

public async setFilters(newFilters: Filter[]) {
const mappedFilters = await mapAndFlattenFilters(this.indexPatterns, newFilters);
const newPartitionedFilters = FilterManager.partitionFilters(mappedFilters);
const mergedFilters = this.mergeIncomingFilters(newPartitionedFilters);
this.handleStateUpdate(mergedFilters);
this.handleStateUpdate(mappedFilters);
}

public removeFilter(filter: Filter) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import { FilterManager } from './filter_manager';

/**
* FilterStateManager is responsible for watching for filter changes
* and syncing with FilterManager, as well as syncing FilterManager changes
* and synching with FilterManager, as well as syncing FilterManager changes
* back to the URL.
**/
export class FilterStateManager {
Expand Down

0 comments on commit 8452918

Please sign in to comment.