UNPKG

@thiagoprz/fulltext-search-pipe

Version:

Angular pipe with full text search functionality

57 lines 5.67 kB
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=