'use strict'; const misc = require('../util/misc.js'); const PoolList = require('../models/pool_list.js'); const AutoCompleteControl = require('./auto_complete_control.js'); function _poolListToMatches(pools, options) { return [...pools].sort((pool1, pool2) => { return pool2.postCount - pool1.postCount; }).map(pool => { let cssName = misc.makeCssName(pool.category, 'pool'); const caption = ( '' + misc.escapeHtml(pool.names[0] + ' (' + pool.postCount + ')') + ''); return { caption: caption, value: pool, }; }); } class PoolAutoCompleteControl extends AutoCompleteControl { constructor(input, options) { const minLengthForPartialSearch = 3; options.getMatches = text => { const term = misc.escapeSearchTerm(text); const query = ( text.length < minLengthForPartialSearch ? term + '*' : '*' + term + '*') + ' sort:post-count'; return new Promise((resolve, reject) => { PoolList.search( query, 0, this._options.maxResults, ['id', 'names', 'category', 'postCount', 'version']) .then( response => resolve( _poolListToMatches(response.results, this._options)), reject); }); }; super(input, options); } }; module.exports = PoolAutoCompleteControl;