{"version":3,"file":"verben-ng-ui-src-lib-components-table-filter.mjs","sources":["../../../projects/verben-ng-ui/src/lib/components/table-filter/table-filter.component.ts","../../../projects/verben-ng-ui/src/lib/components/table-filter/table-filter.component.html","../../../projects/verben-ng-ui/src/lib/components/table-filter/table-filter.module.ts","../../../projects/verben-ng-ui/src/lib/components/table-filter/verben-ng-ui-src-lib-components-table-filter.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { DataFilterType, IDataFilter } from 'verben-ng-ui/src/lib/models';\nimport { Config } from 'verben-ng-ui/src/lib/models';\n\n@Component({\n  selector: 'verben-table-filter',\n  templateUrl: './table-filter.component.html',\n  styleUrls: ['./table-filter.component.css'],\n})\nexport class TableFilterComponent implements OnInit {\n  @Input() filterOptions: IDataFilter[] = [];\n  @Input() pd?: string;\n  @Input() mg?: string;\n  @Input() height?: string;\n  @Input() width?: string;\n  @Input() bgColor?: string;\n  @Input() boxShadow?: string;\n  @Input() textColor?: string;\n  @Input() primaryColor?: string;\n  @Input() secondaryColor?: string;\n  @Input() tertiaryColor?: string;\n  @Input() border?: string;\n  @Input() borderRadius?: string;\n  @Input() selectWidth?: string;\n  @Input() maxFilterLength: number = 3;\n  @Input() tooltip: boolean = false;\n  @Output() filtersApplied = new EventEmitter<any>();\n  @Output() resetSortData = new EventEmitter<any>();\n  filterArray: string[] = [];\n  selectedFilterValue: string = '';\n  selectedFilterType?: any;\n  conditionOptions: string[] = [];\n  selectedCondition: string | undefined = '';\n  inputValue?: string | number;\n  savedFilters: IDataFilter[] = [];\n  selectedFilters: IDataFilter[] = [];\n  showAllFilters: boolean = false;\n  editIndex: number | null = null;\n  checkAll: boolean = false;\n  isDuplicateFilter: boolean = false;\n  disableAddFilterBtn: boolean = false;\n  disableApplyFilterBtn: boolean = true;\n  duplicateMessage?: string = '';\n  configInstance: Config;\n  storageKey: string = 'savedFilters';\n  filterCount: number = 0;\n\n  constructor() {\n    this.configInstance = new Config();\n  }\n\n  ngOnInit(): void {\n    this.filterArray = this.filterOptions.map((item) => item.name);\n  }\n\n  onFilterNameChange(selectedFilterValue: string) {\n    const selectedFilter = this.filterOptions.find(\n      (option) => option.name === selectedFilterValue\n    );\n\n    if (selectedFilter) {\n      this.selectedFilterType = selectedFilter.type;\n      this.conditionOptions =\n        this.configInstance.getConditionOptions(this.selectedFilterType) || [];\n      this.selectedCondition = '';\n    }\n  }\n\n  resetFilters() {\n    this.selectedFilterType = null;\n    this.selectedCondition = '';\n    this.inputValue = '';\n    this.savedFilters = [];\n    this.editIndex = null;\n    this.checkAll = false;\n    this.isDuplicateFilter = false;\n    this.disableApplyFilterBtn = true;\n    this.duplicateMessage = '';\n    localStorage.removeItem(this.storageKey);\n    this.filterCount = this.savedFilters.filter(\n      (item) => item.checked === true\n    ).length;\n    this.resetSortData.emit();\n  }\n\n  addFilter() {\n    if (\n      !this.selectedFilterValue ||\n      !this.selectedCondition ||\n      !this.inputValue\n    ) {\n      return;\n    }\n\n    if (this.editIndex === null && this.isDuplicateFilter) {\n      return;\n    }\n    // 00:00 23:59\n    if (\n      (this.selectedFilterType as DataFilterType) == DataFilterType.Date &&\n      this.selectedCondition == 'On'\n    ) {\n      const leftFilter: IDataFilter = {\n        name: this.selectedFilterValue,\n        type: this.selectedFilterType,\n        condition: 'After',\n        value: (this.inputValue as string).concat(' 00:00'),\n        checked: true,\n      };\n\n      const rightFilter: IDataFilter = {\n        name: this.selectedFilterValue,\n        type: this.selectedFilterType,\n        condition: 'Before',\n        value: (this.inputValue as string).concat(' 23:59'),\n        checked: true,\n      };\n\n      const filters = [leftFilter, rightFilter];\n\n      for (let newFilter of filters) {\n        if (this.editIndex !== null) {\n          const isDuplicate = this.savedFilters.some(\n            (filter, index) =>\n              filter.name === newFilter.name &&\n              filter.condition === newFilter.condition &&\n              index !== this.editIndex\n          );\n\n          if (isDuplicate) {\n            continue;\n          }\n          this.savedFilters[this.editIndex] = newFilter;\n          this.editIndex = null;\n        } else {\n          if (\n            this.savedFilters.some(\n              (filter) =>\n                filter.name === newFilter.name &&\n                filter.condition === newFilter.condition\n            )\n          ) {\n            continue;\n          }\n          this.savedFilters.push(newFilter);\n          this.filterCount = this.savedFilters.filter(\n            (item) => item.checked === true\n          ).length;\n        }\n      }\n    } else {\n      const newFilter: IDataFilter = {\n        name: this.selectedFilterValue,\n        type: this.selectedFilterType,\n        condition: this.selectedCondition,\n        value: this.inputValue,\n        checked: true,\n      };\n\n      if (this.editIndex !== null) {\n        const isDuplicate = this.savedFilters.some(\n          (filter, index) =>\n            filter.name === newFilter.name &&\n            filter.condition === newFilter.condition &&\n            index !== this.editIndex\n        );\n\n        if (isDuplicate) {\n          return;\n        }\n        this.savedFilters[this.editIndex] = newFilter;\n        this.editIndex = null;\n      } else {\n        if (\n          this.savedFilters.some(\n            (filter) =>\n              filter.name === newFilter.name &&\n              filter.condition === newFilter.condition\n          )\n        ) {\n          return;\n        }\n        this.savedFilters.push(newFilter);\n        this.filterCount = this.savedFilters.filter(\n          (item) => item.checked === true\n        ).length;\n      }\n    }\n\n    this.clearOperationSection();\n    this.checkFilterButton();\n  }\n\n  toggleCheckbox(index: number) {\n    this.savedFilters[index].checked = !this.savedFilters[index].checked;\n    this.checkAll = this.savedFilters.every((item) => item.checked);\n    this.filterCount = this.savedFilters.filter(\n      (item) => item.checked === true\n    ).length;\n  }\n\n  deleteFilter(index: number) {\n    this.savedFilters.splice(index, 1);\n    this.checkDuplicateFilter();\n    this.checkFilterButton();\n    this.filterCount = this.savedFilters.filter(\n      (item) => item.checked === true\n    ).length;\n    if (this.savedFilters.length === 0) {\n      this.checkAll = false;\n    }\n  }\n\n  editFilter(index: number) {\n    const filter = this.savedFilters[index];\n    this.selectedFilterType = filter.type;\n    this.selectedFilterValue = filter.name;\n    this.onFilterNameChange(this.selectedFilterValue);\n    this.selectedCondition = filter.condition;\n    this.inputValue = filter.value;\n    this.editIndex = index;\n  }\n\n  applyFilters() {\n    this.selectedFilters = this.savedFilters.filter((filter) => filter.checked);\n    this.filtersApplied.emit(this.selectedFilters);\n    this.filtersApplied.emit(this.storageKey);\n  }\n\n  toggleShowMore() {\n    this.showAllFilters = !this.showAllFilters;\n  }\n\n  get visibleFilters() {\n    return this.showAllFilters\n      ? this.savedFilters\n      : this.savedFilters.slice(0, this.maxFilterLength);\n  }\n\n  clearOperationSection() {\n    this.selectedFilterValue = '';\n    this.selectedCondition = '';\n    this.inputValue = '';\n  }\n\n  checkFilterButton() {\n    this.disableApplyFilterBtn = this.savedFilters.length === 0;\n  }\n\n  toggleSelectAll(): void {\n    this.checkAll = !this.checkAll;\n    this.savedFilters.forEach((filter) => (filter.checked = this.checkAll));\n    this.filterCount = this.savedFilters.filter(\n      (item) => item.checked === true\n    ).length;\n  }\n\n  checkDuplicateFilter(): void {\n    if (this.editIndex !== null) {\n      const exists = this.savedFilters.some(\n        (filter, index) =>\n          filter.name === this.selectedFilterValue &&\n          filter.condition === this.selectedCondition &&\n          index !== this.editIndex\n      );\n      this.disableAddFilterBtn = exists;\n      this.isDuplicateFilter = exists;\n      this.duplicateMessage = exists\n        ? 'This entry is a duplicate and cannot be added.'\n        : '';\n    } else {\n      const exists = this.savedFilters.some(\n        (filter) =>\n          filter.name === this.selectedFilterValue &&\n          filter.condition === this.selectedCondition\n      );\n      this.disableAddFilterBtn = exists;\n      this.isDuplicateFilter = exists;\n      this.duplicateMessage = exists\n        ? 'This entry is a duplicate and cannot be added.'\n        : '';\n    }\n  }\n}\n","<section\n  [style.background-color]=\"bgColor\"\n  [style.box-shadow]=\"boxShadow\"\n  [style.border]=\"border\"\n  [style.border-radius]=\"borderRadius\"\n  [style.color]=\"textColor\"\n  [style.width]=\"width\"\n  [style.height]=\"height\"\n  [style.padding]=\"pd\"\n>\n  <div class=\"top\">\n    <h3 [style.color]=\"tertiaryColor\" [style.font-size]=\"'14px'\">\n      Filters\n      <span [style.color]=\"secondaryColor\"\n        ><sup>({{ filterCount }})</sup></span\n      >\n    </h3>\n    <button\n      [style.color]=\"secondaryColor\"\n      [style.background-color]=\"bgColor\"\n      [style.border]=\"'none'\"\n      [style.cursor]=\"'pointer'\"\n      [style.font-size]=\"'12px'\"\n      (click)=\"resetFilters()\"\n    >\n      Reset\n    </button>\n  </div>\n  <hr />\n\n  <!-- Saved Filters Section -->\n  <div class=\"center\">\n    <div class=\"savedWrapper\">\n      <h3 [style.font-size]=\"'13px'\">Saved Filters</h3>\n      <verben-svg\n        icon=\"info\"\n        [width]=\"15\"\n        [height]=\"15\"\n        fill=\"grey\"\n      ></verben-svg>\n    </div>\n    <div class=\"selectAllWrapper\" *ngIf=\"savedFilters.length\">\n      <input\n        type=\"checkbox\"\n        [checked]=\"checkAll\"\n        (change)=\"toggleSelectAll()\"\n      />\n      <p [style.font-size]=\"'13px'\" [style.font-weight]=\"'500'\">Select All</p>\n    </div>\n    <div\n      *ngFor=\"let filter of visibleFilters; let i = index\"\n      class=\"centerInnerWrapper\"\n    >\n      <div class=\"checkboxWrapper\">\n        <span\n          ><input\n            type=\"checkbox\"\n            [checked]=\"filter.checked\"\n            (click)=\"toggleCheckbox(i)\"\n        /></span>\n        <p\n          [style.font-size]=\"'13px'\"\n          [style.font-weight]=\"'500'\"\n          [style.color]=\"tertiaryColor\"\n        >\n          {{ filter.name }} {{ filter.condition }} {{ filter.value}}\n        </p>\n      </div>\n      <div class=\"iconWrapper\">\n        <verben-svg\n          icon=\"pencil\"\n          [width]=\"15\"\n          [height]=\"15\"\n          stroke=\"#3479E9\"\n          fill=\"white\"\n          (click)=\"editFilter(i)\"\n        ></verben-svg>\n        <verben-svg\n          icon=\"trash\"\n          [width]=\"15\"\n          [height]=\"15\"\n          stroke=\"#E20000\"\n          (click)=\"deleteFilter(i)\"\n        ></verben-svg>\n      </div>\n    </div>\n\n    <div\n      class=\"moreWrapper\"\n      *ngIf=\"savedFilters.length > maxFilterLength\"\n      (click)=\"toggleShowMore()\"\n    >\n      <p\n        [style.font-size]=\"'12px'\"\n        [style.font-weight]=\"'500'\"\n        [style.color]=\"tertiaryColor\"\n      >\n        {{ showAllFilters ? \"Show less\" : \"Show more\" }}\n      </p>\n        <verben-svg\n        icon=\"chevron\"\n        [width]=\"8\"\n        [height]=\"6\"\n        fill=\"black\"\n        stroke=\"black\"\n      ></verben-svg>\n    </div>\n  </div>\n  <hr />\n\n  <!-- Operation Section -->\n  <div class=\"bottom\">\n    <div class=\"savedWrapper\">\n      <h3 [style.font-size]=\"'13px'\">Operation</h3>\n      <div [ngStyle]=\"{'position':'relative'}\"> \n        \n        <verben-tooltip \n        [tooltipContent]=\"tooltipTemplate\"\n        [backgroundColor]=\"'grey'\"\n        width=\"200px\" \n        [top]=\"'20px'\"                 \n        [right]=\"'0px'\"  \n        >\n        <verben-svg \n        icon=\"info\" \n        [width]=\"15\" \n        [height]=\"15\"   \n        *ngIf=\"isDuplicateFilter\"\n        fill=\"red\"\n        >\n        </verben-svg>\n        </verben-tooltip>\n      \n      <ng-template #tooltipTemplate>\n       {{duplicateMessage}}\n      </ng-template>\n        <!-- <verben-tooltip\n         [backgroundColor]=\"'grey'\"\n         [textColor]=\"'white'\"\n         [padding]=\"'10px'\"\n         [borderRadius]=\"'8px'\"\n         [top]=\"'20px'\"                 \n         [right]=\"'0px'\"   \n         width=\"250px\" \n         #tooltip \n         *ngIf=\"tooltip\"\n         >\n         <h3>{{duplicateMessage}}</h3>\n        </verben-tooltip> -->\n      </div>\n      <verben-svg\n        icon=\"info\"\n        [width]=\"15\"\n        [height]=\"15\"\n        fill=\"grey\"\n        *ngIf=\"!isDuplicateFilter\"\n      ></verben-svg>\n    </div>\n\n    <div class=\"inputsWrapper\">\n      <verben-drop-down\n        width=\"7rem\"\n        placeholder=\"Select value\"\n        [options]=\"filterArray\"\n        [(ngModel)]=\"selectedFilterValue\"\n        (ngModelChange)=\"onFilterNameChange(selectedFilterValue)\"\n      >\n      </verben-drop-down>\n      <verben-drop-down\n        width=\"7rem\"\n        placeholder=\"Select value\"\n        placeholder=\"Select value\"\n        [options]=\"conditionOptions\"\n        (onChange)=\"checkDuplicateFilter()\"\n        [(ngModel)]=\"selectedCondition\"\n      >\n      </verben-drop-down>\n\n      <verbena-input\n      *ngIf=\"selectedFilterType === 'Date'\"\n      border=\"1px solid #ccc\"\n      borderRadius=\"5px\"\n      textColor=\"black\"\n      width=\"80px\"\n      height=\"25px\"\n      pd=\"6px\"\n      [showBorder]=\"true\"\n      [showErrorMessage]=\"true\"\n      [errorPosition]=\"'bottom'\"\n      [type]=\"'date'\"\n      [(ngModel)]=\"inputValue\"\n    ></verbena-input>\n\n      <verbena-input\n      *ngIf=\"selectedFilterType === 'Credit' || selectedFilterType === 'Integer'\"\n      border=\"1px solid #ccc\"\n      borderRadius=\"5px\"\n      textColor=\"black\"\n      width=\"100px\"\n      height=\"25px\"\n      pd=\"6px\"\n      placeHolder=\"input integer\"\n      [showBorder]=\"true\"\n\n      [showErrorMessage]=\"true\"\n      [errorPosition]=\"'bottom'\"\n\n      appValidate=\"integer\"\n      [(ngModel)]=\"inputValue\"\n    ></verbena-input>\n\n      <verbena-input\n      *ngIf=\"selectedFilterType === 'Decimal'\"\n      border=\"1px solid #ccc\"\n      borderRadius=\"5px\"\n      textColor=\"black\"\n      width=\"100px\"\n      height=\"25px\"\n      pd=\"6px\"\n      placeHolder=\"input a decimal\"\n      [showBorder]=\"true\"\n      [showErrorMessage]=\"false\"\n      [errorPosition]=\"'bottom'\"\n      appValidate=\"decimal\"\n      [(ngModel)]=\"inputValue\"\n    ></verbena-input>\n\n      <verbena-input\n      *ngIf=\"selectedFilterType !== 'Credit' && selectedFilterType !== 'Date'  && selectedFilterType !== 'Integer'  && selectedFilterType !== 'Decimal'\"\n      border=\"1px solid #ccc\"\n      placeHolder=\"input value\"\n      borderRadius=\"5px\"\n      textColor=\"black\"\n      width=\"100px\"\n      height=\"25px\"\n      pd=\"6px\"\n      [showBorder]=\"true\"\n\n      [showErrorMessage]=\"true\"\n      [errorPosition]=\"'bottom'\"\n\n      [(ngModel)]=\"inputValue\"\n    ></verbena-input>\n\n    </div>\n\n    <div class=\"btnWrapper\">\n      <button\n        [style.margin-top]=\"'0.5rem'\"\n        [style.outline]=\"'none'\"\n        [style.border]=\"'none'\"\n        [style.border-radius]=\"borderRadius\"\n        [style.background-color]=\"'transparent'\"\n        [style.color]=\"secondaryColor\"\n        [style.font-size]=\"'12px'\"\n        [style.font-weight]=\"'500'\"\n        [disabled]=\"disableAddFilterBtn\"\n        [ngClass]=\"{\n          disablebtn: disableAddFilterBtn,\n          enableBtn: !disableAddFilterBtn\n        }\"\n        (click)=\"addFilter()\"\n      >\n        + Add\n      </button>\n    </div>\n    <hr />\n\n    <div class=\"btnWrapper\">\n      <button\n        [style.margin-top]=\"'0.5rem'\"\n        [style.outline]=\"'none'\"\n        [style.border]=\"'none'\"\n        [style.padding]=\"'0.2rem 1.6rem'\"\n        [style.background-color]=\"primaryColor\"\n        [style.color]=\"tertiaryColor\"\n        [style.font-size]=\"'12px'\"\n        [style.font-weight]=\"'600'\"\n        (click)=\"applyFilters()\"\n        [disabled]=\"disableApplyFilterBtn\"\n        [ngClass]=\"{\n          disablebtn: disableApplyFilterBtn,\n          enableBtn: !disableApplyFilterBtn\n        }\"\n      >\n        Filter\n      </button>\n    </div>\n\n\n  </div>\n\n</section>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TableFilterComponent } from './table-filter.component';\nimport { FormsModule } from '@angular/forms';\nimport { DropDownModule } from 'verben-ng-ui/src/lib/components/drop-down';\nimport { VerbenaInputModule } from 'verben-ng-ui/src/lib/verbena-input';\nimport { TooltipModule } from 'verben-ng-ui/src/lib/components/tooltip';\nimport { ValidationModule } from 'verben-ng-ui/src/lib/validate';\nimport { SvgModule } from 'verben-ng-ui/src/lib/components/svg';\n\n@NgModule({\n  declarations: [TableFilterComponent],\n  imports: [\n    CommonModule,\n    FormsModule,\n    DropDownModule,\n    VerbenaInputModule,\n    ValidationModule,\n    TooltipModule,\n    SvgModule,\n  ],\n  exports: [TableFilterComponent],\n})\nexport class TableFilterModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}