1
+ import * as React from 'react' ;
2
+ import { K8sResourceCommon , WatchK8sResource } from '@openshift-console/dynamic-plugin-sdk' ;
3
+
4
+ const getURL = ( props : WatchK8sResource ) : string => {
5
+ const { name, namespace, namespaced, isList, groupVersionKind} = props ;
6
+ const { group, version, kind} = groupVersionKind ;
7
+ if ( ! group || ! kind || ! version ) {
8
+ return ;
9
+ }
10
+
11
+ const baseURL = '/api/kubernetes/apis/' + group + '/' + version ;
12
+ const namespaceURL =
13
+ namespaced ? '/namespaces/' + ( namespace . toString ( ) || 'default' ) : '' ;
14
+ const resourceKind = kind . toLowerCase ( ) ;
15
+ const pluralize = isList ? 's' : '' ;
16
+ const resourceName = name ? name . toString ( ) : '' ;
17
+ const url = baseURL + namespaceURL + '/' + resourceKind + pluralize + '/' + resourceName ;
18
+
19
+ return url ;
20
+ } ;
21
+
22
+ export const useK8sWatchResource = < R extends K8sResourceCommon | K8sResourceCommon [ ] > (
23
+ props : WatchK8sResource | null ,
24
+ ) => {
25
+ const [ loaded , setLoaded ] = React . useState ( false ) ;
26
+ const [ loadError , setLoadError ] = React . useState < string > ( null ) ;
27
+ const [ data , setData ] = React . useState < R > ( ) ;
28
+
29
+ React . useEffect ( ( ) => {
30
+ const url = getURL ( props ) ;
31
+
32
+ fetch ( url )
33
+ . then ( response => response . json ( ) )
34
+ . then ( ( jsonData ) => {
35
+ setData ( jsonData as R ) ;
36
+ setLoaded ( true ) ;
37
+ } )
38
+ . catch ( ( error ) => {
39
+ setLoadError ( error ) ;
40
+ setLoaded ( true ) ;
41
+ } ) ;
42
+
43
+ // eslint-disable-next-line react-hooks/exhaustive-deps
44
+ } , [ props ?. name , props ?. namespace ] ) ;
45
+
46
+ return [ data , loaded , loadError ] ;
47
+ } ;
48
+
49
+ export default useK8sWatchResource ;
0 commit comments