HEX
Server: LiteSpeed
System: Linux s1296.sgp1.mysecurecloudhost.com 4.18.0-513.11.1.lve.el8.x86_64 #1 SMP Thu Jan 18 16:21:02 UTC 2024 x86_64
User: bishwesh (1878)
PHP: 7.4.33
Disabled: NONE
Upload Files
File: /home/bishwesh/internstolearn.com/node_modules/filterizr/src/ActiveFilter.ts
import { Filter } from './types';

/**
 * ActiveFilter represents the currently active filter over
 * the grid.
 *
 * It can be a plain string value or an array of strings.
 */
export default class ActiveFilter {
  private filter: Filter;

  public constructor(filter: Filter) {
    this.filter = filter;
  }

  public get(): Filter {
    return this.filter;
  }

  public set(targetFilter: Filter): void {
    this.filter = targetFilter;
  }

  public toggle(targetFilter: string): void {
    this.filter = this.toggleFilter(this.filter, targetFilter);
  }

  private toggleFilter(
    activeFilter: Filter,
    targetFilter: string
  ): string | string[] {
    if (activeFilter === 'all') {
      return targetFilter;
    }

    if (Array.isArray(activeFilter)) {
      if (activeFilter.includes(targetFilter)) {
        const newActiveFilter = activeFilter.filter(
          (filter): boolean => filter !== targetFilter
        );
        return newActiveFilter.length === 1
          ? newActiveFilter[0]
          : newActiveFilter;
      }
      return [...activeFilter, targetFilter];
    }

    if (activeFilter === targetFilter) {
      return 'all';
    }

    return [activeFilter, targetFilter];
  }
}