1
1
import React , { Component } from 'react' ;
2
2
import { apiGet } from '../api/api.js' ;
3
- import { Icon , Table } from 'semantic-ui-react' ;
3
+ import { Icon , Popup , Table } from 'semantic-ui-react' ;
4
4
import Loading from '../util/Loading.js' ;
5
+ import CommandInstruction from '../util/CommandInstruction.js' ;
5
6
6
7
const HeaderView = ( ) => (
7
8
< Table . Header >
8
9
< Table . Row >
9
10
< Table . HeaderCell > State</ Table . HeaderCell >
10
11
< Table . HeaderCell > Name</ Table . HeaderCell >
11
12
< Table . HeaderCell > Mode</ Table . HeaderCell >
12
- < Table . HeaderCell > Pods</ Table . HeaderCell >
13
+ < Table . HeaderCell > Version</ Table . HeaderCell >
14
+ < Table . HeaderCell > < Popup trigger = { < span > Pods</ span > } > Ready / Total</ Popup > </ Table . HeaderCell >
15
+ < Table . HeaderCell > < Popup trigger = { < span > Volumes</ span > } > Bound / Total</ Popup > </ Table . HeaderCell >
16
+ < Table . HeaderCell > StorageClass</ Table . HeaderCell >
17
+ < Table . HeaderCell > </ Table . HeaderCell >
13
18
</ Table . Row >
14
19
</ Table . Header >
15
20
) ;
16
21
17
- const RowView = ( { name, mode, ready_pod_count, pod_count} ) => (
22
+ const DatabaseLinkView = ( { name, url} ) => (
23
+ < a href = { url } target = { name } >
24
+ < Popup trigger = { < Icon link name = "database" /> } >
25
+ Go the the web-UI of the database.
26
+ </ Popup >
27
+ </ a >
28
+ ) ;
29
+
30
+ const NoDatabaseLinkView = ( ) => (
31
+ < Popup trigger = { < Icon link name = "database" /> } >
32
+ This deployment is not reachable outside the Kubernetes cluster.
33
+ </ Popup >
34
+ ) ;
35
+
36
+ const RowView = ( { name, mode, version, license, ready_pod_count, pod_count, ready_volume_count, volume_count, storage_classes, database_url, delete_command} ) => (
18
37
< Table . Row >
19
38
< Table . Cell > < Icon name = "bell" color = "red" /> </ Table . Cell >
20
39
< Table . Cell > { name } </ Table . Cell >
21
40
< Table . Cell > { mode } </ Table . Cell >
41
+ < Table . Cell > { version } { ( license ) ? `(${ license } )` : "" } </ Table . Cell >
22
42
< Table . Cell > { ready_pod_count } / { pod_count } </ Table . Cell >
43
+ < Table . Cell > { ready_volume_count } / { volume_count } </ Table . Cell >
44
+ < Table . Cell > { storage_classes . map ( ( item ) => ( item === "" ) ? "<default>" : item ) } </ Table . Cell >
45
+ < Table . Cell >
46
+ { database_url ? < DatabaseLinkView name = { name } url = { database_url } /> : < NoDatabaseLinkView /> }
47
+ < CommandInstruction
48
+ trigger = { < Icon floated = "right" name = "trash alternate" /> }
49
+ command = { delete_command }
50
+ title = "Delete deployment"
51
+ description = "To delete this deployment, run:"
52
+ />
53
+ </ Table . Cell >
23
54
</ Table . Row >
24
55
) ;
25
56
@@ -32,9 +63,17 @@ const ListView = ({items}) => (
32
63
< RowView
33
64
key = { item . name }
34
65
name = { item . name }
66
+ namespace = { item . namespace }
35
67
mode = { item . mode }
68
+ version = { item . database_version }
69
+ license = { item . database_license }
36
70
ready_pod_count = { item . ready_pod_count }
37
71
pod_count = { item . pod_count }
72
+ ready_volume_count = { item . ready_volume_count }
73
+ volume_count = { item . volume_count }
74
+ storage_classes = { item . storage_classes }
75
+ database_url = { item . database_url }
76
+ delete_command = { createDeleteCommand ( item . name , item . namespace ) }
38
77
/> ) : < p > No items</ p >
39
78
}
40
79
</ Table . Body >
@@ -43,6 +82,10 @@ const ListView = ({items}) => (
43
82
44
83
const EmptyView = ( ) => ( < div > No deployments</ div > ) ;
45
84
85
+ function createDeleteCommand ( name , namespace ) {
86
+ return `kubectl delete ArangoDeployment -n ${ namespace } ${ name } ` ;
87
+ }
88
+
46
89
class DeploymentList extends Component {
47
90
state = { } ;
48
91
0 commit comments