Skip to content

Commit

Permalink
Saved visualization with search string confuse altering of search str…
Browse files Browse the repository at this point in the history
…ing (#103396) (#107185)

* Add possibility to sync query and filter from state

* Fix unit-tests

* Fix name

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>

Co-authored-by: Uladzislau Lasitsa <Uladzislau_Lasitsa@epam.com>
  • Loading branch information
kibanamachine and VladLasitsa committed Jul 29, 2021
1 parent 0e6eccf commit bdcaf2c
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ describe('useVisualizeAppState', () => {
const savedVisInstance = ({
vis: {
setState: jest.fn().mockResolvedValue({}),
data: {},
},
savedVis: {},
embeddableHandler: {},
Expand Down Expand Up @@ -167,7 +168,31 @@ describe('useVisualizeAppState', () => {
const { aggs, ...visState } = stateContainer.getState().vis;
const expectedNewVisState = {
...visState,
data: { aggs: state.vis.aggs },
data: { aggs: state.vis.aggs, searchSource: { query: state.query, filter: state.filters } },
};

expect(savedVisInstance.vis.setState).toHaveBeenCalledWith(expectedNewVisState);
expect(result.current).toEqual({
appState: stateContainer,
hasUnappliedChanges: false,
});
});

it('should successfully updated vis state and set up app state container if query from app state is different', async () => {
stateContainerGetStateMock.mockImplementation(() => ({
...visualizeAppStateStub,
query: { query: 'test', language: 'kuery' },
}));
const { result, waitForNextUpdate } = renderHook(() =>
useVisualizeAppState(mockServices, eventEmitter, savedVisInstance)
);

await waitForNextUpdate();

const { aggs, ...visState } = stateContainer.getState().vis;
const expectedNewVisState = {
...visState,
data: { aggs: state.vis.aggs, searchSource: { query: state.query, filter: state.filters } },
};

expect(savedVisInstance.vis.setState).toHaveBeenCalledWith(expectedNewVisState);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ export const useVisualizeAppState = (
kbnUrlStateStorage: services.kbnUrlStateStorage,
byValue,
});
const currentAppState = stateContainer.getState();

const onDirtyStateChange = ({ isDirty }: { isDirty: boolean }) => {
if (!isDirty) {
Expand All @@ -57,8 +58,8 @@ export const useVisualizeAppState = (

const { filterManager, queryString } = services.data.query;
// sync initial app state from state to managers
filterManager.setAppFilters(cloneDeep(stateContainer.getState().filters));
queryString.setQuery(migrateLegacyQuery(stateContainer.getState().query));
filterManager.setAppFilters(cloneDeep(currentAppState.filters));
queryString.setQuery(migrateLegacyQuery(currentAppState.query));

// setup syncing of app filters between appState and query services
const stopSyncingAppFilters = connectToQueryState(
Expand Down Expand Up @@ -90,10 +91,20 @@ export const useVisualizeAppState = (
// The savedVis is pulled from elasticsearch, but the appState is pulled from the url, with the
// defaults applied. If the url was from a previous session which included modifications to the
// appState then they won't be equal.
if (!isEqual(stateContainer.getState().vis, stateDefaults.vis)) {
const { aggs, ...visState } = stateContainer.getState().vis;
if (
!isEqual(currentAppState.vis, stateDefaults.vis) ||
!isEqual(currentAppState.query, stateDefaults.query) ||
!isEqual(currentAppState.filters, stateDefaults.filters)
) {
const { aggs, ...visState } = currentAppState.vis;
const query = currentAppState.query;
const filter = currentAppState.filters;
const visSearchSource = instance.vis.data.searchSource?.getFields() || {};
instance.vis
.setState({ ...visState, data: { aggs } })
.setState({
...visState,
data: { aggs, searchSource: { ...visSearchSource, query, filter } },
})
.then(() => {
// setting up the stateContainer after setState is successful will prevent loading the editor with failures
// otherwise the catch will take presedence
Expand Down

0 comments on commit bdcaf2c

Please sign in to comment.