@@ -2,7 +2,7 @@ import hx from 'hbuilderx';
2
2
import ACTIONS , { dispatch } from '../utils/actions' ;
3
3
import toast from '../utils/toast' ;
4
4
import { getMrListParams } from '../utils/mr' ;
5
- import { IDepot , IMRItem , IReviewer } from '../typings/common' ;
5
+ import { IDepot , IMRItem , IReviewer , IRepoInfo } from '../typings/common' ;
6
6
7
7
interface IItem extends ITreeItem {
8
8
_create : boolean ;
@@ -14,6 +14,14 @@ interface IItem extends ITreeItem {
14
14
15
15
type IElement = IDepot & IMRItem & IItem ;
16
16
17
+ const LOGIN = [
18
+ {
19
+ name : '登录 CODING' ,
20
+ _login : true ,
21
+ _isDepot : true ,
22
+ } ,
23
+ ] ;
24
+
17
25
const getCommand = ( element : IElement ) => {
18
26
if ( element . children || element . _disabled ) return '' ;
19
27
if ( element . _login ) return 'codingPlugin.login' ;
@@ -31,63 +39,84 @@ class DepotMRTreeDataProvider extends hx.TreeDataProvider {
31
39
}
32
40
33
41
getRepoInfo ( ) {
34
- const { selectedDepot, depots } = this . context ;
35
- return getMrListParams ( selectedDepot , depots , this . user ) ;
42
+ const { selectedDepot } = this . context ;
43
+ return getMrListParams ( selectedDepot , this . user ) ;
36
44
}
37
45
38
- async getChildren ( element : IElement ) {
46
+ async getUser ( ) {
39
47
const { codingServer, token } = this . context ;
40
-
41
48
if ( ! this . user ) {
42
49
this . user = await codingServer . getUserInfo ( token ) ;
50
+ if ( this . user ) {
51
+ dispatch ( ACTIONS . SET_USER_INFO , {
52
+ context : this . context ,
53
+ value : this . user ,
54
+ } ) ;
55
+ }
43
56
}
57
+ return this . user ;
58
+ }
44
59
45
- if ( ! this . user ) {
46
- return Promise . resolve ( [
47
- {
48
- name : '登录 CODING' ,
49
- _login : true ,
50
- _isDepot : true ,
51
- } ,
52
- ] ) ;
60
+ async getData ( repoInfo ?: IRepoInfo ) {
61
+ const { codingServer } = this . context ;
62
+ const promises = [ codingServer . getDepotList ( this . user . team ) ] ;
63
+ if ( repoInfo ) {
64
+ promises . push ( codingServer . getMrList ( repoInfo ) ) ;
53
65
}
54
66
55
- dispatch ( ACTIONS . SET_USER_INFO , {
67
+ const [ depots , list ] = await Promise . all ( promises ) ;
68
+ let createdList : IMRItem [ ] = [ ] ;
69
+ let reviewerList : IMRItem [ ] = [ ] ;
70
+ let others = [ ] ;
71
+ if ( list ) {
72
+ createdList = list . filter ( ( item : IMRItem ) => item . author . id === this . user . id ) ;
73
+ reviewerList = list . filter ( ( item : IMRItem ) =>
74
+ item . reviewers . find ( ( r : IReviewer ) => r . reviewer . id === this . user . id ) ,
75
+ ) ;
76
+ others = list . filter ( ( item : IMRItem ) => {
77
+ const isNotInCreatedList = createdList . findIndex ( ( i ) => i . id === item . id ) === - 1 ;
78
+ const isNotInReviewerList = reviewerList . findIndex ( ( i ) => i . id === item . id ) === - 1 ;
79
+ return isNotInCreatedList && isNotInReviewerList ;
80
+ } ) ;
81
+ }
82
+
83
+ dispatch ( ACTIONS . SET_DEPOTS , {
56
84
context : this . context ,
57
- value : this . user ,
85
+ value : depots ,
58
86
} ) ;
59
87
88
+ return {
89
+ depots,
90
+ MRList : [ createdList , reviewerList , others ] ,
91
+ } ;
92
+ }
93
+
94
+ async getChildren ( element : IElement ) {
95
+ if ( ! this . user ) {
96
+ try {
97
+ this . user = await this . getUser ( ) ;
98
+ } catch ( err ) {
99
+ if ( err . code === 1000 ) {
100
+ return Promise . resolve ( LOGIN ) ;
101
+ }
102
+ }
103
+ }
104
+
105
+ if ( ! this . user ) {
106
+ return Promise . resolve ( LOGIN ) ;
107
+ }
108
+
60
109
if ( element ) {
61
110
return Promise . resolve ( element . children ) ;
62
111
}
63
112
64
- const repoInfo = this . getRepoInfo ( ) ;
65
- const promises = [ this . context . codingServer . getDepotList ( ) ] ;
66
- if ( repoInfo ) {
67
- promises . push ( this . context . codingServer . getMrList ( repoInfo ) ) ;
68
- }
113
+ const repoInfo = await this . getRepoInfo ( ) ;
69
114
70
115
try {
71
- const [ depots , list ] = await Promise . all ( promises ) ;
72
- let createdList : IMRItem [ ] = [ ] ;
73
- let reviewerList : IMRItem [ ] = [ ] ;
74
- let others = [ ] ;
75
- if ( list ) {
76
- createdList = list . filter ( ( item : IMRItem ) => item . author . id === this . user . id ) ;
77
- reviewerList = list . filter ( ( item : IMRItem ) =>
78
- item . reviewers . find ( ( r : IReviewer ) => r . reviewer . id === this . user . id ) ,
79
- ) ;
80
- others = list . filter ( ( item : IMRItem ) => {
81
- const isNotInCreatedList = createdList . findIndex ( ( i ) => i . id === item . id ) === - 1 ;
82
- const isNotInReviewerList = reviewerList . findIndex ( ( i ) => i . id === item . id ) === - 1 ;
83
- return isNotInCreatedList && isNotInReviewerList ;
84
- } ) ;
85
- }
86
-
87
- dispatch ( ACTIONS . SET_DEPOTS , {
88
- context : this . context ,
89
- value : depots ,
90
- } ) ;
116
+ const {
117
+ depots,
118
+ MRList : [ createdList , reviewerList , others ] ,
119
+ } = await this . getData ( repoInfo ) ;
91
120
92
121
return Promise . resolve ( [
93
122
{
@@ -101,7 +130,7 @@ class DepotMRTreeDataProvider extends hx.TreeDataProvider {
101
130
_isDepot : true ,
102
131
} ,
103
132
{
104
- title : `合并请求列表(当前仓库 ${ this . context . selectedDepot ?. name || '-' } )` ,
133
+ title : `合并请求列表(当前仓库: ${ repoInfo ?. repo || '-' } )` ,
105
134
children : [
106
135
{
107
136
title : `我创建的 (${ createdList ?. length } )` ,
@@ -118,8 +147,12 @@ class DepotMRTreeDataProvider extends hx.TreeDataProvider {
118
147
] ,
119
148
} ,
120
149
] ) ;
121
- } catch {
122
- toast . error ( '获取数据失败' ) ;
150
+ } catch ( err ) {
151
+ const { code } = err ;
152
+ if ( code === 1100 || code === 1400 ) {
153
+ toast . error ( `请登录 ${ repoInfo ?. repo } 代码仓库对应的服务` ) ;
154
+ return Promise . resolve ( LOGIN ) ;
155
+ }
123
156
}
124
157
}
125
158
0 commit comments