@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.
- package/CHANGELOG.md +27 -0
- package/alpha/package.json +2 -2
- package/dist/alpha/plugin.esm.js +69 -0
- package/dist/alpha/plugin.esm.js.map +1 -0
- package/dist/alpha.esm.js +1 -68
- package/dist/alpha.esm.js.map +1 -1
- package/dist/api/AzureDevOpsApi.esm.js +8 -0
- package/dist/api/AzureDevOpsApi.esm.js.map +1 -0
- package/dist/{esm/AzureDevOpsApi-GBxs-uQ7.esm.js → api/AzureDevOpsClient.esm.js} +11 -36
- package/dist/api/AzureDevOpsClient.esm.js.map +1 -0
- package/dist/components/AzureGitTagsIcon/AzureGitTagsIcon.esm.js +7 -0
- package/dist/components/AzureGitTagsIcon/AzureGitTagsIcon.esm.js.map +1 -0
- package/dist/components/AzurePipelinesIcon/AzurePipelinesIcon.esm.js +27 -0
- package/dist/components/AzurePipelinesIcon/AzurePipelinesIcon.esm.js.map +1 -0
- package/dist/{esm/AzurePullRequestsIcon-DOAkj-X3.esm.js → components/AzurePullRequestsIcon/AzurePullRequestsIcon.esm.js} +2 -2
- package/dist/components/AzurePullRequestsIcon/AzurePullRequestsIcon.esm.js.map +1 -0
- package/dist/{esm/index-Bwu2-Sgs.esm.js → components/BuildTable/BuildTable.esm.js} +7 -107
- package/dist/components/BuildTable/BuildTable.esm.js.map +1 -0
- package/dist/components/EntityPageAzureGitTags/EntityPageAzureGitTags.esm.js +22 -0
- package/dist/components/EntityPageAzureGitTags/EntityPageAzureGitTags.esm.js.map +1 -0
- package/dist/components/EntityPageAzureGitTags/index.esm.js +2 -0
- package/dist/components/EntityPageAzureGitTags/index.esm.js.map +1 -0
- package/dist/components/EntityPageAzurePipelines/EntityPageAzurePipelines.esm.js +32 -0
- package/dist/components/EntityPageAzurePipelines/EntityPageAzurePipelines.esm.js.map +1 -0
- package/dist/components/EntityPageAzurePipelines/index.esm.js +2 -0
- package/dist/components/EntityPageAzurePipelines/index.esm.js.map +1 -0
- package/dist/components/EntityPageAzurePullRequests/EntityPageAzurePullRequests.esm.js +22 -0
- package/dist/components/EntityPageAzurePullRequests/EntityPageAzurePullRequests.esm.js.map +1 -0
- package/dist/components/EntityPageAzurePullRequests/index.esm.js +2 -0
- package/dist/components/EntityPageAzurePullRequests/index.esm.js.map +1 -0
- package/dist/components/GitTagTable/GitTagTable.esm.js +53 -0
- package/dist/components/GitTagTable/GitTagTable.esm.js.map +1 -0
- package/dist/components/PullRequestStatusButtonGroup/PullRequestStatusButtonGroup.esm.js +41 -0
- package/dist/components/PullRequestStatusButtonGroup/PullRequestStatusButtonGroup.esm.js.map +1 -0
- package/dist/components/PullRequestTable/PullRequestTable.esm.js +90 -0
- package/dist/components/PullRequestTable/PullRequestTable.esm.js.map +1 -0
- package/dist/components/PullRequestsPage/PullRequestsPage.esm.js +79 -0
- package/dist/components/PullRequestsPage/PullRequestsPage.esm.js.map +1 -0
- package/dist/components/PullRequestsPage/index.esm.js +6 -0
- package/dist/components/PullRequestsPage/index.esm.js.map +1 -0
- package/dist/components/PullRequestsPage/lib/AutoCompleteIcon/AutoCompleteIcon.esm.js +16 -0
- package/dist/components/PullRequestsPage/lib/AutoCompleteIcon/AutoCompleteIcon.esm.js.map +1 -0
- package/dist/components/PullRequestsPage/lib/PullRequestCard/PullRequestCard.esm.js +85 -0
- package/dist/components/PullRequestsPage/lib/PullRequestCard/PullRequestCard.esm.js.map +1 -0
- package/dist/components/PullRequestsPage/lib/PullRequestCard/PullRequestCardPolicies.esm.js +10 -0
- package/dist/components/PullRequestsPage/lib/PullRequestCard/PullRequestCardPolicies.esm.js.map +1 -0
- package/dist/components/PullRequestsPage/lib/PullRequestCard/PullRequestCardPolicy.esm.js +66 -0
- package/dist/components/PullRequestsPage/lib/PullRequestCard/PullRequestCardPolicy.esm.js.map +1 -0
- package/dist/components/PullRequestsPage/lib/PullRequestCard/PullRequestCardReviewer.esm.js +33 -0
- package/dist/components/PullRequestsPage/lib/PullRequestCard/PullRequestCardReviewer.esm.js.map +1 -0
- package/dist/components/PullRequestsPage/lib/PullRequestCard/PullRequestCardReviewers.esm.js +17 -0
- package/dist/components/PullRequestsPage/lib/PullRequestCard/PullRequestCardReviewers.esm.js.map +1 -0
- package/dist/components/PullRequestsPage/lib/PullRequestGrid/PullRequestGrid.esm.js +29 -0
- package/dist/components/PullRequestsPage/lib/PullRequestGrid/PullRequestGrid.esm.js.map +1 -0
- package/dist/components/PullRequestsPage/lib/PullRequestGridColumn/PullRequestGridColumn.esm.js +50 -0
- package/dist/components/PullRequestsPage/lib/PullRequestGridColumn/PullRequestGridColumn.esm.js.map +1 -0
- package/dist/components/PullRequestsPage/lib/filters/allFilter.esm.js +6 -0
- package/dist/components/PullRequestsPage/lib/filters/allFilter.esm.js.map +1 -0
- package/dist/components/PullRequestsPage/lib/filters/assignedToTeamFilter.esm.js +17 -0
- package/dist/components/PullRequestsPage/lib/filters/assignedToTeamFilter.esm.js.map +1 -0
- package/dist/components/PullRequestsPage/lib/filters/assignedToTeamsFilter.esm.js +20 -0
- package/dist/components/PullRequestsPage/lib/filters/assignedToTeamsFilter.esm.js.map +1 -0
- package/dist/components/PullRequestsPage/lib/filters/assignedToUserFilter.esm.js +20 -0
- package/dist/components/PullRequestsPage/lib/filters/assignedToUserFilter.esm.js.map +1 -0
- package/dist/components/PullRequestsPage/lib/filters/createFilter.esm.js +45 -0
- package/dist/components/PullRequestsPage/lib/filters/createFilter.esm.js.map +1 -0
- package/dist/components/PullRequestsPage/lib/filters/createdByTeamFilter.esm.js +17 -0
- package/dist/components/PullRequestsPage/lib/filters/createdByTeamFilter.esm.js.map +1 -0
- package/dist/components/PullRequestsPage/lib/filters/createdByTeamsFilter.esm.js +32 -0
- package/dist/components/PullRequestsPage/lib/filters/createdByTeamsFilter.esm.js.map +1 -0
- package/dist/components/PullRequestsPage/lib/filters/createdByUserFilter.esm.js +18 -0
- package/dist/components/PullRequestsPage/lib/filters/createdByUserFilter.esm.js.map +1 -0
- package/dist/components/PullRequestsPage/lib/filters/types.esm.js +17 -0
- package/dist/components/PullRequestsPage/lib/filters/types.esm.js.map +1 -0
- package/dist/components/PullRequestsPage/lib/hooks/useFilterProcessor.esm.js +37 -0
- package/dist/components/PullRequestsPage/lib/hooks/useFilterProcessor.esm.js.map +1 -0
- package/dist/components/PullRequestsPage/lib/utils.esm.js +47 -0
- package/dist/components/PullRequestsPage/lib/utils.esm.js.map +1 -0
- package/dist/{esm/index-BJ_pWnMh.esm.js → components/ReadmeCard/ReadmeCard.esm.js} +8 -31
- package/dist/components/ReadmeCard/ReadmeCard.esm.js.map +1 -0
- package/dist/components/ReadmeCard/index.esm.js +2 -0
- package/dist/components/ReadmeCard/index.esm.js.map +1 -0
- package/dist/hooks/useBuildRuns.esm.js +37 -0
- package/dist/hooks/useBuildRuns.esm.js.map +1 -0
- package/dist/hooks/useDashboardPullRequests.esm.js +43 -0
- package/dist/hooks/useDashboardPullRequests.esm.js.map +1 -0
- package/dist/hooks/useGitTags.esm.js +30 -0
- package/dist/hooks/useGitTags.esm.js.map +1 -0
- package/dist/hooks/usePullRequests.esm.js +41 -0
- package/dist/hooks/usePullRequests.esm.js.map +1 -0
- package/dist/hooks/useReadme.esm.js +32 -0
- package/dist/hooks/useReadme.esm.js.map +1 -0
- package/dist/hooks/useUserEmail.esm.js +11 -0
- package/dist/hooks/useUserEmail.esm.js.map +1 -0
- package/dist/hooks/useUserTeamIds.esm.js +23 -0
- package/dist/hooks/useUserTeamIds.esm.js.map +1 -0
- package/dist/index.esm.js +7 -92
- package/dist/index.esm.js.map +1 -1
- package/dist/plugin.esm.js +68 -0
- package/dist/plugin.esm.js.map +1 -0
- package/dist/routes.esm.js +17 -0
- package/dist/routes.esm.js.map +1 -0
- package/dist/utils/arrayHas.esm.js +15 -0
- package/dist/utils/arrayHas.esm.js.map +1 -0
- package/dist/utils/equalsIgnoreCase.esm.js +6 -0
- package/dist/utils/equalsIgnoreCase.esm.js.map +1 -0
- package/dist/{esm/getAnnotationValuesFromEntity-G8YVs-3R.esm.js → utils/getAnnotationValuesFromEntity.esm.js} +7 -8
- package/dist/utils/getAnnotationValuesFromEntity.esm.js.map +1 -0
- package/dist/utils/getDurationFromDates.esm.js +34 -0
- package/dist/utils/getDurationFromDates.esm.js.map +1 -0
- package/package.json +19 -13
- package/dist/esm/AzureDevOpsApi-GBxs-uQ7.esm.js.map +0 -1
- package/dist/esm/AzurePullRequestsIcon-DOAkj-X3.esm.js.map +0 -1
- package/dist/esm/PullRequestsPage-CkhRQsgx.esm.js +0 -610
- package/dist/esm/PullRequestsPage-CkhRQsgx.esm.js.map +0 -1
- package/dist/esm/getAnnotationValuesFromEntity-G8YVs-3R.esm.js.map +0 -1
- package/dist/esm/index-1Rl7C23d.esm.js +0 -102
- package/dist/esm/index-1Rl7C23d.esm.js.map +0 -1
- package/dist/esm/index-BJ_pWnMh.esm.js.map +0 -1
- package/dist/esm/index-Bo-6jkQA.esm.js +0 -178
- package/dist/esm/index-Bo-6jkQA.esm.js.map +0 -1
- package/dist/esm/index-Bwu2-Sgs.esm.js.map +0 -1
- package/dist/esm/index-W1pvc5vi.esm.js +0 -25
- 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
|