Skip to content

Commit 0ade550

Browse files
committed
pull_requests: show blocking requirements to satisfy
And set comment thread status active when commenting the PR, so that adding a comment from the app behaves like the website. Close #63
1 parent b409297 commit 0ade550

File tree

4 files changed

+52
-3
lines changed

4 files changed

+52
-3
lines changed

lib/src/screens/pull_request_detail/base_pull_request_detail.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import 'package:azure_devops/src/mixins/share_mixin.dart';
1313
import 'package:azure_devops/src/models/commit.dart' as c;
1414
import 'package:azure_devops/src/models/project.dart';
1515
import 'package:azure_devops/src/models/pull_request.dart';
16+
import 'package:azure_devops/src/models/pull_request_policies.dart';
1617
import 'package:azure_devops/src/models/pull_request_with_details.dart';
1718
import 'package:azure_devops/src/router/router.dart';
1819
import 'package:azure_devops/src/services/ads_service.dart';

lib/src/screens/pull_request_detail/components_pull_request_detail.dart

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,16 @@ class _PullRequestOverview extends StatelessWidget {
224224
groupedFiles: ctrl.groupedConflictingFiles,
225225
),
226226
),
227+
] else if (ctrl.mustSatisfyPolicies) ...[
228+
Container(
229+
decoration: BoxDecoration(
230+
borderRadius: BorderRadius.circular(AppTheme.radius),
231+
border: Border.all(color: context.colorScheme.error, width: 2),
232+
),
233+
padding: const EdgeInsets.all(12),
234+
margin: const EdgeInsets.symmetric(vertical: 12),
235+
child: _MissingPolicies(ctrl: ctrl),
236+
),
227237
],
228238
Text(
229239
'Title:',
@@ -375,6 +385,41 @@ class _PullRequestOverview extends StatelessWidget {
375385
}
376386
}
377387

388+
class _MissingPolicies extends StatelessWidget {
389+
const _MissingPolicies({required this.ctrl});
390+
391+
final _PullRequestDetailController ctrl;
392+
393+
@override
394+
Widget build(BuildContext context) {
395+
return Column(
396+
crossAxisAlignment: CrossAxisAlignment.start,
397+
children: [
398+
Text(
399+
'This pull request cannot be completed because some requirements are not satisfied:',
400+
),
401+
const SizedBox(height: 8),
402+
...ctrl.missingPolicies.map(
403+
(p) => Padding(
404+
padding: const EdgeInsets.only(bottom: 4),
405+
child: Row(
406+
children: [
407+
Icon(
408+
DevOpsIcons.failed,
409+
color: context.colorScheme.error,
410+
size: AppTheme.isTablet ? 24 : 16,
411+
),
412+
const SizedBox(width: 8),
413+
Text(p.configuration?.type?.displayName ?? 'Unknown policy'),
414+
],
415+
),
416+
),
417+
),
418+
],
419+
);
420+
}
421+
}
422+
378423
class _PullRequestChangedFiles extends StatelessWidget {
379424
const _PullRequestChangedFiles({
380425
required this.visiblePage,

lib/src/screens/pull_request_detail/controller_pull_request_detail.dart

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,14 @@ class _PullRequestDetailController with ShareMixin, AppLogger, PullRequestHelper
3333

3434
static const _requireMergeStrategyId = 'fa4e907d-c16b-4a4c-9dfa-4916e5d171ab';
3535

36-
bool get mustSatisfyPolicies =>
36+
List<Policy> get missingPolicies =>
3737
prDetail.value?.data?.policies
3838
// filter out the merge strategy policy to allow completing the PR
3939
.where((p) => p.configuration?.type?.id != _requireMergeStrategyId && p.status != 'approved')
40-
.isNotEmpty ??
41-
false;
40+
.toList() ??
41+
[];
42+
43+
bool get mustSatisfyPolicies => missingPolicies.isNotEmpty;
4244

4345
bool get mustBeApproved => reviewers.where((p) => p.reviewer.isRequired && p.reviewer.vote < 5).isNotEmpty;
4446

lib/src/services/azure_api_service.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2085,6 +2085,7 @@ class AzureApiServiceImpl with AppLogger implements AzureApiService {
20852085
prPath,
20862086
body: threadId == null
20872087
? {
2088+
'status': ThreadStatus.active.intValue,
20882089
'comments': [commentBody],
20892090
if (filePath != null)
20902091
'threadContext': {

0 commit comments

Comments
 (0)