44 * you may not use this file except in compliance with the Elastic License.
55 */
66
7- import React , { FC , useState , useEffect , useCallback } from 'react' ;
7+ import React , { FC , useState , useEffect } from 'react' ;
88import moment from 'moment' ;
99import { FormattedMessage } from '@kbn/i18n/react' ;
1010import { EuiFlexGroup , EuiFlexItem , EuiCard , EuiIcon } from '@elastic/eui' ;
1111import { ml } from '../../../../services/ml_api_service' ;
1212import { isFullLicense } from '../../../../license' ;
1313import { checkPermission } from '../../../../capabilities/check_capabilities' ;
1414import { mlNodesAvailable } from '../../../../ml_nodes_check/check_ml_nodes' ;
15- import { useMlKibana , useMlUrlGenerator , useNavigateToPath } from '../../../../contexts/kibana' ;
15+ import { useMlKibana , useMlUrlGenerator } from '../../../../contexts/kibana' ;
1616import { ML_PAGES } from '../../../../../../common/constants/ml_url_generator' ;
1717import { MlCommonGlobalState } from '../../../../../../common/types/ml_url_generator' ;
1818import {
@@ -45,12 +45,16 @@ export const ResultsLinks: FC<Props> = ({
4545 const [ globalState , setGlobalState ] = useState < MlCommonGlobalState | undefined > ( ) ;
4646
4747 const [ discoverLink , setDiscoverLink ] = useState ( '' ) ;
48+ const [ indexManagementLink , setIndexManagementLink ] = useState ( '' ) ;
49+ const [ indexPatternManagementLink , setIndexPatternManagementLink ] = useState ( '' ) ;
50+ const [ dataVisualizerLink , setDataVisualizerLink ] = useState ( '' ) ;
51+ const [ createJobsSelectTypePage , setCreateJobsSelectTypePage ] = useState ( '' ) ;
52+
4853 const mlUrlGenerator = useMlUrlGenerator ( ) ;
49- const navigateToPath = useNavigateToPath ( ) ;
5054
5155 const {
5256 services : {
53- application : { navigateToApp , navigateToUrl } ,
57+ application : { getUrlForApp } ,
5458 share : {
5559 urlGenerators : { getUrlGenerator } ,
5660 } ,
@@ -84,35 +88,52 @@ export const ResultsLinks: FC<Props> = ({
8488 setDiscoverLink ( discoverUrl ) ;
8589 }
8690 } ;
91+
92+ const getDataVisualizerLink = async ( ) : Promise < void > => {
93+ const _dataVisualizerLink = await mlUrlGenerator . createUrl ( {
94+ page : ML_PAGES . DATA_VISUALIZER_INDEX_VIEWER ,
95+ pageState : {
96+ index : indexPatternId ,
97+ globalState,
98+ } ,
99+ } ) ;
100+ if ( ! unmounted ) {
101+ setDataVisualizerLink ( _dataVisualizerLink ) ;
102+ }
103+ } ;
104+ const getADCreateJobsSelectTypePage = async ( ) : Promise < void > => {
105+ const _createJobsSelectTypePage = await mlUrlGenerator . createUrl ( {
106+ page : ML_PAGES . ANOMALY_DETECTION_CREATE_JOB_SELECT_TYPE ,
107+ pageState : {
108+ index : indexPatternId ,
109+ globalState,
110+ } ,
111+ } ) ;
112+ if ( ! unmounted ) {
113+ setCreateJobsSelectTypePage ( _createJobsSelectTypePage ) ;
114+ }
115+ } ;
116+
87117 getDiscoverUrl ( ) ;
118+ getDataVisualizerLink ( ) ;
119+ getADCreateJobsSelectTypePage ( ) ;
120+
121+ if ( ! unmounted ) {
122+ setIndexManagementLink (
123+ getUrlForApp ( 'management' , { path : '/data/index_management/indices' } )
124+ ) ;
125+ setIndexPatternManagementLink (
126+ getUrlForApp ( 'management' , {
127+ path : `/kibana/indexPatterns${ createIndexPattern ? `/patterns/${ indexPatternId } ` : '' } ` ,
128+ } )
129+ ) ;
130+ }
88131
89132 return ( ) => {
90133 unmounted = true ;
91134 } ;
92135 } , [ indexPatternId , getUrlGenerator ] ) ;
93136
94- const openInDataVisualizer = useCallback ( async ( ) => {
95- const path = await mlUrlGenerator . createUrl ( {
96- page : ML_PAGES . DATA_VISUALIZER_INDEX_VIEWER ,
97- pageState : {
98- index : indexPatternId ,
99- globalState,
100- } ,
101- } ) ;
102- await navigateToPath ( path ) ;
103- } , [ indexPatternId , globalState ] ) ;
104-
105- const redirectToADCreateJobsSelectTypePage = useCallback ( async ( ) => {
106- const path = await mlUrlGenerator . createUrl ( {
107- page : ML_PAGES . ANOMALY_DETECTION_CREATE_JOB_SELECT_TYPE ,
108- pageState : {
109- index : indexPatternId ,
110- globalState,
111- } ,
112- } ) ;
113- await navigateToPath ( path ) ;
114- } , [ indexPatternId , globalState ] ) ;
115-
116137 useEffect ( ( ) => {
117138 setShowCreateJobLink ( checkPermission ( 'canCreateJob' ) && mlNodesAvailable ( ) ) ;
118139 updateTimeValues ( ) ;
@@ -148,23 +169,6 @@ export const ResultsLinks: FC<Props> = ({
148169 }
149170 }
150171
151- function openInDiscover ( e : React . MouseEvent < HTMLButtonElement > ) {
152- e . preventDefault ( ) ;
153- navigateToUrl ( discoverLink ) ;
154- }
155-
156- function openIndexManagement ( e : React . MouseEvent < HTMLButtonElement > ) {
157- e . preventDefault ( ) ;
158- navigateToApp ( 'management' , { path : '/data/index_management/indices' } ) ;
159- }
160-
161- function openIndexPatternManagement ( e : React . MouseEvent < HTMLButtonElement > ) {
162- e . preventDefault ( ) ;
163- navigateToApp ( 'management' , {
164- path : `/kibana/indexPatterns${ createIndexPattern ? `/patterns/${ indexPatternId } ` : '' } ` ,
165- } ) ;
166- }
167-
168172 return (
169173 < EuiFlexGroup gutterSize = "l" >
170174 { createIndexPattern && discoverLink && (
@@ -178,15 +182,16 @@ export const ResultsLinks: FC<Props> = ({
178182 />
179183 }
180184 description = ""
181- onClick = { openInDiscover }
185+ href = { discoverLink }
182186 />
183187 </ EuiFlexItem >
184188 ) }
185189
186190 { isFullLicense ( ) === true &&
187191 timeFieldName !== undefined &&
188192 showCreateJobLink &&
189- createIndexPattern && (
193+ createIndexPattern &&
194+ createJobsSelectTypePage && (
190195 < EuiFlexItem >
191196 < EuiCard
192197 icon = { < EuiIcon size = "xxl" type = { `machineLearningApp` } /> }
@@ -197,12 +202,12 @@ export const ResultsLinks: FC<Props> = ({
197202 />
198203 }
199204 description = ""
200- onClick = { redirectToADCreateJobsSelectTypePage }
205+ href = { createJobsSelectTypePage }
201206 />
202207 </ EuiFlexItem >
203208 ) }
204209
205- { createIndexPattern && (
210+ { createIndexPattern && dataVisualizerLink && (
206211 < EuiFlexItem >
207212 < EuiCard
208213 icon = { < EuiIcon size = "xxl" type = { `dataVisualizer` } /> }
@@ -213,38 +218,42 @@ export const ResultsLinks: FC<Props> = ({
213218 />
214219 }
215220 description = ""
216- onClick = { openInDataVisualizer }
221+ href = { dataVisualizerLink }
217222 />
218223 </ EuiFlexItem >
219224 ) }
220225
221- < EuiFlexItem >
222- < EuiCard
223- icon = { < EuiIcon size = "xxl" type = { `managementApp` } /> }
224- title = {
225- < FormattedMessage
226- id = "xpack.ml.fileDatavisualizer.resultsLinks.indexManagementTitle"
227- defaultMessage = "Index Management"
228- />
229- }
230- description = ""
231- onClick = { openIndexManagement }
232- />
233- </ EuiFlexItem >
226+ { indexManagementLink && (
227+ < EuiFlexItem >
228+ < EuiCard
229+ icon = { < EuiIcon size = "xxl" type = { `managementApp` } /> }
230+ title = {
231+ < FormattedMessage
232+ id = "xpack.ml.fileDatavisualizer.resultsLinks.indexManagementTitle"
233+ defaultMessage = "Index Management"
234+ />
235+ }
236+ description = ""
237+ href = { indexManagementLink }
238+ />
239+ </ EuiFlexItem >
240+ ) }
234241
235- < EuiFlexItem >
236- < EuiCard
237- icon = { < EuiIcon size = "xxl" type = { `managementApp` } /> }
238- title = {
239- < FormattedMessage
240- id = "xpack.ml.fileDatavisualizer.resultsLinks.indexPatternManagementTitle"
241- defaultMessage = "Index Pattern Management"
242- />
243- }
244- description = ""
245- onClick = { openIndexPatternManagement }
246- />
247- </ EuiFlexItem >
242+ { indexPatternManagementLink && (
243+ < EuiFlexItem >
244+ < EuiCard
245+ icon = { < EuiIcon size = "xxl" type = { `managementApp` } /> }
246+ title = {
247+ < FormattedMessage
248+ id = "xpack.ml.fileDatavisualizer.resultsLinks.indexPatternManagementTitle"
249+ defaultMessage = "Index Pattern Management"
250+ />
251+ }
252+ description = ""
253+ href = { indexPatternManagementLink }
254+ />
255+ </ EuiFlexItem >
256+ ) }
248257 < EuiFlexItem >
249258 < EuiCard
250259 icon = { < EuiIcon size = "xxl" type = { `filebeatApp` } /> }
0 commit comments