Merge branch '27293-remove-repeated-labels' into 'master'
Remove duplicated tokens in issuable search bar Closes #27293 See merge request !10167
This commit is contained in:
commit
839183f2cb
|
@ -8,21 +8,31 @@ require('./filtered_search_token_keys');
|
|||
// Values that start with a double quote must end in a double quote (same for single)
|
||||
const tokenRegex = new RegExp(`(${allowedKeys.join('|')}):([~%@]?)(?:('[^']*'{0,1})|("[^"]*"{0,1})|(\\S+))`, 'g');
|
||||
const tokens = [];
|
||||
const tokenIndexes = []; // stores key+value for simple search
|
||||
let lastToken = null;
|
||||
const searchToken = input.replace(tokenRegex, (match, key, symbol, v1, v2, v3) => {
|
||||
let tokenValue = v1 || v2 || v3;
|
||||
let tokenSymbol = symbol;
|
||||
let tokenIndex = '';
|
||||
|
||||
if (tokenValue === '~' || tokenValue === '%' || tokenValue === '@') {
|
||||
tokenSymbol = tokenValue;
|
||||
tokenValue = '';
|
||||
}
|
||||
|
||||
tokens.push({
|
||||
key,
|
||||
value: tokenValue || '',
|
||||
symbol: tokenSymbol || '',
|
||||
});
|
||||
tokenIndex = `${key}:${tokenValue}`;
|
||||
|
||||
// Prevent adding duplicates
|
||||
if (tokenIndexes.indexOf(tokenIndex) === -1) {
|
||||
tokenIndexes.push(tokenIndex);
|
||||
|
||||
tokens.push({
|
||||
key,
|
||||
value: tokenValue || '',
|
||||
symbol: tokenSymbol || '',
|
||||
});
|
||||
}
|
||||
|
||||
return '';
|
||||
}).replace(/\s{2,}/g, ' ').trim() || '';
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: Remove duplicated tokens in issuable search bar
|
||||
merge_request:
|
||||
author:
|
|
@ -92,6 +92,20 @@ const FilteredSearchSpecHelper = require('../helpers/filtered_search_spec_helper
|
|||
|
||||
manager.search();
|
||||
});
|
||||
|
||||
it('removes duplicated tokens', (done) => {
|
||||
tokensContainer.innerHTML = FilteredSearchSpecHelper.createTokensContainerHTML(`
|
||||
${FilteredSearchSpecHelper.createFilterVisualTokenHTML('label', '~bug')}
|
||||
${FilteredSearchSpecHelper.createFilterVisualTokenHTML('label', '~bug')}
|
||||
`);
|
||||
|
||||
spyOn(gl.utils, 'visitUrl').and.callFake((url) => {
|
||||
expect(url).toEqual(`${defaultParams}&label_name[]=bug`);
|
||||
done();
|
||||
});
|
||||
|
||||
manager.search();
|
||||
});
|
||||
});
|
||||
|
||||
describe('handleInputPlaceholder', () => {
|
||||
|
|
|
@ -122,6 +122,14 @@ require('~/filtered_search/filtered_search_tokenizer');
|
|||
expect(results.lastToken).toBe('std::includes');
|
||||
expect(results.searchToken).toBe('std::includes');
|
||||
});
|
||||
|
||||
it('removes duplicated values', () => {
|
||||
const results = gl.FilteredSearchTokenizer.processTokens('label:~foo label:~foo');
|
||||
expect(results.tokens.length).toBe(1);
|
||||
expect(results.tokens[0].key).toBe('label');
|
||||
expect(results.tokens[0].value).toBe('foo');
|
||||
expect(results.tokens[0].symbol).toBe('~');
|
||||
});
|
||||
});
|
||||
});
|
||||
})();
|
||||
|
|
Loading…
Reference in New Issue