{"version":3,"file":"filter-operations.cjs","sources":["../../../../components/data-view/utils/filter-operations.tsx"],"sourcesContent":["import type { FilterFn } from '@tanstack/table-core';\nimport dayjs from 'dayjs';\nimport isSameOrAfter from 'dayjs/plugin/isSameOrAfter';\nimport isSameOrBefore from 'dayjs/plugin/isSameOrBefore';\n\nimport {\n  DataTableFilterOperatorTypes,\n  DateFilterOperatorType,\n  EmptyFilterValue,\n  FilterOperatorTypes,\n  FilterType,\n  FilterTypes,\n  FilterValue,\n  FilterValueType,\n  MultiSelectFilterOperatorType,\n  NumberFilterOperatorType,\n  SelectFilterOperatorType,\n  StringFilterOperatorType\n} from '~/types/filters';\nimport { DataViewFilterValues } from '../data-view.types';\n\ndayjs.extend(isSameOrAfter);\ndayjs.extend(isSameOrBefore);\n\nexport type FilterFunctionsMap = {\n  number: Record<NumberFilterOperatorType, FilterFn<unknown>>;\n  string: Record<StringFilterOperatorType, FilterFn<unknown>>;\n  date: Record<DateFilterOperatorType, FilterFn<unknown>>;\n  select: Record<SelectFilterOperatorType, FilterFn<unknown>>;\n  multiselect: Record<MultiSelectFilterOperatorType, FilterFn<unknown>>;\n};\n\nexport const filterOperationsMap: FilterFunctionsMap = {\n  number: {\n    eq: (row, columnId, filterValue: FilterValue) =>\n      Number(row.getValue(columnId)) === Number(filterValue.value),\n    neq: (row, columnId, filterValue: FilterValue) =>\n      Number(row.getValue(columnId)) !== Number(filterValue.value),\n    lt: (row, columnId, filterValue: FilterValue) =>\n      Number(row.getValue(columnId)) < Number(filterValue.value),\n    lte: (row, columnId, filterValue: FilterValue) =>\n      Number(row.getValue(columnId)) <= Number(filterValue.value),\n    gt: (row, columnId, filterValue: FilterValue) =>\n      Number(row.getValue(columnId)) > Number(filterValue.value),\n    gte: (row, columnId, filterValue: FilterValue) =>\n      Number(row.getValue(columnId)) >= Number(filterValue.value)\n  },\n  string: {\n    eq: (row, columnId, filterValue: FilterValue) =>\n      String(row.getValue(columnId)).toLowerCase() ===\n      String(filterValue.value).toLowerCase(),\n    neq: (row, columnId, filterValue: FilterValue) =>\n      String(row.getValue(columnId)).toLowerCase() !==\n      String(filterValue.value).toLowerCase(),\n    contains: (row, columnId, filterValue: FilterValue) => {\n      const columnValue = String(row.getValue(columnId)).toLowerCase();\n      const filterStr = String(filterValue.value).toLowerCase();\n      return columnValue.includes(filterStr);\n    },\n    starts_with: (row, columnId, filterValue: FilterValue) => {\n      const columnValue = String(row.getValue(columnId)).toLowerCase();\n      const filterStr = String(filterValue.value).toLowerCase();\n      return columnValue.startsWith(filterStr);\n    },\n    ends_with: (row, columnId, filterValue: FilterValue) => {\n      const columnValue = String(row.getValue(columnId)).toLowerCase();\n      const filterStr = String(filterValue.value).toLowerCase();\n      return columnValue.endsWith(filterStr);\n    }\n  },\n  date: {\n    eq: (row, columnId, filterValue: FilterValue) =>\n      dayjs(row.getValue(columnId)).isSame(dayjs(filterValue.date), 'day'),\n    neq: (row, columnId, filterValue: FilterValue) =>\n      !dayjs(row.getValue(columnId)).isSame(dayjs(filterValue.date), 'day'),\n    lt: (row, columnId, filterValue: FilterValue) =>\n      dayjs(row.getValue(columnId)).isBefore(dayjs(filterValue.date), 'day'),\n    lte: (row, columnId, filterValue: FilterValue) =>\n      dayjs(row.getValue(columnId)).isSameOrBefore(\n        dayjs(filterValue.date),\n        'day'\n      ),\n    gt: (row, columnId, filterValue: FilterValue) =>\n      dayjs(row.getValue(columnId)).isAfter(dayjs(filterValue.date), 'day'),\n    gte: (row, columnId, filterValue: FilterValue) =>\n      dayjs(row.getValue(columnId)).isSameOrAfter(\n        dayjs(filterValue.date),\n        'day'\n      )\n  },\n  select: {\n    eq: (row, columnId, filterValue: FilterValue) => {\n      if (String(filterValue.value) === EmptyFilterValue)\n        return row.getValue(columnId) === '';\n      return String(row.getValue(columnId)) === String(filterValue.value);\n    },\n    neq: (row, columnId, filterValue: FilterValue) => {\n      if (String(filterValue.value) === EmptyFilterValue)\n        return row.getValue(columnId) !== '';\n      return String(row.getValue(columnId)) !== String(filterValue.value);\n    }\n  },\n  multiselect: {\n    in: (row, columnId, filterValue: FilterValue) => {\n      if (!Array.isArray(filterValue.value)) return false;\n      return filterValue.value\n        .map(value => (value === EmptyFilterValue ? '' : String(value)))\n        .includes(String(row.getValue(columnId)));\n    },\n    notin: (row, columnId, filterValue: FilterValue) => {\n      if (!Array.isArray(filterValue.value)) return false;\n      return !filterValue.value\n        .map(value => (value === EmptyFilterValue ? '' : String(value)))\n        .includes(String(row.getValue(columnId)));\n    }\n  }\n} as const;\n\nexport function getFilterFn<T extends keyof FilterFunctionsMap>(\n  type: T,\n  operator: FilterOperatorTypes\n) {\n  // @ts-expect-error FilterOperatorTypes is a union of all possible operators\n  return filterOperationsMap[type][operator];\n}\n\nconst handleStringBasedTypes = (\n  filterType: FilterTypes,\n  value: any,\n  operator?: FilterOperatorTypes | DataTableFilterOperatorTypes\n): DataViewFilterValues => {\n  switch (filterType) {\n    case FilterType.date: {\n      const dateValue = dayjs(value);\n      let stringValue = '';\n      if (dateValue.isValid()) {\n        try {\n          stringValue = dateValue.toISOString();\n        } catch {\n          stringValue = '';\n        }\n      }\n      return { value, stringValue };\n    }\n    case FilterType.select:\n      return {\n        stringValue: value === EmptyFilterValue ? '' : value,\n        value\n      };\n    case FilterType.multiselect:\n      return {\n        value,\n        stringValue: value\n          .map((v: any) => (v === EmptyFilterValue ? '' : String(v)))\n          .join()\n      };\n    case FilterType.string: {\n      let processedValue = value;\n      if (operator === 'contains') processedValue = `%${value}%`;\n      else if (operator === 'starts_with') processedValue = `${value}%`;\n      else if (operator === 'ends_with') processedValue = `%${value}`;\n      else if (operator === 'ilike') {\n        if (!value.includes('%')) processedValue = `%${value}%`;\n      }\n      return { stringValue: processedValue, value };\n    }\n    default:\n      return { stringValue: value, value };\n  }\n};\n\nexport const getFilterOperator = ({\n  value,\n  filterType,\n  operator\n}: {\n  value: any;\n  filterType?: FilterTypes;\n  operator: FilterOperatorTypes;\n}): DataTableFilterOperatorTypes => {\n  if (value === EmptyFilterValue && filterType === FilterType.select)\n    return 'empty';\n  if (\n    filterType === FilterType.string &&\n    (operator === 'contains' ||\n      operator === 'starts_with' ||\n      operator === 'ends_with')\n  ) {\n    return 'ilike';\n  }\n  return operator as DataTableFilterOperatorTypes;\n};\n\nexport const getFilterValue = ({\n  value,\n  dataType = 'string',\n  filterType = FilterType.string,\n  operator\n}: {\n  value: any;\n  dataType?: FilterValueType;\n  filterType?: FilterTypes;\n  operator?: FilterOperatorTypes | DataTableFilterOperatorTypes;\n}): DataViewFilterValues => {\n  if (dataType === 'boolean') return { boolValue: value, value };\n  if (dataType === 'number') return { numberValue: value, value };\n  return handleStringBasedTypes(filterType, value, operator);\n};\n\nexport const getDataType = ({\n  filterType = FilterType.string,\n  dataType = 'string'\n}: {\n  dataType?: FilterValueType;\n  filterType?: FilterTypes;\n}): FilterValueType => {\n  switch (filterType) {\n    case FilterType.multiselect:\n    case FilterType.select:\n      return dataType;\n    case FilterType.date:\n      return 'string';\n    default:\n      return filterType;\n  }\n};\n"],"names":["EmptyFilterValue","FilterType"],"mappings":"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"}