summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/issues_list
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-06-30 00:07:45 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2021-06-30 00:07:45 +0000
commite222250937b497b4cf6e9b8e5ddde0097f0e0954 (patch)
tree28884b81a74a2d9da5bb446c925b4903b512ae81 /app/assets/javascripts/issues_list
parent97eb4a009519453821dcae6c99049e490863adce (diff)
downloadgitlab-ce-e222250937b497b4cf6e9b8e5ddde0097f0e0954.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/assets/javascripts/issues_list')
-rw-r--r--app/assets/javascripts/issues_list/components/issues_list_app.vue80
-rw-r--r--app/assets/javascripts/issues_list/constants.js15
-rw-r--r--app/assets/javascripts/issues_list/queries/get_issues.query.graphql2
-rw-r--r--app/assets/javascripts/issues_list/queries/get_issues_count.query.graphql26
-rw-r--r--app/assets/javascripts/issues_list/queries/issue.fragment.graphql2
5 files changed, 103 insertions, 22 deletions
diff --git a/app/assets/javascripts/issues_list/components/issues_list_app.vue b/app/assets/javascripts/issues_list/components/issues_list_app.vue
index 583f8b6ed17..57250b69d70 100644
--- a/app/assets/javascripts/issues_list/components/issues_list_app.vue
+++ b/app/assets/javascripts/issues_list/components/issues_list_app.vue
@@ -20,6 +20,7 @@ import {
CREATED_DESC,
i18n,
initialPageParams,
+ issuesCountSmartQueryBase,
MAX_LIST_SIZE,
PAGE_SIZE,
PARAM_DUE_DATE,
@@ -29,11 +30,11 @@ import {
TOKEN_TYPE_ASSIGNEE,
TOKEN_TYPE_AUTHOR,
TOKEN_TYPE_CONFIDENTIAL,
- TOKEN_TYPE_MY_REACTION,
TOKEN_TYPE_EPIC,
TOKEN_TYPE_ITERATION,
TOKEN_TYPE_LABEL,
TOKEN_TYPE_MILESTONE,
+ TOKEN_TYPE_MY_REACTION,
TOKEN_TYPE_WEIGHT,
UPDATED_DESC,
urlSortParams,
@@ -171,26 +172,17 @@ export default {
showBulkEditSidebar: false,
sortKey: getSortKey(getParameterByName(PARAM_SORT)) || defaultSortKey,
state: state || IssuableStates.Opened,
- totalIssues: 0,
};
},
apollo: {
issues: {
query: getIssuesQuery,
variables() {
- return {
- projectPath: this.projectPath,
- search: this.searchQuery,
- sort: this.sortKey,
- state: this.state,
- ...this.pageParams,
- ...this.apiFilterParams,
- };
+ return this.queryVariables;
},
update: ({ project }) => project?.issues.nodes ?? [],
result({ data }) {
this.pageInfo = data.project?.issues.pageInfo ?? {};
- this.totalIssues = data.project?.issues.count ?? 0;
this.exportCsvPathWithQuery = this.getExportCsvPathWithQuery();
},
error(error) {
@@ -201,8 +193,55 @@ export default {
},
debounce: 200,
},
+ countOpened: {
+ ...issuesCountSmartQueryBase,
+ variables() {
+ return {
+ ...this.queryVariables,
+ state: IssuableStates.Opened,
+ };
+ },
+ skip() {
+ return !this.hasProjectIssues;
+ },
+ },
+ countClosed: {
+ ...issuesCountSmartQueryBase,
+ variables() {
+ return {
+ ...this.queryVariables,
+ state: IssuableStates.Closed,
+ };
+ },
+ skip() {
+ return !this.hasProjectIssues;
+ },
+ },
+ countAll: {
+ ...issuesCountSmartQueryBase,
+ variables() {
+ return {
+ ...this.queryVariables,
+ state: IssuableStates.All,
+ };
+ },
+ skip() {
+ return !this.hasProjectIssues;
+ },
+ },
},
computed: {
+ queryVariables() {
+ return {
+ isSignedIn: this.isSignedIn,
+ projectPath: this.projectPath,
+ search: this.searchQuery,
+ sort: this.sortKey,
+ state: this.state,
+ ...this.pageParams,
+ ...this.apiFilterParams,
+ };
+ },
hasSearch() {
return this.searchQuery || Object.keys(this.urlFilterParams).length;
},
@@ -347,13 +386,14 @@ export default {
return getSortOptions(this.hasIssueWeightsFeature, this.hasBlockedIssuesFeature);
},
tabCounts() {
- return Object.values(IssuableStates).reduce(
- (acc, state) => ({
- ...acc,
- [state]: this.state === state ? this.totalIssues : undefined,
- }),
- {},
- );
+ return {
+ [IssuableStates.Opened]: this.countOpened,
+ [IssuableStates.Closed]: this.countClosed,
+ [IssuableStates.All]: this.countAll,
+ };
+ },
+ currentTabCount() {
+ return this.tabCounts[this.state] ?? 0;
},
urlParams() {
return {
@@ -595,7 +635,7 @@ export default {
v-if="isSignedIn"
class="gl-md-mr-3"
:export-csv-path="exportCsvPathWithQuery"
- :issuable-count="totalIssues"
+ :issuable-count="currentTabCount"
/>
<gl-button
v-if="canBulkUpdate"
@@ -706,7 +746,7 @@ export default {
<csv-import-export-buttons
class="gl-mr-3"
:export-csv-path="exportCsvPathWithQuery"
- :issuable-count="totalIssues"
+ :issuable-count="currentTabCount"
/>
</template>
</gl-empty-state>
diff --git a/app/assets/javascripts/issues_list/constants.js b/app/assets/javascripts/issues_list/constants.js
index 6337ccc4926..e4b9136343e 100644
--- a/app/assets/javascripts/issues_list/constants.js
+++ b/app/assets/javascripts/issues_list/constants.js
@@ -1,3 +1,5 @@
+import getIssuesCountQuery from 'ee_else_ce/issues_list/queries/get_issues_count.query.graphql';
+import createFlash from '~/flash';
import { __, s__ } from '~/locale';
import {
FILTER_ANY,
@@ -68,6 +70,7 @@ export const i18n = {
confidentialYes: __('Yes'),
downvotes: __('Downvotes'),
editIssues: __('Edit issues'),
+ errorFetchingCounts: __('An error occurred while getting issue counts'),
errorFetchingIssues: __('An error occurred while loading issues'),
jiraIntegrationMessage: s__(
'JiraService|%{jiraDocsLinkStart}Enable the Jira integration%{jiraDocsLinkEnd} to view your Jira issues in GitLab.',
@@ -321,3 +324,15 @@ export const filters = {
},
},
};
+
+export const issuesCountSmartQueryBase = {
+ query: getIssuesCountQuery,
+ context: {
+ isSingleRequest: true,
+ },
+ update: ({ project }) => project?.issues.count,
+ error(error) {
+ createFlash({ message: i18n.errorFetchingCounts, captureError: true, error });
+ },
+ debounce: 200,
+};
diff --git a/app/assets/javascripts/issues_list/queries/get_issues.query.graphql b/app/assets/javascripts/issues_list/queries/get_issues.query.graphql
index afd53084ca0..124190915c0 100644
--- a/app/assets/javascripts/issues_list/queries/get_issues.query.graphql
+++ b/app/assets/javascripts/issues_list/queries/get_issues.query.graphql
@@ -2,6 +2,7 @@
#import "./issue.fragment.graphql"
query getProjectIssues(
+ $isSignedIn: Boolean = false
$projectPath: ID!
$search: String
$sort: IssueSort
@@ -33,7 +34,6 @@ query getProjectIssues(
first: $firstPageSize
last: $lastPageSize
) {
- count
pageInfo {
...PageInfo
}
diff --git a/app/assets/javascripts/issues_list/queries/get_issues_count.query.graphql b/app/assets/javascripts/issues_list/queries/get_issues_count.query.graphql
new file mode 100644
index 00000000000..a1742859640
--- /dev/null
+++ b/app/assets/javascripts/issues_list/queries/get_issues_count.query.graphql
@@ -0,0 +1,26 @@
+query getProjectIssuesCount(
+ $projectPath: ID!
+ $search: String
+ $state: IssuableState
+ $assigneeId: String
+ $assigneeUsernames: [String!]
+ $authorUsername: String
+ $labelName: [String]
+ $milestoneTitle: [String]
+ $not: NegatedIssueFilterInput
+) {
+ project(fullPath: $projectPath) {
+ issues(
+ search: $search
+ state: $state
+ assigneeId: $assigneeId
+ assigneeUsernames: $assigneeUsernames
+ authorUsername: $authorUsername
+ labelName: $labelName
+ milestoneTitle: $milestoneTitle
+ not: $not
+ ) {
+ count
+ }
+ }
+}
diff --git a/app/assets/javascripts/issues_list/queries/issue.fragment.graphql b/app/assets/javascripts/issues_list/queries/issue.fragment.graphql
index de30d8b4bf6..f7ebf64ffb8 100644
--- a/app/assets/javascripts/issues_list/queries/issue.fragment.graphql
+++ b/app/assets/javascripts/issues_list/queries/issue.fragment.graphql
@@ -11,7 +11,7 @@ fragment IssueFragment on Issue {
title
updatedAt
upvotes
- userDiscussionsCount
+ userDiscussionsCount @include(if: $isSignedIn)
webUrl
assignees {
nodes {