diff --git a/app/assets/javascripts/api.js b/app/assets/javascripts/api.js index 76f3020c5c2cf9340bd9377514ff491ab1acfef3..4dc4ce543e979c1c437c5ca885b588aa5b1234c1 100644 --- a/app/assets/javascripts/api.js +++ b/app/assets/javascripts/api.js @@ -24,6 +24,7 @@ const Api = { projectMergeRequestChangesPath: '/api/:version/projects/:id/merge_requests/:mrid/changes', projectMergeRequestVersionsPath: '/api/:version/projects/:id/merge_requests/:mrid/versions', projectRunnersPath: '/api/:version/projects/:id/runners', + projectProtectedBranchesPath: '/api/:version/projects/:id/protected_branches', mergeRequestsPath: '/api/:version/merge_requests', groupLabelsPath: '/groups/:namespace_path/-/labels', issuableTemplatePath: '/:namespace_path/:project_path/templates/:type/:key', @@ -220,6 +221,22 @@ const Api = { return axios.get(url, config); }, + projectProtectedBranches(id, query = '') { + const url = Api.buildUrl(Api.projectProtectedBranchesPath).replace( + ':id', + encodeURIComponent(id), + ); + + return axios + .get(url, { + params: { + search: query, + per_page: DEFAULT_PER_PAGE, + }, + }) + .then(({ data }) => data); + }, + mergeRequests(params = {}) { const url = Api.buildUrl(Api.mergeRequestsPath); diff --git a/app/assets/stylesheets/framework/selects.scss b/app/assets/stylesheets/framework/selects.scss index bd0134a82d3aa1c81b7955f664c5c003555aed88..a8244219b10c7b4084482b96e6599e7696e91121 100644 --- a/app/assets/stylesheets/framework/selects.scss +++ b/app/assets/stylesheets/framework/selects.scss @@ -63,7 +63,8 @@ display: block; } - .select2-choices { + .select2-choices, + .select2-choice { border-color: $red-500; } } diff --git a/ee/app/assets/javascripts/approvals/components/app.vue b/ee/app/assets/javascripts/approvals/components/app.vue index fe26600f9cbc0fde6cb1e187fe4cdb2f12c5d4a7..248872ebf2879228adb31d02a97245d9d1f1dbb5 100644 --- a/ee/app/assets/javascripts/approvals/components/app.vue +++ b/ee/app/assets/javascripts/approvals/components/app.vue @@ -11,6 +11,12 @@ export default { GlButton, GlLoadingIcon, }, + props: { + isMrEdit: { + type: Boolean, + default: true, + }, + }, computed: { ...mapState({ settings: 'settings', @@ -53,7 +59,7 @@ export default { - + diff --git a/ee/app/assets/javascripts/approvals/components/branches_select.vue b/ee/app/assets/javascripts/approvals/components/branches_select.vue new file mode 100644 index 0000000000000000000000000000000000000000..1d4f43e76c2982159ede827f6332c291712b7494 --- /dev/null +++ b/ee/app/assets/javascripts/approvals/components/branches_select.vue @@ -0,0 +1,115 @@ + + + diff --git a/ee/app/assets/javascripts/approvals/components/modal_rule_create.vue b/ee/app/assets/javascripts/approvals/components/modal_rule_create.vue index 2ae0b0f872ad94bfb774f51c5c715e4cc4073c58..a43029d5d5796a180800dbbb38567afedbf20674 100644 --- a/ee/app/assets/javascripts/approvals/components/modal_rule_create.vue +++ b/ee/app/assets/javascripts/approvals/components/modal_rule_create.vue @@ -14,6 +14,10 @@ export default { type: String, required: true, }, + isMrEdit: { + type: Boolean, + default: true, + }, }, computed: { ...mapState('createModal', { @@ -41,6 +45,6 @@ export default { :cancel-title="__('Cancel')" @ok.prevent="submit" > - + diff --git a/ee/app/assets/javascripts/approvals/components/mr_edit/empty_rule.vue b/ee/app/assets/javascripts/approvals/components/mr_edit/empty_rule.vue index 080a9ec66805e1c05293b8f995e91fe82c38b109..998a20468fae2f5c0d4375c334ef18fbde4a11e4 100644 --- a/ee/app/assets/javascripts/approvals/components/mr_edit/empty_rule.vue +++ b/ee/app/assets/javascripts/approvals/components/mr_edit/empty_rule.vue @@ -1,15 +1,19 @@ 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 87b4946091447f9b5188d39e0201653587764651..7da90f9603e2d02b3fa4ae6656b253aca4838fe6 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 @@ -7,6 +7,7 @@ import Rules from '../rules.vue'; import RuleControls from '../rule_controls.vue'; import EmptyRule from '../mr_edit/empty_rule.vue'; import RuleInput from '../mr_edit/rule_input.vue'; +import RuleBranches from '../rule_branches.vue'; export default { components: { @@ -15,6 +16,7 @@ export default { UserAvatarList, EmptyRule, RuleInput, + RuleBranches, }, computed: { ...mapState(['settings']), @@ -91,17 +93,21 @@ export default {