1
1
import * as React from 'react' ;
2
- import * as _ from 'lodash' ;
3
2
import { Base64 } from 'js-base64' ;
4
3
import { SecretValue } from '@console/internal/components/configmap-and-secret-data' ;
5
4
import { ConfigMapModel , SecretModel } from '@console/internal/models' ;
6
- import { k8sGet , K8sResourceKind } from '@console/internal/module/k8s' ;
5
+ import { K8sResourceKind , SecretKind , ConfigMapKind } from '@console/internal/module/k8s' ;
7
6
import { getName , getNamespace } from '@console/shared' ;
8
7
import { SectionHeading , EmptyBox } from '@console/internal/components/utils' ;
8
+ import { useK8sWatchResource } from '@console/internal/components/utils/k8s-watch-hook' ;
9
9
import { Button } from '@patternfly/react-core' ;
10
10
import { EyeSlashIcon , EyeIcon } from '@patternfly/react-icons' ;
11
11
12
12
export const GetSecret : React . FC < GetSecretProps > = ( { obj } ) => {
13
13
const [ reveal , setReveal ] = React . useState ( false ) ;
14
- const [ secretData , setSecretData ] = React . useState ( [ ] ) ;
15
14
16
15
const name = getName ( obj ) ;
17
16
const namespace = getNamespace ( obj ) ;
18
17
19
- React . useEffect ( ( ) => {
20
- const secret = k8sGet ( SecretModel , name , namespace ) ;
21
- const configMap = k8sGet ( ConfigMapModel , name , namespace ) ;
22
- Promise . all ( [ secret , configMap ] )
23
- . then ( ( data ) => {
24
- const bucketName = _ . get ( data [ 1 ] , 'data.BUCKET_NAME' ) ;
25
- const endpoint = `${ _ . get ( data [ 1 ] , 'data.BUCKET_HOST' ) } :${ _ . get (
26
- data [ 1 ] ,
27
- 'data.BUCKET_PORT' ,
28
- ) } `;
29
- const accessKey = Base64 . decode ( _ . get ( data [ 0 ] , 'data.AWS_ACCESS_KEY_ID' ) ) ;
30
- const secretKey = Base64 . decode ( _ . get ( data [ 0 ] , 'data.AWS_SECRET_ACCESS_KEY' ) ) ;
31
- const secretValues = [
18
+ const [ secretResource , cmResource ] = React . useMemo (
19
+ ( ) => [
20
+ {
21
+ kind : SecretModel . kind ,
22
+ namespace,
23
+ name,
24
+ isList : false ,
25
+ } ,
26
+ {
27
+ kind : ConfigMapModel . kind ,
28
+ namespace,
29
+ name,
30
+ isList : false ,
31
+ } ,
32
+ ] ,
33
+ [ name , namespace ] ,
34
+ ) ;
35
+
36
+ const [ secretData , secretLoaded , secretLoadError ] = useK8sWatchResource < SecretKind > (
37
+ secretResource ,
38
+ ) ;
39
+
40
+ const [ configData , configLoaded , configLoadError ] = useK8sWatchResource < ConfigMapKind > (
41
+ cmResource ,
42
+ ) ;
43
+ const isLoaded = secretLoaded && configLoaded ;
44
+ const error = secretLoadError || configLoadError ;
45
+ const bucketName = configData ?. data ?. BUCKET_NAME ;
46
+ const endpoint = `${ configData ?. data ?. BUCKET_HOST } :${ configData ?. data ?. BUCKET_PORT } ` ;
47
+ const accessKey = isLoaded && ! error ? Base64 . decode ( secretData ?. data ?. AWS_ACCESS_KEY_ID ) : '' ;
48
+ const secretKey =
49
+ isLoaded && ! error ? Base64 . decode ( secretData ?. data ?. AWS_SECRET_ACCESS_KEY ) : '' ;
50
+
51
+ const secretValues =
52
+ isLoaded && ! error
53
+ ? [
32
54
{ field : 'Endpoint' , value : endpoint } ,
33
55
{ field : 'Bucket Name' , value : bucketName } ,
34
56
{ field : 'Access Key' , value : accessKey } ,
35
57
{ field : 'Secret Key' , value : secretKey } ,
36
- ] ;
37
- setSecretData ( secretValues ) ;
38
- } )
39
- . catch ( ( ) => undefined ) ;
40
- } , [ name , namespace ] ) ;
58
+ ]
59
+ : [ ] ;
41
60
42
- const dl = secretData . length
43
- ? secretData . reduce ( ( acc , datum ) => {
61
+ const dl = secretValues . length
62
+ ? secretValues . reduce ( ( acc , datum ) => {
44
63
const { field, value } = datum ;
45
64
acc . push ( < dt key = { `${ field } -k` } > { field } </ dt > ) ;
46
65
acc . push (
@@ -55,7 +74,7 @@ export const GetSecret: React.FC<GetSecretProps> = ({ obj }) => {
55
74
return dl . length ? (
56
75
< div className = "co-m-pane__body" >
57
76
< SectionHeading text = "Object Bucket Claim Data" >
58
- { secretData . length ? (
77
+ { secretValues . length ? (
59
78
< Button
60
79
type = "button"
61
80
onClick = { ( ) => setReveal ( ! reveal ) }
0 commit comments