@thiagoprz/fulltext-search-pipe
Version:
Angular pipe with full text search functionality
57 lines • 5.67 kB
JavaScript
import { Injectable, Pipe } from '@angular/core';
/**
* FulltextSearchPipe
* @author Thiago Przyczynski <przyczynski@gmail.com>
*/
export class FulltextSearchPipe {
constructor() { }
/**
* Transform method pipe
* @param string value
* @param string query
* @param any field
*/
transform(value, query, field) {
return query ? value.reduce((prev, next) => {
if (typeof field == 'string') {
query = query.toString();
if (next[field] && this.removeAccents(next[field].toLowerCase()).includes(this.removeAccents(query.toLowerCase()))) {
prev.push(next);
}
}
else {
for (let i in field) {
if (next[field[i]] && this.removeAccents(next[field[i]].toLowerCase()).includes(this.removeAccents(query.toLowerCase()))) {
prev.push(next);
break;
}
}
}
return prev;
}, []) : value;
}
/**
* Removing accents
* @param string value
*/
removeAccents(value) {
return value
.replace(/á/g, 'a')
.replace(/ã/g, 'a')
.replace(/à/g, 'a')
.replace(/é/g, 'e')
.replace(/í/g, 'i')
.replace(/ó/g, 'o')
.replace(/ô/g, 'o')
.replace(/õ/g, 'o')
.replace(/ú/g, 'u');
}
}
FulltextSearchPipe.decorators = [
{ type: Pipe, args: [{
name: 'FullTextSearch'
},] },
{ type: Injectable }
];
FulltextSearchPipe.ctorParameters = () => [];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVsbHRleHQtc2VhcmNoLXBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90aGlhZ29wcnovZnVsbHRleHQtc2VhcmNoLXBpcGUvc3JjL2xpYi9mdWxsdGV4dC1zZWFyY2gtcGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUtqRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBRTdCLGdCQUFlLENBQUM7SUFFaEI7Ozs7O09BS0c7SUFDSSxTQUFTLENBQUMsS0FBVSxFQUFFLEtBQWEsRUFBRSxLQUFVO1FBQ3BELE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBUyxFQUFFLElBQVMsRUFBRSxFQUFFO1lBQ25ELElBQUcsT0FBTyxLQUFLLElBQUksUUFBUSxFQUFFO2dCQUMzQixLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN6QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUU7b0JBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFBRTthQUN6STtpQkFBTTtnQkFDTCxLQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRTtvQkFDbEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFO3dCQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQUMsTUFBTTtxQkFBRTtpQkFDdEo7YUFDRjtZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7T0FHRztJQUNILGFBQWEsQ0FBQyxLQUFhO1FBQ3pCLE9BQU8sS0FBSzthQUNULE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO2FBQ2xCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO2FBQ2xCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO2FBQ2xCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO2FBQ2xCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO2FBQ2xCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO2FBQ2xCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO2FBQ2xCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO2FBQ2xCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDeEIsQ0FBQzs7O1lBL0NGLElBQUksU0FBQztnQkFDSixJQUFJLEVBQUUsZ0JBQWdCO2FBQ3ZCO1lBQ0EsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbkBQaXBlKHtcbiAgbmFtZTogJ0Z1bGxUZXh0U2VhcmNoJ1xufSlcbkBJbmplY3RhYmxlKClcbi8qKlxuICogRnVsbHRleHRTZWFyY2hQaXBlXG4gKiBAYXV0aG9yIFRoaWFnbyBQcnp5Y3p5bnNraSA8cHJ6eWN6eW5za2lAZ21haWwuY29tPlxuICovXG5leHBvcnQgY2xhc3MgRnVsbHRleHRTZWFyY2hQaXBlIHtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSBtZXRob2QgcGlwZVxuICAgKiBAcGFyYW0gc3RyaW5nIHZhbHVlXG4gICAqIEBwYXJhbSBzdHJpbmcgcXVlcnlcbiAgICogQHBhcmFtIGFueSBmaWVsZFxuICAgKi9cbiAgcHVibGljIHRyYW5zZm9ybSh2YWx1ZTogYW55LCBxdWVyeTogc3RyaW5nLCBmaWVsZDogYW55KTogYW55IHtcbiAgICByZXR1cm4gcXVlcnkgPyB2YWx1ZS5yZWR1Y2UoKHByZXY6IGFueSwgbmV4dDogYW55KSA9PiB7XG4gICAgICBpZih0eXBlb2YgZmllbGQgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcXVlcnkgPSBxdWVyeS50b1N0cmluZygpO1xuICAgICAgICBpZiAobmV4dFtmaWVsZF0gJiYgdGhpcy5yZW1vdmVBY2NlbnRzKG5leHRbZmllbGRdLnRvTG93ZXJDYXNlKCkpLmluY2x1ZGVzKHRoaXMucmVtb3ZlQWNjZW50cyhxdWVyeS50b0xvd2VyQ2FzZSgpKSkpIHsgcHJldi5wdXNoKG5leHQpOyB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IobGV0IGkgaW4gZmllbGQpIHtcbiAgICAgICAgICBpZiAobmV4dFtmaWVsZFtpXV0gJiYgdGhpcy5yZW1vdmVBY2NlbnRzKG5leHRbZmllbGRbaV1dLnRvTG93ZXJDYXNlKCkpLmluY2x1ZGVzKHRoaXMucmVtb3ZlQWNjZW50cyhxdWVyeS50b0xvd2VyQ2FzZSgpKSkpIHsgcHJldi5wdXNoKG5leHQpOyBicmVhazsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9LCBbXSkgOiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmluZyBhY2NlbnRzXG4gICAqIEBwYXJhbSBzdHJpbmcgdmFsdWVcbiAgICovXG4gIHJlbW92ZUFjY2VudHModmFsdWU6IHN0cmluZykge1xuICAgIHJldHVybiB2YWx1ZVxuICAgICAgLnJlcGxhY2UoL8OhL2csICdhJylcbiAgICAgIC5yZXBsYWNlKC/Doy9nLCAnYScpXG4gICAgICAucmVwbGFjZSgvw6AvZywgJ2EnKVxuICAgICAgLnJlcGxhY2UoL8OpL2csICdlJylcbiAgICAgIC5yZXBsYWNlKC/DrS9nLCAnaScpXG4gICAgICAucmVwbGFjZSgvw7MvZywgJ28nKVxuICAgICAgLnJlcGxhY2UoL8O0L2csICdvJylcbiAgICAgIC5yZXBsYWNlKC/DtS9nLCAnbycpXG4gICAgICAucmVwbGFjZSgvw7ovZywgJ3UnKTtcbiAgfVxuXG59XG4iXX0=