{"version":3,"file":"index.cjs","sources":["../../../../components/data-table/utils/index.tsx"],"sourcesContent":["import type { Row, Table } from '@tanstack/react-table';\nimport { TableState } from '@tanstack/table-core';\nimport dayjs from 'dayjs';\n\nimport { FilterOperatorTypes, FilterType } from '~/types/filters';\nimport {\n  DataTableColumnDef,\n  DataTableQuery,\n  DataTableSort,\n  defaultGroupOption,\n  GroupedData,\n  InternalFilter,\n  InternalQuery,\n  SortOrders\n} from '../data-table.types';\nimport {\n  type FilterPrimitive,\n  getFilterFn,\n  getFilterOperator,\n  getFilterValue\n} from './filter-operations';\n\nexport function queryToTableState(query: InternalQuery): Partial<TableState> {\n  const columnFilters =\n    query.filters\n      ?.filter(data => {\n        if (data._type === FilterType.date)\n          return dayjs(data.value as string | Date).isValid();\n        if (data.value !== '') return true;\n        return false;\n      })\n      ?.map(data => {\n        const valueObject =\n          data._type === FilterType.date\n            ? { date: data.value }\n            : { value: data.value };\n        return {\n          value: valueObject,\n          id: data?.name\n        };\n      }) || [];\n\n  const sorting = query.sort?.map(data => ({\n    id: data?.name,\n    desc: data?.order === SortOrders.DESC\n  }));\n  return {\n    columnFilters: columnFilters,\n    sorting: sorting,\n    globalFilter: query.search\n  };\n}\n\nexport function getColumnsWithFilterFn<TData, TValue>(\n  columns: DataTableColumnDef<TData, TValue>[] = [],\n  filters: InternalFilter[] = []\n): DataTableColumnDef<TData, TValue>[] {\n  return columns.map(column => {\n    const colFilter = filters?.find(\n      filter => filter.name === column.accessorKey\n    );\n    const filterFn = colFilter?.operator\n      ? getFilterFn(column.filterType || FilterType.string, colFilter.operator)\n      : undefined;\n\n    return {\n      ...column,\n      filterFn\n    };\n  });\n}\n\nexport function groupData<TData, TValue = unknown>(\n  data: TData[],\n  group_by?: string,\n  columns: DataTableColumnDef<TData, TValue>[] = []\n): GroupedData<TData>[] {\n  if (!data) return [];\n  if (!group_by || group_by === defaultGroupOption.id)\n    return data as GroupedData<TData>[];\n\n  const groupMap = new Map<string, TData[]>();\n  data.forEach((currentData: TData) => {\n    const item = currentData as Record<string, string>;\n    const keyValue = item[group_by];\n    if (!groupMap.has(keyValue)) {\n      groupMap.set(keyValue, []);\n    }\n    groupMap.get(keyValue)?.push(item as TData);\n  });\n\n  const columnDef = columns.find(col => col.accessorKey === group_by);\n  const showGroupCount = columnDef?.showGroupCount || false;\n  const groupLablesMap = columnDef?.groupLabelsMap || {};\n  const groupCountMap = columnDef?.groupCountMap || {};\n  const groupedData: GroupedData<TData>[] = [];\n\n  groupMap.forEach((value, key) => {\n    groupedData.push({\n      label: groupLablesMap[key] || key,\n      group_key: key,\n      subRows: value,\n      count: groupCountMap[key] ?? value.length,\n      showGroupCount\n    });\n  });\n\n  return groupedData;\n}\n\nconst generateFilterMap = (\n  filters: InternalFilter[] = []\n): Map<string, unknown> => {\n  return new Map(\n    filters\n      ?.filter(data => data._type === FilterType.select || data.value !== '')\n      .map(({ name, operator, value }) => [`${name}-${operator}`, value])\n  );\n};\n\nconst generateSortMap = (sort: DataTableSort[] = []): Map<string, string> => {\n  return new Map(sort.filter(Boolean).map(({ name, order }) => [name, order]));\n};\n\nconst isFilterChanged = (\n  oldFilters: InternalFilter[] = [],\n  newFilters: InternalFilter[] = []\n): boolean => {\n  const oldFilterMap = generateFilterMap(oldFilters);\n  const newFilterMap = generateFilterMap(newFilters);\n\n  if (oldFilterMap.size !== newFilterMap.size) return true;\n\n  return [...newFilterMap].some(\n    ([key, value]) => oldFilterMap.get(key) !== value\n  );\n};\n\nconst isSortChanged = (\n  oldSort: DataTableSort[] = [],\n  newSort: DataTableSort[] = []\n): boolean => {\n  if (oldSort.length !== newSort.length) return true;\n\n  const oldSortMap = generateSortMap(oldSort);\n  const newSortMap = generateSortMap(newSort);\n\n  return [...newSortMap].some(([key, order]) => oldSortMap.get(key) !== order);\n};\n\nconst isGroupChanged = (\n  oldGroupBy: string[] = [],\n  newGroupBy: string[] = []\n): boolean => {\n  if (oldGroupBy.length !== newGroupBy.length) return true;\n\n  const oldGroupSet = new Set(oldGroupBy);\n  return newGroupBy.some(item => !oldGroupSet.has(item));\n};\n\nconst isSearchChanged = (oldSearch?: string, newSearch?: string): boolean => {\n  return oldSearch !== newSearch;\n};\n\n/**\n * Checks if there is an active filter, search, or updated sort/grouping\n * compared to the defaults. Used to distinguish zero state from empty state.\n */\nexport const hasActiveQuery = (\n  tableQuery: InternalQuery,\n  defaultSort?: DataTableSort\n): boolean => {\n  const hasFilters =\n    (tableQuery?.filters && tableQuery.filters.length > 0) || false;\n  const hasSearch = Boolean(\n    tableQuery?.search && tableQuery.search.trim() !== ''\n  );\n  const sortChanged = isSortChanged(\n    defaultSort ? [defaultSort] : [],\n    tableQuery.sort || []\n  );\n  const groupChanged = isGroupChanged(\n    [defaultGroupOption.id],\n    tableQuery.group_by || []\n  );\n  return hasFilters || hasSearch || sortChanged || groupChanged;\n};\n\nexport const hasQueryChanged = (\n  oldQuery: InternalQuery | null,\n  newQuery: InternalQuery\n): boolean => {\n  if (!oldQuery) return true;\n  return (\n    isFilterChanged(oldQuery.filters, newQuery.filters) ||\n    isSortChanged(oldQuery.sort, newQuery.sort) ||\n    isGroupChanged(oldQuery.group_by, newQuery.group_by) ||\n    isSearchChanged(oldQuery.search, newQuery.search)\n  );\n};\n\nexport function getInitialColumnVisibility<TData, TValue>(\n  columns: DataTableColumnDef<TData, TValue>[] = []\n): Record<string, boolean> | {} {\n  return columns.reduce((acc, col) => {\n    return {\n      ...acc,\n      [col.accessorKey]: col.defaultHidden ? false : true\n    };\n  }, {});\n}\n\nexport function transformToDataTableQuery(\n  query: InternalQuery\n): DataTableQuery {\n  const { group_by = [], filters = [], sort = [], ...rest } = query;\n  const sanitizedGroupBy = group_by?.filter(\n    key => key !== defaultGroupOption.id\n  );\n\n  const sanitizedFilters =\n    filters\n      ?.filter(data => {\n        if (data._type === FilterType.select) return true;\n        if (data._type === FilterType.date)\n          return dayjs(data.value as string | Date).isValid();\n        if (data.value !== '') return true;\n        return false;\n      })\n      ?.map(data => ({\n        name: data.name,\n        operator: getFilterOperator({\n          operator: data.operator,\n          value: data.value as FilterPrimitive,\n          filterType: data._type\n        }),\n        ...getFilterValue({\n          value: data.value as FilterPrimitive,\n          filterType: data._type,\n          dataType: data._dataType,\n          operator: data.operator\n        })\n      })) || [];\n\n  return {\n    ...rest,\n    sort: sort,\n    group_by: sanitizedGroupBy,\n    filters: sanitizedFilters\n  };\n}\n\n// Transform DataTableQuery to InternalQuery\n// This reverses the transformation done by transformToDataTableQuery\nexport function dataTableQueryToInternal(query: DataTableQuery): InternalQuery {\n  const { filters, ...rest } = query;\n\n  if (!filters) {\n    return rest;\n  }\n\n  // Convert DataTableFilter[] to InternalFilter[]\n  const internalFilters: InternalFilter[] = filters.map(filter => {\n    const {\n      operator,\n      value,\n      stringValue,\n      numberValue,\n      boolValue,\n      ...filterRest\n    } = filter;\n\n    // Reverse the operator mapping and wildcard transformation\n    let transformedFilter = {\n      operator: operator as FilterOperatorTypes,\n      value: value,\n      ...(stringValue !== undefined && { stringValue }),\n      ...(numberValue !== undefined && { numberValue }),\n      ...(boolValue !== undefined && { boolValue })\n    };\n\n    // If operator is 'ilike', determine the original operator based on wildcards\n    if (operator === 'ilike' && stringValue) {\n      if (stringValue.startsWith('%') && stringValue.endsWith('%')) {\n        transformedFilter = {\n          operator: 'contains',\n          value: stringValue.slice(1, -1) // Remove % from both ends\n        };\n      } else if (stringValue.endsWith('%')) {\n        transformedFilter = {\n          operator: 'starts_with',\n          value: stringValue.slice(0, -1) // Remove % from end\n        };\n      } else if (stringValue.startsWith('%')) {\n        transformedFilter = {\n          operator: 'ends_with',\n          value: stringValue.slice(1) // Remove % from start\n        };\n      } else {\n        // Default to contains if no wildcards (shouldn't happen normally)\n        transformedFilter = {\n          operator: 'contains',\n          value: stringValue\n        };\n      }\n    }\n\n    return {\n      ...filterRest,\n      ...transformedFilter,\n      // We don't have type information, so leave it undefined\n      // The UI will need to infer or set these based on column definitions\n      _type: undefined,\n      _dataType: undefined\n    } as InternalFilter;\n  });\n\n  return {\n    ...rest,\n    filters: internalFilters\n  };\n}\n\n/** Leaf count from the row tree. Do not use `model.flatRows` here: with `filterFromLeafRows`, TanStack's filtered model leaves `flatRows` empty while `rows` is correct. */\nexport function countLeafRows<T>(rows: Row<T>[]): number {\n  return rows.reduce(\n    (n, row) => n + (row.subRows?.length ? countLeafRows(row.subRows) : 1),\n    0\n  );\n}\n\n/** Difference between pre- and post-filter leaf rows (client mode only). */\nexport function getClientHiddenLeafRowCount<T>(table: Table<T>): number {\n  const pre = table.getPreFilteredRowModel();\n  const post = table.getFilteredRowModel();\n  return Math.max(0, countLeafRows(pre.rows) - countLeafRows(post.rows));\n}\n\nexport function hasActiveTableFiltering<T>(table: Table<T>): boolean {\n  const state = table.getState();\n  if (state.columnFilters?.length > 0) return true;\n  const gf = state.globalFilter;\n  if (gf === undefined || gf === null) return false;\n  return String(gf).trim() !== '';\n}\n\nexport function getDefaultTableQuery(\n  defaultSort?: DataTableSort,\n  oldQuery: DataTableQuery = {}\n): InternalQuery {\n  // Convert DataTableQuery to InternalQuery\n  const internalQuery = dataTableQueryToInternal(oldQuery);\n\n  return {\n    sort: defaultSort ? [defaultSort] : [],\n    group_by: [defaultGroupOption.id],\n    ...internalQuery\n  };\n}\n"],"names":["FilterType","SortOrders","filters","getFilterFn","defaultGroupOption","getFilterOperator","getFilterValue"],"mappings":"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"}