in packages/issue-dashboard-widgets/widgets/due-dates-calendar/app/edit-form.js [358:415]
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')
];
// eslint-disable-next-line max-len
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] === ' ');
}
}