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