in index.js [710:763]
function _searchProposals (filterText) {
var filterExpression = filterText.toLowerCase()
var searchableProperties = [
['id'],
['title'],
['reviewManager', 'name'],
['status', 'state'],
['status', 'version'],
['authors', 'name'],
['authors', 'link'],
['implementation', 'account'],
['implementation', 'repository'],
['implementation', 'id'],
['trackingBugs', 'link'],
['trackingBugs', 'status'],
['trackingBugs', 'id'],
['trackingBugs', 'assignee']
]
// reflect over the proposals and find ones with matching properties
var matchingProposals = proposals.filter(function (proposal) {
var match = false
searchableProperties.forEach(function (propertyList) {
var value = proposal
propertyList.forEach(function (propertyName, index) {
if (!value) return
value = value[propertyName]
if (index < propertyList.length - 1) {
// For arrays, apply the property check to each child element.
// Note that this only looks to a depth of one property.
if (Array.isArray(value)) {
var matchCondition = value.some(function (element) {
return element[propertyList[index + 1]] && element[propertyList[index + 1]].toString().toLowerCase().indexOf(filterExpression) >= 0
})
if (matchCondition) {
match = true
}
} else {
return
}
} else if (value && value.toString().toLowerCase().indexOf(filterExpression) >= 0) {
match = true
}
})
})
return match
})
return matchingProposals
}