diff --git a/x-pack/plugins/data_enhanced/public/plugin.ts b/x-pack/plugins/data_enhanced/public/plugin.ts
index 393a28c289e82..a3b37e47287e5 100644
--- a/x-pack/plugins/data_enhanced/public/plugin.ts
+++ b/x-pack/plugins/data_enhanced/public/plugin.ts
@@ -69,6 +69,7 @@ export class DataEnhancedPlugin
createConnectedBackgroundSessionIndicator({
sessionService: plugins.data.search.session,
application: core.application,
+ timeFilter: plugins.data.query.timefilter.timefilter,
})
)
),
diff --git a/x-pack/plugins/data_enhanced/public/search/ui/background_session_indicator/background_session_indicator.stories.tsx b/x-pack/plugins/data_enhanced/public/search/ui/background_session_indicator/background_session_indicator.stories.tsx
index c7195ea486e2f..4a6a852be755b 100644
--- a/x-pack/plugins/data_enhanced/public/search/ui/background_session_indicator/background_session_indicator.stories.tsx
+++ b/x-pack/plugins/data_enhanced/public/search/ui/background_session_indicator/background_session_indicator.stories.tsx
@@ -26,5 +26,14 @@ storiesOf('components/BackgroundSessionIndicator', module).add('default', () =>
+
+
+
>
));
diff --git a/x-pack/plugins/data_enhanced/public/search/ui/background_session_indicator/background_session_indicator.test.tsx b/x-pack/plugins/data_enhanced/public/search/ui/background_session_indicator/background_session_indicator.test.tsx
index f401a460113c7..b7d342300f311 100644
--- a/x-pack/plugins/data_enhanced/public/search/ui/background_session_indicator/background_session_indicator.test.tsx
+++ b/x-pack/plugins/data_enhanced/public/search/ui/background_session_indicator/background_session_indicator.test.tsx
@@ -100,3 +100,13 @@ test('Canceled state', async () => {
expect(onRefresh).toBeCalled();
});
+
+test('Disabled state', async () => {
+ render(
+
+
+
+ );
+
+ expect(screen.getByTestId('backgroundSessionIndicator').querySelector('button')).toBeDisabled();
+});
diff --git a/x-pack/plugins/data_enhanced/public/search/ui/background_session_indicator/background_session_indicator.tsx b/x-pack/plugins/data_enhanced/public/search/ui/background_session_indicator/background_session_indicator.tsx
index 674ce392aa2d0..ce77686c4f3c1 100644
--- a/x-pack/plugins/data_enhanced/public/search/ui/background_session_indicator/background_session_indicator.tsx
+++ b/x-pack/plugins/data_enhanced/public/search/ui/background_session_indicator/background_session_indicator.tsx
@@ -30,6 +30,8 @@ export interface BackgroundSessionIndicatorProps {
viewBackgroundSessionsLink?: string;
onSaveResults?: () => void;
onRefresh?: () => void;
+ disabled?: boolean;
+ disabledReasonText?: string;
}
type ActionButtonProps = BackgroundSessionIndicatorProps & { buttonProps: EuiButtonEmptyProps };
@@ -285,12 +287,13 @@ export const BackgroundSessionIndicator: React.FC
+
}
diff --git a/x-pack/plugins/data_enhanced/public/search/ui/connected_background_session_indicator/connected_background_session_indicator.test.tsx b/x-pack/plugins/data_enhanced/public/search/ui/connected_background_session_indicator/connected_background_session_indicator.test.tsx
index 4c9fd50dc8c4c..e08773c6a8a76 100644
--- a/x-pack/plugins/data_enhanced/public/search/ui/connected_background_session_indicator/connected_background_session_indicator.test.tsx
+++ b/x-pack/plugins/data_enhanced/public/search/ui/connected_background_session_indicator/connected_background_session_indicator.test.tsx
@@ -5,21 +5,36 @@
*/
import React from 'react';
-import { render, waitFor } from '@testing-library/react';
+import { render, waitFor, screen, act } from '@testing-library/react';
import { dataPluginMock } from '../../../../../../../src/plugins/data/public/mocks';
import { createConnectedBackgroundSessionIndicator } from './connected_background_session_indicator';
import { BehaviorSubject } from 'rxjs';
-import { ISessionService, SessionState } from '../../../../../../../src/plugins/data/public';
+import {
+ ISessionService,
+ RefreshInterval,
+ SessionState,
+ TimefilterContract,
+} from '../../../../../../../src/plugins/data/public';
import { coreMock } from '../../../../../../../src/core/public/mocks';
const coreStart = coreMock.createStart();
-const sessionService = dataPluginMock.createStartContract().search
- .session as jest.Mocked;
+const dataStart = dataPluginMock.createStartContract();
+const sessionService = dataStart.search.session as jest.Mocked;
+
+const refreshInterval$ = new BehaviorSubject({ value: 0, pause: true });
+const timeFilter = dataStart.query.timefilter.timefilter as jest.Mocked;
+timeFilter.getRefreshIntervalUpdate$.mockImplementation(() => refreshInterval$);
+timeFilter.getRefreshInterval.mockImplementation(() => refreshInterval$.getValue());
+
+beforeEach(() => {
+ refreshInterval$.next({ value: 0, pause: true });
+});
test("shouldn't show indicator in case no active search session", async () => {
const BackgroundSessionIndicator = createConnectedBackgroundSessionIndicator({
sessionService,
application: coreStart.application,
+ timeFilter,
});
const { getByTestId, container } = render();
@@ -35,8 +50,32 @@ test('should show indicator in case there is an active search session', async ()
const BackgroundSessionIndicator = createConnectedBackgroundSessionIndicator({
sessionService: { ...sessionService, state$ },
application: coreStart.application,
+ timeFilter,
});
const { getByTestId } = render();
await waitFor(() => getByTestId('backgroundSessionIndicator'));
});
+
+test('should be disabled during auto-refresh', async () => {
+ const state$ = new BehaviorSubject(SessionState.Loading);
+ const BackgroundSessionIndicator = createConnectedBackgroundSessionIndicator({
+ sessionService: { ...sessionService, state$ },
+ application: coreStart.application,
+ timeFilter,
+ });
+
+ render();
+
+ await waitFor(() => screen.getByTestId('backgroundSessionIndicator'));
+
+ expect(
+ screen.getByTestId('backgroundSessionIndicator').querySelector('button')
+ ).not.toBeDisabled();
+
+ act(() => {
+ refreshInterval$.next({ value: 0, pause: false });
+ });
+
+ expect(screen.getByTestId('backgroundSessionIndicator').querySelector('button')).toBeDisabled();
+});
diff --git a/x-pack/plugins/data_enhanced/public/search/ui/connected_background_session_indicator/connected_background_session_indicator.tsx b/x-pack/plugins/data_enhanced/public/search/ui/connected_background_session_indicator/connected_background_session_indicator.tsx
index 1cc2fffcea8c5..b80295d87d202 100644
--- a/x-pack/plugins/data_enhanced/public/search/ui/connected_background_session_indicator/connected_background_session_indicator.tsx
+++ b/x-pack/plugins/data_enhanced/public/search/ui/connected_background_session_indicator/connected_background_session_indicator.tsx
@@ -5,24 +5,46 @@
*/
import React from 'react';
-import { debounceTime } from 'rxjs/operators';
+import { debounceTime, distinctUntilChanged, map } from 'rxjs/operators';
import useObservable from 'react-use/lib/useObservable';
+import { i18n } from '@kbn/i18n';
import { BackgroundSessionIndicator } from '../background_session_indicator';
-import { ISessionService } from '../../../../../../../src/plugins/data/public/';
+import { ISessionService, TimefilterContract } from '../../../../../../../src/plugins/data/public/';
import { RedirectAppLinks } from '../../../../../../../src/plugins/kibana_react/public';
import { ApplicationStart } from '../../../../../../../src/core/public';
export interface BackgroundSessionIndicatorDeps {
sessionService: ISessionService;
+ timeFilter: TimefilterContract;
application: ApplicationStart;
}
export const createConnectedBackgroundSessionIndicator = ({
sessionService,
application,
+ timeFilter,
}: BackgroundSessionIndicatorDeps): React.FC => {
+ const isAutoRefreshEnabled = () => !timeFilter.getRefreshInterval().pause;
+ const isAutoRefreshEnabled$ = timeFilter
+ .getRefreshIntervalUpdate$()
+ .pipe(map(isAutoRefreshEnabled), distinctUntilChanged());
+
return () => {
const state = useObservable(sessionService.state$.pipe(debounceTime(500)));
+ const autoRefreshEnabled = useObservable(isAutoRefreshEnabled$, isAutoRefreshEnabled());
+ let disabled = false;
+ let disabledReasonText: string = '';
+
+ if (autoRefreshEnabled) {
+ disabled = true;
+ disabledReasonText = i18n.translate(
+ 'xpack.data.backgroundSessionIndicator.disabledDueToAutoRefreshMessage',
+ {
+ defaultMessage: 'Send to background is not available when auto refresh is enabled.',
+ }
+ );
+ }
+
if (!state) return null;
return (
@@ -40,6 +62,8 @@ export const createConnectedBackgroundSessionIndicator = ({
onCancel={() => {
sessionService.cancel();
}}
+ disabled={disabled}
+ disabledReasonText={disabledReasonText}
/>
);