Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-07-31 18:11:19 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-07-31 18:11:19 +0300
commit7f98cf51aa49426815fe943a5a8dae2a96b59c01 (patch)
tree89047dcbc3bdddcc28895c1ac950cf080b363d1b /app/assets/javascripts/issues
parent74ecf758e30be848144df1672b5080a29fafbc0a (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/assets/javascripts/issues')
-rw-r--r--app/assets/javascripts/issues/dashboard/components/issues_dashboard_app.vue25
-rw-r--r--app/assets/javascripts/issues/dashboard/queries/get_issues.query.graphql8
-rw-r--r--app/assets/javascripts/issues/dashboard/queries/get_issues_counts.query.graphql16
-rw-r--r--app/assets/javascripts/issues/list/components/issues_list_app.vue25
-rw-r--r--app/assets/javascripts/issues/list/constants.js32
-rw-r--r--app/assets/javascripts/issues/list/queries/get_issues.query.graphql12
-rw-r--r--app/assets/javascripts/issues/list/queries/get_issues_counts.query.graphql28
-rw-r--r--app/assets/javascripts/issues/list/utils.js4
8 files changed, 149 insertions, 1 deletions
diff --git a/app/assets/javascripts/issues/dashboard/components/issues_dashboard_app.vue b/app/assets/javascripts/issues/dashboard/components/issues_dashboard_app.vue
index eb73f8e0182..9febebf7e55 100644
--- a/app/assets/javascripts/issues/dashboard/components/issues_dashboard_app.vue
+++ b/app/assets/javascripts/issues/dashboard/components/issues_dashboard_app.vue
@@ -36,6 +36,7 @@ import { getParameterByName } from '~/lib/utils/url_utility';
import {
OPERATORS_IS,
OPERATORS_IS_NOT_OR,
+ OPERATORS_AFTER_BEFORE,
TOKEN_TITLE_ASSIGNEE,
TOKEN_TITLE_AUTHOR,
TOKEN_TITLE_CONFIDENTIAL,
@@ -44,6 +45,8 @@ import {
TOKEN_TITLE_MY_REACTION,
TOKEN_TITLE_SEARCH_WITHIN,
TOKEN_TITLE_TYPE,
+ TOKEN_TITLE_CREATED,
+ TOKEN_TITLE_CLOSED,
TOKEN_TYPE_ASSIGNEE,
TOKEN_TYPE_AUTHOR,
TOKEN_TYPE_CONFIDENTIAL,
@@ -52,6 +55,8 @@ import {
TOKEN_TYPE_MY_REACTION,
TOKEN_TYPE_SEARCH_WITHIN,
TOKEN_TYPE_TYPE,
+ TOKEN_TYPE_CREATED,
+ TOKEN_TYPE_CLOSED,
} from '~/vue_shared/components/filtered_search_bar/constants';
import IssuableList from '~/vue_shared/issuable/list/components/issuable_list_root.vue';
import { DEFAULT_PAGE_SIZE, issuableListTabs } from '~/vue_shared/issuable/list/constants';
@@ -63,6 +68,7 @@ const EmojiToken = () =>
import('~/vue_shared/components/filtered_search_bar/tokens/emoji_token.vue');
const LabelToken = () =>
import('~/vue_shared/components/filtered_search_bar/tokens/label_token.vue');
+const DateToken = () => import('~/vue_shared/components/filtered_search_bar/tokens/date_token.vue');
const MilestoneToken = () =>
import('~/vue_shared/components/filtered_search_bar/tokens/milestone_token.vue');
@@ -89,6 +95,7 @@ export default {
'emptyStateWithoutFilterSvgPath',
'hasBlockedIssuesFeature',
'hasIssuableHealthStatusFeature',
+ 'hasIssueDateFilterFeature',
'hasIssueWeightsFeature',
'hasScopedLabelsFeature',
'initialSort',
@@ -318,6 +325,24 @@ export default {
fetchEmojis: this.fetchEmojis,
recentSuggestionsStorageKey: 'dashboard-issues-recent-tokens-my_reaction',
});
+
+ if (this.hasIssueDateFilterFeature) {
+ tokens.push({
+ type: TOKEN_TYPE_CREATED,
+ title: TOKEN_TITLE_CREATED,
+ icon: 'history',
+ token: DateToken,
+ operators: OPERATORS_AFTER_BEFORE,
+ });
+
+ tokens.push({
+ type: TOKEN_TYPE_CLOSED,
+ title: TOKEN_TITLE_CLOSED,
+ icon: 'history',
+ token: DateToken,
+ operators: OPERATORS_AFTER_BEFORE,
+ });
+ }
}
tokens.sort((a, b) => a.title.localeCompare(b.title));
diff --git a/app/assets/javascripts/issues/dashboard/queries/get_issues.query.graphql b/app/assets/javascripts/issues/dashboard/queries/get_issues.query.graphql
index 5c331fe95e2..51e38d44c85 100644
--- a/app/assets/javascripts/issues/dashboard/queries/get_issues.query.graphql
+++ b/app/assets/javascripts/issues/dashboard/queries/get_issues.query.graphql
@@ -23,6 +23,10 @@ query getDashboardIssues(
$beforeCursor: String
$firstPageSize: Int
$lastPageSize: Int
+ $createdAfter: Time
+ $createdBefore: Time
+ $closedAfter: Time
+ $closedBefore: Time
) {
issues(
search: $search
@@ -44,6 +48,10 @@ query getDashboardIssues(
before: $beforeCursor
first: $firstPageSize
last: $lastPageSize
+ createdAfter: $createdAfter
+ createdBefore: $createdBefore
+ closedAfter: $closedAfter
+ closedBefore: $closedBefore
) @persist {
nodes {
__persist
diff --git a/app/assets/javascripts/issues/dashboard/queries/get_issues_counts.query.graphql b/app/assets/javascripts/issues/dashboard/queries/get_issues_counts.query.graphql
index b36f546e4ab..a91f15f0c04 100644
--- a/app/assets/javascripts/issues/dashboard/queries/get_issues_counts.query.graphql
+++ b/app/assets/javascripts/issues/dashboard/queries/get_issues_counts.query.graphql
@@ -12,6 +12,10 @@ query getDashboardIssuesCount(
$in: [IssuableSearchableField!]
$not: NegatedIssueFilterInput
$or: UnionedIssueFilterInput
+ $createdAfter: Time
+ $createdBefore: Time
+ $closedAfter: Time
+ $closedBefore: Time
) {
openedIssues: issues(
state: opened
@@ -28,6 +32,10 @@ query getDashboardIssuesCount(
in: $in
not: $not
or: $or
+ createdAfter: $createdAfter
+ createdBefore: $createdBefore
+ closedAfter: $closedAfter
+ closedBefore: $closedBefore
) {
count
}
@@ -46,6 +54,10 @@ query getDashboardIssuesCount(
in: $in
not: $not
or: $or
+ createdAfter: $createdAfter
+ createdBefore: $createdBefore
+ closedAfter: $closedAfter
+ closedBefore: $closedBefore
) {
count
}
@@ -64,6 +76,10 @@ query getDashboardIssuesCount(
in: $in
not: $not
or: $or
+ createdAfter: $createdAfter
+ createdBefore: $createdBefore
+ closedAfter: $closedAfter
+ closedBefore: $closedBefore
) {
count
}
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 db3008c17a4..c4e906be94f 100644
--- a/app/assets/javascripts/issues/list/components/issues_list_app.vue
+++ b/app/assets/javascripts/issues/list/components/issues_list_app.vue
@@ -40,6 +40,7 @@ import {
OPERATORS_IS,
OPERATORS_IS_NOT,
OPERATORS_IS_NOT_OR,
+ OPERATORS_AFTER_BEFORE,
TOKEN_TITLE_ASSIGNEE,
TOKEN_TITLE_AUTHOR,
TOKEN_TITLE_CONFIDENTIAL,
@@ -51,6 +52,8 @@ import {
TOKEN_TITLE_RELEASE,
TOKEN_TITLE_SEARCH_WITHIN,
TOKEN_TITLE_TYPE,
+ TOKEN_TITLE_CREATED,
+ TOKEN_TITLE_CLOSED,
TOKEN_TYPE_ASSIGNEE,
TOKEN_TYPE_AUTHOR,
TOKEN_TYPE_CONFIDENTIAL,
@@ -62,6 +65,8 @@ import {
TOKEN_TYPE_RELEASE,
TOKEN_TYPE_SEARCH_WITHIN,
TOKEN_TYPE_TYPE,
+ TOKEN_TYPE_CREATED,
+ TOKEN_TYPE_CLOSED,
} from '~/vue_shared/components/filtered_search_bar/constants';
import IssuableList from '~/vue_shared/issuable/list/components/issuable_list_root.vue';
import { DEFAULT_PAGE_SIZE, issuableListTabs } from '~/vue_shared/issuable/list/constants';
@@ -125,6 +130,7 @@ const CrmContactToken = () =>
import('~/vue_shared/components/filtered_search_bar/tokens/crm_contact_token.vue');
const CrmOrganizationToken = () =>
import('~/vue_shared/components/filtered_search_bar/tokens/crm_organization_token.vue');
+const DateToken = () => import('~/vue_shared/components/filtered_search_bar/tokens/date_token.vue');
export default {
i18n,
@@ -166,6 +172,7 @@ export default {
'hasAnyProjects',
'hasBlockedIssuesFeature',
'hasIssuableHealthStatusFeature',
+ 'hasIssueDateFilterFeature',
'hasIssueWeightsFeature',
'hasScopedLabelsFeature',
'initialEmail',
@@ -460,6 +467,24 @@ export default {
{ icon: 'eye', value: 'no', title: this.$options.i18n.confidentialNo },
],
});
+
+ if (this.hasIssueDateFilterFeature) {
+ tokens.push({
+ type: TOKEN_TYPE_CREATED,
+ title: TOKEN_TITLE_CREATED,
+ icon: 'history',
+ token: DateToken,
+ operators: OPERATORS_AFTER_BEFORE,
+ });
+
+ tokens.push({
+ type: TOKEN_TYPE_CLOSED,
+ title: TOKEN_TITLE_CLOSED,
+ icon: 'history',
+ token: DateToken,
+ operators: OPERATORS_AFTER_BEFORE,
+ });
+ }
}
if (this.canReadCrmContact) {
diff --git a/app/assets/javascripts/issues/list/constants.js b/app/assets/javascripts/issues/list/constants.js
index a7933803ed4..85e300b6474 100644
--- a/app/assets/javascripts/issues/list/constants.js
+++ b/app/assets/javascripts/issues/list/constants.js
@@ -9,6 +9,8 @@ import {
OPERATOR_IS,
OPERATOR_NOT,
OPERATOR_OR,
+ OPERATOR_AFTER,
+ OPERATOR_BEFORE,
TOKEN_TYPE_ASSIGNEE,
TOKEN_TYPE_AUTHOR,
TOKEN_TYPE_CONFIDENTIAL,
@@ -24,6 +26,8 @@ import {
TOKEN_TYPE_TYPE,
TOKEN_TYPE_WEIGHT,
TOKEN_TYPE_SEARCH_WITHIN,
+ TOKEN_TYPE_CREATED,
+ TOKEN_TYPE_CLOSED,
} from '~/vue_shared/components/filtered_search_bar/constants';
import {
WORK_ITEM_TYPE_ENUM_INCIDENT,
@@ -416,4 +420,32 @@ export const filtersMap = {
},
},
},
+ [TOKEN_TYPE_CREATED]: {
+ [API_PARAM]: {
+ [NORMAL_FILTER]: 'createdBefore',
+ [ALTERNATIVE_FILTER]: 'createdAfter',
+ },
+ [URL_PARAM]: {
+ [OPERATOR_AFTER]: {
+ [ALTERNATIVE_FILTER]: 'created_after',
+ },
+ [OPERATOR_BEFORE]: {
+ [NORMAL_FILTER]: 'created_before',
+ },
+ },
+ },
+ [TOKEN_TYPE_CLOSED]: {
+ [API_PARAM]: {
+ [NORMAL_FILTER]: 'closedBefore',
+ [ALTERNATIVE_FILTER]: 'closedAfter',
+ },
+ [URL_PARAM]: {
+ [OPERATOR_AFTER]: {
+ [ALTERNATIVE_FILTER]: 'closed_after',
+ },
+ [OPERATOR_BEFORE]: {
+ [NORMAL_FILTER]: 'closed_before',
+ },
+ },
+ },
};
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 1018848fb53..23410ea0f81 100644
--- a/app/assets/javascripts/issues/list/queries/get_issues.query.graphql
+++ b/app/assets/javascripts/issues/list/queries/get_issues.query.graphql
@@ -30,6 +30,10 @@ query getIssues(
$afterCursor: String
$firstPageSize: Int
$lastPageSize: Int
+ $createdAfter: Time
+ $createdBefore: Time
+ $closedAfter: Time
+ $closedBefore: Time
) {
group(fullPath: $fullPath) @skip(if: $isProject) @persist {
id
@@ -57,6 +61,10 @@ query getIssues(
after: $afterCursor
first: $firstPageSize
last: $lastPageSize
+ createdAfter: $createdAfter
+ createdBefore: $createdBefore
+ closedAfter: $closedAfter
+ closedBefore: $closedBefore
) {
__persist
pageInfo {
@@ -96,6 +104,10 @@ query getIssues(
after: $afterCursor
first: $firstPageSize
last: $lastPageSize
+ createdAfter: $createdAfter
+ createdBefore: $createdBefore
+ closedAfter: $closedAfter
+ closedBefore: $closedBefore
) {
__persist
pageInfo {
diff --git a/app/assets/javascripts/issues/list/queries/get_issues_counts.query.graphql b/app/assets/javascripts/issues/list/queries/get_issues_counts.query.graphql
index fdb0eeb5970..7953dc423b6 100644
--- a/app/assets/javascripts/issues/list/queries/get_issues_counts.query.graphql
+++ b/app/assets/javascripts/issues/list/queries/get_issues_counts.query.graphql
@@ -18,6 +18,10 @@ query getIssuesCount(
$crmOrganizationId: String
$not: NegatedIssueFilterInput
$or: UnionedIssueFilterInput
+ $createdAfter: Time
+ $createdBefore: Time
+ $closedAfter: Time
+ $closedBefore: Time
) {
group(fullPath: $fullPath) @skip(if: $isProject) {
id
@@ -39,6 +43,10 @@ query getIssuesCount(
crmOrganizationId: $crmOrganizationId
not: $not
or: $or
+ createdAfter: $createdAfter
+ createdBefore: $createdBefore
+ closedAfter: $closedAfter
+ closedBefore: $closedBefore
) {
count
}
@@ -60,6 +68,10 @@ query getIssuesCount(
crmOrganizationId: $crmOrganizationId
not: $not
or: $or
+ createdAfter: $createdAfter
+ createdBefore: $createdBefore
+ closedAfter: $closedAfter
+ closedBefore: $closedBefore
) {
count
}
@@ -81,6 +93,10 @@ query getIssuesCount(
crmOrganizationId: $crmOrganizationId
not: $not
or: $or
+ createdAfter: $createdAfter
+ createdBefore: $createdBefore
+ closedAfter: $closedAfter
+ closedBefore: $closedBefore
) {
count
}
@@ -106,6 +122,10 @@ query getIssuesCount(
crmOrganizationId: $crmOrganizationId
not: $not
or: $or
+ createdAfter: $createdAfter
+ createdBefore: $createdBefore
+ closedAfter: $closedAfter
+ closedBefore: $closedBefore
) {
count
}
@@ -128,6 +148,10 @@ query getIssuesCount(
crmOrganizationId: $crmOrganizationId
not: $not
or: $or
+ createdAfter: $createdAfter
+ createdBefore: $createdBefore
+ closedAfter: $closedAfter
+ closedBefore: $closedBefore
) {
count
}
@@ -150,6 +174,10 @@ query getIssuesCount(
crmOrganizationId: $crmOrganizationId
not: $not
or: $or
+ createdAfter: $createdAfter
+ createdBefore: $createdBefore
+ closedAfter: $closedAfter
+ closedBefore: $closedBefore
) {
count
}
diff --git a/app/assets/javascripts/issues/list/utils.js b/app/assets/javascripts/issues/list/utils.js
index 04ce9a4969b..37df0c8f9ff 100644
--- a/app/assets/javascripts/issues/list/utils.js
+++ b/app/assets/javascripts/issues/list/utils.js
@@ -6,6 +6,7 @@ import {
FILTERED_SEARCH_TERM,
OPERATOR_NOT,
OPERATOR_OR,
+ OPERATOR_AFTER,
TOKEN_TYPE_ASSIGNEE,
TOKEN_TYPE_AUTHOR,
TOKEN_TYPE_CONFIDENTIAL,
@@ -246,8 +247,9 @@ export const isSpecialFilter = (type, data) => {
const getFilterType = ({ type, value: { data, operator } }) => {
const isUnionedAuthor = type === TOKEN_TYPE_AUTHOR && operator === OPERATOR_OR;
const isUnionedLabel = type === TOKEN_TYPE_LABEL && operator === OPERATOR_OR;
+ const isAfter = operator === OPERATOR_AFTER;
- if (isUnionedAuthor || isUnionedLabel) {
+ if (isUnionedAuthor || isUnionedLabel || isAfter) {
return ALTERNATIVE_FILTER;
}
if (isSpecialFilter(type, data)) {