Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[State Management] State syncing helpers for query service I #56128

Merged
merged 44 commits into from
Feb 27, 2020
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
e16961d
wip
Dosant Jan 27, 2020
8201cbd
wip
Dosant Jan 28, 2020
e855db8
improve example
Dosant Jan 28, 2020
0ddbfe5
Merge branch 'master' of github.com:elastic/kibana into dev/experimen…
Dosant Jan 28, 2020
56895b7
improve
Dosant Jan 28, 2020
224841b
fix
Dosant Jan 28, 2020
98703dc
improve
Dosant Jan 28, 2020
606bfc4
Merge branch 'master' of github.com:elastic/kibana into dev/experimen…
Dosant Feb 6, 2020
bc07de4
merge
Dosant Feb 6, 2020
8be16b3
top nav ts arg support
Feb 6, 2020
1c7160e
Merge branch 'newplatform/data/stateful-top-nav-ts' of github.com:liz…
Dosant Feb 6, 2020
8b71f90
Merge branch 'newplatform/data/stateful-top-nav-ts' of github.com:liz…
Dosant Feb 6, 2020
04fc4d5
wip
Dosant Feb 6, 2020
ac55f33
snapshots
Dosant Feb 6, 2020
ce59461
use-callback
Dosant Feb 6, 2020
f4fb6b8
wip
Dosant Feb 7, 2020
e656578
wip
Dosant Feb 7, 2020
962f84f
wip
Dosant Feb 7, 2020
f0b04da
Merge branch 'dev/experiment-with-state-setup' of github.com:Dosant/k…
Dosant Feb 14, 2020
c70e8ac
Merge branch 'master' of github.com:elastic/kibana into dev/experimen…
Dosant Feb 16, 2020
29516bd
wip
Dosant Feb 16, 2020
72bdaf5
Merge branch 'master' of github.com:elastic/kibana into dev/experimen…
Dosant Feb 16, 2020
9b70221
fix
Dosant Feb 16, 2020
7be0613
jest -u
Dosant Feb 16, 2020
5bfd1e9
Merge branch 'master' of github.com:elastic/kibana into dev/experimen…
Dosant Feb 18, 2020
19770c2
improve discover and visualise sub url tracking
Dosant Feb 18, 2020
63f7c8c
update np karma mock
Dosant Feb 18, 2020
3e57279
fix mock
Dosant Feb 18, 2020
d39d491
wip
Dosant Feb 18, 2020
1f2c5d1
Merge branch 'master' of github.com:elastic/kibana into dev/experimen…
Dosant Feb 18, 2020
36f3036
Merge branch 'master' of github.com:elastic/kibana into dev/experimen…
Dosant Feb 18, 2020
3add348
improve
Dosant Feb 18, 2020
d376122
jset -u
Dosant Feb 18, 2020
1b53f05
Merge branch 'master' of github.com:elastic/kibana into dev/experimen…
Dosant Feb 20, 2020
3f24114
@lizozom review
Dosant Feb 20, 2020
cc1aaff
Merge branch 'master' into dev/experiment-with-state-setup
elasticmachine Feb 22, 2020
fa61db9
Merge branch 'master' into dev/experiment-with-state-setup
elasticmachine Feb 25, 2020
15bd129
fix query state in create search bar
Feb 26, 2020
c816281
removed useCallback
Feb 26, 2020
83e16c0
Enabled saved queries
Feb 26, 2020
5b96209
Merge branch 'master' into dev/experiment-with-state-setup
elasticmachine Feb 26, 2020
e3513e0
fix setting saved search
Dosant Feb 27, 2020
a08ec7e
Merge branch 'master' into dev/experiment-with-state-setup
elasticmachine Feb 27, 2020
cc91afb
jest -u
Dosant Feb 27, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
* under the License.
*/

