in packages/issue-dashboard-widgets/widgets/youtrack-issues-list/app/issues-list-edit-form.js [212:273]
renderFiltersList(filtersType) {
const {allContexts, context, search} = this.state;
const checkFilterType = (stringType, folder) =>
(folder.$type || '').toLowerCase().indexOf(stringType) > -1;
const isProject = checkFilterType.bind(null, 'project');
const isTag = checkFilterType.bind(null, 'tag');
const isSavedSearch = checkFilterType.bind(null, 'savedquery');
const filterTypeCheckers = [
isProject, isTag, isSavedSearch
];
const noFiltersMessages = [
i18n('No projects'),
i18n('No tags'),
i18n('No saved searches')
];
const displayedFilters = (allContexts || []).
filter(filterTypeCheckers[filtersType]).
filter(filterIsNotAlreadyUsed);
return (
<div className="issues-list-widget__filters-list">
{
(!allContexts) && <LoaderInline/>
}
{
displayedFilters.length === 0 &&
(
<span className="issues-list-widget__no-filters">
{noFiltersMessages[filtersType]}
</span>
)
}
{
displayedFilters.length > 0 && displayedFilters.map(
filter => this.renderFilterLink(filtersType, filter)
)
}
</div>
);
// eslint-disable-next-line complexity
function filterIsNotAlreadyUsed(filter) {
if (filter.id === (context || {}).id) {
return false;
}
const trimmedSearch = (search || '').replace(/\s+$/g, '');
const startPosition = trimmedSearch.indexOf(filter.query);
if (startPosition === -1) {
return true;
}
const endPosition = startPosition + filter.query.length;
if (startPosition !== 0 && trimmedSearch[startPosition - 1] !== ' ') {
return true;
}
return !(endPosition === trimmedSearch.length ||
trimmedSearch[endPosition] === ' ');
}
}