diff --git a/ee/app/assets/javascripts/approvals/components/app.vue b/ee/app/assets/javascripts/approvals/components/app.vue index ada536a7cc7aa5767914fbf77b9e791be7bf2649..d76487e3cd41e679cbedff75ca027978f6065022 100644 --- a/ee/app/assets/javascripts/approvals/components/app.vue +++ b/ee/app/assets/javascripts/approvals/components/app.vue @@ -47,7 +47,7 @@ export default {
-
+
{{ __('Add approvers') }} diff --git a/ee/app/assets/javascripts/approvals/components/fallback_rules.vue b/ee/app/assets/javascripts/approvals/components/fallback_rules.vue index eb9243307dafcbf99c1a87542f83c4d10d5b390a..54bb2ec7b9262b9c491d5b03da57ecf67108104c 100644 --- a/ee/app/assets/javascripts/approvals/components/fallback_rules.vue +++ b/ee/app/assets/javascripts/approvals/components/fallback_rules.vue @@ -50,7 +50,7 @@ export default { {{ s__('ApprovalRule|All members with Developer role or higher and code owners (if any)') }} - + diff --git a/ee/app/assets/javascripts/approvals/components/mr_edit/mr_rules.vue b/ee/app/assets/javascripts/approvals/components/mr_edit/mr_rules.vue index f8dcb048d2daf2b66f72481a508f423e2bfdf3eb..abf164bafccaec399307f34e555df4a573460cc2 100644 --- a/ee/app/assets/javascripts/approvals/components/mr_edit/mr_rules.vue +++ b/ee/app/assets/javascripts/approvals/components/mr_edit/mr_rules.vue @@ -18,6 +18,11 @@ export default { }, methods: { ...mapActions(['putRule']), + canEdit(rule) { + const { canEdit, allowMultiRule } = this.settings; + + return canEdit && (!allowMultiRule || !rule.hasSource); + }, }, }; @@ -26,15 +31,17 @@ export default { diff --git a/ee/app/assets/javascripts/approvals/components/project_settings/project_rules.vue b/ee/app/assets/javascripts/approvals/components/project_settings/project_rules.vue index 85b2df5b69e5f5f426cb7c858196d106557e4615..b48452b081925975f2835f6d3c3e42725ca53d77 100644 --- a/ee/app/assets/javascripts/approvals/components/project_settings/project_rules.vue +++ b/ee/app/assets/javascripts/approvals/components/project_settings/project_rules.vue @@ -14,12 +14,37 @@ export default { RuleControls, }, computed: { + ...mapState(['settings']), ...mapState({ rules: state => state.approvals.rules, }), }, methods: { summaryText(rule) { + return this.settings.allowMultiRule + ? this.summaryMultipleRulesText(rule) + : this.summarySingleRuleText(rule); + }, + membersCountText(rule) { + return n__( + 'ApprovalRuleSummary|%d member', + 'ApprovalRuleSummary|%d members', + rule.approvers.length, + ); + }, + summarySingleRuleText(rule) { + const membersCount = this.membersCountText(rule); + + return sprintf( + n__( + 'ApprovalRuleSummary|%{count} approval required from %{membersCount}', + 'ApprovalRuleSummary|%{count} approvals required from %{membersCount}', + rule.approvalsRequired, + ), + { membersCount, count: rule.approvalsRequired }, + ); + }, + summaryMultipleRulesText(rule) { return sprintf( n__( '%{count} approval required from %{name}', @@ -37,16 +62,16 @@ export default {