@backstage-community/plugin-azure-devops 0.4.4 → 0.4.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/alpha/package.json +2 -2
  3. package/dist/alpha/plugin.esm.js +69 -0
  4. package/dist/alpha/plugin.esm.js.map +1 -0
  5. package/dist/alpha.esm.js +1 -68
  6. package/dist/alpha.esm.js.map +1 -1
  7. package/dist/api/AzureDevOpsApi.esm.js +8 -0
  8. package/dist/api/AzureDevOpsApi.esm.js.map +1 -0
  9. package/dist/{esm/AzureDevOpsApi-GBxs-uQ7.esm.js → api/AzureDevOpsClient.esm.js} +11 -36
  10. package/dist/api/AzureDevOpsClient.esm.js.map +1 -0
  11. package/dist/components/AzureGitTagsIcon/AzureGitTagsIcon.esm.js +7 -0
  12. package/dist/components/AzureGitTagsIcon/AzureGitTagsIcon.esm.js.map +1 -0
  13. package/dist/components/AzurePipelinesIcon/AzurePipelinesIcon.esm.js +27 -0
  14. package/dist/components/AzurePipelinesIcon/AzurePipelinesIcon.esm.js.map +1 -0
  15. package/dist/{esm/AzurePullRequestsIcon-DOAkj-X3.esm.js → components/AzurePullRequestsIcon/AzurePullRequestsIcon.esm.js} +2 -2
  16. package/dist/components/AzurePullRequestsIcon/AzurePullRequestsIcon.esm.js.map +1 -0
  17. package/dist/{esm/index-Bwu2-Sgs.esm.js → components/BuildTable/BuildTable.esm.js} +7 -107
  18. package/dist/components/BuildTable/BuildTable.esm.js.map +1 -0
  19. package/dist/components/EntityPageAzureGitTags/EntityPageAzureGitTags.esm.js +22 -0
  20. package/dist/components/EntityPageAzureGitTags/EntityPageAzureGitTags.esm.js.map +1 -0
  21. package/dist/components/EntityPageAzureGitTags/index.esm.js +2 -0
  22. package/dist/components/EntityPageAzureGitTags/index.esm.js.map +1 -0
  23. package/dist/components/EntityPageAzurePipelines/EntityPageAzurePipelines.esm.js +32 -0
  24. package/dist/components/EntityPageAzurePipelines/EntityPageAzurePipelines.esm.js.map +1 -0
  25. package/dist/components/EntityPageAzurePipelines/index.esm.js +2 -0
  26. package/dist/components/EntityPageAzurePipelines/index.esm.js.map +1 -0
  27. package/dist/components/EntityPageAzurePullRequests/EntityPageAzurePullRequests.esm.js +22 -0
  28. package/dist/components/EntityPageAzurePullRequests/EntityPageAzurePullRequests.esm.js.map +1 -0
  29. package/dist/components/EntityPageAzurePullRequests/index.esm.js +2 -0
  30. package/dist/components/EntityPageAzurePullRequests/index.esm.js.map +1 -0
  31. package/dist/components/GitTagTable/GitTagTable.esm.js +53 -0
  32. package/dist/components/GitTagTable/GitTagTable.esm.js.map +1 -0
  33. package/dist/components/PullRequestStatusButtonGroup/PullRequestStatusButtonGroup.esm.js +41 -0
  34. package/dist/components/PullRequestStatusButtonGroup/PullRequestStatusButtonGroup.esm.js.map +1 -0
  35. package/dist/components/PullRequestTable/PullRequestTable.esm.js +90 -0
  36. package/dist/components/PullRequestTable/PullRequestTable.esm.js.map +1 -0
  37. package/dist/components/PullRequestsPage/PullRequestsPage.esm.js +79 -0
  38. package/dist/components/PullRequestsPage/PullRequestsPage.esm.js.map +1 -0
  39. package/dist/components/PullRequestsPage/index.esm.js +6 -0
  40. package/dist/components/PullRequestsPage/index.esm.js.map +1 -0
  41. package/dist/components/PullRequestsPage/lib/AutoCompleteIcon/AutoCompleteIcon.esm.js +16 -0
  42. package/dist/components/PullRequestsPage/lib/AutoCompleteIcon/AutoCompleteIcon.esm.js.map +1 -0
  43. package/dist/components/PullRequestsPage/lib/PullRequestCard/PullRequestCard.esm.js +85 -0
  44. package/dist/components/PullRequestsPage/lib/PullRequestCard/PullRequestCard.esm.js.map +1 -0
  45. package/dist/components/PullRequestsPage/lib/PullRequestCard/PullRequestCardPolicies.esm.js +10 -0
  46. package/dist/components/PullRequestsPage/lib/PullRequestCard/PullRequestCardPolicies.esm.js.map +1 -0
  47. package/dist/components/PullRequestsPage/lib/PullRequestCard/PullRequestCardPolicy.esm.js +66 -0
  48. package/dist/components/PullRequestsPage/lib/PullRequestCard/PullRequestCardPolicy.esm.js.map +1 -0
  49. package/dist/components/PullRequestsPage/lib/PullRequestCard/PullRequestCardReviewer.esm.js +33 -0
  50. package/dist/components/PullRequestsPage/lib/PullRequestCard/PullRequestCardReviewer.esm.js.map +1 -0
  51. package/dist/components/PullRequestsPage/lib/PullRequestCard/PullRequestCardReviewers.esm.js +17 -0
  52. package/dist/components/PullRequestsPage/lib/PullRequestCard/PullRequestCardReviewers.esm.js.map +1 -0
  53. package/dist/components/PullRequestsPage/lib/PullRequestGrid/PullRequestGrid.esm.js +29 -0
  54. package/dist/components/PullRequestsPage/lib/PullRequestGrid/PullRequestGrid.esm.js.map +1 -0
  55. package/dist/components/PullRequestsPage/lib/PullRequestGridColumn/PullRequestGridColumn.esm.js +50 -0
  56. package/dist/components/PullRequestsPage/lib/PullRequestGridColumn/PullRequestGridColumn.esm.js.map +1 -0
  57. package/dist/components/PullRequestsPage/lib/filters/allFilter.esm.js +6 -0
  58. package/dist/components/PullRequestsPage/lib/filters/allFilter.esm.js.map +1 -0
  59. package/dist/components/PullRequestsPage/lib/filters/assignedToTeamFilter.esm.js +17 -0
  60. package/dist/components/PullRequestsPage/lib/filters/assignedToTeamFilter.esm.js.map +1 -0
  61. package/dist/components/PullRequestsPage/lib/filters/assignedToTeamsFilter.esm.js +20 -0
  62. package/dist/components/PullRequestsPage/lib/filters/assignedToTeamsFilter.esm.js.map +1 -0
  63. package/dist/components/PullRequestsPage/lib/filters/assignedToUserFilter.esm.js +20 -0
  64. package/dist/components/PullRequestsPage/lib/filters/assignedToUserFilter.esm.js.map +1 -0
  65. package/dist/components/PullRequestsPage/lib/filters/createFilter.esm.js +45 -0
  66. package/dist/components/PullRequestsPage/lib/filters/createFilter.esm.js.map +1 -0
  67. package/dist/components/PullRequestsPage/lib/filters/createdByTeamFilter.esm.js +17 -0
  68. package/dist/components/PullRequestsPage/lib/filters/createdByTeamFilter.esm.js.map +1 -0
  69. package/dist/components/PullRequestsPage/lib/filters/createdByTeamsFilter.esm.js +32 -0
  70. package/dist/components/PullRequestsPage/lib/filters/createdByTeamsFilter.esm.js.map +1 -0
  71. package/dist/components/PullRequestsPage/lib/filters/createdByUserFilter.esm.js +18 -0
  72. package/dist/components/PullRequestsPage/lib/filters/createdByUserFilter.esm.js.map +1 -0
  73. package/dist/components/PullRequestsPage/lib/filters/types.esm.js +17 -0
  74. package/dist/components/PullRequestsPage/lib/filters/types.esm.js.map +1 -0
  75. package/dist/components/PullRequestsPage/lib/hooks/useFilterProcessor.esm.js +37 -0
  76. package/dist/components/PullRequestsPage/lib/hooks/useFilterProcessor.esm.js.map +1 -0
  77. package/dist/components/PullRequestsPage/lib/utils.esm.js +47 -0
  78. package/dist/components/PullRequestsPage/lib/utils.esm.js.map +1 -0
  79. package/dist/{esm/index-BJ_pWnMh.esm.js → components/ReadmeCard/ReadmeCard.esm.js} +8 -31
  80. package/dist/components/ReadmeCard/ReadmeCard.esm.js.map +1 -0
  81. package/dist/components/ReadmeCard/index.esm.js +2 -0
  82. package/dist/components/ReadmeCard/index.esm.js.map +1 -0
  83. package/dist/hooks/useBuildRuns.esm.js +37 -0
  84. package/dist/hooks/useBuildRuns.esm.js.map +1 -0
  85. package/dist/hooks/useDashboardPullRequests.esm.js +43 -0
  86. package/dist/hooks/useDashboardPullRequests.esm.js.map +1 -0
  87. package/dist/hooks/useGitTags.esm.js +30 -0
  88. package/dist/hooks/useGitTags.esm.js.map +1 -0
  89. package/dist/hooks/usePullRequests.esm.js +41 -0
  90. package/dist/hooks/usePullRequests.esm.js.map +1 -0
  91. package/dist/hooks/useReadme.esm.js +32 -0
  92. package/dist/hooks/useReadme.esm.js.map +1 -0
  93. package/dist/hooks/useUserEmail.esm.js +11 -0
  94. package/dist/hooks/useUserEmail.esm.js.map +1 -0
  95. package/dist/hooks/useUserTeamIds.esm.js +23 -0
  96. package/dist/hooks/useUserTeamIds.esm.js.map +1 -0
  97. package/dist/index.esm.js +7 -92
  98. package/dist/index.esm.js.map +1 -1
  99. package/dist/plugin.esm.js +68 -0
  100. package/dist/plugin.esm.js.map +1 -0
  101. package/dist/routes.esm.js +17 -0
  102. package/dist/routes.esm.js.map +1 -0
  103. package/dist/utils/arrayHas.esm.js +15 -0
  104. package/dist/utils/arrayHas.esm.js.map +1 -0
  105. package/dist/utils/equalsIgnoreCase.esm.js +6 -0
  106. package/dist/utils/equalsIgnoreCase.esm.js.map +1 -0
  107. package/dist/{esm/getAnnotationValuesFromEntity-G8YVs-3R.esm.js → utils/getAnnotationValuesFromEntity.esm.js} +7 -8
  108. package/dist/utils/getAnnotationValuesFromEntity.esm.js.map +1 -0
  109. package/dist/utils/getDurationFromDates.esm.js +34 -0
  110. package/dist/utils/getDurationFromDates.esm.js.map +1 -0
  111. package/package.json +19 -13
  112. package/dist/esm/AzureDevOpsApi-GBxs-uQ7.esm.js.map +0 -1
  113. package/dist/esm/AzurePullRequestsIcon-DOAkj-X3.esm.js.map +0 -1
  114. package/dist/esm/PullRequestsPage-CkhRQsgx.esm.js +0 -610
  115. package/dist/esm/PullRequestsPage-CkhRQsgx.esm.js.map +0 -1
  116. package/dist/esm/getAnnotationValuesFromEntity-G8YVs-3R.esm.js.map +0 -1
  117. package/dist/esm/index-1Rl7C23d.esm.js +0 -102
  118. package/dist/esm/index-1Rl7C23d.esm.js.map +0 -1
  119. package/dist/esm/index-BJ_pWnMh.esm.js.map +0 -1
  120. package/dist/esm/index-Bo-6jkQA.esm.js +0 -178
  121. package/dist/esm/index-Bo-6jkQA.esm.js.map +0 -1
  122. package/dist/esm/index-Bwu2-Sgs.esm.js.map +0 -1
  123. package/dist/esm/index-W1pvc5vi.esm.js +0 -25
  124. package/dist/esm/index-W1pvc5vi.esm.js.map +0 -1
