{"version":3,"file":"akita-filters-plugin.mjs","sources":["../../../projects/akita-filters-plugin/src/lib/akita-filters-store.ts","../../../projects/akita-filters-plugin/src/lib/akita-filters-query.ts","../../../projects/akita-filters-plugin/src/lib/filters-utils.ts","../../../projects/akita-filters-plugin/src/lib/akita-filters.model.ts","../../../projects/akita-filters-plugin/src/lib/akita-filters-plugin.ts","../../../projects/akita-filters-plugin/src/index.ts","../../../projects/akita-filters-plugin/src/akita-filters-plugin.ts"],"sourcesContent":["import {EntityState, EntityStore, getEntityType, SortByOptions, StoreConfig} from '@datorama/akita';\nimport {AkitaFilter, AkitaFilterBase, AkitaFilterLocal, AkitaFilterServer} from './akita-filters.model';\n\nexport interface FiltersState<S extends EntityState, E = getEntityType<S>> extends EntityState<AkitaFilterLocal<S> | AkitaFilterServer<S> | AkitaFilterBase<S>> {\n  sort: SortByOptions<any>;\n}\n\n@StoreConfig({ name: 'filters' })\nexport class AkitaFiltersStore<S extends EntityState> extends EntityStore<FiltersState<S>, AkitaFilterLocal<S> | AkitaFilterServer<S> | AkitaFilterBase<S>> {\n  constructor( storeName: string ) {\n    super(undefined, { name: storeName });\n  }\n}\n","import { FiltersState, AkitaFiltersStore } from './akita-filters-store';\nimport {EntityState, Order, QueryConfig, QueryEntity} from '@datorama/akita';\nimport { AkitaFilterAllType } from './akita-filters.model';\n\n\n@QueryConfig({\n  sortBy: 'order',\n  sortByOrder: Order.ASC\n})\nexport class AkitaFiltersQuery<S extends EntityState>\n  extends QueryEntity<FiltersState<S>, AkitaFilterAllType<S>, string> {\n  constructor(protected store: AkitaFiltersStore<S>) {\n    super(store);\n  }\n}\n","\nimport {isDefined, isString, isObject, HashMap, getEntityType, isArray} from '@datorama/akita';\nimport { AkitaFilterAllType, AkitaFilterBase, AkitaFilterLocal} from './akita-filters.model';\n\n/**\n * Helper function to do a default filter\n */\nexport function defaultFilter<E = any, S = any>(\n  value: E | getEntityType<S>,\n  index: number, array: E[] | HashMap<getEntityType<E>>,\n  filter: Partial<AkitaFilterBase<E, S>> ): boolean {\n  if ( isObject(value) && isString(filter.value) ) {\n    return searchFilter(filter.value, value);\n  }\n  return isDefined(filter.value) ? filter.value === value : !!value;\n}\n\n/**\n * Helper function to do a default filter\n */\n export function defaultFilterLocal<E = any, S = any>(\n  value: E | getEntityType<S>,\n  index: number, array: E[] | HashMap<getEntityType<E>>,\n  filter: Partial<AkitaFilterLocal<E, S>> ): boolean {\n  if ( isObject(value) && isString(filter.value) ) {\n    return searchFilter(filter.value, value);\n  }\n  return isDefined(filter.value) ? filter.value === value : !!value;\n}\n\n/**\n * Helper function to do search on all string element\n */\nexport function searchFilter( searchKey: string, inObj: Object ): boolean {\n  return isString(searchKey)  && Object.keys(inObj).some(function( key ) {\n    return isString(inObj[key]) && inObj[key].toLocaleLowerCase().includes(searchKey.toLocaleLowerCase());\n  });\n}\n\n/**\n * Helper function to do search in one key of an object\n */\nexport function searchFilterIn( searchKey: string, inObj: Object, inKey: string ): boolean {\n  return  isString(searchKey)\n    && isString(inKey)\n    && isString(inObj[inKey])\n    && inObj[inKey].toLocaleLowerCase().includes(searchKey.toLocaleLowerCase());\n}\n\n\n/**\n * Function to compare changes between two AkitaFilters arrays\n */\nexport function compareFiltersArray<S = any>(x: Array<AkitaFilterAllType<S>>, y: Array<AkitaFilterAllType<S>>) {\n  if (!x && !y) { return true; }\n  if (!x || !y || x.length !== y.length) { return false; }\n  return !x.some((filterX) => {\n    const find = y.find(filterY => filterY.id === filterX.id);\n    return !(find && find.value === filterX.value);\n  });\n}\n\nexport const getCompareFilters = (): Function => {\n  return compareFiltersArray;\n};\n\n","import {EntityState, getEntityType, guid, HashMap, ID} from '@datorama/akita';\nimport {defaultFilter} from './filters-utils';\n\nfunction capitalize(str: string): string {\n    return str.charAt(0).toUpperCase() + str.substr(1);\n}\n\nexport interface AkitaFilterBase<S extends EntityState, E = getEntityType<S>> {\n    id: ID;\n    /** A corresponding name for display the filter, by default, it will be ${id): ${value}  */\n    name?: string;\n    /** set the order for filter, by default, it is 10 */\n    order?: number;\n    /** If you want to have filter that is not displayed on the list */\n    hide?: boolean;\n    /** The filter value, this will be used to compute name, or getting the current value, to initiate your form */\n    value?: any;\n}\n\nexport interface AkitaFilterLocal<S extends EntityState, E = getEntityType<S>> extends AkitaFilterBase<S, E> {\n  /** If you have enabled server filter, specify witch filters will be call to server, default to false. */\n  server?: false;\n  /** The function to apply filters, by default use defaultFilter helpers, that will search the value in the object */\n  predicate: (entity: E, index: number, array: E[] | HashMap<E>, filter: AkitaFilterBase<S> | AkitaFilterLocal<S>) => boolean;\n}\n\nexport interface AkitaFilterServer<S extends EntityState, E = getEntityType<S>> extends AkitaFilterBase<S, E> {\n  /** If you have enabled server filter, specify witch filters will be call to server, default to false. */\n  server: true;\n  /** The filter value will be sent to withServer function */\n  value: any;\n}\n\nexport type AkitaFilterAllType<S extends EntityState, E = getEntityType<S>> = AkitaFilterBase<S, E> | AkitaFilterLocal<S, E> | AkitaFilterServer<S, E>;\n\n/**\n * @deprecated: consider using AkitaFilterLocal or AkitaFilterServer rathers than AkitaFilter.\n */\nexport interface AkitaFilter<S extends EntityState, E = getEntityType<S>> extends AkitaFilterBase<S, E> {\n  predicate?: (entity: E, index: number, array: E[] | HashMap<E>, filter: AkitaFilterBase<S> | AkitaFilterLocal<S>) => boolean;\n  server?: boolean;\n  /** add any other data you want to add, keep this to get the compatibilities with olders versions **/\n  [key: string]: any;\n};\n\nexport function createFilter<S extends EntityState, E = getEntityType<S>>\n  (filterParams: Partial<AkitaFilterBase<S> | AkitaFilterLocal<S> | AkitaFilterLocal<S>>) {\n    const id = filterParams.id ? filterParams.id : guid();\n    const name = filterParams.name || (filterParams.value && filterParams.id ?\n        `${capitalize(filterParams.id.toString())}: ${filterParams.value.toString()}` : undefined);\n\n    if (!(filterParams as AkitaFilterLocal<S>)?.predicate && filterParams.value && !(filterParams as AkitaFilterServer<S>).server) {\n        /** use default function, if not provided */\n        // @ts-ignore\n        (filterParams as AkitaFilterLocal<S>).predicate = defaultFilter;\n    }\n\n    return {id, name, hide: false, order: 10, server: false, ...filterParams} as AkitaFilterBase<S>;\n}\n","import {AkitaFiltersStore, FiltersState} from './akita-filters-store';\nimport {AkitaFiltersQuery} from './akita-filters-query';\n// import {BehaviorSubject, combineLatest, isObservable, Observable, ObservedValueOf, of, Subscription} from 'rxjs';\nimport {distinctUntilChanged, map} from 'rxjs/operators';\nimport {\n  compareValues,\n  EntityCollectionPlugin,\n  EntityState,\n  EntityStore,\n  getEntityType,\n  getIDType,\n  HashMap,\n  ID,\n  isFunction,\n  isUndefined,\n  OrArray,\n  QueryEntity,\n  SelectAllOptionsA,\n  SelectAllOptionsB,\n  SelectAllOptionsC,\n  SelectAllOptionsD,\n  SelectAllOptionsE,\n  SortByOptions\n} from '@datorama/akita';\n// noinspection JSDeprecatedSymbols\nimport { AkitaFilter, AkitaFilterAllType, AkitaFilterLocal, AkitaFilterServer, createFilter } from './akita-filters.model';\nimport { BehaviorSubject, combineLatest, isObservable, Observable, ObservedValueOf, of, Subscription } from \"rxjs\";\n\nexport interface FiltersParams<S extends EntityState> {\n  filtersStoreName?: string;\n  entityIds?: OrArray<getIDType<S>>;\n  filtersStore?: AkitaFiltersStore<S>;\n  filtersQuery?: AkitaFiltersQuery<S>;\n\n  [key: string]: any;\n}\n\nexport interface NormalizedFilterOptions {\n  withSort?: boolean;\n  asQueryParams?: boolean;\n  sortByKey?: string;\n  sortByOrderKey?: string;\n}\n\nexport interface WithServerOptions extends NormalizedFilterOptions {\n  [key: string]: any;\n}\n\nexport interface AkitaFiltersPluginInterface<S, P> extends EntityCollectionPlugin<S, P> {\n\n}\n\nexport class AkitaFiltersPlugin<S extends EntityState, E = getEntityType<S>, I = OrArray<getIDType<S>>>\n  {\n  get withServerOptions(): WithServerOptions {\n    return this._withServerOptions;\n  }\n\n  set withServerOptions(value: WithServerOptions) {\n    this._withServerOptions = value;\n  }\n\n  private readonly _filtersStore: AkitaFiltersStore<S>;\n  private readonly _filtersQuery: AkitaFiltersQuery<S>;\n  private readonly _refresh$: BehaviorSubject<number> = new BehaviorSubject<number>(0);\n  private _server: boolean = false;\n\n  private _selectFilters$: Observable<Array<AkitaFilterAllType<S>>>;\n  private readonly _selectSortBy$: Observable<SortByOptions<E> | null>;\n  private readonly _selectFiltersAll$: Observable<Array<AkitaFilterAllType<S>>>;\n  private _onChangeFilter: (filtersNormalized: (string | HashMap<any>)) => any | boolean | Observable<Array<getEntityType<S>>>;\n  private _lastServerSubscription: Subscription;\n  private _withServerOptions: WithServerOptions = {};\n\n  constructor(protected query: QueryEntity<S>, private params: FiltersParams<S> = {}) {\n\n    this.params = {...{filtersStoreName: this.getStore().storeName + 'Filters'}, ...params};\n\n    this._filtersStore = (params.filtersStore) ? params.filtersStore : new AkitaFiltersStore<S>(this.params.filtersStoreName);\n    this._filtersQuery = (params.filtersQuery) ? params.filtersQuery : new AkitaFiltersQuery<S>(this._filtersStore);\n\n    this._selectFilters$ = this.filtersQuery.selectAll({sortBy: 'order'});\n    this._selectFiltersAll$ = this.filtersQuery.selectAll({sortBy: 'order', filterBy: filter => !filter?.hide});\n    this._selectSortBy$ = this.filtersQuery.select(state => state?.sort);\n  }\n\n\n  get filtersStore(): AkitaFiltersStore<S> {\n    return this._filtersStore;\n  }\n\n  get filtersQuery(): AkitaFiltersQuery<S> {\n    return this._filtersQuery;\n  }\n\n  /**\n   *  Add support of filters from server. Provide a function that will be call each time a filter changes\n   *\n   *  new AkitaFilterPlugins(query).withServer((filters) => {\n   *      return this.api.getData(filters);\n   *  });\n   *\n   *  Return false to not add in store. if you want to manage the store in your own.\n   */\n  withServer(\n    onChangeFilter: (filtersNormalized: string | HashMap<any>) => any | boolean,\n    options: WithServerOptions = {}): AkitaFiltersPlugin<S, E, I> {\n    options = {...options};\n\n    this.server = true;\n    this.withServerOptions = options;\n    this._onChangeFilter = onChangeFilter;\n\n    // Change default select filters to remove server filters, if you use selectAllByFilters();\n    this._selectFilters$ = this._filtersQuery.selectAll({sortBy: 'order', filterBy: filter => !(filter as AkitaFilterServer<S>)?.server});\n\n    const listObservable: Array<Observable<any>> = [];\n    listObservable.push(this._filtersQuery.selectAll({sortBy: 'order', filterBy: filter => (filter as AkitaFilterServer<S>)?.server === true})\n      .pipe(distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b))));\n\n\n    if (this.withServerOptions.withSort) {\n      listObservable.push(this.selectSortBy() ?? of(null));\n    }\n    listObservable.push(this._refresh$);\n\n    combineLatest (listObservable)\n      .pipe(map((__data) => {\n      return this.getNormalizedFilters(this.withServerOptions);\n    })).subscribe((normalizerFilters) => {\n      const returnOnChange: boolean | Observable<Array<getEntityType<S>>> = this._onChangeFilter(normalizerFilters);\n\n      if (returnOnChange !== false && isObservable(returnOnChange)) {\n        if (this._lastServerSubscription) { this._lastServerSubscription.unsubscribe(); }\n        this._lastServerSubscription = returnOnChange.subscribe((newValue: Array<getEntityType<S>>) => {\n          this.getStore().set(newValue);\n        });\n      }\n    });\n    return this;\n  }\n\n  get server(): boolean {\n    return this._server;\n  }\n\n  set server(value: boolean) {\n    this._server = value;\n  }\n\n\n  /** Return true, if server is configured **/\n  hasServer(): boolean {\n    return this.server;\n  }\n\n  /**\n   *  Select all filters\n   *\n   *  Note: Only all filters not hide (with hide=true), will not be displayed. If you want it, call directly to:\n   * `this.filtersQuery.selectAll()`\n   *\n   *\n   */\n  selectFilters(): Observable<Array<AkitaFilterAllType<S>>> {\n    return this._selectFiltersAll$;\n  }\n\n  /**\n   * Get all the current snapshot filters\n   *\n   *  Note: filters with hide=true, will not be displayed. If you want it, call directly to:\n   * `this.filtersQuery.getAll()`\n   */\n  getFilters(): Array<AkitaFilterAllType<S>> {\n    return this._filtersQuery.getAll({filterBy: filter => !filter.hide});\n  }\n\n  /**\n   * Get all the current snapshot server filters (only if server is available else return default not hidden filters)\n   *\n   *  Note: filters with server=false, will not be displayed. If you want it, call directly to:\n   * `this.filtersQuery.getAll()`\n   */\n  getServerFilters(): Array<AkitaFilterServer<S>> {\n    return this.server ?\n      this._filtersQuery.getAll({filterBy: filter => (filter as AkitaFilterServer<S>)?.server})  as Array<AkitaFilterServer<S>>\n      : this.getFilters() as Array<AkitaFilterServer<S>>;\n  }\n\n  /**\n   * Select All Entity with apply filter to it, and updated with any change (entity or filter)\n   * Will not apply sort, if you need return   asObject:true !\n   */\n  selectAllByFilters(options?: SelectAllOptionsA<E>\n    | SelectAllOptionsB<E> | SelectAllOptionsC<E> |\n    SelectAllOptionsD<E> | SelectAllOptionsE<E> | any): Observable<Array<getEntityType<S>> | HashMap<getEntityType<S>>> {\n    const listObservable: Array<Observable<any>> = [];\n    listObservable.push(this._selectFilters$, this.getQuery().selectAll(options), this._refresh$);\n\n    if (options && options.asObject) {\n      return combineLatest(listObservable).pipe(\n        map((values) => {\n          const [filters, entities, __refresh] = values;\n          return this._applyFiltersForHashMap((entities as unknown as HashMap<getEntityType<S>>), filters);\n        }),\n      );\n    } else {\n      let sortBy = this.selectSortBy();\n      if (this.server && this._withServerOptions?.withSort) {\n        sortBy = sortBy.pipe(map(__data => null));\n      }\n      listObservable.push(sortBy);\n\n      return combineLatest(listObservable).pipe(\n        map((values) => {\n          const [filters, entities, __refresh, sort ] = values;\n          return this._applyFiltersForArray((entities as unknown as Array<getEntityType<S>>), filters, sort);\n        }),\n      );\n    }\n  }\n\n  /**\n   * Get All Entity with apply filter to it, and updated with any change (entity or filter)\n   * Will not apply sort, if you need return   asObject:true !\n   */\n  getAllByFilters(options?: SelectAllOptionsA<E>\n    | SelectAllOptionsB<E> | SelectAllOptionsC<E> |\n    SelectAllOptionsD<E> | SelectAllOptionsE<E> | any): getEntityType<S>[] | HashMap<getEntityType<S>> {\n    const filters = this.filtersQuery.getAll();\n    const unkNowEntity: unknown = this.getQuery().getAll(options);\n    if (options && options.asObject) {\n      return this._applyFiltersForHashMap((unkNowEntity as HashMap<getEntityType<S>>), filters);\n    } else {\n      const sort = this.getSortBy();\n      return this._applyFiltersForArray((unkNowEntity as getEntityType<S>[]), filters, sort);\n    }\n  }\n\n  public getSortBy() {\n    const state = this.filtersQuery.getValue();\n    return state && state.sort ? state.sort : null;\n  }\n\n  // noinspection JSDeprecatedSymbols\n  /**\n   * Create or update a filter\n   */\n  setFilter(filter: Partial<AkitaFilterAllType<S> | AkitaFilter<S>>) {\n    filter = this.updateServerIfNeeded(filter);\n    const entity = createFilter(filter as AkitaFilterAllType<S>);\n    // noinspection TypeScriptValidateTypes\n    this.filtersStore.upsert(entity.id, entity);\n  }\n\n  private updateServerIfNeeded(filter: Partial<AkitaFilterAllType<S>>) {\n    if (this.server && isUndefined((filter as AkitaFilterServer<S>)?.server)) {\n      (filter as AkitaFilterServer<S>).server = true;\n    }\n    return filter;\n  }\n\n  // noinspection JSDeprecatedSymbols\n  /**\n   * Create or update multiples filters\n   */\n  setFilters(filters: Array<Partial<AkitaFilterAllType<S> | AkitaFilter<S>>>) {\n    if (!filters) { return; }\n    const entities = filters.map((filter => {\n      filter = this.updateServerIfNeeded(filter);\n      return createFilter(filter);\n    }));\n\n    this.filtersStore.upsertMany(entities);\n  }\n\n  /**\n   * Remove a Filter\n   */\n  removeFilter(id: ID) {\n    this.filtersStore.remove(id as unknown as OrArray<I>);\n  }\n\n  /**\n   * Remove a Filter\n   */\n  removeFilters(ids: ID[]) {\n    this.filtersStore.remove(ids);\n  }\n\n  /**\n   * Clear all filters\n   */\n  clearFilters() {\n    this.filtersStore.remove();\n  }\n\n  /**\n   * Get filter value, return null, if value not available\n   */\n  getFilterValue<T = any>(id: string): T | null {\n    if (this.filtersQuery.hasEntity(id)) {\n      const entity: AkitaFilterAllType<S> = this.filtersQuery.getEntity(id);\n      return entity.value ? entity.value : null;\n    }\n\n    return null;\n  }\n\n  /**\n   * Get filter value, return null, if value not available\n   */\n  getSortValue(): SortByOptions<E> | null {\n    const state: FiltersState<S> = this.filtersQuery.getValue();\n    return state.sort ? state.sort : null;\n  }\n\n  /**\n   * Select Sort by value\n   */\n  selectSortBy(): Observable<SortByOptions<E> | null> {\n    return this._selectSortBy$;\n  }\n\n  /**\n   * Set orderBy\n   */\n  setSortBy(order: SortByOptions<E>) {\n    this.filtersStore.update({sort: order});\n  }\n\n  /**\n   * Get the filters normalized as key value or as query params.\n   * This can be useful for server-side filtering\n   */\n  getNormalizedFilters(options: NormalizedFilterOptions = {}): string | HashMap<any> {\n    const result = {};\n    options = {sortByKey: 'sortBy', sortByOrderKey: 'sortByOrder', ...options};\n\n    for (const filter of this.getServerFilters()) {\n      result[filter.id] = filter.value;\n    }\n    const sort = this.getSortValue();\n    if (options.withSort && sort?.sortBy) {\n      result[options.sortByKey] = sort?.sortBy;\n      result[options.sortByOrderKey] = sort?.sortByOrder;\n    }\n\n    if (options.asQueryParams) {\n      return this._serialize(result);\n    }\n\n    return result;\n  }\n\n  destroy() {\n    this.clearFilters();\n  }\n\n\n\n  /** This method is responsible for getting access to the query. */\n  getQuery(): QueryEntity<S> {\n    return this.query;\n  }\n\n  /** This method is responsible for getting access to the store. */\n  getStore(): EntityStore<S> {\n    return this.getQuery().__store__;\n  }\n\n  /**\n   * Trigger a refresh of the data. This will force the library to replay all filters.\n   * Very useful for the withServer feature, because it allows to call back the with server callback function with the same parameters, to make a new call to the api.\n   */\n  refresh() {\n      const value = this._refresh$.getValue() + 1;\n      this._refresh$.next(value);\n      return value;\n  }\n\n  private _serialize(obj) {\n    return Object.keys(obj)\n      .map(k => `${encodeURIComponent(k)}=${encodeURIComponent(obj[k])}`)\n      .join('&');\n  }\n\n  private _applyFiltersForArray(\n    entities: Array<getEntityType<S>>,\n    filters: Array<AkitaFilterAllType<S>>,\n    sort: ObservedValueOf<Observable<SortByOptions<E> | null>>): Array<getEntityType<S>> {\n    let entitiesFiltered = entities;\n    if (filters.length !== 0) {\n      entitiesFiltered = entities.filter((entity: getEntityType<S>, index: number, array: Array<getEntityType<S>>) => {\n        return filters.every((filter: AkitaFilterAllType<S>) => {\n          if ((filter as AkitaFilterLocal<S>)?.predicate) {\n            return !!(filter as AkitaFilterLocal<S>).predicate(entity, index, array, filter);\n          }\n          return true;\n        });\n      });\n    }\n    const sortOptions = (sort as SortByOptions<E>);\n    if (sortOptions?.sortBy) {\n      const _sortBy: any = isFunction(sortOptions.sortBy) ? sortOptions.sortBy : compareValues(sortOptions.sortBy, sortOptions.sortByOrder);\n      entitiesFiltered = [...entitiesFiltered.sort((a, b) => _sortBy(a, b, entities))];\n    }\n    return entitiesFiltered;\n  }\n\n  private _applyFiltersForHashMap(\n    entities: HashMap<getEntityType<S>>,\n    filters: Array<AkitaFilterAllType<S>>): HashMap<getEntityType<S>> {\n    if (filters.length === 0) {\n      return entities;\n    }\n      const hashMapFiltered: HashMap<getEntityType<S>> = {};\n      Object.keys(entities).forEach((entityKey: string, index: number) => {\n        const entity: getEntityType<S> = entities[entityKey] as getEntityType<S>;\n        if (this._applyFiltersForOneEntity(filters, entity, index, entities)) {\n          hashMapFiltered[entityKey] = entity;\n        }\n      });\n\n      return hashMapFiltered;\n  }\n\n  private _applyFiltersForOneEntity(filters: Array<AkitaFilterAllType<S>>,\n                                    entity: getEntityType<S>, index: number,\n                                    array: Array<getEntityType<S>> | HashMap<getEntityType<S>>) {\n    return filters.every((filter: AkitaFilterAllType<S>) => {\n      if ((filter as AkitaFilterLocal<S>)?.predicate) {\n        return !!(filter as AkitaFilterLocal<S>).predicate(entity, index, array, filter);\n      }\n      return true;\n    });\n  }\n}\n","/*\n * Public API Surface of akita-filters-plugin\n */\n\nexport * from './lib/akita-filters-plugin';\nexport * from './lib/akita-filters-query';\nexport * from './lib/akita-filters-store';\nexport * from './lib/filters-utils';\nexport * from './lib/akita-filters.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}