Skip to content

Commit

Permalink
improve
Browse files Browse the repository at this point in the history
  • Loading branch information
Dosant committed Jan 22, 2020
1 parent b343638 commit 79850bf
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 59 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,7 @@ import _ from 'lodash';
import { Subscription } from 'rxjs';
import { State } from 'ui/state_management/state';
import { FilterManager, esFilters } from '../../../../../../plugins/data/public';

import {
compareFilters,
COMPARE_ALL_OPTIONS,
// this whole file will soon be deprecated by new state management.
// eslint-disable-next-line @kbn/eslint/no-restricted-paths
} from '../../../../../../plugins/data/public/query/filter_manager/lib/compare_filters';
import { compareFilters, COMPARE_ALL_OPTIONS } from '../../../../../../plugins/data/public';

type GetAppStateFunc = () => { filters?: esFilters.Filter[]; save?: () => void } | undefined | null;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import React from 'react';
import angular from 'angular';

import { Subscription } from 'rxjs';
import { filter, map } from 'rxjs/operators';
import { DashboardEmptyScreen, DashboardEmptyScreenProps } from './dashboard_empty_screen';

import {
Expand All @@ -35,8 +34,6 @@ import {
subscribeWithScope,
} from '../legacy_imports';
import {
esFilters,
FilterManager,
IndexPattern,
IndexPatternsContract,
Query,
Expand Down Expand Up @@ -76,10 +73,8 @@ import {
SavedObjectFinderUi,
} from '../../../../../../plugins/kibana_react/public';
import { removeQueryParam, unhashUrl } from '../../../../../../plugins/kibana_utils/public';
import {
COMPARE_ALL_OPTIONS,
compareFilters,
} from '../../../../../../plugins/data/public/query/filter_manager/lib/compare_filters';
import { COMPARE_ALL_OPTIONS, compareFilters } from '../../../../../../plugins/data/public';
import { startSyncingAppFilters } from './lib/sync_app_filters';

export interface DashboardAppControllerDependencies extends RenderDeps {
$scope: DashboardAppScope;
Expand Down Expand Up @@ -138,47 +133,7 @@ export class DashboardAppController {
history,
});

// make sure initial filters are picked up from url
filterManager.setFilters([
...filterManager.getGlobalFilters(),
..._.cloneDeep(dashboardStateManager.appState.filters),
]);

// this should go away after: https://github.com/elastic/kibana/issues/55339
// is resolved
// sync filterManager's appFilters with dashboardStateManager
// dashboardStateManager then sync it to url '_a'
const appFiltersSubscription = filterManager
.getUpdates$()
.pipe(
map(() => filterManager.getAppFilters()),
filter(
// continue only if app state filters updated
appFilters =>
!compareFilters(appFilters, dashboardStateManager.appState.filters, COMPARE_ALL_OPTIONS)
)
)
.subscribe(appFilters => {
dashboardStateManager.setFilters(appFilters);
});

// this should go away after: https://github.com/elastic/kibana/issues/55339
// is resolved
// if appFilters in dashboardStateManager changed (e.g browser history update),
// sync it to filterManager
dashboardStateManager.registerChangeListener(() => {
if (
!compareFilters(
dashboardStateManager.appState.filters,
filterManager.getAppFilters(),
COMPARE_ALL_OPTIONS
)
) {
const newAppFilters = _.cloneDeep(dashboardStateManager.appState.filters);
FilterManager.setFiltersStore(newAppFilters, esFilters.FilterStateStore.APP_STATE);
filterManager.setFilters([...filterManager.getGlobalFilters(), ...newAppFilters]);
}
});
const stopSyncingAppFilters = startSyncingAppFilters(filterManager, dashboardStateManager);

// The hash check is so we only update the time filter on dashboard open, not during
// normal cross app navigation.
Expand Down Expand Up @@ -441,9 +396,7 @@ export class DashboardAppController {
const containerInput = dashboardContainer.getInput();
const differences: Partial<DashboardContainerInput> = {};

// Filters can't be compared using regular isEqual
// this should go away after: https://github.com/elastic/kibana/issues/55339
// is resolved
// Filters shouldn't be compared using regular isEqual
if (
!compareFilters(containerInput.filters, appStateDashboardInput.filters, COMPARE_ALL_OPTIONS)
) {
Expand Down Expand Up @@ -917,7 +870,7 @@ export class DashboardAppController {

$scope.$on('$destroy', () => {
updateSubscription.unsubscribe();
appFiltersSubscription.unsubscribe();
stopSyncingAppFilters();
visibleSubscription.unsubscribe();
$scope.timefilterSubscriptions$.unsubscribe();

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/

import _ from 'lodash';
import { filter, map } from 'rxjs/operators';
import {
FilterManager,
esFilters,
compareFilters,
COMPARE_ALL_OPTIONS,
} from '../../../../../../../plugins/data/public/';
import { DashboardStateManager } from '../dashboard_state_manager';

export function startSyncingAppFilters(
filterManager: FilterManager,
dashboardStateManager: DashboardStateManager
) {
// make sure initial filters are picked up from url
filterManager.setFilters([
...filterManager.getGlobalFilters(),
..._.cloneDeep(dashboardStateManager.appState.filters),
]);

const appFiltersSubscription = filterManager
.getUpdates$()
.pipe(
map(() => filterManager.getAppFilters()),
filter(
// continue only if app state filters updated
appFilters =>
!compareFilters(appFilters, dashboardStateManager.appState.filters, COMPARE_ALL_OPTIONS)
)
)
.subscribe(appFilters => {
dashboardStateManager.setFilters(appFilters);
});

// if appFilters in dashboardStateManager changed (e.g browser history update),
// sync it to filterManager
dashboardStateManager.registerChangeListener(() => {
if (
!compareFilters(
dashboardStateManager.appState.filters,
filterManager.getAppFilters(),
COMPARE_ALL_OPTIONS
)
) {
const newAppFilters = _.cloneDeep(dashboardStateManager.appState.filters);
FilterManager.setFiltersStore(newAppFilters, esFilters.FilterStateStore.APP_STATE);
filterManager.setFilters([...filterManager.getGlobalFilters(), ...newAppFilters]);
}
});

return () => {
appFiltersSubscription.unsubscribe();
};
}
1 change: 1 addition & 0 deletions src/plugins/data/public/query/filter_manager/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,4 @@ export { uniqFilters } from './lib/uniq_filters';
export { mapAndFlattenFilters } from './lib/map_and_flatten_filters';
export { onlyDisabledFiltersChanged } from './lib/only_disabled';
export { generateFilters } from './lib/generate_filters';
export { compareFilters, COMPARE_ALL_OPTIONS } from './lib/compare_filters';

0 comments on commit 79850bf

Please sign in to comment.