From c86ab45d205fae8c1c3d0334ad008ca84b82b233 Mon Sep 17 00:00:00 2001 From: Thomas Randolph Date: Wed, 22 May 2024 19:49:28 -0600 Subject: [PATCH 1/6] Add milestone token to the Vue MR list app --- .../list/components/merge_requests_list_app.vue | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) 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 0221c9be83ae39..cbf7d4d6c313ae 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_MR_ASSIGNEE, + TOKEN_TITLE_MILESTONE, + TOKEN_TYPE_MILESTONE, } from '~/vue_shared/components/filtered_search_bar/constants'; import { convertToApiParams, @@ -55,6 +57,8 @@ import MergeRequestMoreActionsDropdown from './more_actions_dropdown.vue'; const UserToken = () => import('~/vue_shared/components/filtered_search_bar/tokens/user_token.vue'); const BranchToken = () => import('~/vue_shared/components/filtered_search_bar/tokens/branch_token.vue'); +const MilestoneToken = () => + import('~/vue_shared/components/filtered_search_bar/tokens/milestone_token.vue'); export default { i18n, @@ -216,6 +220,18 @@ export default { ], unique: true, }, + { + type: TOKEN_TYPE_MILESTONE, + title: TOKEN_TITLE_MILESTONE, + icon: 'milestone', + token: MilestoneToken, + recentSuggestionsStorageKey: `${this.fullPath}-merge-requests-recent-tokens-milestone`, + shouldSkipSort: true, + fullPath: this.fullPath, + isProject: this.isProject, + multiselect: false, + unique: true, + }, { type: TOKEN_TYPE_TARGET_BRANCH, title: TOKEN_TITLE_TARGET_BRANCH, -- GitLab From 566be480a84a4622db40da35b03e068150ca0f04 Mon Sep 17 00:00:00 2001 From: Thomas Randolph Date: Fri, 24 May 2024 22:11:46 -0600 Subject: [PATCH 2/6] Set isProject to true for merge requests (it's always in a project) --- .../merge_requests/list/components/merge_requests_list_app.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 cbf7d4d6c313ae..1970b4c7876b50 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 @@ -228,7 +228,7 @@ export default { recentSuggestionsStorageKey: `${this.fullPath}-merge-requests-recent-tokens-milestone`, shouldSkipSort: true, fullPath: this.fullPath, - isProject: this.isProject, + isProject: true, multiselect: false, unique: true, }, -- GitLab From 57be04e3c01fe1fb24113be6fa14cadb6c8de633 Mon Sep 17 00:00:00 2001 From: Thomas Randolph Date: Fri, 24 May 2024 23:15:24 -0600 Subject: [PATCH 3/6] Add the milestone filter to the merge requests GQL query --- .../list/queries/get_merge_requests.query.graphql | 2 ++ 1 file changed, 2 insertions(+) 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 bd472856ad157e..58cf77baf18b28 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 @@ -10,6 +10,7 @@ query getMergeRequests( $assigneeUsername: String $authorUsername: String $draft: Boolean + $milestoneTitle: String $sourceBranches: [String!] $targetBranches: [String!] $beforeCursor: String @@ -25,6 +26,7 @@ query getMergeRequests( assigneeUsername: $assigneeUsername authorUsername: $authorUsername draft: $draft + milestoneTitle: $milestoneTitle sourceBranches: $sourceBranches targetBranches: $targetBranches before: $beforeCursor -- GitLab From 4ab8c0b8b3dce0ce79538c6632f330b82bd05daf Mon Sep 17 00:00:00 2001 From: Thomas Randolph Date: Fri, 24 May 2024 23:27:26 -0600 Subject: [PATCH 4/6] Test that the milestone filter is handled 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 7fa8c062671de8..337022c163a57b 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 @@ -10,6 +10,7 @@ import { convertToGraphQLId } from '~/graphql_shared/utils'; import { TOKEN_TYPE_AUTHOR, TOKEN_TYPE_DRAFT, + TOKEN_TYPE_MILESTONE, TOKEN_TYPE_SOURCE_BRANCH, TOKEN_TYPE_TARGET_BRANCH, TOKEN_TYPE_MR_ASSIGNEE, @@ -111,6 +112,7 @@ describe('Merge requests list app', () => { { type: TOKEN_TYPE_MR_ASSIGNEE }, { type: TOKEN_TYPE_AUTHOR, preloadedUsers: [] }, { type: TOKEN_TYPE_DRAFT }, + { type: TOKEN_TYPE_MILESTONE }, { type: TOKEN_TYPE_TARGET_BRANCH }, { type: TOKEN_TYPE_SOURCE_BRANCH }, ]); @@ -121,6 +123,7 @@ describe('Merge requests list app', () => { const urlParams = { mr_assignee_username: 'bob', draft: 'yes', + milestone_title: 'milestone', 'target_branches[]': 'branch-a', 'source_branches[]': 'branch-b', }; @@ -156,6 +159,7 @@ describe('Merge requests list app', () => { { type: TOKEN_TYPE_MR_ASSIGNEE }, { type: TOKEN_TYPE_AUTHOR, preloadedUsers }, { type: TOKEN_TYPE_DRAFT }, + { type: TOKEN_TYPE_MILESTONE }, { type: TOKEN_TYPE_TARGET_BRANCH }, { type: TOKEN_TYPE_SOURCE_BRANCH }, ]); @@ -165,6 +169,7 @@ describe('Merge requests list app', () => { expect(findIssuableList().props('initialFilterValue')).toMatchObject([ { type: TOKEN_TYPE_MR_ASSIGNEE }, { type: TOKEN_TYPE_DRAFT }, + { type: TOKEN_TYPE_MILESTONE }, { type: TOKEN_TYPE_TARGET_BRANCH }, { type: TOKEN_TYPE_SOURCE_BRANCH }, ]); -- GitLab From ad7ce6d5422b0bcc7f6a3e242537522ccfd0ba9b Mon Sep 17 00:00:00 2001 From: Thomas Randolph Date: Mon, 3 Jun 2024 17:00:12 -0600 Subject: [PATCH 5/6] Remove the `not` filter from milestones ...until the backend fully supports it --- .../merge_requests/list/components/merge_requests_list_app.vue | 1 + 1 file changed, 1 insertion(+) 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 1970b4c7876b50..7446a776681fa5 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 @@ -225,6 +225,7 @@ export default { title: TOKEN_TITLE_MILESTONE, icon: 'milestone', token: MilestoneToken, + operators: OPERATORS_IS, recentSuggestionsStorageKey: `${this.fullPath}-merge-requests-recent-tokens-milestone`, shouldSkipSort: true, fullPath: this.fullPath, -- GitLab From 7609e34367dce2d2a22d5740472012097b05c99a Mon Sep 17 00:00:00 2001 From: Thomas Randolph Date: Wed, 5 Jun 2024 15:23:15 -0600 Subject: [PATCH 6/6] Simplify constructing the spoofed URL search parameters --- .../list/components/merge_requests_list_app_spec.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) 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 337022c163a57b..3443226aae087a 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 @@ -127,12 +127,9 @@ describe('Merge requests list app', () => { 'target_branches[]': 'branch-a', 'source_branches[]': 'branch-b', }; - const paramString = Object.entries(urlParams) - .map(([k, v]) => `${k}=${v}`) - .join('&'); beforeEach(async () => { - setWindowLocation(`?${paramString}`); + setWindowLocation(`?${new URLSearchParams(urlParams).toString()}`); window.gon = { current_user_id: mockCurrentUser.id, current_user_fullname: mockCurrentUser.name, -- GitLab