@@ -1,610 +0,0 @@
1
- import { Avatar, Link, Page, Header, Content, Progress, ResponseErrorPanel } from '@backstage/core-components';
2
- import React, { useCallback, useState } from 'react';
3
- import { PullRequestVoteStatus, PolicyType, PolicyEvaluationStatus, azureDevOpsPullRequestDashboardReadPermission } from '@backstage-community/plugin-azure-devops-common';
4
- import { DateTime } from 'luxon';
5
- import 'humanize-duration';
6
- import Paper from '@material-ui/core/Paper';
7
- import Typography from '@material-ui/core/Typography';
8
- import { makeStyles, withStyles, styled } from '@material-ui/core/styles';
9
- import Card from '@material-ui/core/Card';
10
- import CardContent from '@material-ui/core/CardContent';
11
- import CardHeader from '@material-ui/core/CardHeader';
12
- import DoneAllIcon from '@material-ui/icons/DoneAll';
13
- import CancelIcon from '@material-ui/icons/Cancel';
14
- import GroupWorkIcon from '@material-ui/icons/GroupWork';
15
- import WatchLaterIcon from '@material-ui/icons/WatchLater';
16
- import { a as azureDevOpsApiRef } from './AzureDevOpsApi-GBxs-uQ7.esm.js';
17
- import '@backstage/errors';
18
- import { useApi, errorApiRef, identityApiRef } from '@backstage/core-plugin-api';
19
- import useAsync from 'react-use/esm/useAsync';
20
- import useAsyncRetry from 'react-use/esm/useAsyncRetry';
21
- import useInterval from 'react-use/esm/useInterval';
22
- import '@backstage/catalog-model';
23
- import { RequirePermission } from '@backstage/plugin-permission-react';
24
-
25
- var FilterType = /* @__PURE__ */ ((FilterType2) => {
26
- FilterType2["All"] = "All";
27
- FilterType2["AssignedToUser"] = "AssignedToUser";
28
- FilterType2["AssignedToCurrentUser"] = "AssignedToCurrentUser";
29
- FilterType2["AssignedToTeam"] = "AssignedToTeam";
30
- FilterType2["AssignedToTeams"] = "AssignedToTeams";
31
- FilterType2["AssignedToCurrentUsersTeams"] = "AssignedToCurrentUsersTeams";
32
- FilterType2["CreatedByUser"] = "CreatedByUser";
33
- FilterType2["CreatedByCurrentUser"] = "CreatedByCurrentUser";
34
- FilterType2["CreatedByTeam"] = "CreatedByTeam";
35
- FilterType2["CreatedByTeams"] = "CreatedByTeams";
36
- FilterType2["CreatedByCurrentUsersTeams"] = "CreatedByCurrentUsersTeams";
37
- return FilterType2;
38
- })(FilterType || {});
39
-
40
- function createAllFilter() {
41
- return (_pullRequest) => true;
42
- }
43
-
44
- function arrayHas(arr, value) {
45
- return new Set(arr).has(value);
46
- }
47
- function stringArrayHas(arr, value, ignoreCase = false) {
48
- if (ignoreCase) {
49
- return arrayHas(
50
- arr.map((a) => a == null ? void 0 : a.toLocaleLowerCase("en-US")),
51
- value == null ? void 0 : value.toLocaleLowerCase("en-US")
52
- );
53
- }
54
- return arrayHas(arr, value);
55
- }
56
-
57
- function equalsIgnoreCase(str1, str2) {
58
- return str1.toLocaleLowerCase("en-US") === str2.toLocaleLowerCase("en-US");
59
- }
60
-
61
- function createAssignedToTeamFilter(filter) {
62
- return (pullRequest) => {
63
- var _a;
64
- const reviewerIds = (_a = pullRequest.reviewers) == null ? void 0 : _a.map((reviewer) => reviewer.id);
65
- if (!reviewerIds) {
66
- return false;
67
- }
68
- return stringArrayHas(reviewerIds, filter.teamId, true);
69
- };
70
- }
71
-
72
- function createAssignedToTeamsFilter(filter) {
73
- const teamIds = filter.teamIds;
74
- return (pullRequest) => {
75
- if (!teamIds) {
76
- return false;
77
- }
78
- return teamIds.some((teamId) => {
79
- return createAssignedToTeamFilter({
80
- type: FilterType.AssignedToTeam,
81
- teamId
82
- })(pullRequest);
83
- });
84
- };
85
- }
86
-
87
- function createAssignedToUserFilter(filter) {
88
- const email = filter.email;
89
- return (pullRequest) => {
90
- var _a;
91
- const uniqueNames = (_a = pullRequest.reviewers) == null ? void 0 : _a.map(
92
- (reviewer) => reviewer.uniqueName
93
- );
94
- if (!email || !uniqueNames) {
95
- return false;
96
- }
97
- return stringArrayHas(uniqueNames, email, true);
98
- };
99
- }
100
-
101
- function createCreatedByTeamFilter(filter) {
102
- return (pullRequest) => {
103
- var _a, _b;
104
- const [createdByTeams, team] = "teamId" in filter ? [(_a = pullRequest.createdBy) == null ? void 0 : _a.teamIds, filter.teamId] : [(_b = pullRequest.createdBy) == null ? void 0 : _b.teamNames, filter.teamName];
105
- if (!createdByTeams) {
106
- return false;
107
- }
108
- return stringArrayHas(createdByTeams, team, true);
109
- };
110
- }
111
-
112
- function createCreatedByTeamsFilter(filter) {
113
- return (pullRequest) => {
114
- if ("teamNames" in filter) {
115
- const teamNames = filter.teamNames;
116
- if (!teamNames) {
117
- return false;
118
- }
119
- return teamNames.some((teamName) => {
120
- return createCreatedByTeamFilter({
121
- type: FilterType.CreatedByTeam,
122
- teamName
123
- })(pullRequest);
124
- });
125
- }
126
- const teamIds = filter.teamIds;
127
- if (!teamIds) {
128
- return false;
129
- }
130
- return teamIds.some((teamId) => {
131
- return createCreatedByTeamFilter({
132
- type: FilterType.CreatedByTeam,
133
- teamId
134
- })(pullRequest);
135
- });
136
- };
137
- }
138
-
139
- function createCreatedByUserFilter(filter) {
140
- const email = filter.email;
141
- return (pullRequest) => {
142
- var _a;
143
- const uniqueName = (_a = pullRequest.createdBy) == null ? void 0 : _a.uniqueName;
144
- if (!email || !uniqueName) {
145
- return false;
146
- }
147
- return equalsIgnoreCase(email, uniqueName);
148
- };
149
- }
150
-
151
- function createFilter(filters) {
152
- const mapFilter = (filter) => {
153
- switch (filter.type) {
154
- case FilterType.AssignedToUser:
155
- case FilterType.AssignedToCurrentUser:
156
- return createAssignedToUserFilter(filter);
157
- case FilterType.CreatedByUser:
158
- case FilterType.CreatedByCurrentUser:
159
- return createCreatedByUserFilter(filter);
160
- case FilterType.AssignedToTeam:
161
- return createAssignedToTeamFilter(filter);
162
- case FilterType.CreatedByTeam:
163
- return createCreatedByTeamFilter(filter);
164
- case FilterType.AssignedToTeams:
165
- case FilterType.AssignedToCurrentUsersTeams:
166
- return createAssignedToTeamsFilter(filter);
167
- case FilterType.CreatedByTeams:
168
- case FilterType.CreatedByCurrentUsersTeams:
169
- return createCreatedByTeamsFilter(filter);
170
- case FilterType.All:
171
- return createAllFilter();
172
- default:
173
- return (_) => false;
174
- }
175
- };
176
- if (Array.isArray(filters)) {
177
- if (filters.length === 1) {
178
- return mapFilter(filters[0]);
179
- }
180
- return (pullRequest) => filters.every((filter) => mapFilter(filter)(pullRequest));
181
- }
182
- return mapFilter(filters);
183
- }
184
-
185
- function reviewerFilter(reviewer) {
186
- return reviewer.voteStatus === PullRequestVoteStatus.NoVote ? !!reviewer.isRequired : !reviewer.isContainer;
187
- }
188
- function arrayExtract(arr, filter) {
189
- const extractedValues = [];
190
- for (let i = 0; i - extractedValues.length < arr.length; i++) {
191
- const offsetIndex = i - extractedValues.length;
192
- const value = arr[offsetIndex];
193
- if (filter(value)) {
194
- arr.splice(offsetIndex, 1);
195
- extractedValues.push(value);
196
- }
197
- }
198
- return extractedValues;
199
- }
200
- function getPullRequestGroups(pullRequests, configs) {
201
- if (!pullRequests) {
202
- return void 0;
203
- }
204
- const remainingPullRequests = [...pullRequests];
205
- const pullRequestGroups = [];
206
- configs.forEach(({ title, filter: configFilter, simplified }) => {
207
- const groupPullRequests = arrayExtract(remainingPullRequests, configFilter);
208
- pullRequestGroups.push({
209
- title,
210
- pullRequests: groupPullRequests,
211
- simplified
212
- });
213
- });
214
- return pullRequestGroups;
215
- }
216
- function getPullRequestGroupConfigs(columnConfigs, filterProcessor) {
217
- return columnConfigs.map((columnConfig) => {
218
- const filters = filterProcessor(columnConfig.filters);
219
- return {
220
- title: columnConfig.title,
221
- filter: createFilter(filters),
222
- simplified: columnConfig.simplified
223
- };
224
- });
225
- }
226
-
227
- const useStyles$2 = makeStyles((theme) => ({
228
- root: (props) => ({
229
- color: props.hasAutoComplete ? theme.palette.success.main : theme.palette.grey[400]
230
- })
231
- }));
232
- const AutoCompleteIcon = (props) => {
233
- const classes = useStyles$2(props);
234
- return /* @__PURE__ */ React.createElement(DoneAllIcon, { className: classes.root });
235
- };
236
-
237
- const PolicyRequiredIcon = withStyles(
238
- (theme) => ({
239
- root: {
240
- color: theme.palette.info.main
241
- }
242
- }),
243
- { name: "PolicyRequiredIcon" }
244
- )(WatchLaterIcon);
245
- const PolicyIssueIcon = withStyles(
246
- (theme) => ({
247
- root: {
248
- color: theme.palette.error.main
249
- }
250
- }),
251
- { name: "PolicyIssueIcon" }
252
- )(CancelIcon);
253
- const PolicyInProgressIcon = withStyles(
254
- (theme) => ({
255
- root: {
256
- color: theme.palette.info.main
257
- }
258
- }),
259
- { name: "PolicyInProgressIcon" }
260
- )(GroupWorkIcon);
261
- function getPolicyIcon(policy) {
262
- switch (policy.type) {
263
- case PolicyType.Build:
264
- switch (policy.status) {
265
- case PolicyEvaluationStatus.Running:
266
- return /* @__PURE__ */ React.createElement(PolicyInProgressIcon, null);
267
- case PolicyEvaluationStatus.Rejected:
268
- return /* @__PURE__ */ React.createElement(PolicyIssueIcon, null);
269
- case PolicyEvaluationStatus.Queued:
270
- return /* @__PURE__ */ React.createElement(PolicyRequiredIcon, null);
271
- default:
272
- return null;
273
- }
274
- case PolicyType.MinimumReviewers:
275
- case PolicyType.RequiredReviewers:
276
- return /* @__PURE__ */ React.createElement(PolicyRequiredIcon, null);
277
- case PolicyType.Status:
278
- case PolicyType.Comments:
279
- return /* @__PURE__ */ React.createElement(PolicyIssueIcon, null);
280
- default:
281
- return null;
282
- }
283
- }
284
- const PullRequestCardPolicyContainer = styled("div")({
285
- display: "flex",
286
- alignItems: "center",
287
- flexWrap: "wrap"
288
- });
289
- const PullRequestCardPolicy = ({
290
- policy
291
- }) => /* @__PURE__ */ React.createElement(PullRequestCardPolicyContainer, null, getPolicyIcon(policy), " ", /* @__PURE__ */ React.createElement(Typography, { component: "span" }, policy.text));
292
-
293
- const PullRequestCardPolicies = ({
294
- policies,
295
- className
296
- }) => /* @__PURE__ */ React.createElement("div", { className }, policies.map((policy) => /* @__PURE__ */ React.createElement(PullRequestCardPolicy, { key: policy.id, policy })));
297
-
298
- const useStyles$1 = makeStyles(
299
- {
300
- avatar: {
301
- width: "2.5rem",
302
- height: "2.5rem",
303
- border: "0.3rem solid silver"
304
- },
305
- avatarText: {
306
- fontSize: "1rem"
307
- }
308
- },
309
- { name: "PullRequestCardReviewer" }
310
- );
311
- const PullRequestCardReviewer = ({
312
- reviewer
313
- }) => {
314
- const classes = useStyles$1();
315
- return /* @__PURE__ */ React.createElement(
316
- Avatar,
317
- {
318
- displayName: reviewer.displayName,
319
- picture: reviewer.imageUrl,
320
- classes
321
- }
322
- );
323
- };
324
-
325
- const PullRequestCardReviewersContainer = styled("div")({
326
- "& > *": {
327
- marginTop: 4,
328
- marginBottom: 4
329
- }
330
- });
331
- const PullRequestCardReviewers = ({
332
- reviewers
333
- }) => /* @__PURE__ */ React.createElement(PullRequestCardReviewersContainer, null, reviewers.filter(reviewerFilter).map((reviewer) => /* @__PURE__ */ React.createElement(PullRequestCardReviewer, { key: reviewer.id, reviewer })));
334
-
335
- const useStyles = makeStyles(
336
- (theme) => ({
337
- card: {
338
- backgroundColor: theme.palette.type === "dark" ? theme.palette.grey[700] : theme.palette.common.white
339
- },
340
- cardHeaderSimplified: {
341
- paddingBottom: theme.spacing(2)
342
- },
343
- cardHeaderAction: {
344
- display: "flex",
345
- alignSelf: "center",
346
- margin: 0
347
- },
348
- content: {
349
- display: "flex",
350
- flexDirection: "row"
351
- },
352
- policies: {
353
- flex: 1
354
- },
355
- avatar: { width: "2.5rem", height: "2.5rem" },
356
- avatarText: { fontSize: "1rem" }
357
- }),
358
- { name: "PullRequestCard" }
359
- );
360
- const PullRequestCard = ({
361
- pullRequest,
362
- simplified
363
- }) => {
364
- var _a, _b, _c, _d, _e, _f;
365
- const classes = useStyles();
366
- const title = /* @__PURE__ */ React.createElement(Link, { to: (_a = pullRequest.link) != null ? _a : "", title: pullRequest.description }, pullRequest.title);
367
- const repoLink = /* @__PURE__ */ React.createElement(Link, { to: (_c = (_b = pullRequest.repository) == null ? void 0 : _b.url) != null ? _c : "", color: "inherit" }, (_d = pullRequest.repository) == null ? void 0 : _d.name);
368
- const creationDate = pullRequest.creationDate ? DateTime.fromISO(pullRequest.creationDate).toRelative() : void 0;
369
- const subheader = /* @__PURE__ */ React.createElement(Typography, { component: "span" }, repoLink, " \xB7 ", creationDate);
370
- const avatar = /* @__PURE__ */ React.createElement(
371
- Avatar,
372
- {
373
- displayName: (_e = pullRequest.createdBy) == null ? void 0 : _e.displayName,
374
- picture: (_f = pullRequest.createdBy) == null ? void 0 : _f.imageUrl,
375
- classes: { avatar: classes.avatar, avatarText: classes.avatarText }
376
- }
377
- );
378
- return /* @__PURE__ */ React.createElement(
379
- Card,
380
- {
381
- classes: { root: classes.card },
382
- "data-pull-request-id": pullRequest.pullRequestId
383
- },
384
- /* @__PURE__ */ React.createElement(
385
- CardHeader,
386
- {
387
- avatar,
388
- title,
389
- subheader,
390
- action: /* @__PURE__ */ React.createElement(AutoCompleteIcon, { hasAutoComplete: pullRequest.hasAutoComplete }),
391
- classes: {
392
- ...simplified && { root: classes.cardHeaderSimplified },
393
- action: classes.cardHeaderAction
394
- }
395
- }
396
- ),
397
- !simplified && /* @__PURE__ */ React.createElement(CardContent, { className: classes.content }, pullRequest.policies && /* @__PURE__ */ React.createElement(
398
- PullRequestCardPolicies,
399
- {
400
- policies: pullRequest.policies,
401
- className: classes.policies
402
- }
403
- ), pullRequest.reviewers && /* @__PURE__ */ React.createElement(PullRequestCardReviewers, { reviewers: pullRequest.reviewers }))
404
- );
405
- };
406
-
407
- const ColumnPaper = withStyles((theme) => ({
408
- root: {
409
- display: "flex",
410
- flexDirection: "column",
411
- flex: 1,
412
- padding: theme.spacing(2),
413
- backgroundColor: theme.palette.type === "dark" ? theme.palette.grey[800] : theme.palette.grey[300],
414
- height: "100%"
415
- }
416
- }))(Paper);
417
- const ColumnTitleDiv = styled("div")(({ theme }) => ({
418
- display: "flex",
419
- flexDirection: "row",
420
- alignItems: "center",
421
- justifyContent: "space-between",
422
- marginBottom: theme.spacing(2)
423
- }));
424
- const PullRequestCardContainer = styled("div")(({ theme }) => ({
425
- display: "flex",
426
- flexDirection: "column",
427
- "& > *": {
428
- marginBottom: theme.spacing(2)
429
- },
430
- "& > :last-of-type": {
431
- marginBottom: 0
432
- }
433
- }));
434
- const PullRequestGridColumn = ({
435
- pullRequestGroup
436
- }) => {
437
- const columnTitle = /* @__PURE__ */ React.createElement(ColumnTitleDiv, null, /* @__PURE__ */ React.createElement(Typography, { variant: "h5" }, pullRequestGroup.title));
438
- const pullRequests = /* @__PURE__ */ React.createElement(PullRequestCardContainer, null, pullRequestGroup.pullRequests.map((pullRequest) => /* @__PURE__ */ React.createElement(
439
- PullRequestCard,
440
- {
441
- key: pullRequest.pullRequestId,
442
- pullRequest,
443
- simplified: pullRequestGroup.simplified
444
- }
445
- )));
446
- return /* @__PURE__ */ React.createElement(ColumnPaper, null, columnTitle, pullRequests);
447
- };
448
-
449
- const GridDiv = styled("div")(({ theme }) => ({
450
- display: "flex",
451
- flexDirection: "row",
452
- justifyContent: "space-between",
453
- "& > *": {
454
- marginRight: theme.spacing(2)
455
- },
456
- "& > :last-of-type": {
457
- marginRight: 0
458
- }
459
- }));
460
- const PullRequestGrid = ({
461
- pullRequestGroups
462
- }) => {
463
- return /* @__PURE__ */ React.createElement(GridDiv, null, pullRequestGroups.map((pullRequestGroup, index) => /* @__PURE__ */ React.createElement(
464
- PullRequestGridColumn,
465
- {
466
- key: index,
467
- pullRequestGroup
468
- }
469
- )));
470
- };
471
-
472
- const POLLING_INTERVAL = 1e4;
473
- function useDashboardPullRequests(project, pollingInterval = POLLING_INTERVAL, teamsLimit) {
474
- const api = useApi(azureDevOpsApiRef);
475
- const errorApi = useApi(errorApiRef);
476
- const getDashboardPullRequests = useCallback(async () => {
477
- if (!project) {
478
- return Promise.reject(new Error("Missing project name"));
479
- }
480
- try {
481
- return await api.getDashboardPullRequests(project, teamsLimit);
482
- } catch (error2) {
483
- if (error2 instanceof Error) {
484
- errorApi.post(error2);
485
- }
486
- return Promise.reject(error2);
487
- }
488
- }, [project, api, teamsLimit, errorApi]);
489
- const {
490
- value: pullRequests,
491
- loading,
492
- error,
493
- retry
494
- } = useAsyncRetry(
495
- () => getDashboardPullRequests(),
496
- [getDashboardPullRequests]
497
- );
498
- useInterval(() => retry(), pollingInterval);
499
- return {
500
- pullRequests,
501
- loading,
502
- error
503
- };
504
- }
505
-
506
- function useUserEmail() {
507
- var _a;
508
- const identityApi = useApi(identityApiRef);
509
- const state = useAsync(() => identityApi.getProfileInfo(), [identityApi]);
510
- return (_a = state.value) == null ? void 0 : _a.email;
511
- }
512
-
513
- function useUserTeamIds(userId) {
514
- const api = useApi(azureDevOpsApiRef);
515
- const {
516
- value: teamIds,
517
- loading,
518
- error
519
- } = useAsync(() => {
520
- return userId ? api.getUserTeamIds(userId) : Promise.resolve(void 0);
521
- }, [userId, api]);
522
- return {
523
- teamIds,
524
- loading,
525
- error
526
- };
527
- }
528
-
529
- function useFilterProcessor() {
530
- const userEmail = useUserEmail();
531
- const { teamIds } = useUserTeamIds(userEmail);
532
- return (filters) => {
533
- for (const filter of filters) {
534
- switch (filter.type) {
535
- case FilterType.AssignedToCurrentUser:
536
- case FilterType.CreatedByCurrentUser:
537
- filter.email = userEmail;
538
- break;
539
- case FilterType.AssignedToCurrentUsersTeams:
540
- case FilterType.CreatedByCurrentUsersTeams:
541
- filter.teamIds = teamIds;
542
- break;
543
- }
544
- }
545
- return filters;
546
- };
547
- }
548
-
549
- const PullRequestsPageContent = ({
550
- pullRequestGroups,
551
- loading,
552
- error
553
- }) => {
554
- if (loading && (!pullRequestGroups || pullRequestGroups.length <= 0)) {
555
- return /* @__PURE__ */ React.createElement(Progress, null);
556
- }
557
- if (error) {
558
- return /* @__PURE__ */ React.createElement(ResponseErrorPanel, { error });
559
- }
560
- return /* @__PURE__ */ React.createElement(PullRequestGrid, { pullRequestGroups: pullRequestGroups != null ? pullRequestGroups : [] });
561
- };
562
- const DEFAULT_COLUMN_CONFIGS = [
563
- {
564
- title: "Created by me",
565
- filters: [{ type: FilterType.CreatedByCurrentUser }],
566
- simplified: false
567
- },
568
- {
569
- title: "Other PRs",
570
- filters: [{ type: FilterType.All }],
571
- simplified: true
572
- }
573
- ];
574
- const PullRequestsPage = (props) => {
575
- const { projectName, pollingInterval, defaultColumnConfigs, teamsLimit } = props;
576
- const { pullRequests, loading, error } = useDashboardPullRequests(
577
- projectName,
578
- pollingInterval,
579
- teamsLimit
580
- );
581
- const [columnConfigs] = useState(
582
- defaultColumnConfigs != null ? defaultColumnConfigs : DEFAULT_COLUMN_CONFIGS
583
- );
584
- const filterProcessor = useFilterProcessor();
585
- const pullRequestGroupConfigs = getPullRequestGroupConfigs(
586
- columnConfigs,
587
- filterProcessor
588
- );
589
- const pullRequestGroups = getPullRequestGroups(
590
- pullRequests,
591
- pullRequestGroupConfigs
592
- );
593
- return /* @__PURE__ */ React.createElement(Page, { themeId: "tool" }, /* @__PURE__ */ React.createElement(Header, { title: "Azure Pull Requests" }), /* @__PURE__ */ React.createElement(Content, null, /* @__PURE__ */ React.createElement(
594
- RequirePermission,
595
- {
596
- permission: azureDevOpsPullRequestDashboardReadPermission
597
- },
598
- /* @__PURE__ */ React.createElement(
599
- PullRequestsPageContent,
600
- {
601
- pullRequestGroups,
602
- loading,
603
- error
604
- }
605
- )
606
- )));
607
- };
608
-
609
- export { FilterType as F, PullRequestsPage as P };
610
- //# sourceMappingURL=PullRequestsPage-CkhRQsgx.esm.js.map