import React, { useEffect, useRef, useState } from 'react';
import React, { useEffect, useRef, useState, useCallback } from 'react';
import { History } from 'history';
import { FormattedMessage, I18nProvider } from '@kbn/i18n/react';
import { Router } from 'react-router-dom';
Expand All @@ -41,6 +41,7 @@ import {
QueryState,
Filter,
esFilters,
Query,
} from '../../../../../src/plugins/data/public';
import {
BaseState,
Expand All @@ -65,8 +66,7 @@ interface StateDemoAppDeps {
interface AppState {
name: string;
filters: Filter[];
// TODO: https://github.com/elastic/kibana/issues/58111
// query?: Query;
query?: Query;
}
const defaultAppState: AppState = {
name: '',
Expand All @@ -92,17 +92,16 @@ const App = ({
useGlobalStateSyncing(data.query, kbnUrlStateStorage);
useAppStateSyncing(appStateContainer, data.query, kbnUrlStateStorage);

// TODO: https://github.com/elastic/kibana/issues/58111
// useEffect indefinite cycle inside TopNavManu
// const onQuerySubmit = useCallback(
// ({ query }) => {
// appStateContainer.set({ ...appState, query });
// },
// [appStateContainer, appState]
// );
const onQuerySubmit = useCallback(
({ query }) => {
appStateContainer.set({ ...appState, query });
},
[appStateContainer, appState]
);

const indexPattern = useIndexPattern(data);
if (!indexPattern) return <div>Loading...</div>;
if (!indexPattern)
return <div>No index pattern found. Please create an intex patter before loading...</div>;

// Render the application DOM.
// Note that `navigation.ui.TopNavMenu` is a stateful component exported on the `navigation` plugin's start contract.
Expand All @@ -115,9 +114,8 @@ const App = ({
showSearchBar={true}
indexPatterns={[indexPattern]}
useDefaultBehaviors={true}
// TODO: https://github.com/elastic/kibana/issues/58111
// onQuerySubmit={onQuerySubmit}
// query={appState.query}
onQuerySubmit={onQuerySubmit}
query={appState.query}
/>
<EuiPage restrictWidth="1000px">
<EuiPageBody>
Expand Down
46 changes: 30 additions & 16 deletions src/plugins/data/public/ui/search_bar/create_search_bar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
* under the License.
*/

import React, { useState, useEffect } from 'react';
import React, { useState, useEffect, useRef, useCallback } from 'react';
import { CoreStart } from 'src/core/public';
import { IStorageWrapper } from 'src/plugins/kibana_utils/public';
import { KibanaContextProvider } from '../../../../kibana_react/public';
Expand Down Expand Up @@ -117,13 +117,28 @@ export function createSearchBar({ core, storage, data }: StatefulSearchBarDeps)
// App name should come from the core application service.
// Until it's available, we'll ask the user to provide it for the pre-wired component.
return (props: StatefulSearchBarProps) => {
const { useDefaultBehaviors } = props;
// Handle queries
const [query, setQuery] = useState<Query>(
props.query || {
query: '',
language: core.uiSettings.get('search:queryLanguage'),
const queryRef = useRef(props.query);
const onQuerySubmitRef = useRef(props.onQuerySubmit);
const defaultQuery = {
query: '',
language: core.uiSettings.get('search:queryLanguage'),
};
const [query, setQuery] = useState<Query>(defaultQuery);

useEffect(() => {
if (props.query !== queryRef.current) {
queryRef.current = props.query;
setQuery(props.query || defaultQuery);
}
);
}, [defaultQuery, props.query]);

useEffect(() => {
if (props.onQuerySubmit !== onQuerySubmitRef.current) {
onQuerySubmitRef.current = props.onQuerySubmit;
}
}, [props.onQuerySubmit]);

// handle service state updates.
// i.e. filters being added from a visualization directly to filterManager.
Expand All @@ -150,16 +165,15 @@ export function createSearchBar({ core, storage, data }: StatefulSearchBarDeps)

// Fire onQuerySubmit on query or timerange change
useEffect(() => {
if (!props.useDefaultBehaviors) return;
if (props.onQuerySubmit)
props.onQuerySubmit(
{
dateRange: timeRange,
query,
},
true
);
}, [props, props.onQuerySubmit, props.useDefaultBehaviors, query, timeRange]);
if (!useDefaultBehaviors || !onQuerySubmitRef.current) return;
onQuerySubmitRef.current(
{
dateRange: timeRange,
query,
},
true
);
}, [query, timeRange, useDefaultBehaviors]);

return (
<KibanaContextProvider
Expand Down