summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/filtered_search/issuable_filtered_search_token_keys.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/filtered_search/issuable_filtered_search_token_keys.js')
-rw-r--r--app/assets/javascripts/filtered_search/issuable_filtered_search_token_keys.js152
1 files changed, 90 insertions, 62 deletions
diff --git a/app/assets/javascripts/filtered_search/issuable_filtered_search_token_keys.js b/app/assets/javascripts/filtered_search/issuable_filtered_search_token_keys.js
index eb518eb1f52..8722fc64b62 100644
--- a/app/assets/javascripts/filtered_search/issuable_filtered_search_token_keys.js
+++ b/app/assets/javascripts/filtered_search/issuable_filtered_search_token_keys.js
@@ -1,8 +1,10 @@
+import { flatten } from 'underscore';
import FilteredSearchTokenKeys from './filtered_search_token_keys';
import { __ } from '~/locale';
export const tokenKeys = [
{
+ formattedKey: __('Author'),
key: 'author',
type: 'string',
param: 'username',
@@ -11,6 +13,7 @@ export const tokenKeys = [
tag: '@author',
},
{
+ formattedKey: __('Assignee'),
key: 'assignee',
type: 'string',
param: 'username',
@@ -19,6 +22,7 @@ export const tokenKeys = [
tag: '@assignee',
},
{
+ formattedKey: __('Milestone'),
key: 'milestone',
type: 'string',
param: 'title',
@@ -27,6 +31,7 @@ export const tokenKeys = [
tag: '%milestone',
},
{
+ formattedKey: __('Release'),
key: 'release',
type: 'string',
param: 'tag',
@@ -35,6 +40,7 @@ export const tokenKeys = [
tag: __('tag name'),
},
{
+ formattedKey: __('Label'),
key: 'label',
type: 'array',
param: 'name[]',
@@ -47,6 +53,7 @@ export const tokenKeys = [
if (gon.current_user_id) {
// Appending tokenkeys only logged-in
tokenKeys.push({
+ formattedKey: __('My-Reaction'),
key: 'my-reaction',
type: 'string',
param: 'emoji',
@@ -58,6 +65,7 @@ if (gon.current_user_id) {
export const alternativeTokenKeys = [
{
+ formattedKey: __('Label'),
key: 'label',
type: 'string',
param: 'name',
@@ -65,68 +73,88 @@ export const alternativeTokenKeys = [
},
];
-export const conditions = [
- {
- url: 'assignee_id=None',
- tokenKey: 'assignee',
- value: __('None'),
- },
- {
- url: 'assignee_id=Any',
- tokenKey: 'assignee',
- value: __('Any'),
- },
- {
- url: 'milestone_title=None',
- tokenKey: 'milestone',
- value: __('None'),
- },
- {
- url: 'milestone_title=Any',
- tokenKey: 'milestone',
- value: __('Any'),
- },
- {
- url: 'milestone_title=%23upcoming',
- tokenKey: 'milestone',
- value: __('Upcoming'),
- },
- {
- url: 'milestone_title=%23started',
- tokenKey: 'milestone',
- value: __('Started'),
- },
- {
- url: 'release_tag=None',
- tokenKey: 'release',
- value: __('None'),
- },
- {
- url: 'release_tag=Any',
- tokenKey: 'release',
- value: __('Any'),
- },
- {
- url: 'label_name[]=None',
- tokenKey: 'label',
- value: __('None'),
- },
- {
- url: 'label_name[]=Any',
- tokenKey: 'label',
- value: __('Any'),
- },
- {
- url: 'my_reaction_emoji=None',
- tokenKey: 'my-reaction',
- value: __('None'),
- },
- {
- url: 'my_reaction_emoji=Any',
- tokenKey: 'my-reaction',
- value: __('Any'),
- },
-];
+export const conditions = flatten(
+ [
+ {
+ url: 'assignee_id=None',
+ tokenKey: 'assignee',
+ value: __('None'),
+ },
+ {
+ url: 'assignee_id=Any',
+ tokenKey: 'assignee',
+ value: __('Any'),
+ },
+ {
+ url: 'milestone_title=None',
+ tokenKey: 'milestone',
+ value: __('None'),
+ },
+ {
+ url: 'milestone_title=Any',
+ tokenKey: 'milestone',
+ value: __('Any'),
+ },
+ {
+ url: 'milestone_title=%23upcoming',
+ tokenKey: 'milestone',
+ value: __('Upcoming'),
+ },
+ {
+ url: 'milestone_title=%23started',
+ tokenKey: 'milestone',
+ value: __('Started'),
+ },
+ {
+ url: 'release_tag=None',
+ tokenKey: 'release',
+ value: __('None'),
+ },
+ {
+ url: 'release_tag=Any',
+ tokenKey: 'release',
+ value: __('Any'),
+ },
+ {
+ url: 'label_name[]=None',
+ tokenKey: 'label',
+ value: __('None'),
+ },
+ {
+ url: 'label_name[]=Any',
+ tokenKey: 'label',
+ value: __('Any'),
+ },
+ {
+ url: 'my_reaction_emoji=None',
+ tokenKey: 'my-reaction',
+ value: __('None'),
+ },
+ {
+ url: 'my_reaction_emoji=Any',
+ tokenKey: 'my-reaction',
+ value: __('Any'),
+ },
+ ].map(condition => {
+ const [keyPart, valuePart] = condition.url.split('=');
+ const hasBrackets = keyPart.includes('[]');
+
+ const notEqualUrl = `not[${hasBrackets ? keyPart.slice(0, -2) : keyPart}]${
+ hasBrackets ? '[]' : ''
+ }=${valuePart}`;
+ return [
+ {
+ ...condition,
+ operator: '=',
+ },
+ {
+ ...condition,
+ operator: '!=',
+ url: notEqualUrl,
+ },
+ ];
+ }),
+);
const IssuableFilteredSearchTokenKeys = new FilteredSearchTokenKeys(
tokenKeys,