@@ -2,6 +2,7 @@ import React, { Component, Fragment } from 'react';
2
2
import PropTypes from 'prop-types' ;
3
3
import { observer , inject } from 'mobx-react' ;
4
4
import { Link } from 'react-router-dom' ;
5
+ import classnames from 'classnames' ;
5
6
import _ , { capitalize } from 'lodash' ;
6
7
import { withTranslation } from 'react-i18next' ;
7
8
@@ -19,6 +20,8 @@ import { CLUSTER_TYPE, runtimeTabs } from 'config/runtimes';
19
20
import columns from './columns' ;
20
21
import styles from './index.scss' ;
21
22
23
+ const appTabs = [ { name : 'Agent' , value : 1 } ] ;
24
+
22
25
@withTranslation ( )
23
26
@inject ( ( { rootStore } ) => ( {
24
27
rootStore,
@@ -33,6 +36,7 @@ import styles from './index.scss';
33
36
@observer
34
37
export default class Clusters extends Component {
35
38
static propTypes = {
39
+ appId : PropTypes . string ,
36
40
fetchData : PropTypes . func ,
37
41
isK8S : PropTypes . bool ,
38
42
runtimeId : PropTypes . string ,
@@ -41,6 +45,7 @@ export default class Clusters extends Component {
41
45
42
46
static defaultProps = {
43
47
runtimeId : '' ,
48
+ appId : '' ,
44
49
isK8S : false ,
45
50
title : ''
46
51
} ;
@@ -52,6 +57,7 @@ export default class Clusters extends Component {
52
57
runtimeStore,
53
58
user,
54
59
runtimeId,
60
+ appId,
55
61
fetchData
56
62
} = this . props ;
57
63
@@ -62,9 +68,10 @@ export default class Clusters extends Component {
62
68
63
69
Object . assign ( clusterStore , {
64
70
runtimeId,
71
+ appId,
65
72
attachUsers : ! user . isUserPortal ,
66
73
attachVersions : cluster_type === CLUSTER_TYPE . instance ,
67
- attachApps : ! user . isDevPortal || runtimeId ,
74
+ attachApps : ( ! user . isDevPortal || runtimeId ) && ! appId ,
68
75
with_detail : true ,
69
76
cluster_type : CLUSTER_TYPE . instance , // default fetch instance
70
77
userId : ( user . isUserPortal || user . isAdminPortal ) && user . user_id
@@ -219,11 +226,12 @@ export default class Clusters extends Component {
219
226
} = this . props ;
220
227
const { apps } = appStore ;
221
228
const { versions } = appVersionStore ;
229
+ const isAppDetail = this . props . appId ;
222
230
223
231
const app = _ . find ( apps , { app_id : appId } ) || { } ;
224
232
const version = _ . find ( versions , { version_id : versionId } ) || { } ;
225
233
226
- if ( user . isUserPortal || user . isAdmin || runtimeId ) {
234
+ if ( ( user . isUserPortal || user . isAdmin || runtimeId ) && ! isAppDetail ) {
227
235
return (
228
236
< div className = { styles . appTdShow } >
229
237
< label className = { styles . appImage } >
@@ -269,7 +277,7 @@ export default class Clusters extends Component {
269
277
270
278
renderToolbar ( ) {
271
279
const {
272
- clusterStore, user, match, t
280
+ clusterStore, user, appId , match, t
273
281
} = this . props ;
274
282
const {
275
283
searchWord,
@@ -280,7 +288,8 @@ export default class Clusters extends Component {
280
288
onlyView,
281
289
isAgent
282
290
} = clusterStore ;
283
- const { appId } = match . params ;
291
+ const hasDeployButton = ( user . isDevPortal && ! onlyView ) || appId ;
292
+ const app_id = appId || _ . get ( match , 'params.appId' , '' ) ;
284
293
285
294
if ( ! ( onlyView || isAgent ) && clusterIds . length ) {
286
295
return (
@@ -309,9 +318,10 @@ export default class Clusters extends Component {
309
318
onRefresh = { onRefresh }
310
319
noRefreshBtn
311
320
>
312
- { user . isDevPortal && ! onlyView && (
313
- < Link to = { toRoute ( routes . portal . deploy , { appId } ) } >
321
+ { hasDeployButton && (
322
+ < Link to = { toRoute ( routes . portal . deploy , { appId : app_id } ) } >
314
323
< Button type = "primary" className = "pull-right" >
324
+ < Icon name = "add" type = "white" className = { styles . icon } />
315
325
{ t ( 'Deploy' ) }
316
326
</ Button >
317
327
</ Link >
@@ -322,7 +332,13 @@ export default class Clusters extends Component {
322
332
323
333
renderMain ( ) {
324
334
const {
325
- clusterStore, userStore, user, runtimeId, isK8S, t
335
+ clusterStore,
336
+ userStore,
337
+ user,
338
+ runtimeId,
339
+ appId,
340
+ isK8S,
341
+ t
326
342
} = this . props ;
327
343
const { isLoading, onlyView, isAgent } = clusterStore ;
328
344
@@ -333,8 +349,8 @@ export default class Clusters extends Component {
333
349
< Fragment >
334
350
{ ! isK8S && (
335
351
< Tabs
336
- tabs = { runtimeTabs }
337
- className = { styles . tabs }
352
+ tabs = { appId ? appTabs : runtimeTabs }
353
+ className = { classnames ( styles . tabs , { [ styles . appTabs ] : appId } ) }
338
354
changeTab = { this . handleChangeTab }
339
355
noFirstChange
340
356
isCardTab
@@ -377,6 +393,7 @@ export default class Clusters extends Component {
377
393
renderAppTdShow : this . renderAppTdShow ,
378
394
renderHandleMenu : this . renderHandleMenu ,
379
395
isRuntimeDetail : Boolean ( runtimeId ) ,
396
+ isAppDetail : Boolean ( appId ) ,
380
397
users,
381
398
user,
382
399
runtimes,
@@ -393,10 +410,10 @@ export default class Clusters extends Component {
393
410
394
411
render ( ) {
395
412
const {
396
- user, title, runtimeId, t
413
+ user, title, runtimeId, appId , t
397
414
} = this . props ;
398
415
399
- if ( user . isUserPortal || runtimeId ) {
416
+ if ( user . isUserPortal || runtimeId || appId ) {
400
417
return this . renderMain ( ) ;
401
418
}
402
419
0 commit comments