@@ -20,7 +20,7 @@ import {
20
20
} from '@elastic/eui' ;
21
21
import { debounce , get , isEmpty } from 'lodash' ;
22
22
import queryString from 'querystring' ;
23
- import React , { useEffect , useState } from 'react' ;
23
+ import React , { useEffect , useMemo , useState } from 'react' ;
24
24
import { useDispatch , useSelector } from 'react-redux' ;
25
25
import { RouteComponentProps } from 'react-router' ;
26
26
import {
@@ -44,13 +44,16 @@ import {
44
44
} from '../../../../redux/reducers/opensearch' ;
45
45
import { APP_PATH , PLUGIN_NAME } from '../../../../utils/constants' ;
46
46
import { DETECTOR_STATE } from '../../../../../server/utils/constants' ;
47
- import { getVisibleOptions , sanitizeSearchText } from '../../../utils/helpers' ;
47
+ import {
48
+ getAllDetectorsQueryParamsWithDataSourceId ,
49
+ getVisibleOptions ,
50
+ sanitizeSearchText ,
51
+ } from '../../../utils/helpers' ;
48
52
import { EmptyDetectorMessage } from '../../components/EmptyMessage/EmptyMessage' ;
49
53
import { ListFilters } from '../../components/ListFilters/ListFilters' ;
50
54
import {
51
55
MAX_DETECTORS ,
52
56
MAX_SELECTED_INDICES ,
53
- GET_ALL_DETECTORS_QUERY_PARAMS ,
54
57
ALL_DETECTOR_STATES ,
55
58
ALL_INDICES ,
56
59
SINGLE_DETECTOR_NOT_FOUND_MSG ,
@@ -78,8 +81,13 @@ import {
78
81
NO_PERMISSIONS_KEY_WORD ,
79
82
prettifyErrorMessage ,
80
83
} from '../../../../../server/utils/helpers' ;
81
- import { CoreStart } from '../../../../../../../src/core/public' ;
84
+ import { CoreStart , MountPoint } from '../../../../../../../src/core/public' ;
82
85
import { CoreServicesContext } from '../../../../components/CoreServices/CoreServices' ;
86
+ import {
87
+ DataSourceManagementPluginSetup ,
88
+ DataSourceSelectableConfig ,
89
+ } from '../../../../../../../src/plugins/data_source_management/public' ;
90
+ import { getNotifications , getSavedObjectsClient } from '../../../../services' ;
83
91
84
92
export interface ListRouterParams {
85
93
from : string ;
@@ -88,13 +96,19 @@ export interface ListRouterParams {
88
96
indices : string ;
89
97
sortDirection : SORT_DIRECTION ;
90
98
sortField : string ;
99
+ dataSourceId : string ;
100
+ }
101
+ interface ListProps extends RouteComponentProps < ListRouterParams > {
102
+ dataSourceEnabled : boolean ;
103
+ dataSourceManagement : DataSourceManagementPluginSetup ;
104
+ setActionMenu : ( menuMount : MountPoint | undefined ) => void ;
91
105
}
92
- interface ListProps extends RouteComponentProps < ListRouterParams > { }
93
106
interface ListState {
94
107
page : number ;
95
108
queryParams : GetDetectorsQueryParams ;
96
109
selectedDetectorStates : DETECTOR_STATE [ ] ;
97
110
selectedIndices : string [ ] ;
111
+ selectedDataSourceId : string ;
98
112
}
99
113
interface ConfirmModalState {
100
114
isOpen : boolean ;
@@ -198,6 +212,9 @@ export const DetectorList = (props: ListProps) => {
198
212
selectedIndices : queryParams . indices
199
213
? queryParams . indices . split ( ',' )
200
214
: ALL_INDICES ,
215
+ selectedDataSourceId : queryParams . dataSourceId
216
+ ? queryParams . dataSourceId
217
+ : '' ,
201
218
} ) ;
202
219
203
220
// Set breadcrumbs on page initialization
@@ -215,6 +232,7 @@ export const DetectorList = (props: ListProps) => {
215
232
...state . queryParams ,
216
233
indices : state . selectedIndices . join ( ',' ) ,
217
234
from : state . page * state . queryParams . size ,
235
+ dataSourceId : state . selectedDataSourceId ,
218
236
} ;
219
237
220
238
history . replace ( {
@@ -229,6 +247,7 @@ export const DetectorList = (props: ListProps) => {
229
247
state . queryParams ,
230
248
state . selectedDetectorStates ,
231
249
state . selectedIndices ,
250
+ state . selectedDataSourceId ,
232
251
] ) ;
233
252
234
253
// Handle all filtering / sorting of detectors
@@ -246,7 +265,8 @@ export const DetectorList = (props: ListProps) => {
246
265
const curDetectorsToDisplay = getDetectorsToDisplay (
247
266
curSelectedDetectors ,
248
267
state . page ,
249
- state . queryParams . size
268
+ state . queryParams . size ,
269
+ state . selectedDataSourceId
250
270
) ;
251
271
setDetectorsToDisplay ( curDetectorsToDisplay ) ;
252
272
@@ -273,7 +293,11 @@ export const DetectorList = (props: ListProps) => {
273
293
} , [ confirmModalState . isRequestingToClose , isLoading ] ) ;
274
294
275
295
const getUpdatedDetectors = async ( ) => {
276
- dispatch ( getDetectorList ( GET_ALL_DETECTORS_QUERY_PARAMS ) ) ;
296
+ dispatch (
297
+ getDetectorList (
298
+ getAllDetectorsQueryParamsWithDataSourceId ( state . selectedDataSourceId )
299
+ )
300
+ ) ;
277
301
} ;
278
302
279
303
const handlePageChange = ( pageNumber : number ) => {
@@ -552,6 +576,16 @@ export const DetectorList = (props: ListProps) => {
552
576
} ) ;
553
577
} ;
554
578
579
+ const handleDataSourceChange = ( e ) => {
580
+ const dataConnectionId = e [ 0 ] ? e [ 0 ] . id : undefined ;
581
+
582
+ setState ( {
583
+ ...state ,
584
+ page : 0 ,
585
+ selectedDataSourceId : dataConnectionId ,
586
+ } ) ;
587
+ } ;
588
+
555
589
const getConfirmModal = ( ) => {
556
590
if ( confirmModalState . isOpen ) {
557
591
//@ts -ignore
@@ -626,9 +660,28 @@ export const DetectorList = (props: ListProps) => {
626
660
627
661
const confirmModal = getConfirmModal ( ) ;
628
662
663
+ const DataSourceMenu =
664
+ props . dataSourceManagement . ui . getDataSourceMenu < DataSourceSelectableConfig > ( ) ;
665
+ const renderDataSourceComponent = useMemo ( ( ) => {
666
+ return (
667
+ < DataSourceMenu
668
+ setMenuMountPoint = { props . setActionMenu }
669
+ componentType = { 'DataSourceSelectable' }
670
+ componentConfig = { {
671
+ fullWidth : false ,
672
+ savedObjects : getSavedObjectsClient ( ) ,
673
+ notifications : getNotifications ( ) ,
674
+ onSelectedDataSources : ( dataSources ) =>
675
+ handleDataSourceChange ( dataSources ) ,
676
+ } }
677
+ />
678
+ ) ;
679
+ } , [ getSavedObjectsClient ( ) , getNotifications ( ) , props . setActionMenu ] ) ;
680
+
629
681
return (
630
682
< EuiPage >
631
683
< EuiPageBody >
684
+ { props . dataSourceEnabled && renderDataSourceComponent }
632
685
< ContentPanel
633
686
title = {
634
687
isLoading
0 commit comments