{"version":3,"sources":["../src/index.ts","../src/useTable/index.ts","../src/utils/useIsFirstRender/index.ts","../src/utils/column-filters-to-crud-filters/index.ts","../src/utils/get-removed-filters/index.ts","../src/utils/crud-filters-to-column-filters/index.ts"],"sourcesContent":["export { useTable } from \"./useTable/index.js\";\nexport type { UseTableProps, UseTableReturnType } from \"./useTable/index.js\";\n","import { useEffect } from \"react\";\nimport isEqual from \"lodash/isEqual\";\nimport {\n  type BaseRecord,\n  type CrudFilter,\n  type CrudSorting,\n  type HttpError,\n  useTable as useTableCore,\n  type useTableProps as useTablePropsCore,\n  type useTableReturnType as useTableReturnTypeCore,\n} from \"@refinedev/core\";\nimport {\n  useReactTable,\n  type TableOptions,\n  type Table,\n  getCoreRowModel,\n  getSortedRowModel,\n  getFilteredRowModel,\n} from \"@tanstack/react-table\";\n\nimport {\n  useIsFirstRender,\n  columnFiltersToCrudFilters,\n  getRemovedFilters,\n  crudFiltersToColumnFilters,\n} from \"../utils\";\n\nexport type UseTableReturnType<\n  TData extends BaseRecord = BaseRecord,\n  TError extends HttpError = HttpError,\n> = {\n  reactTable: Table<TData>;\n  refineCore: useTableReturnTypeCore<TData, TError>;\n};\n\nexport type UseTableProps<\n  TQueryFnData extends BaseRecord = BaseRecord,\n  TError extends HttpError = HttpError,\n  TData extends BaseRecord = TQueryFnData,\n> = {\n  /**\n   * Configuration object for the core of the [useTable](/docs/api-reference/core/hooks/useTable/)\n   * @type [`useTablePropsCore<TQueryFnData, TError>`](/docs/api-reference/core/hooks/useTable/#properties)\n   */\n  refineCoreProps?: useTablePropsCore<TQueryFnData, TError, TData>;\n} & Pick<TableOptions<TData>, \"columns\"> &\n  Partial<Omit<TableOptions<TData>, \"columns\">>;\n\nexport function useTable<\n  TQueryFnData extends BaseRecord = BaseRecord,\n  TError extends HttpError = HttpError,\n  TData extends BaseRecord = TQueryFnData,\n>({\n  refineCoreProps = {},\n  initialState: reactTableInitialState = {},\n  ...rest\n}: UseTableProps<TQueryFnData, TError, TData>): UseTableReturnType<\n  TData,\n  TError\n> {\n  const isFirstRender = useIsFirstRender();\n\n  const useTableResult = useTableCore<TQueryFnData, TError, TData>(\n    refineCoreProps,\n  );\n\n  const isServerSideFilteringEnabled =\n    (refineCoreProps.filters?.mode || \"server\") === \"server\";\n  const isServerSideSortingEnabled =\n    (refineCoreProps.sorters?.mode || \"server\") === \"server\";\n\n  const isPaginationEnabled = refineCoreProps.pagination?.mode !== \"off\";\n\n  const {\n    tableQuery: { data },\n    currentPage,\n    setCurrentPage,\n    pageSize: pageSizeCore,\n    setPageSize: setPageSizeCore,\n    sorters,\n    setSorters,\n    filters: filtersCore,\n    setFilters,\n    pageCount,\n  } = useTableResult;\n\n  const reactTableResult = useReactTable<TData>({\n    data: data?.data ?? [],\n    getCoreRowModel: getCoreRowModel(),\n    getSortedRowModel: isServerSideSortingEnabled\n      ? undefined\n      : getSortedRowModel(),\n    getFilteredRowModel: isServerSideFilteringEnabled\n      ? undefined\n      : getFilteredRowModel(),\n    initialState: {\n      pagination: {\n        pageIndex: currentPage - 1,\n        pageSize: pageSizeCore,\n      },\n      sorting: sorters.map((sorting) => ({\n        id: sorting.field,\n        desc: sorting.order === \"desc\",\n      })),\n      columnFilters: crudFiltersToColumnFilters({\n        columns: rest.columns,\n        crudFilters: filtersCore,\n      }),\n      ...reactTableInitialState,\n    },\n    pageCount,\n    manualPagination: true,\n    manualSorting: isServerSideSortingEnabled,\n    manualFiltering: isServerSideFilteringEnabled,\n    ...rest,\n  });\n\n  const { state, columns } = reactTableResult.options;\n  const { pagination, sorting, columnFilters } = state;\n\n  const { pageIndex, pageSize } = pagination ?? {};\n\n  useEffect(() => {\n    if (pageIndex !== undefined) {\n      setCurrentPage(pageIndex + 1);\n    }\n  }, [pageIndex]);\n\n  useEffect(() => {\n    if (pageSize !== undefined) {\n      setPageSizeCore(pageSize);\n    }\n  }, [pageSize]);\n\n  useEffect(() => {\n    if (sorting !== undefined) {\n      const newSorters: CrudSorting = sorting.map((sorting) => ({\n        field: sorting.id,\n        order: sorting.desc ? \"desc\" : \"asc\",\n      }));\n\n      if (!isEqual(sorters, newSorters)) {\n        setSorters(newSorters);\n      }\n\n      if (sorting.length > 0 && isPaginationEnabled && !isFirstRender) {\n        setCurrentPage(1);\n      }\n    }\n  }, [sorting]);\n\n  useEffect(() => {\n    const allColumns = reactTableResult\n      .getAllColumns()\n      .map((col) => col.columnDef);\n\n    const crudFilters: CrudFilter[] = columnFiltersToCrudFilters({\n      columns: allColumns,\n      columnFilters,\n    });\n\n    crudFilters.push(\n      ...getRemovedFilters({\n        nextFilters: crudFilters,\n        coreFilters: filtersCore,\n      }),\n    );\n\n    if (!isEqual(crudFilters, filtersCore)) {\n      setFilters(crudFilters);\n    }\n\n    if (crudFilters.length > 0 && isPaginationEnabled && !isFirstRender) {\n      setCurrentPage(1);\n    }\n  }, [columnFilters, columns]);\n\n  return {\n    reactTable: reactTableResult,\n    refineCore: useTableResult,\n  };\n}\n","import { useEffect, useRef } from \"react\";\n\nexport const useIsFirstRender = () => {\n  const firstRender = useRef(true);\n\n  useEffect(() => {\n    firstRender.current = false;\n  }, []);\n\n  return firstRender.current;\n};\n","import type {\n  ConditionalFilter,\n  CrudFilter,\n  CrudOperators,\n  LogicalFilter,\n} from \"@refinedev/core\";\nimport type {\n  ColumnDef,\n  ColumnFilter,\n  ColumnFiltersState,\n} from \"@tanstack/react-table\";\n\ntype Params = {\n  columnFilters?: ColumnFiltersState;\n  columns: ColumnDef<any, any>[];\n};\n\nexport const columnFiltersToCrudFilters = ({\n  columns,\n  columnFilters,\n}: Params): CrudFilter[] => {\n  return (\n    columnFilters?.map((filter) => {\n      const operator =\n        (filter as ColumnFilter & { operator?: CrudOperators }).operator ??\n        (\n          columns.find((col) => col.id === filter.id)?.meta as {\n            filterOperator?: string;\n          }\n        )?.filterOperator;\n\n      const isConditional = operator === \"and\" || operator === \"or\";\n\n      if (isConditional && Array.isArray(filter.value)) {\n        const filterKey =\n          (\n            columns.find((c) => c.id === filter.id)?.meta as {\n              filterKey?: string;\n            }\n          )?.filterKey ?? filter.id;\n\n        return {\n          key: filterKey,\n          operator: operator as ConditionalFilter[\"operator\"],\n          value: filter.value,\n        };\n      }\n      const defaultOperator = Array.isArray(filter.value) ? \"in\" : \"eq\";\n\n      return {\n        field: filter.id,\n        operator: (operator as LogicalFilter[\"operator\"]) ?? defaultOperator,\n        value: filter.value,\n      };\n    }) ?? []\n  );\n};\n","import type { CrudFilter, LogicalFilter } from \"@refinedev/core\";\n\ntype Params = {\n  nextFilters: CrudFilter[];\n  coreFilters: CrudFilter[];\n};\n\nexport const getRemovedFilters = ({\n  nextFilters,\n  coreFilters,\n}: Params): CrudFilter[] => {\n  const removedFilters = coreFilters.filter(\n    (filter) =>\n      !nextFilters.some((nextFilter) => {\n        const isFilterConditional =\n          filter.operator === \"and\" || filter.operator === \"or\";\n        const isCrudFilterConditional =\n          nextFilter.operator === \"and\" || nextFilter.operator === \"or\";\n        const hasSameOperator = filter.operator === nextFilter.operator;\n        const hasSameKey =\n          isFilterConditional &&\n          isCrudFilterConditional &&\n          filter.key === nextFilter.key;\n        const hasSameField =\n          !isFilterConditional &&\n          !isCrudFilterConditional &&\n          (filter as LogicalFilter).field ===\n            (nextFilter as LogicalFilter).field;\n\n        return hasSameOperator && (hasSameKey || hasSameField);\n      }),\n  );\n\n  return removedFilters.map((filter) => {\n    if (filter.operator === \"and\" || filter.operator === \"or\") {\n      return {\n        key: filter.key,\n        operator: filter.operator,\n        value: [],\n      };\n    }\n    return {\n      field: (filter as LogicalFilter).field,\n      operator: filter.operator,\n      value: undefined,\n    };\n  });\n};\n","import type { CrudFilter, LogicalFilter } from \"@refinedev/core\";\nimport type { ColumnDef, ColumnFilter } from \"@tanstack/react-table\";\n\ntype Params = {\n  columns: ColumnDef<any, any>[];\n  crudFilters: CrudFilter[];\n};\n\nexport const crudFiltersToColumnFilters = ({\n  columns,\n  crudFilters,\n}: Params): ColumnFilter[] => {\n  return crudFilters\n    .map((filter) => {\n      if (filter.operator === \"and\" || filter.operator === \"or\") {\n        if (filter.key) {\n          const filterId: string =\n            columns.find(\n              (col) =>\n                (col.meta as { filterKey?: string })?.filterKey === filter.key,\n            )?.id ?? filter.key;\n\n          return {\n            id: filterId,\n            operator: filter.operator,\n            value: filter.value,\n          };\n        }\n        return undefined;\n      }\n      return {\n        id: (filter as LogicalFilter).field,\n        operator: (filter as LogicalFilter).operator,\n        value: filter.value,\n      };\n    })\n    .filter(Boolean) as ColumnFilter[];\n};\n"],"mappings":"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","names":["import_react","_a","useTableCore","sorting","isEqual"]}