{"version":3,"file":"moxa-formoxa-mx-table-search.mjs","sources":["../../../../libs/formoxa/mx-table-search/src/lib/services/mx-table-search-intl.service.ts","../../../../libs/formoxa/mx-table-search/src/lib/utilities/mx-table-search.utility.ts","../../../../libs/formoxa/mx-table-search/src/lib/components/mx-table-search-overlay.component.ts","../../../../libs/formoxa/mx-table-search/src/lib/components/mx-table-search-overlay.component.html","../../../../libs/formoxa/mx-table-search/src/lib/components/mx-table-search.component.ts","../../../../libs/formoxa/mx-table-search/src/moxa-formoxa-mx-table-search.ts"],"sourcesContent":["import { Injectable, Optional, Provider, SkipSelf } from '@angular/core';\nimport { TranslationLabels, TranslationService } from '@moxa/formoxa/mx-shared';\n\nexport interface MxTableSearchIntlLabels extends TranslationLabels {\n  inputSearchBarPlaceholderLabel: string;\n  inputStartDatePlaceholderLabel: string;\n  inputEndDatePlaceholderLabel: string;\n  inputHourLabel: string;\n  inputMinLabel: string;\n  tooltipAddAFilterLabel: string;\n  buttonAddAFilterLabel: string;\n  buttonSearchLabel: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class MxTableSearchIntlService extends TranslationService<MxTableSearchIntlLabels> {\n  defaultLabels: MxTableSearchIntlLabels = {\n    inputSearchBarPlaceholderLabel: 'Type to search',\n    inputStartDatePlaceholderLabel: 'Start date',\n    inputEndDatePlaceholderLabel: 'End date',\n    inputHourLabel: 'Hour',\n    inputMinLabel: 'Minute',\n    tooltipAddAFilterLabel: 'Number of filters has reached the limit.',\n    buttonAddAFilterLabel: 'Add a filter',\n    buttonSearchLabel: 'Search'\n  };\n\n  constructor() {\n    super();\n    this.registerTranslations('en', this.defaultLabels);\n  }\n}\n\nfunction MX_TABLE_SEARCH_INTL_PROVIDER_FACTORY(parent: MxTableSearchIntlService): MxTableSearchIntlService {\n  return parent || new MxTableSearchIntlService();\n}\n\nexport const MX_TABLE_SEARCH_INTL_PROVIDER: Provider = {\n  provide: MxTableSearchIntlService,\n  useFactory: MX_TABLE_SEARCH_INTL_PROVIDER_FACTORY,\n  deps: [[new Optional(), new SkipSelf(), MxTableSearchIntlService]]\n};\n","import { DateTimeRangeType, MxTableFilterItem, MxTableFilterItemVm } from '../models/mx-table-search.model';\n\nexport const getKeywordsInValues = (filter: MxTableFilterItem[]) => {\n  return JSON.stringify(filter.filter((f) => f.value.length > 0));\n};\n\nexport const mxFilterPredicate = (data: any, filter: string) => {\n  const filterItems: MxTableFilterItem[] = JSON.parse(filter);\n  const dataKeys = Object.keys(data);\n  let result = true;\n  filterItems.forEach((f) => {\n    if (!dataKeys.includes(f.name) || !result) {\n      return;\n    }\n\n    if (f.inputType === 'text') {\n      if (!data[f.name].toString().toLowerCase().includes(f.value.toString().trim().toLowerCase())) {\n        result = false;\n        return;\n      }\n    }\n\n    if (f.inputType === 'selection') {\n      const targetFilters = f.value;\n\n      if (Array.isArray(targetFilters) && targetFilters.length > 0) {\n        const dataValue = data[f.name]?.toString().toLowerCase();\n        const hasMatch = targetFilters.some(\n          (keyword) => dataValue && dataValue.includes(keyword.toString().toLowerCase())\n        );\n        if (!hasMatch) {\n          result = false;\n          return;\n        }\n      } else {\n        result = false;\n        return;\n      }\n    }\n\n    if (f.inputType === 'dateRange') {\n      const valueDate = new Date(data[f.name]);\n      valueDate.setHours(0, 0, 0, 0); // Eliminate time interference\n\n      const dateRange = f.value as Date[];\n      const startDate = new Date(dateRange[0]);\n      const endDate = new Date(dateRange[1]);\n      if (\n        valueDate.toString() === 'Invalid Date' ||\n        startDate.toString() === 'Invalid Date' ||\n        endDate.toString() === 'Invalid Date'\n      ) {\n        return;\n      }\n\n      if (valueDate.valueOf() < startDate.valueOf() || valueDate.valueOf() > endDate.valueOf()) {\n        result = false;\n        return;\n      }\n    }\n\n    if (f.inputType === 'dateTimeRange') {\n      const valueDate = new Date(data[f.name]);\n      const startDateTime = combineDateAndTime(f.value[0] as Date, Number(f.value[1]), Number(f.value[2]));\n      const endDateTime = combineDateAndTime(f.value[3] as Date, Number(f.value[4]), Number(f.value[5]));\n\n      if (\n        valueDate.toString() === 'Invalid Date' ||\n        startDateTime.toString() === 'Invalid Date' ||\n        endDateTime.toString() === 'Invalid Date'\n      ) {\n        return;\n      }\n\n      if (valueDate.valueOf() < startDateTime.valueOf() || valueDate.valueOf() > endDateTime.valueOf()) {\n        result = false;\n        return;\n      }\n    }\n  });\n\n  return result;\n};\n\nexport const getKeywords = (filterItems: MxTableFilterItemVm[]) => {\n  const newKeyword = filterItems\n    .filter((f) => f.isUsed)\n    .map((m) => ({\n      ...m,\n      value:\n        m.inputType === 'dateRange' && typeof m.value === 'object'\n          ? m.value.map((date) => displayDate(date))\n          : m.inputType === 'selection'\n            ? m.value &&\n              (m.value as string[]).map((value) => {\n                const option = m.selection.find((o) => o.name === value);\n                return option ? option.label : value;\n              })\n            : m.value\n    }))\n    .map((m) => {\n      let value;\n      if (typeof m.value === 'string') {\n        value = m.value;\n      } else if (m.inputType === 'dateRange') {\n        value = m.value?.join(' - ');\n      } else if (m.inputType === 'dateTimeRange') {\n        value = displayDateTime(m.value as DateTimeRangeType);\n      } else {\n        value = m.value?.join(',');\n      }\n      return `${m.label}:${value}`;\n    })\n    .join('; ');\n  return newKeyword;\n};\n\nexport const clearFilterItemsValue = (filterItems: MxTableFilterItemVm[]) => {\n  const newFilterItems = [...filterItems];\n  newFilterItems.forEach((f) => {\n    f.isUsed = false;\n    f.displayOrder = -1;\n    f.value = typeof f.value === 'string' ? '' : [];\n    f.dateValue = { start: null, end: null };\n    f.dateTimeValue = {\n      startDate: null,\n      startHour: null,\n      startMin: null,\n      endDate: null,\n      endHour: null,\n      endMin: null\n    };\n    f.singleDateValue = null;\n  });\n  return newFilterItems;\n};\n\nexport const convertMxTableFilterItemToVm = (filterItems: MxTableFilterItem[]) => {\n  const usedFilter = filterItems.filter((f) => f.value.length > 0).map((m) => m.name);\n  return filterItems.map((m) => ({\n    ...m,\n    displayOrder: usedFilter.findIndex((fi) => fi == m.name) ?? -1,\n    isUsed: usedFilter.includes(m.name),\n    singleDateValue: m.inputType === 'date' ? (m.value[0] as Date) : null,\n    dateValue:\n      m.inputType === 'dateRange' ? { start: m.value[0] as Date, end: m.value[1] as Date } : { start: null, end: null },\n    dateTimeValue:\n      m.inputType === 'dateTimeRange'\n        ? {\n            startDate: m.value[0] as Date,\n            startHour: m.value[1] as string,\n            startMin: m.value[2] as string,\n            endDate: m.value[3] as Date,\n            endHour: m.value[4] as string,\n            endMin: m.value[5] as string\n          }\n        : {\n            startDate: null,\n            startHour: null,\n            startMin: null,\n            endDate: null,\n            endHour: null,\n            endMin: null\n          }\n  }));\n};\n\nexport const convertVmToMxTableFilterItem = (vm: MxTableFilterItemVm[]) => {\n  const filterItems = vm.map((m) => {\n    const { displayOrder, isUsed, dateValue, dateTimeValue, singleDateValue, ...rest } = m;\n    return rest;\n  });\n  return filterItems;\n};\n\nconst displayDate = (value: string | Date) => {\n  const dateValue = new Date(value);\n  return `${dateValue.getMonth() + 1}/${dateValue.getDate()}/${dateValue.getFullYear()}`;\n};\n\nconst displayDateTime = (dateParams: DateTimeRangeType): string => {\n  const [startDate, startHour, startMin, endDate, endHour, endMin] = dateParams;\n\n  const formatDate = (date: Date | string, hour: string | null, minute: string | null): string => {\n    if (!date) return '';\n    date = new Date(date);\n    const month = date.getMonth() + 1;\n    const day = date.getDate();\n    const year = date.getFullYear();\n    const formattedHour = hour || '00';\n    const formattedMinute = minute || '00';\n    return `${month}/${day}/${year} ${formattedHour}:${formattedMinute}`;\n  };\n\n  const start = formatDate(startDate, startHour, startMin);\n  const end = formatDate(endDate, endHour, endMin);\n\n  return `${start}-${end}`;\n};\n\nconst combineDateAndTime = (date: Date | string, hour?: number, minute?: number): Date => {\n  const hours = hour ?? 0;\n  const minutes = minute ?? 0;\n\n  const combinedDate = new Date(date);\n  combinedDate.setHours(hours, minutes, 0, 0);\n\n  return combinedDate;\n};\n","import { OverlayModule } from '@angular/cdk/overlay';\n\nimport {\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  Output,\n  SimpleChanges,\n  booleanAttribute,\n  computed,\n  effect,\n  inject,\n  input,\n  signal,\n  untracked\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MxIconButtonDirective } from '@moxa/formoxa/mx-button';\nimport { MxAutoFocusDirective } from '@moxa/formoxa/mx-shared';\nimport { MxTooltipDirective } from '@moxa/formoxa/mx-tooltip';\nimport { MxTableFilterItemVm, MxTableSearchInfoVm } from '../models/mx-table-search.model';\nimport { MX_TABLE_SEARCH_INTL_PROVIDER, MxTableSearchIntlService } from '../services/mx-table-search-intl.service';\nimport * as MxTableSearchUtil from '../utilities/mx-table-search.utility';\n\n@Component({\n  selector: 'mx-table-search-overlay',\n  imports: [\n    FormsModule,\n    MxIconButtonDirective,\n    MxTooltipDirective,\n    MxAutoFocusDirective,\n    MatInputModule,\n    MatIconModule,\n    MatFormFieldModule,\n    MatSelectModule,\n    MatButtonModule,\n    MatDatepickerModule,\n    MatTooltipModule,\n    OverlayModule\n  ],\n  templateUrl: './mx-table-search-overlay.component.html',\n  styleUrls: ['./mx-table-search-overlay.component.scss'],\n  providers: [MX_TABLE_SEARCH_INTL_PROVIDER]\n})\nexport class MxTableSearchOverlayComponent implements OnChanges {\n  @Input() mxTableSearchKeyword = '';\n  @Input() set mxTableSearchFilters(filters: MxTableFilterItemVm[]) {\n    if (filters) {\n      this.initFilter(filters);\n    }\n  }\n  @Input() mxTableSearchDefaultColumns = '...';\n  @Output() searchChange = new EventEmitter<MxTableSearchInfoVm>();\n  @Output() closeOverlayEvent = new EventEmitter();\n\n  mxTableSearchEnableKeywordSearch = input(true, { transform: booleanAttribute });\n\n  cd = inject(ChangeDetectorRef);\n  intl = inject(MxTableSearchIntlService);\n  searchKeywords = '';\n\n  filterItems = signal<MxTableFilterItemVm[]>([]);\n  sortedFilterItems = computed(() => {\n    const originFilters = [...this.filterItems()];\n    return originFilters.sort((a, b) => a.displayOrder - b.displayOrder);\n  });\n  inOrder = computed(() =>\n    this.sortedFilterItems()\n      .filter((f) => f.displayOrder !== -1)\n      .map((m) => m.name)\n  );\n  filterKeywords = computed(() => MxTableSearchUtil.getKeywords(this.sortedFilterItems()));\n\n  usedFilterItems = computed(() => this.filterItems().filter((f) => f.isUsed));\n\n  availableToAdd = computed(() => this.usedFilterItems().length < this.filterItems().length);\n\n  showFilterArea = computed(() => this.filterItems().length > 0);\n\n  isFilterMode = computed(() => this.usedFilterItems().length > 0);\n\n  usedFilterItemLength = computed(() => this.usedFilterItems().length);\n\n  disabledSearch = computed(() => this.usedFilterItems().some((item) => !item.value));\n\n  get placeholder() {\n    return `${this.intl.translate('inputSearchBarPlaceholderLabel')} ${this.mxTableSearchDefaultColumns}`;\n  }\n\n  constructor() {\n    effect(() => {\n      if (this.isFilterMode()) {\n        this.searchKeywords = this.filterKeywords();\n      }\n    });\n\n    effect(() => {\n      const mxTableSearchEnableKeywordSearch = this.mxTableSearchEnableKeywordSearch();\n      untracked(() => {\n        if (!mxTableSearchEnableKeywordSearch && this.usedFilterItemLength() < 1) {\n          this.addFilter();\n        }\n      });\n    });\n\n    effect(() => {\n      const usedFilterItemLength = this.usedFilterItemLength();\n      const enableKeywordSearch = untracked(() => this.mxTableSearchEnableKeywordSearch());\n      if (usedFilterItemLength < 1 && !enableKeywordSearch) {\n        this.closeOverlayEvent.emit();\n      }\n    });\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    const { mxTableSearchKeyword } = changes;\n    if (mxTableSearchKeyword) {\n      this.searchKeywords = this.isFilterMode() ? this.filterKeywords() : mxTableSearchKeyword.currentValue;\n    }\n  }\n\n  getSelection(filterName: string) {\n    if (filterName) {\n      return this.filterItems().find((item) => item.name === filterName)?.selection || [];\n    }\n    return [];\n  }\n\n  getFilterItem(filterName: string) {\n    return this.filterItems().find((item) => item.name === filterName);\n  }\n\n  initFilter(inputFilterItems: MxTableFilterItemVm[]) {\n    this.filterItems.set(inputFilterItems);\n  }\n\n  addFilter() {\n    const nextFilterIndex = this.filterItems().findIndex((f) => !f.isUsed);\n    const nextOrder = this.inOrder().length;\n    if (nextFilterIndex > -1) {\n      this.filterItems.update((filters) => {\n        const clone = structuredClone(filters);\n        clone[nextFilterIndex].isUsed = true;\n        clone[nextFilterIndex].displayOrder = nextOrder;\n        return clone;\n      });\n    }\n  }\n\n  changeFilter(originFilterName: string, newFilterName: string) {\n    const newOrder = this.inOrder().map((m) => (m === originFilterName ? newFilterName : m));\n    this.filterItems.update((filters) => {\n      return filters.map((f) => {\n        const originFilterIndex = filters.findIndex((f) => f.name === originFilterName);\n        if (f.name === originFilterName) {\n          return {\n            ...f,\n            value: filters[originFilterIndex].inputType === 'text' ? '' : [],\n            isUsed: false,\n            displayOrder: newOrder.indexOf(f.name)\n          };\n        } else {\n          return {\n            ...f,\n            value: f.value,\n            isUsed: f.name === newFilterName ? true : f.isUsed,\n            displayOrder: newOrder.indexOf(f.name)\n          };\n        }\n      });\n    });\n  }\n\n  deleteFilter(filterName: string) {\n    const newOrder = this.inOrder().filter((f) => f !== filterName);\n    this.filterItems.update((filters) => {\n      const clone = [...filters];\n      const filterIndex = clone.findIndex((f) => f.name === filterName);\n      if (filterIndex > -1 && clone[filterIndex].value) {\n        clone[filterIndex].value = clone[filterIndex].inputType === 'text' ? '' : [];\n      }\n\n      if (clone[filterIndex].inputType === 'dateRange') {\n        clone[filterIndex].dateValue = { start: null, end: null };\n      }\n\n      if (clone[filterIndex].inputType === 'dateTimeRange') {\n        clone[filterIndex].dateTimeValue = {\n          startDate: null,\n          startHour: null,\n          startMin: null,\n          endDate: null,\n          endHour: null,\n          endMin: null\n        };\n      }\n\n      if (clone[filterIndex].inputType === 'date') {\n        clone[filterIndex].singleDateValue = null;\n      }\n\n      clone.forEach((f) => {\n        f.isUsed = f.name === filterName ? false : f.isUsed;\n        f.displayOrder = newOrder.indexOf(f.name);\n      });\n      return clone;\n    });\n    if (!this.isFilterMode()) {\n      this.searchKeywords = '';\n      this.emitSearchEvent();\n    }\n  }\n\n  onSearchBarInput() {\n    if (!this.isFilterMode()) {\n      this.emitSearchEvent();\n    }\n  }\n\n  onDateInputChange(filterName: string) {\n    this.filterItems.update((filters) => {\n      const clone = [...filters];\n      const filterIndex = clone.findIndex((f) => f.name === filterName);\n      if (filterIndex && clone[filterIndex].dateValue) {\n        clone[filterIndex].value = [clone[filterIndex].dateValue.start || '', clone[filterIndex].dateValue.end || ''];\n      }\n      return clone;\n    });\n\n    this.onFilterChange();\n  }\n\n  onDateTimeInputChange(filterName: string) {\n    this.filterItems.update((filters) => {\n      const clone = [...filters];\n      const filterIndex = clone.findIndex((f) => f.name === filterName);\n      if (filterIndex && clone[filterIndex].dateTimeValue) {\n        clone[filterIndex].value = [\n          clone[filterIndex].dateTimeValue.startDate || '',\n          clone[filterIndex].dateTimeValue.startHour || '',\n          clone[filterIndex].dateTimeValue.startMin || '',\n          clone[filterIndex].dateTimeValue.endDate || '',\n          clone[filterIndex].dateTimeValue.endHour || '',\n          clone[filterIndex].dateTimeValue.endMin || ''\n        ];\n      }\n      return clone;\n    });\n    this.onFilterChange();\n  }\n\n  onSingleDateInputChange(filterName: string) {\n    this.filterItems.update((filters) => {\n      const clone = [...filters];\n      const filterIndex = clone.findIndex((f) => f.name === filterName);\n      if (filterIndex && clone[filterIndex].dateValue) {\n        clone[filterIndex].value = [clone[filterIndex].singleDateValue || ''];\n      }\n      return clone;\n    });\n\n    this.onFilterChange();\n  }\n\n  onFilterChange() {\n    this.filterItems.update((value) => [...value]);\n    this.searchKeywords = this.filterKeywords();\n\n    // when filter is deleted until empty emit result\n    if (!this.isFilterMode()) {\n      this.emitSearchEvent();\n    }\n  }\n\n  onSearchBarClear() {\n    this.searchKeywords = '';\n    if (this.isFilterMode()) {\n      this.filterItems.update((filters) => MxTableSearchUtil.clearFilterItemsValue(filters));\n    }\n    this.emitSearchEvent();\n  }\n\n  emitSearchEvent() {\n    this.searchChange.emit({\n      keyword: this.searchKeywords,\n      filters: this.filterItems(),\n      isFilter: this.isFilterMode()\n    });\n  }\n\n  trackByFn(index: number, item: MxTableFilterItemVm) {\n    if (item.name) {\n      return item.name;\n    }\n    return index;\n  }\n\n  onKeyDown(e: KeyboardEvent) {\n    if (e.key === 'Enter') {\n      this.closeOverlayEvent.emit();\n    }\n  }\n}\n","<div class=\"mx-table-search__overlay--wrapper\" role=\"dialog\">\n  @if (mxTableSearchEnableKeywordSearch()) {\n    <div role=\"region\" class=\"mx-table-search__keyword\">\n      <mat-form-field floatLabel=\"always\">\n        <mat-icon matPrefix svgIcon=\"icon:search\"></mat-icon>\n        <input\n          matInput\n          mxAutoFocus\n          role=\"textbox\"\n          type=\"text\"\n          [(ngModel)]=\"searchKeywords\"\n          [disabled]=\"isFilterMode()\"\n          [placeholder]=\"placeholder\"\n          (input)=\"onSearchBarInput()\"\n          (keydown)=\"onKeyDown($event)\"\n        />\n        @if (searchKeywords.length > 0) {\n          <mat-icon matSuffix svgIcon=\"icon:clear\" (click)=\"onSearchBarClear()\"></mat-icon>\n        }\n      </mat-form-field>\n    </div>\n  }\n  @if (showFilterArea()) {\n    <div role=\"region\">\n      <div class=\"mx-table-search__filter-items--wrapper\">\n        @for (item of sortedFilterItems(); track trackByFn($index, item)) {\n          <div class=\"mx-table-search__filter-items--group\">\n            @if (item.isUsed) {\n              <mat-icon svgIcon=\"icon:filter_alt\"></mat-icon>\n\n              <mat-form-field floatLabel=\"always\" class=\"mx-table-search__filter-items--label\">\n                <mat-select [ngModel]=\"item.name\" (valueChange)=\"changeFilter(item.name, $event)\">\n                  @for (option of filterItems(); track trackByFn($index, option)) {\n                    <mat-option [value]=\"option.name\" [disabled]=\"option.name != item.name && option.isUsed\">{{\n                      option.label\n                    }}</mat-option>\n                  }\n                </mat-select>\n              </mat-form-field>\n              @if (getFilterItem(item.name)?.inputType === 'selection') {\n                <mat-form-field floatLabel=\"always\" class=\"mx-table-search__filter-items--value\">\n                  <mat-select [(ngModel)]=\"item.value\" multiple (selectionChange)=\"onFilterChange()\">\n                    @for (option of getSelection(item.name); track $index) {\n                      <mat-option [value]=\"option.name\">\n                        <div\n                          class=\"mx-table-search__filter-items-selection--option\"\n                          mxAutoTooltip\n                          [matTooltip]=\"option.label\"\n                        >\n                          {{ option.label }}\n                        </div>\n                      </mat-option>\n                    }\n                  </mat-select>\n                </mat-form-field>\n              }\n              @if (getFilterItem(item.name)?.inputType === 'text') {\n                <mat-form-field floatLabel=\"always\" class=\"mx-table-search__filter-items--value\">\n                  <input matInput type=\"text\" [(ngModel)]=\"item.value\" (input)=\"onFilterChange()\" />\n                </mat-form-field>\n              }\n              @if (getFilterItem(item.name)?.inputType === 'dateRange') {\n                <mat-form-field floatLabel=\"always\" class=\"mx-table-search__filter-items--value\">\n                  <mat-date-range-input [rangePicker]=\"picker\">\n                    <input\n                      matStartDate\n                      [(ngModel)]=\"item.dateValue.start\"\n                      [placeholder]=\"intl.translate('inputStartDatePlaceholderLabel')\"\n                      (dateInput)=\"onDateInputChange(item.name)\"\n                    />\n                    <input\n                      matEndDate\n                      [(ngModel)]=\"item.dateValue.end\"\n                      [placeholder]=\"intl.translate('inputEndDatePlaceholderLabel')\"\n                      (dateInput)=\"onDateInputChange(item.name)\"\n                    />\n                  </mat-date-range-input>\n                  <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\n                  <mat-date-range-picker #picker></mat-date-range-picker>\n                </mat-form-field>\n              }\n              @if (getFilterItem(item.name)?.inputType === 'dateTimeRange') {\n                <div\n                  class=\"mx-table-search__filter-items--value mx-table-search__filter-items__date-time-range-wrapper\"\n                >\n                  <div class=\"mx-table-search__filter-items__date-time-range\">\n                    <mat-form-field floatLabel=\"always\">\n                      <mat-label>{{ intl.translate('inputStartDatePlaceholderLabel') }}</mat-label>\n                      <input\n                        matInput\n                        [matDatepicker]=\"dateTimeFromPicker\"\n                        [(ngModel)]=\"item.dateTimeValue.startDate\"\n                        (dateInput)=\"onDateTimeInputChange(item.name)\"\n                      />\n                      <mat-datepicker-toggle matIconSuffix [for]=\"dateTimeFromPicker\"></mat-datepicker-toggle>\n                      <mat-datepicker #dateTimeFromPicker></mat-datepicker>\n                    </mat-form-field>\n                    <mat-form-field floatLabel=\"always\">\n                      <mat-label>{{ intl.translate('inputHourLabel') }}</mat-label>\n                      <input\n                        matInput\n                        type=\"number\"\n                        min=\"0\"\n                        max=\"23\"\n                        [(ngModel)]=\"item.dateTimeValue.startHour\"\n                        (input)=\"onDateTimeInputChange(item.name)\"\n                      />\n                    </mat-form-field>\n                    <mat-form-field floatLabel=\"always\">\n                      <mat-label>{{ intl.translate('inputMinLabel') }}</mat-label>\n                      <input\n                        matInput\n                        type=\"number\"\n                        min=\"0\"\n                        max=\"59\"\n                        [(ngModel)]=\"item.dateTimeValue.startMin\"\n                        (input)=\"onDateTimeInputChange(item.name)\"\n                      />\n                    </mat-form-field>\n                  </div>\n                  <div class=\"mx-table-search__filter-items__date-time-range\">\n                    <mat-form-field floatLabel=\"always\">\n                      <mat-label>{{ intl.translate('inputEndDatePlaceholderLabel') }}</mat-label>\n                      <input\n                        matInput\n                        [matDatepicker]=\"dateTimeToPicker\"\n                        [(ngModel)]=\"item.dateTimeValue.endDate\"\n                        (dateInput)=\"onDateTimeInputChange(item.name)\"\n                      />\n                      <mat-datepicker-toggle matIconSuffix [for]=\"dateTimeToPicker\"></mat-datepicker-toggle>\n                      <mat-datepicker #dateTimeToPicker></mat-datepicker>\n                    </mat-form-field>\n                    <mat-form-field floatLabel=\"always\">\n                      <mat-label>{{ intl.translate('inputHourLabel') }}</mat-label>\n                      <input\n                        matInput\n                        type=\"number\"\n                        min=\"0\"\n                        max=\"23\"\n                        [(ngModel)]=\"item.dateTimeValue.endHour\"\n                        (input)=\"onDateTimeInputChange(item.name)\"\n                      />\n                    </mat-form-field>\n                    <mat-form-field floatLabel=\"always\">\n                      <mat-label>{{ intl.translate('inputMinLabel') }}</mat-label>\n                      <input\n                        matInput\n                        type=\"number\"\n                        min=\"0\"\n                        max=\"59\"\n                        [(ngModel)]=\"item.dateTimeValue.endMin\"\n                        (input)=\"onDateTimeInputChange(item.name)\"\n                      />\n                    </mat-form-field>\n                  </div>\n                </div>\n              }\n\n              @if (getFilterItem(item.name)?.inputType === 'date') {\n                <mat-form-field floatLabel=\"always\" class=\"mx-table-search__filter-items--value\">\n                  <input\n                    matInput\n                    [matDatepicker]=\"datePicker\"\n                    [(ngModel)]=\"item.singleDateValue\"\n                    (dateInput)=\"onSingleDateInputChange(item.name)\"\n                  />\n                  <mat-datepicker-toggle matIconSuffix [for]=\"datePicker\"></mat-datepicker-toggle>\n                  <mat-datepicker #datePicker></mat-datepicker>\n                </mat-form-field>\n              }\n\n              <button mat-icon-button mxIconButton mxIconButtonSize=\"sm\" (click)=\"deleteFilter(item.name)\">\n                <mat-icon svgIcon=\"icon:clear\"></mat-icon>\n              </button>\n            }\n          </div>\n        }\n      </div>\n      <div\n        class=\"button-wrapper\"\n        [matTooltip]=\"intl.translate('tooltipAddAFilterLabel')\"\n        [matTooltipDisabled]=\"availableToAdd()\"\n        matTooltipPosition=\"right\"\n      >\n        <button mat-button color=\"primary\" [disabled]=\"!availableToAdd()\" (click)=\"addFilter()\">\n          <mat-icon svgIcon=\"icon:add\"></mat-icon>{{ intl.translate('buttonAddAFilterLabel') }}\n        </button>\n      </div>\n    </div>\n  }\n  @if (isFilterMode()) {\n    <div class=\"mx-table-search__footer\" role=\"region\">\n      <button mat-flat-button color=\"primary\" [disabled]=\"disabledSearch()\" (click)=\"emitSearchEvent()\">\n        {{ intl.translate('buttonSearchLabel') }}\n      </button>\n    </div>\n  }\n</div>\n","import { ConnectedPosition, OverlayModule } from '@angular/cdk/overlay';\n\nimport {\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n  booleanAttribute,\n  input,\n  numberAttribute\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MxIconButtonDirective } from '@moxa/formoxa/mx-button';\nimport {\n  MxTableFilterItem,\n  MxTableFilterItemVm,\n  MxTableSearchInfo,\n  MxTableSearchInfoVm\n} from '../models/mx-table-search.model';\nimport { MX_TABLE_SEARCH_INTL_PROVIDER } from '../services/mx-table-search-intl.service';\nimport * as MxTableSearchUtil from '../utilities/mx-table-search.utility';\nimport { MxTableSearchOverlayComponent } from './mx-table-search-overlay.component';\n\n@Component({\n  selector: 'mx-table-search',\n  imports: [OverlayModule, MxTableSearchOverlayComponent, MatIconModule, MatButtonModule, MxIconButtonDirective],\n  providers: [MX_TABLE_SEARCH_INTL_PROVIDER],\n  template: `\n    <div class=\"mx-table-search__search-bar\" (click)=\"openOverlay()\" cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\">\n      @if (keywords.length === 0) {\n        <ng-content> </ng-content>\n      } @else {\n        <ng-content select=\"[mx-table-search-search-content]\">\n          <div class=\"input-decoration\" [style.width.px]=\"overlayWidth\">\n            <mat-icon svgIcon=\"icon:search\"></mat-icon>\n            <div class=\"mx-table-search__search-bar--keyword gl-ellipsis-text\">{{ keywords }}</div>\n            <button mat-icon-button mxIconButton [mxIconButtonSize]=\"'sm'\" (click)=\"onClearClick($event)\">\n              <mat-icon svgIcon=\"icon:clear\"></mat-icon>\n            </button>\n          </div>\n        </ng-content>\n      }\n    </div>\n    <ng-template\n      cdkConnectedOverlay\n      [cdkConnectedOverlayOrigin]=\"trigger\"\n      [cdkConnectedOverlayOpen]=\"isOverlayOpen\"\n      [cdkConnectedOverlayPositions]=\"positionConfig\"\n      [cdkConnectedOverlayMinWidth]=\"overlayMinWidth\"\n      [cdkConnectedOverlayOffsetY]=\"-8\"\n      cdkConnectedOverlayHasBackdrop=\"true\"\n      cdkConnectedOverlayBackdropClass=\"overlay-backdrop--transparent\"\n      (backdropClick)=\"hideOverlay()\"\n    >\n      <mx-table-search-overlay\n        [mxTableSearchKeyword]=\"keywords\"\n        [mxTableSearchFilters]=\"mxTableSearchFiltersVm\"\n        [mxTableSearchDefaultColumns]=\"searchDefaultColumns\"\n        [mxTableSearchEnableKeywordSearch]=\"enableKeywordSearch()\"\n        [style.width.px]=\"overlayWidth\"\n        (searchChange)=\"onSearchChange($event)\"\n        (closeOverlayEvent)=\"hideOverlay()\"\n      ></mx-table-search-overlay>\n    </ng-template>\n  `,\n  styleUrls: ['./mx-table-search.component.scss']\n})\nexport class MxTableSearchComponent implements OnInit {\n  overlayMinWidth = 480;\n\n  @Input() set filterItems(filters: MxTableFilterItem[]) {\n    this.mxTableSearchFiltersVm = MxTableSearchUtil.convertMxTableFilterItemToVm(filters);\n  }\n  @Input({ transform: numberAttribute }) overlayWidth = this.overlayMinWidth;\n  @Input({ transform: booleanAttribute }) disableOverlay = false;\n  @Input() searchDefaultColumns = '...';\n  @Input() searchDefaultKeyword = '';\n  @Output() searchChange = new EventEmitter<MxTableSearchInfo>();\n\n  enableKeywordSearch = input(true, { transform: booleanAttribute });\n\n  mxTableSearchFiltersVm!: MxTableFilterItemVm[];\n  positionConfig: ConnectedPosition[] = [{ originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'top' }];\n  isOverlayOpen = false;\n  keywords = '';\n\n  ngOnInit(): void {\n    this.keywords = this.searchDefaultKeyword;\n    if (this.mxTableSearchFiltersVm && this.mxTableSearchFiltersVm.filter((f) => f.isUsed).length > 0) {\n      this.keywords = MxTableSearchUtil.getKeywords(this.mxTableSearchFiltersVm);\n    }\n  }\n\n  hideOverlay() {\n    this.isOverlayOpen = false;\n  }\n\n  onSearchChange(searchInfo: MxTableSearchInfoVm) {\n    this.keywords = searchInfo.keyword;\n    this.mxTableSearchFiltersVm = [...searchInfo.filters];\n\n    const usedFilter = searchInfo.filters.filter((f) => f.isUsed);\n    const newSearchInfo = {\n      ...searchInfo,\n      filters: MxTableSearchUtil.convertVmToMxTableFilterItem(usedFilter)\n    };\n    this.searchChange.emit(newSearchInfo);\n\n    if (searchInfo.isFilter) {\n      this.isOverlayOpen = false;\n    }\n  }\n\n  onClearClick(event: any) {\n    event.stopPropagation();\n    const newTableSearchInfo: MxTableSearchInfoVm = {\n      keyword: '',\n      isFilter: false,\n      filters: []\n    };\n    if (this.mxTableSearchFiltersVm) {\n      newTableSearchInfo.filters = MxTableSearchUtil.clearFilterItemsValue(this.mxTableSearchFiltersVm);\n    }\n    this.onSearchChange(newTableSearchInfo);\n  }\n\n  openOverlay() {\n    if (!this.disableOverlay) {\n      this.isOverlayOpen = !this.isOverlayOpen;\n    }\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["MxTableSearchUtil.getKeywords","MxTableSearchUtil.clearFilterItemsValue","MxTableSearchUtil.convertMxTableFilterItemToVm","MxTableSearchUtil.convertVmToMxTableFilterItem","i2"],"mappings":"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"}