{"version":3,"file":"ngx-filter-pipe.mjs","sources":["../../src/app/shared/ngx-filter-pipe/ngx-filter.pipe.ts","../../src/app/shared/ngx-filter-pipe/ngx-filter.module.ts","../../ngx-filter-pipe.ts"],"sourcesContent":["/**\n * Created by vadimdez on 28/06/16.\n */\nimport { Pipe, Injectable, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'filterBy',\n  pure: false\n})\n@Injectable()\nexport class FilterPipe implements PipeTransform {\n  static isFoundOnWalking(value: any, key: any) {\n    let walker = value;\n    let found = false;\n    do {\n      if (\n        walker.hasOwnProperty(key) ||\n        Object.getOwnPropertyDescriptor(walker, key)\n      ) {\n        found = true;\n        break;\n      }\n    } while ((walker = Object.getPrototypeOf(walker)));\n\n    return found;\n  }\n\n  static isNumber(value: any) {\n    return !isNaN(parseInt(value, 10)) && isFinite(value);\n  }\n\n  /**\n   * Checks function's value if type is function otherwise same value\n   */\n  static getValue(value: any): any {\n    return typeof value === 'function' ? value() : value;\n  }\n\n  private filterByString(filter: string) {\n    if (filter) {\n      filter = filter.toLowerCase();\n    }\n    return (value: any) =>\n      !filter ||\n      (value ? ('' + value).toLowerCase().indexOf(filter) !== -1 : false);\n  }\n\n  private filterByBoolean(filter: boolean) {\n    return (value: any) => Boolean(value) === filter;\n  }\n\n  private filterByObject(filter: any) {\n    return (value: any) => {\n      for (const key in filter) {\n        if (key === '$or') {\n          if (!this.filterByOr(filter.$or)(FilterPipe.getValue(value))) {\n            return false;\n          }\n          continue;\n        }\n\n        if (!value || !FilterPipe.isFoundOnWalking(value, key)) {\n          return false;\n        }\n\n        if (!this.isMatching(filter[key], FilterPipe.getValue(value[key]))) {\n          return false;\n        }\n      }\n\n      return true;\n    };\n  }\n\n  private isMatching(filter: any, val: any) {\n    switch (typeof filter) {\n      case 'boolean':\n        return this.filterByBoolean(filter)(val);\n      case 'string':\n        return this.filterByString(filter)(val);\n      case 'object':\n        return this.filterByObject(filter)(val);\n    }\n    return this.filterDefault(filter)(val);\n  }\n\n  /**\n   * Filter value by $or\n   */\n  private filterByOr(filter: any[]): (value: any) => boolean {\n    return (value: any) => {\n      const length = filter.length;\n\n      const arrayComparison = (i: any) => value.indexOf(filter[i]) !== -1;\n      const otherComparison = (i: any) => this.isMatching(filter[i], value);\n      const comparison = Array.isArray(value)\n        ? arrayComparison\n        : otherComparison;\n\n      for (let i = 0; i < length; i++) {\n        if (comparison(i)) {\n          return true;\n        }\n      }\n\n      return false;\n    };\n  }\n\n  /**\n   * Default filterDefault function\n   */\n  private filterDefault(filter: any): (value: any) => boolean {\n    return (value: any) => filter === undefined || filter == value;\n  }\n\n  transform(array: any[], filter: any): any {\n    if (!array) {\n      return array;\n    }\n\n    switch (typeof filter) {\n      case 'boolean':\n        return array.filter(this.filterByBoolean(filter));\n      case 'string':\n        if (FilterPipe.isNumber(filter)) {\n          return array.filter(this.filterDefault(filter));\n        }\n        return array.filter(this.filterByString(filter));\n      case 'object':\n        return array.filter(this.filterByObject(filter));\n      case 'function':\n        return array.filter(filter);\n    }\n    return array.filter(this.filterDefault(filter));\n  }\n}\n","/**\n * Created by vadimdez on 28/11/2016.\n */\nimport { NgModule } from '@angular/core';\nimport { FilterPipe } from './ngx-filter.pipe';\n\n@NgModule({\n  declarations: [FilterPipe],\n  providers: [FilterPipe],\n  exports: [FilterPipe]\n})\nexport class FilterPipeModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}