diff options
Diffstat (limited to 'app/assets/javascripts/filtered_search')
7 files changed, 68 insertions, 68 deletions
diff --git a/app/assets/javascripts/filtered_search/add_extra_tokens_for_merge_requests.js b/app/assets/javascripts/filtered_search/add_extra_tokens_for_merge_requests.js index 51077296e20..7d4df25816b 100644 --- a/app/assets/javascripts/filtered_search/add_extra_tokens_for_merge_requests.js +++ b/app/assets/javascripts/filtered_search/add_extra_tokens_for_merge_requests.js @@ -12,6 +12,7 @@ export default (IssuableTokenKeys, disableTargetBranchFilter = false) => { tag: __('Yes or No'), lowercaseValueOnSubmit: true, capitalizeTokenValue: true, + hideNotEqual: true, }, conditions: [ { @@ -30,20 +31,6 @@ export default (IssuableTokenKeys, disableTargetBranchFilter = false) => { value: __('No'), operator: '=', }, - { - url: 'not[wip]=yes', - replacementUrl: 'not[draft]=yes', - tokenKey: 'draft', - value: __('Yes'), - operator: '!=', - }, - { - url: 'not[wip]=no', - replacementUrl: 'not[draft]=no', - tokenKey: 'draft', - value: __('No'), - operator: '!=', - }, ], }; @@ -109,43 +96,41 @@ export default (IssuableTokenKeys, disableTargetBranchFilter = false) => { IssuableTokenKeys.tokenKeysWithAlternative.splice(tokenPosition, 0, ...[approvedBy.token]); IssuableTokenKeys.conditions.push(...approvedBy.condition); - if (gon?.features?.deploymentFilters) { - const environmentToken = { - formattedKey: __('Environment'), - key: 'environment', - type: 'string', - param: '', - symbol: '', - icon: 'cloud-gear', - tag: 'environment', - }; + const environmentToken = { + formattedKey: __('Environment'), + key: 'environment', + type: 'string', + param: '', + symbol: '', + icon: 'cloud-gear', + tag: 'environment', + }; - const deployedBeforeToken = { - formattedKey: __('Deployed-before'), - key: 'deployed-before', - type: 'string', - param: '', - symbol: '', - icon: 'clock', - tag: 'deployed_before', - }; + const deployedBeforeToken = { + formattedKey: __('Deployed-before'), + key: 'deployed-before', + type: 'string', + param: '', + symbol: '', + icon: 'clock', + tag: 'deployed_before', + }; - const deployedAfterToken = { - formattedKey: __('Deployed-after'), - key: 'deployed-after', - type: 'string', - param: '', - symbol: '', - icon: 'clock', - tag: 'deployed_after', - }; + const deployedAfterToken = { + formattedKey: __('Deployed-after'), + key: 'deployed-after', + type: 'string', + param: '', + symbol: '', + icon: 'clock', + tag: 'deployed_after', + }; - IssuableTokenKeys.tokenKeys.push(environmentToken, deployedBeforeToken, deployedAfterToken); + IssuableTokenKeys.tokenKeys.push(environmentToken, deployedBeforeToken, deployedAfterToken); - IssuableTokenKeys.tokenKeysWithAlternative.push( - environmentToken, - deployedBeforeToken, - deployedAfterToken, - ); - } + IssuableTokenKeys.tokenKeysWithAlternative.push( + environmentToken, + deployedBeforeToken, + deployedAfterToken, + ); }; diff --git a/app/assets/javascripts/filtered_search/dropdown_ajax_filter.js b/app/assets/javascripts/filtered_search/dropdown_ajax_filter.js index 4652dfe71c3..30f412e590f 100644 --- a/app/assets/javascripts/filtered_search/dropdown_ajax_filter.js +++ b/app/assets/javascripts/filtered_search/dropdown_ajax_filter.js @@ -22,7 +22,7 @@ export default class DropdownAjaxFilter extends FilteredSearchDropdown { ajaxFilterConfig() { return { - endpoint: `${gon.relative_url_root || ''}${this.endpoint}`, + endpoint: this.endpoint, searchKey: 'search', searchValueFunction: this.getSearchInput.bind(this), loadingTemplate: this.loadingTemplate, @@ -33,9 +33,11 @@ export default class DropdownAjaxFilter extends FilteredSearchDropdown { } itemClicked(e) { - super.itemClicked(e, selected => - selected.querySelector('.dropdown-light-content').innerText.trim(), - ); + super.itemClicked(e, selected => { + const title = selected.querySelector('.dropdown-light-content').innerText.trim(); + + return DropdownUtils.getEscapedText(title); + }); } renderContent(forceShowList = false) { diff --git a/app/assets/javascripts/filtered_search/dropdown_operator.js b/app/assets/javascripts/filtered_search/dropdown_operator.js index 1bbd33b6258..8fee3385de1 100644 --- a/app/assets/javascripts/filtered_search/dropdown_operator.js +++ b/app/assets/javascripts/filtered_search/dropdown_operator.js @@ -39,7 +39,7 @@ export default class DropdownOperator extends FilteredSearchDropdown { this.dispatchInputEvent(); } - renderContent(forceShowList = false) { + renderContent(forceShowList = false, dropdownName = '') { const dropdownData = [ { tag: 'equal', @@ -48,8 +48,9 @@ export default class DropdownOperator extends FilteredSearchDropdown { help: __('is'), }, ]; + const dropdownToken = this.tokenKeys.searchByKey(dropdownName.toLowerCase()); - if (gon.features?.notIssuableQueries) { + if (gon.features?.notIssuableQueries && !dropdownToken?.hideNotEqual) { dropdownData.push({ tag: 'not-equal', type: 'string', diff --git a/app/assets/javascripts/filtered_search/dropdown_user.js b/app/assets/javascripts/filtered_search/dropdown_user.js index 0fb1828fc98..9a23ff25eac 100644 --- a/app/assets/javascripts/filtered_search/dropdown_user.js +++ b/app/assets/javascripts/filtered_search/dropdown_user.js @@ -5,7 +5,7 @@ export default class DropdownUser extends DropdownAjaxFilter { constructor(options = {}) { super({ ...options, - endpoint: '/-/autocomplete/users.json', + endpoint: `${gon.relative_url_root || ''}/-/autocomplete/users.json`, symbol: '@', }); } diff --git a/app/assets/javascripts/filtered_search/filtered_search_dropdown.js b/app/assets/javascripts/filtered_search/filtered_search_dropdown.js index f7ce2ea01e0..8626e1a3d18 100644 --- a/app/assets/javascripts/filtered_search/filtered_search_dropdown.js +++ b/app/assets/javascripts/filtered_search/filtered_search_dropdown.js @@ -83,16 +83,16 @@ export default class FilteredSearchDropdown { } } - render(forceRenderContent = false, forceShowList = false) { + render(forceRenderContent = false, forceShowList = false, hideNotEqual = false) { this.setAsDropdown(); const currentHook = this.getCurrentHook(); const firstTimeInitialized = currentHook === null; if (firstTimeInitialized || forceRenderContent) { - this.renderContent(forceShowList); + this.renderContent(forceShowList, hideNotEqual); } else if (currentHook.list.list.id !== this.dropdown.id) { - this.renderContent(forceShowList); + this.renderContent(forceShowList, hideNotEqual); } } 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 762383f5a1d..d446e32394b 100644 --- a/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js +++ b/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js @@ -12,6 +12,7 @@ export default class FilteredSearchDropdownManager { runnerTagsEndpoint = '', labelsEndpoint = '', milestonesEndpoint = '', + iterationsEndpoint = '', releasesEndpoint = '', environmentsEndpoint = '', epicsEndpoint = '', @@ -28,6 +29,7 @@ export default class FilteredSearchDropdownManager { this.runnerTagsEndpoint = removeTrailingSlash(runnerTagsEndpoint); this.labelsEndpoint = removeTrailingSlash(labelsEndpoint); this.milestonesEndpoint = removeTrailingSlash(milestonesEndpoint); + this.iterationsEndpoint = removeTrailingSlash(iterationsEndpoint); this.releasesEndpoint = removeTrailingSlash(releasesEndpoint); this.epicsEndpoint = removeTrailingSlash(epicsEndpoint); this.environmentsEndpoint = removeTrailingSlash(environmentsEndpoint); @@ -107,7 +109,7 @@ export default class FilteredSearchDropdownManager { this.mapping[key].reference.setOffset(offset); } - load(key, firstLoad = false) { + load(key, firstLoad = false, dropdownKey = '') { const mappingKey = this.mapping[key]; const glClass = mappingKey.gl; const { element } = mappingKey; @@ -141,12 +143,12 @@ export default class FilteredSearchDropdownManager { } this.updateDropdownOffset(key); - mappingKey.reference.render(firstLoad, forceShowList); + mappingKey.reference.render(firstLoad, forceShowList, dropdownKey); this.currentDropdown = key; } - loadDropdown(dropdownName = '') { + loadDropdown(dropdownName = '', dropdownKey = '') { let firstLoad = false; if (!this.droplab) { @@ -155,7 +157,7 @@ export default class FilteredSearchDropdownManager { } if (dropdownName === DROPDOWN_TYPE.operator) { - this.load(dropdownName, firstLoad); + this.load(dropdownName, firstLoad, dropdownKey); return; } @@ -167,7 +169,7 @@ export default class FilteredSearchDropdownManager { if (shouldOpenFilterDropdown || shouldOpenHintDropdown) { const key = match && match.key ? match.key : DROPDOWN_TYPE.hint; - this.load(key, firstLoad); + this.load(key, firstLoad, dropdownKey); } } @@ -200,11 +202,11 @@ export default class FilteredSearchDropdownManager { dropdownToOpen = hasOperator && lastOperatorToken ? dropdownName : DROPDOWN_TYPE.operator; } - this.loadDropdown(dropdownToOpen); + this.loadDropdown(dropdownToOpen, dropdownName); } else if (lastToken) { const lastOperator = FilteredSearchVisualTokens.getLastTokenOperator(); // Token has been initialized into an object because it has a value - this.loadDropdown(lastOperator ? lastToken.key : DROPDOWN_TYPE.operator); + this.loadDropdown(lastOperator ? lastToken.key : DROPDOWN_TYPE.operator, lastToken.key); } else { this.loadDropdown(DROPDOWN_TYPE.hint); } diff --git a/app/assets/javascripts/filtered_search/filtered_search_manager.js b/app/assets/javascripts/filtered_search/filtered_search_manager.js index 261532f8867..921d686bb28 100644 --- a/app/assets/javascripts/filtered_search/filtered_search_manager.js +++ b/app/assets/javascripts/filtered_search/filtered_search_manager.js @@ -52,16 +52,24 @@ export default class FilteredSearchManager { this.placeholder = placeholder; this.anchor = anchor; - const { multipleAssignees } = this.filteredSearchInput.dataset; + const { + multipleAssignees, + epicsEndpoint, + iterationsEndpoint, + } = this.filteredSearchInput.dataset; + if (multipleAssignees && this.filteredSearchTokenKeys.enableMultipleAssignees) { this.filteredSearchTokenKeys.enableMultipleAssignees(); } - const { epicsEndpoint } = this.filteredSearchInput.dataset; if (!epicsEndpoint && this.filteredSearchTokenKeys.removeEpicToken) { this.filteredSearchTokenKeys.removeEpicToken(); } + if (!iterationsEndpoint && this.filteredSearchTokenKeys.removeIterationToken) { + this.filteredSearchTokenKeys.removeIterationToken(); + } + this.recentSearchesStore = new RecentSearchesStore({ isLocalStorageAvailable: RecentSearchesService.isAvailable(), allowedKeys: this.filteredSearchTokenKeys.getKeys(), @@ -112,6 +120,7 @@ export default class FilteredSearchManager { releasesEndpoint = '', environmentsEndpoint = '', epicsEndpoint = '', + iterationsEndpoint = '', } = this.filteredSearchInput.dataset; this.dropdownManager = new FilteredSearchDropdownManager({ @@ -121,6 +130,7 @@ export default class FilteredSearchManager { releasesEndpoint, environmentsEndpoint, epicsEndpoint, + iterationsEndpoint, tokenizer: this.tokenizer, page: this.page, isGroup: this.isGroup, |