From d9a07045dd1fe1dc3712f7e246fdb2e8f0d43844 Mon Sep 17 00:00:00 2001 From: Thomas Randolph Date: Fri, 7 Jun 2024 15:02:44 -0600 Subject: [PATCH 1/3] Add the reviewer filter token to the Vue MR list app --- .../javascripts/issues/list/constants.js | 21 +++++++++++++++++++ app/assets/javascripts/issues/list/utils.js | 2 ++ .../components/merge_requests_list_app.vue | 16 ++++++++++++++ .../queries/get_merge_requests.query.graphql | 4 ++++ 4 files changed, 43 insertions(+) diff --git a/app/assets/javascripts/issues/list/constants.js b/app/assets/javascripts/issues/list/constants.js index a6850c8bdc99c9..617f59010e5475 100644 --- a/app/assets/javascripts/issues/list/constants.js +++ b/app/assets/javascripts/issues/list/constants.js @@ -12,6 +12,7 @@ import { OPERATOR_AFTER, OPERATOR_BEFORE, TOKEN_TYPE_ASSIGNEE, + TOKEN_TYPE_REVIEWER, TOKEN_TYPE_AUTHOR, TOKEN_TYPE_CONFIDENTIAL, TOKEN_TYPE_CONTACT, @@ -234,6 +235,26 @@ export const filtersMap = { }, }, }, + [TOKEN_TYPE_REVIEWER]: { + [API_PARAM]: { + [NORMAL_FILTER]: 'reviewerUsername', + [SPECIAL_FILTER]: 'reviewerWildcardId', + [ALTERNATIVE_FILTER]: 'reviewerId', + }, + [URL_PARAM]: { + [OPERATOR_IS]: { + [NORMAL_FILTER]: 'reviewer_username', + [SPECIAL_FILTER]: 'reviewer_id', + [ALTERNATIVE_FILTER]: 'reviewer_username', + }, + [OPERATOR_NOT]: { + [NORMAL_FILTER]: 'not[reviewer_username]', + }, + [OPERATOR_OR]: { + [NORMAL_FILTER]: 'or[reviewer_username]', + }, + }, + }, [TOKEN_TYPE_MILESTONE]: { [API_PARAM]: { [NORMAL_FILTER]: 'milestoneTitle', diff --git a/app/assets/javascripts/issues/list/utils.js b/app/assets/javascripts/issues/list/utils.js index 7d8886e048062e..15085321e0b278 100644 --- a/app/assets/javascripts/issues/list/utils.js +++ b/app/assets/javascripts/issues/list/utils.js @@ -11,6 +11,7 @@ import { OPERATOR_AFTER, OPERATORS_TO_GROUP, TOKEN_TYPE_ASSIGNEE, + TOKEN_TYPE_REVIEWER, TOKEN_TYPE_AUTHOR, TOKEN_TYPE_DRAFT, TOKEN_TYPE_CONFIDENTIAL, @@ -326,6 +327,7 @@ const wildcardTokens = [ TOKEN_TYPE_RELEASE, TOKEN_TYPE_EPIC, TOKEN_TYPE_ASSIGNEE, + TOKEN_TYPE_REVIEWER, TOKEN_TYPE_WEIGHT, ]; diff --git a/app/assets/javascripts/merge_requests/list/components/merge_requests_list_app.vue b/app/assets/javascripts/merge_requests/list/components/merge_requests_list_app.vue index f51ccc04059c78..482578217a0948 100644 --- a/app/assets/javascripts/merge_requests/list/components/merge_requests_list_app.vue +++ b/app/assets/javascripts/merge_requests/list/components/merge_requests_list_app.vue @@ -25,6 +25,8 @@ import { TOKEN_TYPE_SOURCE_BRANCH, TOKEN_TITLE_ASSIGNEE, TOKEN_TYPE_ASSIGNEE, + TOKEN_TITLE_REVIEWER, + TOKEN_TYPE_REVIEWER, TOKEN_TITLE_MILESTONE, TOKEN_TYPE_MILESTONE, } from '~/vue_shared/components/filtered_search_bar/constants'; @@ -191,6 +193,20 @@ export default { multiSelect: false, unique: true, }, + { + type: TOKEN_TYPE_REVIEWER, + title: TOKEN_TITLE_REVIEWER, + icon: 'user', + token: UserToken, + dataType: 'user', + operators: OPERATORS_IS, + fullPath: this.fullPath, + isProject: true, + recentSuggestionsStorageKey: `${this.fullPath}-merge-requests-recent-tokens-reviewer`, + preloadedUsers, + multiSelect: false, + unique: true, + }, { type: TOKEN_TYPE_AUTHOR, title: TOKEN_TITLE_AUTHOR, diff --git a/app/assets/javascripts/merge_requests/list/queries/get_merge_requests.query.graphql b/app/assets/javascripts/merge_requests/list/queries/get_merge_requests.query.graphql index 2b8d940991601f..ea81f5ea2baa0d 100644 --- a/app/assets/javascripts/merge_requests/list/queries/get_merge_requests.query.graphql +++ b/app/assets/javascripts/merge_requests/list/queries/get_merge_requests.query.graphql @@ -9,6 +9,8 @@ query getMergeRequests( $state: MergeRequestState $assigneeUsernames: String $assigneeWildcardId: AssigneeWildcardId + $reviewerUsername: String + $reviewerWildcardId: ReviewerWildcardId $authorUsername: String $draft: Boolean $milestoneTitle: String @@ -27,6 +29,8 @@ query getMergeRequests( state: $state assigneeUsername: $assigneeUsernames assigneeWildcardId: $assigneeWildcardId + reviewerUsername: $reviewerUsername + reviewerWildcardId: $reviewerWildcardId authorUsername: $authorUsername draft: $draft milestoneTitle: $milestoneTitle -- GitLab From bfe70590850889d9dc617236973a198f0b301488 Mon Sep 17 00:00:00 2001 From: Thomas Randolph Date: Fri, 7 Jun 2024 15:33:21 -0600 Subject: [PATCH 2/3] Test that the reviewer filter token is handled and displayed properly --- .../list/components/merge_requests_list_app_spec.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/spec/frontend/merge_requests/list/components/merge_requests_list_app_spec.js b/spec/frontend/merge_requests/list/components/merge_requests_list_app_spec.js index 1844dba15a28fb..295631bfbcdd23 100644 --- a/spec/frontend/merge_requests/list/components/merge_requests_list_app_spec.js +++ b/spec/frontend/merge_requests/list/components/merge_requests_list_app_spec.js @@ -14,6 +14,7 @@ import { TOKEN_TYPE_SOURCE_BRANCH, TOKEN_TYPE_TARGET_BRANCH, TOKEN_TYPE_ASSIGNEE, + TOKEN_TYPE_REVIEWER, } from '~/vue_shared/components/filtered_search_bar/constants'; import { mergeRequestListTabs } from '~/vue_shared/issuable/list/constants'; import { getSortOptions } from '~/issues/list/utils'; @@ -110,6 +111,7 @@ describe('Merge requests list app', () => { it('does not have preloaded users when gon.current_user_id does not exist', () => { expect(findIssuableList().props('searchTokens')).toMatchObject([ { type: TOKEN_TYPE_ASSIGNEE }, + { type: TOKEN_TYPE_REVIEWER, preloadedUsers: [] }, { type: TOKEN_TYPE_AUTHOR, preloadedUsers: [] }, { type: TOKEN_TYPE_DRAFT }, { type: TOKEN_TYPE_MILESTONE }, @@ -122,6 +124,7 @@ describe('Merge requests list app', () => { describe('when all tokens are available', () => { const urlParams = { assignee_username: 'bob', + reviewer_username: 'bill', draft: 'yes', milestone_title: 'milestone', 'target_branches[]': 'branch-a', @@ -154,6 +157,7 @@ describe('Merge requests list app', () => { expect(findIssuableList().props('searchTokens')).toMatchObject([ { type: TOKEN_TYPE_ASSIGNEE }, + { type: TOKEN_TYPE_REVIEWER, preloadedUsers }, { type: TOKEN_TYPE_AUTHOR, preloadedUsers }, { type: TOKEN_TYPE_DRAFT }, { type: TOKEN_TYPE_MILESTONE }, @@ -165,6 +169,7 @@ describe('Merge requests list app', () => { it('pre-displays tokens that are in the url search parameters', () => { expect(findIssuableList().props('initialFilterValue')).toMatchObject([ { type: TOKEN_TYPE_ASSIGNEE }, + { type: TOKEN_TYPE_REVIEWER }, { type: TOKEN_TYPE_DRAFT }, { type: TOKEN_TYPE_MILESTONE }, { type: TOKEN_TYPE_TARGET_BRANCH }, -- GitLab From dff65220a6be10fab080eadbe8b6d651844a6e95 Mon Sep 17 00:00:00 2001 From: Thomas Randolph Date: Fri, 7 Jun 2024 16:05:47 -0600 Subject: [PATCH 3/3] Remove OR filter operator since no MR list has used OR for reviewers --- app/assets/javascripts/issues/list/constants.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/assets/javascripts/issues/list/constants.js b/app/assets/javascripts/issues/list/constants.js index 617f59010e5475..7aae0a325c3a4d 100644 --- a/app/assets/javascripts/issues/list/constants.js +++ b/app/assets/javascripts/issues/list/constants.js @@ -250,9 +250,6 @@ export const filtersMap = { [OPERATOR_NOT]: { [NORMAL_FILTER]: 'not[reviewer_username]', }, - [OPERATOR_OR]: { - [NORMAL_FILTER]: 'or[reviewer_username]', - }, }, }, [TOKEN_TYPE_MILESTONE]: { -- GitLab