summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/filtered_search
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/filtered_search')
-rw-r--r--app/assets/javascripts/filtered_search/available_dropdown_mappings.js11
-rw-r--r--app/assets/javascripts/filtered_search/components/recent_searches_dropdown_content.vue6
-rw-r--r--app/assets/javascripts/filtered_search/dropdown_ajax_filter.js2
-rw-r--r--app/assets/javascripts/filtered_search/dropdown_emoji.js4
-rw-r--r--app/assets/javascripts/filtered_search/dropdown_hint.js2
-rw-r--r--app/assets/javascripts/filtered_search/dropdown_non_user.js2
-rw-r--r--app/assets/javascripts/filtered_search/dropdown_utils.js12
-rw-r--r--app/assets/javascripts/filtered_search/filtered_search_dropdown.js6
-rw-r--r--app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js2
-rw-r--r--app/assets/javascripts/filtered_search/filtered_search_manager.js28
-rw-r--r--app/assets/javascripts/filtered_search/filtered_search_token_keys.js21
-rw-r--r--app/assets/javascripts/filtered_search/filtered_search_visual_tokens.js9
-rw-r--r--app/assets/javascripts/filtered_search/issuable_filtered_search_token_keys.js2
-rw-r--r--app/assets/javascripts/filtered_search/stores/recent_searches_store.js2
-rw-r--r--app/assets/javascripts/filtered_search/visual_token_value.js10
15 files changed, 65 insertions, 54 deletions
diff --git a/app/assets/javascripts/filtered_search/available_dropdown_mappings.js b/app/assets/javascripts/filtered_search/available_dropdown_mappings.js
index 77491d1556b..588bd534224 100644
--- a/app/assets/javascripts/filtered_search/available_dropdown_mappings.js
+++ b/app/assets/javascripts/filtered_search/available_dropdown_mappings.js
@@ -50,7 +50,7 @@ export default class AvailableDropdownMappings {
},
};
- supportedTokens.forEach(type => {
+ supportedTokens.forEach((type) => {
if (availableMappings[type]) {
allowedMappings[type] = availableMappings[type];
}
@@ -99,7 +99,7 @@ export default class AvailableDropdownMappings {
// The DropdownNonUser class is hardcoded to look for and display a
// "title" property, so we need to add this property to each release object
- preprocessing: releases => releases.map(r => ({ ...r, title: r.tag })),
+ preprocessing: (releases) => releases.map((r) => ({ ...r, title: r.tag })),
},
element: this.container.querySelector('#js-dropdown-release'),
},
@@ -162,7 +162,7 @@ export default class AvailableDropdownMappings {
extraArguments: {
endpoint: this.getEnvironmentsEndpoint(),
symbol: '',
- preprocessing: data => data.map(env => ({ title: env })),
+ preprocessing: (data) => data.map((env) => ({ title: env })),
},
element: this.container.querySelector('#js-dropdown-environment'),
},
@@ -200,8 +200,9 @@ export default class AvailableDropdownMappings {
}
getMergeRequestTargetBranchesEndpoint() {
- const endpoint = `${gon.relative_url_root ||
- ''}/autocomplete/merge_request_target_branches.json`;
+ const endpoint = `${
+ gon.relative_url_root || ''
+ }/autocomplete/merge_request_target_branches.json`;
const params = {
group_id: this.getGroupId(),
diff --git a/app/assets/javascripts/filtered_search/components/recent_searches_dropdown_content.vue b/app/assets/javascripts/filtered_search/components/recent_searches_dropdown_content.vue
index 0c4abc14494..4c2f55fd174 100644
--- a/app/assets/javascripts/filtered_search/components/recent_searches_dropdown_content.vue
+++ b/app/assets/javascripts/filtered_search/components/recent_searches_dropdown_content.vue
@@ -28,16 +28,16 @@ export default {
* fix by ignoring non-string recents while in Epic page.
*/
compatibleItems() {
- return this.items.filter(item => typeof item === 'string');
+ return this.items.filter((item) => typeof item === 'string');
},
processedItems() {
- return this.compatibleItems.map(item => {
+ return this.compatibleItems.map((item) => {
const { tokens, searchToken } = FilteredSearchTokenizer.processTokens(
item,
this.allowedKeys,
);
- const resultantTokens = tokens.map(token => ({
+ const resultantTokens = tokens.map((token) => ({
prefix: `${token.key}:`,
operator: token.operator,
suffix: `${token.symbol}${token.value}`,
diff --git a/app/assets/javascripts/filtered_search/dropdown_ajax_filter.js b/app/assets/javascripts/filtered_search/dropdown_ajax_filter.js
index 30f412e590f..2c0c3024d38 100644
--- a/app/assets/javascripts/filtered_search/dropdown_ajax_filter.js
+++ b/app/assets/javascripts/filtered_search/dropdown_ajax_filter.js
@@ -33,7 +33,7 @@ export default class DropdownAjaxFilter extends FilteredSearchDropdown {
}
itemClicked(e) {
- super.itemClicked(e, selected => {
+ super.itemClicked(e, (selected) => {
const title = selected.querySelector('.dropdown-light-content').innerText.trim();
return DropdownUtils.getEscapedText(title);
diff --git a/app/assets/javascripts/filtered_search/dropdown_emoji.js b/app/assets/javascripts/filtered_search/dropdown_emoji.js
index 1e3679b9e3c..001030b5f5f 100644
--- a/app/assets/javascripts/filtered_search/dropdown_emoji.js
+++ b/app/assets/javascripts/filtered_search/dropdown_emoji.js
@@ -53,7 +53,7 @@ export default class DropdownEmoji extends FilteredSearchDropdown {
}
itemClicked(e) {
- super.itemClicked(e, selected => {
+ super.itemClicked(e, (selected) => {
const name = selected.querySelector('.js-data-value').innerText.trim();
return DropdownUtils.getEscapedText(name);
});
@@ -69,7 +69,7 @@ export default class DropdownEmoji extends FilteredSearchDropdown {
// Replace empty gl-emoji tag to real content
const dropdownItems = [...this.dropdown.querySelectorAll('.filter-dropdown-item')];
- dropdownItems.forEach(dropdownItem => {
+ dropdownItems.forEach((dropdownItem) => {
const valueElement = dropdownItem.querySelector('.js-data-value');
if (valueElement !== null) {
const name = valueElement.innerText;
diff --git a/app/assets/javascripts/filtered_search/dropdown_hint.js b/app/assets/javascripts/filtered_search/dropdown_hint.js
index 4f10b6ba9c3..1180f8683a1 100644
--- a/app/assets/javascripts/filtered_search/dropdown_hint.js
+++ b/app/assets/javascripts/filtered_search/dropdown_hint.js
@@ -83,7 +83,7 @@ export default class DropdownHint extends FilteredSearchDropdown {
const dropdownData = this.tokenKeys
.get()
- .map(tokenKey => ({
+ .map((tokenKey) => ({
icon: `${gon.sprite_icons}#${tokenKey.icon}`,
hint: tokenKey.key,
tag: `:${tokenKey.tag}`,
diff --git a/app/assets/javascripts/filtered_search/dropdown_non_user.js b/app/assets/javascripts/filtered_search/dropdown_non_user.js
index bfa9f4a57ca..11261debeda 100644
--- a/app/assets/javascripts/filtered_search/dropdown_non_user.js
+++ b/app/assets/javascripts/filtered_search/dropdown_non_user.js
@@ -30,7 +30,7 @@ export default class DropdownNonUser extends FilteredSearchDropdown {
}
itemClicked(e) {
- super.itemClicked(e, selected => {
+ super.itemClicked(e, (selected) => {
const title = selected.querySelector('.js-data-value').innerText.trim();
return `${this.symbol}${DropdownUtils.getEscapedText(title)}`;
});
diff --git a/app/assets/javascripts/filtered_search/dropdown_utils.js b/app/assets/javascripts/filtered_search/dropdown_utils.js
index 43de86b09ee..22c98f360ed 100644
--- a/app/assets/javascripts/filtered_search/dropdown_utils.js
+++ b/app/assets/javascripts/filtered_search/dropdown_utils.js
@@ -61,7 +61,7 @@ export default class DropdownUtils {
const { lastToken, tokens } = FilteredSearchTokenizer.processTokens(searchInput, allowedKeys);
const lastKey = lastToken.key || lastToken || '';
const allowMultiple = item.type === 'array';
- const itemInExistingTokens = tokens.some(t => t.key === item.hint);
+ const itemInExistingTokens = tokens.some((t) => t.key === item.hint);
const isSearchItem = updatedItem.hint === 'search';
if (isSearchItem) {
@@ -77,7 +77,7 @@ export default class DropdownUtils {
const tokenName = last(split[0].split(' '));
const match = isSearchItem
- ? allowedKeys.some(key => key.startsWith(tokenName.toLowerCase()))
+ ? allowedKeys.some((key) => key.startsWith(tokenName.toLowerCase()))
: updatedItem.hint.indexOf(tokenName.toLowerCase()) === -1;
updatedItem.droplab_hidden = tokenName ? match : false;
@@ -129,12 +129,12 @@ export default class DropdownUtils {
const values = [];
if (untilInput) {
- const inputIndex = tokens.findIndex(t => t.classList.contains('input-token'));
+ const inputIndex = tokens.findIndex((t) => t.classList.contains('input-token'));
// Add one to include input-token to the tokens array
tokens.splice(inputIndex + 1);
}
- tokens.forEach(token => {
+ tokens.forEach((token) => {
if (token.classList.contains('js-visual-token')) {
const name = token.querySelector('.name');
const operatorContainer = token.querySelector('.operator');
@@ -176,7 +176,7 @@ export default class DropdownUtils {
}
});
- return values.map(value => value.trim()).join(' ');
+ return values.map((value) => value.trim()).join(' ');
}
static getSearchInput(filteredSearchInput) {
@@ -192,7 +192,7 @@ export default class DropdownUtils {
// Replace all spaces inside quote marks with underscores
// (will continue to match entire string until an end quote is found if any)
// This helps with matching the beginning & end of a token:key
- inputValue = inputValue.replace(/(('[^']*'{0,1})|("[^"]*"{0,1})|:\s+)/g, str =>
+ inputValue = inputValue.replace(/(('[^']*'{0,1})|("[^"]*"{0,1})|:\s+)/g, (str) =>
str.replace(/\s/g, '_'),
);
diff --git a/app/assets/javascripts/filtered_search/filtered_search_dropdown.js b/app/assets/javascripts/filtered_search/filtered_search_dropdown.js
index 8626e1a3d18..7434cc4c5d1 100644
--- a/app/assets/javascripts/filtered_search/filtered_search_dropdown.js
+++ b/app/assets/javascripts/filtered_search/filtered_search_dropdown.js
@@ -28,7 +28,7 @@ export default class FilteredSearchDropdown {
}
getCurrentHook() {
- return this.droplab.hooks.filter(h => h.id === this.hookId)[0] || null;
+ return this.droplab.hooks.filter((h) => h.id === this.hookId)[0] || null;
}
itemClicked(e, getValueFunction) {
@@ -134,7 +134,7 @@ export default class FilteredSearchDropdown {
if (!data) return;
- const results = data.map(o => {
+ const results = data.map((o) => {
const updated = o;
updated.droplab_hidden = false;
return updated;
@@ -157,7 +157,7 @@ export default class FilteredSearchDropdown {
// Iterate over all the static dropdown values,
// then hide `None` and `Any` items.
- Array.from(dropdownEl.querySelectorAll('li[data-value]')).forEach(itemEl => {
+ Array.from(dropdownEl.querySelectorAll('li[data-value]')).forEach((itemEl) => {
const {
dataset: { value },
} = itemEl;
diff --git a/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js b/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js
index d446e32394b..3c630c26bc7 100644
--- a/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js
+++ b/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js
@@ -23,7 +23,7 @@ export default class FilteredSearchDropdownManager {
isGroupDecendent,
filteredSearchTokenKeys,
}) {
- const removeTrailingSlash = url => url.replace(/\/$/, '');
+ const removeTrailingSlash = (url) => url.replace(/\/$/, '');
this.container = FilteredSearchContainer.container;
this.runnerTagsEndpoint = removeTrailingSlash(runnerTagsEndpoint);
diff --git a/app/assets/javascripts/filtered_search/filtered_search_manager.js b/app/assets/javascripts/filtered_search/filtered_search_manager.js
index 921d686bb28..11b2eb839ce 100644
--- a/app/assets/javascripts/filtered_search/filtered_search_manager.js
+++ b/app/assets/javascripts/filtered_search/filtered_search_manager.js
@@ -90,14 +90,14 @@ export default class FilteredSearchManager {
// Fetch recent searches from localStorage
this.fetchingRecentSearchesPromise = this.recentSearchesService
.fetch()
- .catch(error => {
+ .catch((error) => {
if (error.name === 'RecentSearchesServiceError') return undefined;
// eslint-disable-next-line no-new
new Flash(__('An error occurred while parsing recent searches'));
// Gracefully fail to empty array
return [];
})
- .then(searches => {
+ .then((searches) => {
if (!searches) {
return;
}
@@ -169,7 +169,7 @@ export default class FilteredSearchManager {
if (this.stateFilters) {
this.searchStateWrapper = this.searchState.bind(this);
- this.applyToStateFilters(filterEl => {
+ this.applyToStateFilters((filterEl) => {
filterEl.addEventListener('click', this.searchStateWrapper);
});
}
@@ -177,14 +177,14 @@ export default class FilteredSearchManager {
unbindStateEvents() {
if (this.stateFilters) {
- this.applyToStateFilters(filterEl => {
+ this.applyToStateFilters((filterEl) => {
filterEl.removeEventListener('click', this.searchStateWrapper);
});
}
}
applyToStateFilters(callback) {
- this.stateFilters.querySelectorAll('a[data-state]').forEach(filterEl => {
+ this.stateFilters.querySelectorAll('a[data-state]').forEach((filterEl) => {
if (this.states.indexOf(filterEl.dataset.state) > -1) {
callback(filterEl);
}
@@ -263,7 +263,7 @@ export default class FilteredSearchManager {
let backspaceCount = 0;
// closure for keeping track of the number of backspace keystrokes
- return e => {
+ return (e) => {
// 8 = Backspace Key
// 46 = Delete Key
// Handled by respective backspace-combination check functions
@@ -447,7 +447,7 @@ export default class FilteredSearchManager {
const removeElements = [];
- [].forEach.call(this.tokensContainer.children, t => {
+ [].forEach.call(this.tokensContainer.children, (t) => {
let canClearToken = t.classList.contains('js-visual-token');
if (canClearToken) {
@@ -460,7 +460,7 @@ export default class FilteredSearchManager {
}
});
- removeElements.forEach(el => {
+ removeElements.forEach((el) => {
el.parentElement.removeChild(el);
});
@@ -488,7 +488,7 @@ export default class FilteredSearchManager {
const { isLastVisualTokenValid } = FilteredSearchVisualTokens.getLastVisualTokenBeforeInput();
if (isLastVisualTokenValid) {
- tokens.forEach(t => {
+ tokens.forEach((t) => {
input.value = input.value.replace(`${t.key}:${t.operator}${t.symbol}${t.value}`, '');
FilteredSearchVisualTokens.addFilterVisualToken(
@@ -585,7 +585,7 @@ export default class FilteredSearchManager {
*/
const notKeyValueRegex = new RegExp(/not\[(\w+)\]\[?\]?=(.*)/);
- return params.map(query => {
+ return params.map((query) => {
// Check if there are matches for `not` operator
const matches = query.match(notKeyValueRegex);
if (matches && matches.length === 3) {
@@ -624,7 +624,7 @@ export default class FilteredSearchManager {
const usernameParams = this.getUsernameParams();
let hasFilteredSearch = false;
- params.forEach(p => {
+ params.forEach((p) => {
const split = p.split('=');
const keyParam = decodeURIComponent(split[0]);
const value = split[1];
@@ -746,7 +746,7 @@ export default class FilteredSearchManager {
paths.push(`state=${currentState}`);
}
- tokens.forEach(token => {
+ tokens.forEach((token) => {
const condition = this.filteredSearchTokenKeys.searchByConditionKeyValue(
token.key,
token.operator,
@@ -795,7 +795,7 @@ export default class FilteredSearchManager {
if (searchToken) {
const sanitized = searchToken
.split(' ')
- .map(t => encodeURIComponent(t))
+ .map((t) => encodeURIComponent(t))
.join('+');
paths.push(`search=${sanitized}`);
}
@@ -817,7 +817,7 @@ export default class FilteredSearchManager {
const usernamesById = {};
try {
const attribute = this.filteredSearchInput.getAttribute('data-username-params');
- JSON.parse(attribute).forEach(user => {
+ JSON.parse(attribute).forEach((user) => {
usernamesById[user.id] = user.username;
});
} catch (e) {
diff --git a/app/assets/javascripts/filtered_search/filtered_search_token_keys.js b/app/assets/javascripts/filtered_search/filtered_search_token_keys.js
index 89fc8047b65..6216ab5401d 100644
--- a/app/assets/javascripts/filtered_search/filtered_search_token_keys.js
+++ b/app/assets/javascripts/filtered_search/filtered_search_token_keys.js
@@ -14,7 +14,7 @@ export default class FilteredSearchTokenKeys {
}
getKeys() {
- return this.tokenKeys.map(i => i.key);
+ return this.tokenKeys.map((i) => i.key);
}
getAlternatives() {
@@ -36,16 +36,16 @@ export default class FilteredSearchTokenKeys {
}
searchByKey(key) {
- return this.tokenKeys.find(tokenKey => tokenKey.key === key) || null;
+ return this.tokenKeys.find((tokenKey) => tokenKey.key === key) || null;
}
searchBySymbol(symbol) {
- return this.tokenKeys.find(tokenKey => tokenKey.symbol === symbol) || null;
+ return this.tokenKeys.find((tokenKey) => tokenKey.symbol === symbol) || null;
}
searchByKeyParam(keyParam) {
return (
- this.tokenKeysWithAlternative.find(tokenKey => {
+ this.tokenKeysWithAlternative.find((tokenKey) => {
let tokenKeyParam = tokenKey.key;
// Replace hyphen with underscore to compare keyParam with tokenKeyParam
@@ -62,13 +62,13 @@ export default class FilteredSearchTokenKeys {
}
searchByConditionUrl(url) {
- return this.conditions.find(condition => condition.url === url) || null;
+ return this.conditions.find((condition) => condition.url === url) || null;
}
searchByConditionKeyValue(key, operator, value) {
return (
this.conditions.find(
- condition =>
+ (condition) =>
condition.tokenKey === key &&
condition.operator === operator &&
condition.value.toLowerCase() === value.toLowerCase(),
@@ -93,4 +93,13 @@ export default class FilteredSearchTokenKeys {
this.tokenKeys.push(confidentialToken);
this.tokenKeysWithAlternative.push(confidentialToken);
}
+
+ removeTokensForKeys(...keys) {
+ const keysSet = new Set(keys);
+
+ this.tokenKeys = this.tokenKeys.filter(({ key }) => !keysSet.has(key));
+ this.tokenKeysWithAlternative = this.tokenKeysWithAlternative.filter(
+ ({ key }) => !keysSet.has(key),
+ );
+ }
}
diff --git a/app/assets/javascripts/filtered_search/filtered_search_visual_tokens.js b/app/assets/javascripts/filtered_search/filtered_search_visual_tokens.js
index f0951f6b177..4e594dfa910 100644
--- a/app/assets/javascripts/filtered_search/filtered_search_visual_tokens.js
+++ b/app/assets/javascripts/filtered_search/filtered_search_visual_tokens.js
@@ -8,7 +8,7 @@ export default class FilteredSearchVisualTokens {
static getOperatorToken(value) {
let token = null;
- FilteredSearchVisualTokens.permissibleOperatorValues.forEach(operatorToken => {
+ FilteredSearchVisualTokens.permissibleOperatorValues.forEach((operatorToken) => {
if (value.startsWith(operatorToken)) {
token = operatorToken;
}
@@ -20,7 +20,7 @@ export default class FilteredSearchVisualTokens {
static getValueToken(value) {
let newValue = value;
- FilteredSearchVisualTokens.permissibleOperatorValues.forEach(operatorToken => {
+ FilteredSearchVisualTokens.permissibleOperatorValues.forEach((operatorToken) => {
if (value.startsWith(operatorToken)) {
newValue = value.slice(operatorToken.length);
}
@@ -48,7 +48,7 @@ export default class FilteredSearchVisualTokens {
const otherTokens = FilteredSearchContainer.container.querySelectorAll(
'.js-visual-token .selectable.selected',
);
- [].forEach.call(otherTokens, t => t.classList.remove('selected'));
+ [].forEach.call(otherTokens, (t) => t.classList.remove('selected'));
}
static selectToken(tokenButton, forceSelection = false) {
@@ -193,7 +193,8 @@ export default class FilteredSearchVisualTokens {
});
} else if (
!isLastVisualTokenValid &&
- (lastVisualToken && !lastVisualToken.querySelector('.operator'))
+ lastVisualToken &&
+ !lastVisualToken.querySelector('.operator')
) {
const tokensContainer = FilteredSearchContainer.container.querySelector('.tokens-container');
tokensContainer.removeChild(lastVisualToken);
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 f9388e9c5d8..46867b184c8 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
@@ -150,7 +150,7 @@ export const conditions = flattenDeep(
tokenKey: 'my-reaction',
value: __('Any'),
},
- ].map(condition => {
+ ].map((condition) => {
const [keyPart, valuePart] = condition.url.split('=');
const hasBrackets = keyPart.includes('[]');
diff --git a/app/assets/javascripts/filtered_search/stores/recent_searches_store.js b/app/assets/javascripts/filtered_search/stores/recent_searches_store.js
index 423f123f71c..ca0a58137b1 100644
--- a/app/assets/javascripts/filtered_search/stores/recent_searches_store.js
+++ b/app/assets/javascripts/filtered_search/stores/recent_searches_store.js
@@ -19,7 +19,7 @@ class RecentSearchesStore {
}
setRecentSearches(searches = []) {
- const trimmedSearches = searches.map(search =>
+ const trimmedSearches = searches.map((search) =>
typeof search === 'string' ? search.trim() : search,
);
diff --git a/app/assets/javascripts/filtered_search/visual_token_value.js b/app/assets/javascripts/filtered_search/visual_token_value.js
index f73646da6d1..0d36126943b 100644
--- a/app/assets/javascripts/filtered_search/visual_token_value.js
+++ b/app/assets/javascripts/filtered_search/visual_token_value.js
@@ -40,7 +40,7 @@ export default class VisualTokenValue {
return (
UsersCache.retrieve(username)
- .then(user => {
+ .then((user) => {
if (!user) {
return;
}
@@ -68,9 +68,9 @@ export default class VisualTokenValue {
);
return AjaxCache.retrieve(labelsEndpointWithParams)
- .then(labels => {
+ .then((labels) => {
const matchingLabel = (labels || []).find(
- label => `~${DropdownUtils.getEscapedText(label.title)}` === tokenValue,
+ (label) => `~${DropdownUtils.getEscapedText(label.title)}` === tokenValue,
);
if (!matchingLabel) {
@@ -96,8 +96,8 @@ export default class VisualTokenValue {
);
return AjaxCache.retrieve(epicsEndpointWithParams)
- .then(epics => {
- const matchingEpic = (epics || []).find(epic => epic.id === Number(tokenValue));
+ .then((epics) => {
+ const matchingEpic = (epics || []).find((epic) => epic.id === Number(tokenValue));
if (!matchingEpic) {
return;