trio-tanstack-table 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/Tanstack/TanstackTable.tsx","../src/SavedViewsMock.tsx","../src/theme.ts","../src/Tanstack/GroupByDropDown.tsx","../src/ProComponents/Icon/Icon.tsx","../src/Typography.tsx","../src/Tanstack/InternalTable.tsx","../src/ui/table.tsx","../src/ui/utils.ts","../src/Tanstack/tableComponents.tsx","../src/ProComponents/Button/Button.tsx","../src/ProComponents/Tab/Tab.tsx","../src/ProComponents/Dropdown.tsx","../src/ProComponents/ProSelect/ProSelect.tsx","../src/ProComponents/ProFields.tsx","../src/ProComponents/index.tsx","../src/Tanstack/tableConstant.tsx","../src/Tanstack/tableInput.tsx","../src/form-constants.ts","../src/Tanstack/tableUtils.tsx","../src/Form/utils/editableTableUtils.ts","../src/Tanstack/useTanstackTable.tsx","../src/ProComponents/FilterLayout/index.tsx","../src/Tanstack/useTableUrlSync.ts","../src/Tanstack/filter-url-utils.ts","../src/Tanstack/style.tsx"],"sourcesContent":["/* eslint-disable no-unsafe-optional-chaining */\n/* eslint-disable react/display-name */\nimport { ReloadOutlined } from \"@ant-design/icons\"\nimport {\n ColumnDef,\n ColumnFiltersState,\n ColumnOrderState,\n ColumnPinningState,\n ColumnSizingState,\n ExpandedState,\n getCoreRowModel,\n getExpandedRowModel,\n getFacetedMinMaxValues,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getGroupedRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n GroupingState,\n SortingState,\n Table,\n useReactTable,\n VisibilityState,\n} from \"@tanstack/react-table\"\nimport {\n useInfiniteScroll,\n useRequest,\n useSafeState,\n useUpdateEffect,\n} from \"ahooks\"\nimport dayjs from \"dayjs\"\nimport isBetween from \"dayjs/plugin/isBetween\"\nimport React, {\n ForwardedRef,\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\"\nimport {\n SavedViewsControl,\n ServerExportButton,\n ServerExportPayload,\n TableViewState,\n} from \"~/shared/components/SavedViews\"\nimport { useAppTheme } from \"~/theme\"\nimport type { UrlFilterValue } from \"./filter-url-utils\"\nimport { GroupByDropDown } from \"./GroupByDropDown\"\nimport { InternalTable } from \"./InternalTable\"\nimport {\n CustomTableMeta,\n PaginationState,\n RequestResponse,\n TableRef,\n TanstackTableProps,\n} from \"./table.types\"\nimport {\n ColumnDropDown,\n TanstackFilter,\n TanstackTableCount,\n TanstackTablePagination,\n TanstackToolbar,\n} from \"./tableComponents\"\nimport {\n getExtraColumns,\n getHiddenColumns,\n getRowIds,\n getSelectedRowModel,\n} from \"./tableUtils\"\nimport { useTableUrlSync } from \"./useTableUrlSync\"\nimport { useTanstackTable } from \"./useTanstackTable\"\n\nimport { debounce, isArray } from \"lodash\"\n\ndayjs.extend(isBetween)\n\nconst DEFAULT_LEFT_PINNED_COLUMNS = [\"rowSelection\", \"index\"] as const\nconst DEFAULT_RIGHT_PINNED_COLUMNS = [\"filter\"] as const\n\nconst toStringArray = (value: unknown): string[] => {\n return Array.isArray(value)\n ? value.filter((item): item is string => typeof item === \"string\")\n : []\n}\n\nconst uniqueColumnIds = (columnIds: string[]) => Array.from(new Set(columnIds))\n\nconst normalizeColumnPinning = (\n value: unknown,\n fallback?: ColumnPinningState,\n validColumnIds?: string[],\n): ColumnPinningState => {\n const source =\n value && typeof value === \"object\"\n ? (value as ColumnPinningState)\n : fallback ?? {}\n\n const allowed = validColumnIds ? new Set(validColumnIds) : undefined\n const filterAllowedColumn = (columnId: string) =>\n !allowed || allowed.has(columnId)\n\n const left = uniqueColumnIds([\n ...DEFAULT_LEFT_PINNED_COLUMNS,\n ...toStringArray(source.left).filter(filterAllowedColumn),\n ])\n const right = uniqueColumnIds(\n toStringArray(source.right).filter(\n (columnId) =>\n filterAllowedColumn(columnId) &&\n !left.includes(columnId) &&\n columnId !== \"filter\",\n ),\n )\n\n return {\n left,\n right: [...right, ...DEFAULT_RIGHT_PINNED_COLUMNS],\n }\n}\n\nconst parseColumnOrder = (value: string | null): ColumnOrderState => {\n if (!value) return []\n try {\n const parsed = JSON.parse(value)\n return Array.isArray(parsed)\n ? parsed.filter((item): item is string => typeof item === \"string\")\n : []\n } catch {\n return []\n }\n}\n\nconst normalizeColumnSizing = (\n value: unknown,\n validColumnIds?: Set<string>,\n): ColumnSizingState => {\n if (!value || typeof value !== \"object\") return {}\n\n const entries = Object.entries(value as Record<string, unknown>).filter(\n ([columnId, width]) =>\n (!validColumnIds || validColumnIds.has(columnId)) &&\n typeof width === \"number\" &&\n Number.isFinite(width) &&\n width > 0,\n )\n\n return Object.fromEntries(entries) as ColumnSizingState\n}\n\nconst parseColumnSizing = (\n value: string | null,\n validColumnIds?: Set<string>,\n): ColumnSizingState => {\n if (!value) return {}\n try {\n return normalizeColumnSizing(JSON.parse(value), validColumnIds)\n } catch {\n return {}\n }\n}\n\ninterface ColumnNode {\n id?: unknown\n accessorKey?: unknown\n columns?: unknown\n}\n\nconst isColumnNode = (value: unknown): value is ColumnNode =>\n typeof value === \"object\" && value !== null\n\nconst extractColumnId = (column: unknown): string | undefined => {\n if (!isColumnNode(column)) return undefined\n\n if (typeof column.id === \"string\") return column.id\n if (typeof column.accessorKey === \"string\") return column.accessorKey\n\n return undefined\n}\n\nconst collectLeafColumnIds = (columns: unknown[]): string[] => {\n const ids: string[] = []\n\n const walkColumns = (items: unknown[]) => {\n items.forEach((item) => {\n if (\n isColumnNode(item) &&\n Array.isArray(item.columns) &&\n item.columns.length > 0\n ) {\n walkColumns(item.columns)\n return\n }\n\n const columnId = extractColumnId(item)\n if (columnId) ids.push(columnId)\n })\n }\n\n walkColumns(columns)\n\n return ids\n}\n\nconst NoobTanstackTable = forwardRef(\n // eslint-disable-next-line @typescript-eslint/ban-types\n <T extends {}>(\n props: TanstackTableProps<T>,\n ref: ForwardedRef<TableRef | undefined>,\n ) => {\n const {\n request,\n groupSummaryRequest,\n onRow,\n tableLoading,\n manualPagination = false,\n manualFiltering = false,\n manualSorting = false,\n manualGrouping = true,\n dataSource = undefined,\n columns,\n refreshDeps,\n columnsState = {\n persistenceType: \"localStorage\",\n ...(props?.columnsState ?? {}),\n },\n toolbar,\n editable,\n tableProps,\n rowSelection,\n rowExpandable,\n density = \"small\",\n bordered = false,\n tableLoadingRowCount,\n paginationType = \"pagination\",\n pagination = {\n pageIndex: 0,\n pageSize: 10,\n },\n syncWithUrl = false,\n options = {\n reload: true,\n search: true,\n },\n tableAlertOptionRender,\n savedViews,\n serverExport,\n } = props\n\n const urlSyncEnabled = syncWithUrl && manualFiltering\n const {\n initialFilters,\n initialSearchParams: initialUrlSearchParams,\n initialGlobalSearch,\n syncFiltersToUrl,\n syncGlobalSearchToUrl,\n } = useTableUrlSync({ enabled: urlSyncEnabled })\n\n const token = useAppTheme()\n const [rowData, setRowData] = useState<T[]>(dataSource ?? [])\n const [rowCount, setRowCount] = useState<number | undefined>(undefined)\n // Backend grand totals (full filtered set) for the sticky footer.\n const [footerSummary, setFooterSummary] = useState<\n Record<string, unknown> | undefined\n >(undefined)\n\n const [columnVisibility, setColumnVisibility] = useState<VisibilityState>(\n columnsState?.persistenceKey\n ? localStorage.getItem(\n `${columnsState?.persistenceKey}-column-visibility`,\n )\n ? JSON.parse(\n localStorage.getItem(\n `${columnsState?.persistenceKey}-column-visibility`,\n ) ?? \"{}\",\n )\n : {\n ...getHiddenColumns(columns ?? []),\n }\n : {\n ...getHiddenColumns(columns ?? []),\n },\n )\n const [columnPinning, setColumnPinning] = useState<ColumnPinningState>(\n () => {\n const fallbackPinning = normalizeColumnPinning(\n tableProps?.initialState?.columnPinning,\n )\n\n if (!columnsState?.persistenceKey) return fallbackPinning\n\n try {\n return normalizeColumnPinning(\n JSON.parse(\n localStorage.getItem(\n `${columnsState?.persistenceKey}-column-pinning`,\n ) ?? \"null\",\n ),\n fallbackPinning,\n )\n } catch {\n return fallbackPinning\n }\n },\n )\n\n const [tablePagination, setTablePagination] = useState<PaginationState>({\n ...pagination,\n })\n const [editableRowKey, setEditableRowKey] = useState<React.Key[]>(\n editable?.editedRowKey ?? [],\n )\n\n const { indexColumn } = useTanstackTable<T>()\n\n const extraColumns = getExtraColumns<T>({ rowSelection, rowExpandable })\n\n const [rowSelectionState, setRowSelectionState] = useSafeState(\n tableProps?.initialState?.rowSelection\n ? tableProps.initialState.rowSelection\n : rowSelection?.selectedRowKeys ?? {},\n )\n const isParentSyncRef = useRef(false)\n\n const [sorting, setSorting] = useState<SortingState>([])\n const [grouping, setGrouping] = useState<GroupingState>(() => {\n if (!columnsState?.persistenceKey) return []\n try {\n const stored = localStorage.getItem(\n `${columnsState.persistenceKey}-grouping`,\n )\n return stored ? JSON.parse(stored) : []\n } catch {\n return []\n }\n })\n // note default to all-expanded when grouping is active so groups open by default\n const [expanded, setExpanded] = useState<ExpandedState>(\n grouping.length > 0 ? true : {},\n )\n const [globalTextSearch, setGlobalTextSearch] = useState<\n string | undefined\n >(urlSyncEnabled ? initialGlobalSearch : undefined)\n\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n urlSyncEnabled && Object.keys(initialFilters).length > 0\n ? (initialFilters as unknown as ColumnFiltersState)\n : [],\n )\n\n const isInfinite =\n (paginationType === \"virtual\" || paginationType === \"cursor\") &&\n request !== undefined\n const isCursor = paginationType === \"cursor\" && request !== undefined\n const [_cursor, setCursor] = useState<string | number | null>(null)\n\n // Hook 1: useRequest (for standard pagination)\n const { loading, refresh, runAsync } = useRequest(\n request ?? (() => Promise.resolve({ data: [], total: 0, success: true })),\n {\n ready: !isInfinite,\n onSuccess: (response: RequestResponse<T>) => {\n if (dataSource) {\n setRowData(() => dataSource)\n } else {\n setRowData(() => response.data)\n }\n setRowCount(response.total || undefined)\n setFooterSummary(response.summary)\n },\n defaultParams: [\n {\n page: 1,\n limit: pagination.pageSize,\n ...(urlSyncEnabled ? initialFilters : {}),\n ...(urlSyncEnabled && initialGlobalSearch\n ? { global_search_text: initialGlobalSearch }\n : {}),\n },\n ],\n onBefore() {\n if (rowData?.length === 0) {\n return true\n } else {\n setRowData([])\n }\n },\n refreshDeps,\n },\n )\n\n // note column visibility is a pure client concern — toggling it must NOT\n // refetch/reset the infinite stream (only filters/sort/search/grouping do).\n const reloadDepsSerialized = useMemo(() => {\n return JSON.stringify([\n sorting,\n columnFilters,\n globalTextSearch,\n grouping,\n refreshDeps,\n ])\n }, [sorting, columnFilters, globalTextSearch, grouping, refreshDeps])\n\n // Hook 2: useInfiniteScroll (for virtual-infinite scroll)\n const {\n data: infiniteData,\n loading: infiniteLoading,\n loadingMore: infiniteLoadingMore,\n loadMore: infiniteLoadMore,\n reload: infiniteReload,\n noMore: infiniteNoMore,\n } = useInfiniteScroll(\n async (currentData) => {\n if (!isInfinite) {\n return {\n list: [],\n page: 1,\n nextCursor: null,\n total: 0,\n success: true,\n lastPageSize: 0,\n }\n }\n\n const nextPage = currentData ? currentData.page + 1 : 1\n const limit = pagination.pageSize\n const cursorVal = currentData ? currentData.nextCursor : null\n\n const requestParams: Record<string, any> = {\n limit,\n // Always forward the active column filters — independent of URL sync.\n // (Cursor lists like vouchers don't enable syncWithUrl; gating filters\n // behind it silently dropped them from the backend query.)\n ...columnFilters,\n sort: sorting,\n global_search_text: globalTextSearch,\n visible_columns: columnVisibility,\n ...(grouping.length > 0 ? { grouping } : {}),\n }\n\n if (paginationType === \"cursor\") {\n // First page → no cursor; subsequent pages → the prior page's cursor.\n requestParams.cursor = cursorVal\n } else {\n requestParams.page = nextPage\n }\n\n const response = await request!(requestParams)\n\n // Grand totals come from the backend (full filtered set) — keep the\n // latest so the footer is correct even on a partially-scrolled stream.\n if (response.summary !== undefined) setFooterSummary(response.summary)\n\n return {\n list: response.data || [],\n page: nextPage,\n // Cursor + hasNextPage come straight from the backend's pageInfo.\n // No fallback to a row id — a stale/guessed cursor causes dupes/loops.\n nextCursor: response.nextCursor ?? null,\n hasNextPage: response.hasNextPage,\n // Keep page 1's total on later pages: cursor backends skip the COUNT\n // after the first page (it returns the page length, not the total).\n total: currentData?.total ?? response.total ?? 0,\n success: response.success,\n lastPageSize: response.data?.length || 0,\n }\n },\n {\n manual: true,\n isNoMore: (data) => {\n if (!data) return false\n if (paginationType === \"cursor\") {\n // Authoritative: the backend tells us whether more rows exist.\n if (typeof data.hasNextPage === \"boolean\") return !data.hasNextPage\n return data.nextCursor === null || data.nextCursor === undefined\n }\n // Offset/virtual: stop at total, else when a short page comes back.\n if (data.total !== undefined && data.total > 0) {\n return data.list.length >= data.total\n }\n return data.lastPageSize < pagination.pageSize\n },\n },\n )\n\n // note Trigger initial load and reload when infinite scroll is active and dependencies change\n useEffect(() => {\n if (isInfinite) {\n // Reset the stream + cursor whenever filters/sort/search/grouping change.\n infiniteReload()\n }\n }, [isInfinite, reloadDepsSerialized])\n\n // note Synchronize local cursor state with infiniteData's nextCursor\n useEffect(() => {\n if (isCursor && infiniteData) {\n setCursor(infiniteData.nextCursor)\n } else {\n setCursor(null)\n }\n }, [infiniteData?.nextCursor, isCursor])\n\n // ── Group summary: correct per-group counts + financial totals ──────────\n // Independent of how many detail rows are loaded, so headers never show a\n // misleading \"loaded count\". Refetches when grouping/search/filters change.\n const groupingKey = JSON.stringify(grouping)\n const { data: groupSummaryResult } = useRequest(\n async () => {\n if (!groupSummaryRequest || grouping.length === 0) {\n return { data: [], grandTotal: { count: 0, total: \"0.00\" } }\n }\n return groupSummaryRequest({\n grouping,\n global_search_text: globalTextSearch,\n // Forward the SAME active column filters as the detail request, so\n // header counts/totals always match the filtered visible rows.\n ...columnFilters,\n })\n },\n {\n ready: !!groupSummaryRequest && grouping.length > 0,\n refreshDeps: [groupingKey, globalTextSearch, columnFilters],\n },\n )\n\n const groupSummaryMap = useMemo(() => {\n const map = new Map<string, { count: number; total: string }>()\n for (const g of groupSummaryResult?.data ?? []) {\n const keyStr = JSON.stringify(\n (g.key ?? []).map((v: unknown) => (v == null ? null : String(v))),\n )\n map.set(keyStr, { count: g.count, total: g.total })\n }\n return map\n }, [groupSummaryResult])\n\n const getActivePageSize = () =>\n tableProps?.state?.pagination?.pageSize ?? tablePagination.pageSize\n\n const resetTablePageIndex = () => {\n setTablePagination((prev) =>\n prev.pageIndex === 0 ? prev : { ...prev, pageIndex: 0 },\n )\n }\n\n const debouncedGlobalFilter = debounce((value) => {\n setGlobalTextSearch(value)\n if (manualFiltering) {\n if (!isInfinite) {\n const pageSize = getActivePageSize()\n resetTablePageIndex()\n runAsync({\n ...columnFilters,\n page: 1,\n limit: pageSize,\n global_search_text: value,\n visible_columns: columnVisibility,\n sort: sorting,\n })\n }\n syncGlobalSearchToUrl(value)\n }\n tableProps?.onGlobalFilterChange?.(value)\n }, 500)\n\n const memoizedColumn: Array<ColumnDef<T, any>> = useMemo(() => {\n return [...extraColumns, indexColumn, ...(columns ?? [])] as Array<\n ColumnDef<T, any>\n >\n }, [columns])\n\n const validPersistedColumnIds = useMemo(\n () => new Set(collectLeafColumnIds(memoizedColumn)),\n [memoizedColumn],\n )\n\n const [columnSizing, setColumnSizing] = useState<ColumnSizingState>(() => {\n const fallbackSizing = normalizeColumnSizing(\n tableProps?.initialState?.columnSizing,\n validPersistedColumnIds,\n )\n if (!columnsState?.persistenceKey) return fallbackSizing\n\n const persistedSizing = parseColumnSizing(\n localStorage.getItem(`${columnsState?.persistenceKey}-column-sizing`),\n validPersistedColumnIds,\n )\n\n return Object.keys(persistedSizing).length > 0\n ? persistedSizing\n : fallbackSizing\n })\n\n const [searchParams, setSearchParams] = useState<Record<string, unknown>>(\n urlSyncEnabled ? initialUrlSearchParams : {},\n )\n\n // note Add state trackers for pinning and visibility\n const [columnPinningVersion, setColumnPinningVersion] = useState(0)\n const [columnVisibilityVersion, setColumnVisibilityVersion] = useState(0)\n const [groupingVersion, _setGroupingVersion] = useState(0)\n const columnSizingVersion = 0\n\n const [columnOrder, setColumnOrder] = useState<ColumnOrderState>(() => {\n const fallbackOrder = toStringArray(\n tableProps?.initialState?.columnOrder,\n ).filter((columnId) => validPersistedColumnIds.has(columnId))\n if (!columnsState?.persistenceKey) return fallbackOrder\n\n const persistedOrder = parseColumnOrder(\n localStorage.getItem(`${columnsState?.persistenceKey}-column-order`),\n ).filter((columnId) => validPersistedColumnIds.has(columnId))\n\n return persistedOrder.length > 0 ? persistedOrder : fallbackOrder\n })\n\n const columnsDepsSerialized = useMemo(() => {\n return JSON.stringify(\n (columns ?? []).map((col: any) => {\n if (!col) return null\n return {\n id: col.id || col.accessorKey,\n size: col.size,\n minSize: col.minSize,\n maxSize: col.maxSize,\n visibility: col.visibility,\n }\n }),\n )\n }, [columns])\n\n useUpdateEffect(() => {\n // 1. Column Sizing\n const fallbackSizing = normalizeColumnSizing(\n tableProps?.initialState?.columnSizing,\n validPersistedColumnIds,\n )\n let initialSizing = fallbackSizing\n if (columnsState?.persistenceKey) {\n const persistedSizing = parseColumnSizing(\n localStorage.getItem(`${columnsState?.persistenceKey}-column-sizing`),\n validPersistedColumnIds,\n )\n if (Object.keys(persistedSizing).length > 0) {\n initialSizing = persistedSizing\n }\n }\n setColumnSizing(initialSizing)\n\n // 2. Column Visibility\n const initialVisibility = columnsState?.persistenceKey\n ? localStorage.getItem(\n `${columnsState?.persistenceKey}-column-visibility`,\n )\n ? JSON.parse(\n localStorage.getItem(\n `${columnsState?.persistenceKey}-column-visibility`,\n ) ?? \"{}\",\n )\n : getHiddenColumns(columns ?? [])\n : getHiddenColumns(columns ?? [])\n setColumnVisibility(initialVisibility)\n setColumnVisibilityVersion((v) => v + 1)\n\n // 3. Column Pinning\n const fallbackPinning = normalizeColumnPinning(\n tableProps?.initialState?.columnPinning,\n )\n let initialPinning = fallbackPinning\n if (columnsState?.persistenceKey) {\n try {\n const parsed = JSON.parse(\n localStorage.getItem(\n `${columnsState?.persistenceKey}-column-pinning`,\n ) ?? \"null\",\n )\n if (parsed) {\n initialPinning = normalizeColumnPinning(\n parsed,\n fallbackPinning,\n Array.from(validPersistedColumnIds),\n )\n }\n } catch {}\n }\n setColumnPinning(initialPinning)\n setColumnPinningVersion((v) => v + 1)\n\n // 4. Column Order\n const fallbackOrder = toStringArray(\n tableProps?.initialState?.columnOrder,\n ).filter((columnId) => validPersistedColumnIds.has(columnId))\n let initialOrder = fallbackOrder\n if (columnsState?.persistenceKey) {\n const persistedOrder = parseColumnOrder(\n localStorage.getItem(`${columnsState?.persistenceKey}-column-order`),\n ).filter((columnId) => validPersistedColumnIds.has(columnId))\n if (persistedOrder.length > 0) {\n initialOrder = persistedOrder\n }\n }\n setColumnOrder(initialOrder)\n }, [columnsDepsSerialized])\n\n const activeData = useMemo(() => {\n if (dataSource) return dataSource\n if (isInfinite) return infiniteData?.list ?? []\n return rowData\n }, [dataSource, isInfinite, infiniteData?.list, rowData])\n\n const activeRowCount = isInfinite ? infiniteData?.total ?? 0 : rowCount\n\n const table = useReactTable({\n // && dataSource?.length > 0 change to dataSource !== undefined (For some reason )\n data: activeData,\n renderFallbackValue: \"-\",\n rowCount: manualPagination ? activeRowCount : undefined,\n defaultColumn: {\n minSize: 30,\n size: 150,\n maxSize: 500,\n },\n columns: memoizedColumn,\n getCoreRowModel: getCoreRowModel(),\n getColumnCanGlobalFilter(column) {\n return column.getIsVisible()\n },\n ...tableProps,\n columnResizeMode: \"onEnd\",\n enableColumnResizing: true,\n initialState: {\n ...tableProps?.initialState,\n columnPinning: {\n left: [\n \"rowSelection\",\n \"index\",\n ...(tableProps?.initialState?.columnPinning?.left ?? []),\n ],\n right: [\n \"filter\",\n ...(tableProps?.initialState?.columnPinning?.right ?? []),\n ],\n },\n },\n state: {\n ...tableProps?.state,\n columnPinningVersion,\n sorting,\n grouping,\n groupingVersion,\n columnVisibilityVersion,\n columnSizingVersion,\n pagination: tableProps?.state?.pagination ?? tablePagination,\n columnVisibility,\n columnPinning,\n columnSizing,\n density,\n editedRowKey: editableRowKey,\n expanded,\n columnOrder,\n rowSelection: rowSelectionState,\n searchParams,\n globalFilter: globalTextSearch,\n columnFilters,\n },\n enableMultiRowSelection:\n rowSelection?.selectionType && rowSelection.selectionType !== \"radio\",\n // note With manualPagination the pagination row model is bypassed, so the\n // expanded row model must flatten children itself (paginateExpandedRows=true).\n // For client pagination keep it false so a group's children aren't split\n // across pages (the pagination model still flattens them via expandRows).\n paginateExpandedRows: manualPagination,\n // note keep group/row expansion stable across re-renders & data updates\n autoResetExpanded: false,\n onExpandedChange: setExpanded,\n onRowSelectionChange: (updater) => {\n const resolved =\n typeof updater === \"function\"\n ? updater(table.getState().rowSelection)\n : updater\n setRowSelectionState(resolved)\n },\n filterFns: {\n ISODateFilter: (value, row, key) => {\n // note Get the date value from the row data\n const dateValue = value?.original?.[row]\n\n // note Return false if no date value or key\n if (!dateValue) return false\n\n try {\n // note Parse the date value\n const rowDate = dayjs(dateValue)\n\n // note Return false if invalid date\n if (!rowDate.isValid()) return false\n\n // note Handle date range filter\n if (isArray(key)) {\n const [startDate, endDate] = key\n\n // note Return false if invalid range dates\n if (!startDate || !endDate) return false\n\n // note Compare date within range (inclusive)\n return rowDate.isBetween(startDate, endDate, \"day\", \"[]\")\n }\n\n // note Handle single date filter\n if (key) {\n const filterDate = dayjs(key)\n\n // note Return false if invalid filter date\n if (!filterDate.isValid()) return false\n\n // note Compare dates for equality (ignoring time)\n return (\n rowDate.format(\"YYYY-MM-DD\") === filterDate.format(\"YYYY-MM-DD\")\n )\n }\n\n return false\n } catch (error) {\n console.error(\"Error in ISODateFilter:\", error)\n return false\n }\n },\n BooleanFn: (row, value, key) => {\n const isKeyFalse = key === \"false\"\n return row?.original?.[value] !== isKeyFalse\n },\n },\n onSortingChange: (updater) => {\n const newSorting =\n typeof updater === \"function\"\n ? updater(table.getState().sorting)\n : updater\n setSorting(newSorting)\n if (manualSorting && !isInfinite) {\n const pageSize = getActivePageSize()\n resetTablePageIndex()\n runAsync({\n page: 1,\n limit: pageSize,\n ...columnFilters,\n sort: newSorting,\n global_search_text: globalTextSearch,\n visible_columns: columnVisibility,\n })\n }\n tableProps?.onSortingChange?.(newSorting)\n },\n onGroupingChange: (updater) => {\n const newGrouping =\n typeof updater === \"function\"\n ? updater(table.getState().grouping)\n : updater\n setGrouping(newGrouping)\n // note keep groups open by default; clear expansion when grouping removed\n setExpanded(newGrouping.length > 0 ? true : {})\n if (manualGrouping && !isInfinite) {\n const pageSize = getActivePageSize()\n resetTablePageIndex()\n runAsync({\n page: 1,\n limit: pageSize,\n ...columnFilters,\n sort: sorting,\n grouping: newGrouping,\n global_search_text: globalTextSearch,\n visible_columns: columnVisibility,\n })\n }\n },\n getRowCanExpand: () => true,\n onColumnOrderChange: (updater) => {\n const newOrder =\n typeof updater === \"function\"\n ? updater(table.getState().columnOrder)\n : updater\n const validColumnIds = new Set(\n table.getAllLeafColumns().map((column) => column.id),\n )\n const normalizedOrder = toStringArray(newOrder).filter((columnId) =>\n validColumnIds.has(columnId),\n )\n setColumnOrder(normalizedOrder)\n if (columnsState?.persistenceKey) {\n localStorage.setItem(\n `${columnsState?.persistenceKey}-column-order`,\n JSON.stringify(normalizedOrder),\n )\n }\n },\n onColumnVisibilityChange: (updater) => {\n const newVisibility =\n typeof updater === \"function\"\n ? updater(table.getState().columnVisibility)\n : updater\n setColumnVisibility(newVisibility)\n if (columnsState?.persistenceKey) {\n localStorage.setItem(\n `${columnsState?.persistenceKey}-column-visibility`,\n JSON.stringify(newVisibility),\n )\n }\n\n setColumnVisibilityVersion((v) => v + 1)\n },\n onColumnPinningChange: (updater) => {\n const newPinning =\n typeof updater === \"function\"\n ? updater(table.getState().columnPinning)\n : updater\n const validColumnIds = table\n .getAllLeafColumns()\n .map((column) => column.id)\n const normalizedPinning = normalizeColumnPinning(\n newPinning,\n undefined,\n validColumnIds,\n )\n if (columnsState?.persistenceKey) {\n localStorage.setItem(\n `${columnsState?.persistenceKey}-column-pinning`,\n JSON.stringify(normalizedPinning),\n )\n }\n setColumnPinningVersion((v) => v + 1)\n setColumnPinning(normalizedPinning)\n },\n onColumnSizingChange: (updater) => {\n setColumnSizing((prev) => {\n const nextSizing =\n typeof updater === \"function\" ? updater(prev) : updater\n const normalizedSizing = normalizeColumnSizing(\n nextSizing,\n validPersistedColumnIds,\n )\n\n if (columnsState?.persistenceKey) {\n localStorage.setItem(\n `${columnsState?.persistenceKey}-column-sizing`,\n JSON.stringify(normalizedSizing),\n )\n }\n\n return normalizedSizing\n })\n },\n onColumnFiltersChange: (updater) => {\n const newColumnFilters =\n typeof updater === \"function\"\n ? updater(table?.getState()?.columnFilters)\n : updater\n setColumnFilters(newColumnFilters)\n if (manualFiltering) {\n if (!isInfinite) {\n const pageSize = getActivePageSize()\n resetTablePageIndex()\n runAsync({\n ...newColumnFilters,\n page: 1,\n limit: pageSize,\n global_search_text: globalTextSearch,\n visible_columns: columnVisibility,\n sort: sorting,\n })\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n syncFiltersToUrl(newColumnFilters as any)\n }\n tableProps?.onColumnFiltersChange?.(newColumnFilters)\n },\n onGlobalFilterChange: (value) => {\n debouncedGlobalFilter(value)\n },\n meta: {\n reload: () => {\n if (isInfinite) {\n infiniteReload()\n } else {\n refresh()\n }\n table?.resetRowSelection()\n },\n updateData: (rowIndex, columnId, value) => {\n const data = dataSource ?? rowData\n\n const editedRow = { ...data[rowIndex], [columnId]: value }\n const updateData = data?.map((row, index) => {\n if (index === rowIndex) {\n return {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-unnecessary-type-assertion\n ...data[rowIndex]!,\n [columnId]: value,\n }\n }\n return row\n })\n const res = { record: editedRow, recordList: updateData }\n setRowData(updateData)\n return editable?.onDataSourceChange(res)\n },\n updateEditRowKey: (keys) => {\n setEditableRowKey(keys)\n editable?.setEditedRowKey?.(keys)\n },\n onSearchParamsChange: (values) => {\n setSearchParams(values)\n },\n groupSummary: groupSummaryMap,\n footerSummary,\n rowSelection,\n rowExpandable,\n } satisfies CustomTableMeta,\n getPaginationRowModel:\n paginationType === \"pagination\" ? getPaginationRowModel() : undefined,\n /* todo / getSubRows: (row) => {\n // return row.children\n // } */\n manualFiltering,\n manualPagination,\n manualSorting,\n onPaginationChange: (pagination) => {\n const newPagination =\n typeof pagination === \"function\"\n ? pagination(table.getState().pagination)\n : pagination\n setTablePagination({\n pageIndex: newPagination.pageIndex,\n pageSize: newPagination.pageSize,\n })\n if (manualPagination && !isInfinite) {\n runAsync({\n page: newPagination.pageIndex + 1,\n limit: newPagination.pageSize,\n ...columnFilters,\n sort: sorting,\n global_search_text: globalTextSearch,\n visible_columns: columnVisibility,\n })\n }\n tableProps?.onPaginationChange?.(newPagination)\n },\n getFilteredRowModel: getFilteredRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getGroupedRowModel: getGroupedRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n getFacetedRowModel: getFacetedRowModel(),\n getFacetedUniqueValues: getFacetedUniqueValues(),\n getFacetedMinMaxValues: getFacetedMinMaxValues(),\n // note keep grouped columns in place (avoids duplicate headers / misalignment)\n groupedColumnMode: false,\n })\n\n // note notify parent when internal selection changes (skip if triggered by parent sync)\n useUpdateEffect(() => {\n if (isParentSyncRef.current) {\n isParentSyncRef.current = false\n return\n }\n rowSelection?.onChange?.(getRowIds(table), getSelectedRowModel(table))\n }, [rowSelectionState])\n\n // note sync parent selectedRowKeys into internal state (for modal pre-selection)\n useUpdateEffect(() => {\n if (rowSelection?.selectedRowKeys) {\n isParentSyncRef.current = true\n setRowSelectionState(rowSelection.selectedRowKeys)\n }\n }, [JSON.stringify(rowSelection?.selectedRowKeys)])\n\n // note update effect for row visibility on active key change\n useUpdateEffect(() => {\n setColumnVisibility(getHiddenColumns(columns ?? []))\n }, [toolbar?.menu?.activeKey])\n\n // note update effect for row visibility on active key change\n useUpdateEffect(() => {\n setEditableRowKey(editable?.editedRowKey ?? [])\n }, [editable?.editedRowKey])\n\n // note Expose reload method\n useImperativeHandle(\n ref,\n () => ({\n reload: () => {\n if (isInfinite) {\n infiniteReload()\n } else {\n refresh()\n }\n table?.resetRowSelection()\n },\n getTable: () => table,\n }),\n [refresh, infiniteReload, table, isInfinite],\n )\n\n // ─── Saved Views / Server Export ─────────────────────────────────────────\n // note columnFilters is an empty ARRAY initially / after reset, and a\n // Record<field, { operator, value }> once the filter drawer applies values.\n // Always normalize to a record for the wire format.\n const normalizeFilterState = (value: unknown): Record<string, unknown> => {\n if (!value || typeof value !== \"object\") return {}\n if (Array.isArray(value)) {\n const out: Record<string, unknown> = {}\n for (const item of value) {\n if (item && typeof item === \"object\" && \"id\" in item) {\n out[(item as { id: string }).id] = (\n item as { value?: unknown }\n ).value\n }\n }\n return out\n }\n return value as Record<string, unknown>\n }\n\n // note Snapshot of everything a saved view captures\n const getViewState = (): TableViewState => ({\n filters: normalizeFilterState(columnFilters),\n searchParams,\n sorting: sorting as Array<{ id: string; desc: boolean }>,\n visibleColumns: columnVisibility,\n globalSearch: globalTextSearch,\n grouping: grouping as string[],\n })\n\n // note Restores a saved view with a single refetch + URL sync\n const applyViewState = (state: TableViewState) => {\n const nextFilters = normalizeFilterState(\n state.filters,\n ) as unknown as ColumnFiltersState\n const nextSearchParams = state.searchParams ?? {}\n const nextSorting = (state.sorting ?? []) as SortingState\n const nextVisibility =\n state.visibleColumns ?? getHiddenColumns(columns ?? [])\n const nextSearch = state.globalSearch || undefined\n // A view with no grouping must CLEAR any active grouping (not leave it on).\n const nextGrouping = (state.grouping ?? []) as GroupingState\n\n setColumnFilters(nextFilters)\n setSearchParams(nextSearchParams)\n setSorting(nextSorting)\n setColumnVisibility(nextVisibility)\n setColumnVisibilityVersion((v) => v + 1)\n if (columnsState?.persistenceKey) {\n localStorage.setItem(\n `${columnsState.persistenceKey}-column-visibility`,\n JSON.stringify(nextVisibility),\n )\n }\n setGlobalTextSearch(nextSearch)\n\n // Restore grouping the same way the Group-By control does: state +\n // expansion + persistence. Changing `grouping` also resets the cursor\n // stream / triggers a refetch via reloadDepsSerialized.\n setGrouping(nextGrouping)\n setExpanded(nextGrouping.length > 0 ? true : {})\n if (columnsState?.persistenceKey) {\n if (nextGrouping.length > 0) {\n localStorage.setItem(\n `${columnsState.persistenceKey}-grouping`,\n JSON.stringify(nextGrouping),\n )\n } else {\n localStorage.removeItem(`${columnsState.persistenceKey}-grouping`)\n }\n }\n\n setTablePagination((prev) => ({ ...prev, pageIndex: 0 }))\n\n if (manualFiltering && request) {\n runAsync({\n ...(nextFilters as unknown as Record<string, unknown>),\n page: 1,\n limit: tablePagination.pageSize ?? 10,\n sort: nextSorting,\n global_search_text: nextSearch,\n visible_columns: nextVisibility,\n ...(nextGrouping.length > 0 ? { grouping: nextGrouping } : {}),\n })\n syncFiltersToUrl(\n nextFilters as unknown as Record<string, UrlFilterValue>,\n )\n syncGlobalSearchToUrl(nextSearch)\n }\n }\n\n // note Clears all applied state back to the table's initial defaults\n const resetViewState = () => {\n const defaultVisibility = getHiddenColumns(columns ?? [])\n setColumnFilters([])\n setSearchParams({})\n setSorting([])\n setColumnVisibility(defaultVisibility)\n setColumnVisibilityVersion((v) => v + 1)\n if (columnsState?.persistenceKey) {\n localStorage.setItem(\n `${columnsState.persistenceKey}-column-visibility`,\n JSON.stringify(defaultVisibility),\n )\n }\n setGlobalTextSearch(undefined)\n // System Default also clears grouping (it was a saved/applied state too).\n setGrouping([])\n setExpanded({})\n if (columnsState?.persistenceKey) {\n localStorage.removeItem(`${columnsState.persistenceKey}-grouping`)\n }\n setTablePagination((prev) => ({ ...prev, pageIndex: 0 }))\n if (manualFiltering && request) {\n runAsync({ page: 1, limit: tablePagination.pageSize ?? 10 })\n syncFiltersToUrl({})\n syncGlobalSearchToUrl(undefined)\n }\n }\n\n const SYSTEM_COLUMN_IDS = new Set([\"rowSelection\", \"index\", \"filter\"])\n\n // note Current table state in the wire format the export endpoint expects\n const buildExportPayload = (): ServerExportPayload => {\n const exportColumns = table\n .getVisibleLeafColumns()\n .filter((col) => !SYSTEM_COLUMN_IDS.has(col.id))\n .map((col) => ({\n key: col.id,\n header:\n typeof col.columnDef.header === \"string\"\n ? col.columnDef.header\n : col.id,\n }))\n\n const filterEntries = {\n ...(serverExport?.extraFilters ?? {}),\n ...normalizeFilterState(columnFilters),\n }\n\n return {\n listKey: serverExport?.listKey ?? \"\",\n columns: exportColumns,\n filters: Object.keys(filterEntries).length ? filterEntries : undefined,\n search: globalTextSearch || undefined,\n sort: sorting.length\n ? sorting.map((s) => ({\n column: s.id,\n direction: (s.desc ? \"desc\" : \"asc\") as \"asc\" | \"desc\",\n }))\n : undefined,\n }\n }\n\n const hasInitialUrlState =\n urlSyncEnabled &&\n (Object.keys(initialFilters ?? {}).length > 0 || !!initialGlobalSearch)\n\n const stateToolbarActions = [\n savedViews && manualFiltering ? (\n <SavedViewsControl\n key=\"saved-views\"\n listKey={savedViews.listKey}\n getViewState={getViewState}\n applyViewState={applyViewState}\n resetViewState={resetViewState}\n hasInitialUrlState={hasInitialUrlState}\n />\n ) : undefined,\n serverExport && manualFiltering ? (\n <ServerExportButton\n key=\"server-export\"\n getPayload={buildExportPayload}\n />\n ) : undefined,\n ]\n const internalTableProps = {\n bordered,\n tableLoadingRowCount,\n onRow,\n hasNextPage: isInfinite ? !infiniteNoMore : undefined,\n isFetchingNextPage: isInfinite ? infiniteLoadingMore : undefined,\n onLoadMore: isInfinite ? infiniteLoadMore : undefined,\n useViewportHeight: isInfinite,\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const tableOptions: any =\n options !== false\n ? {\n reload: true,\n search: true,\n ...options,\n }\n : false\n\n const selectedRowCount = Object.keys(\n table?.getState()?.rowSelection || {},\n ).length\n const isCheckboxSelection = rowSelection?.selectionType !== \"radio\"\n\n return (\n <>\n <div tabIndex={-1}>\n {/* note toolbar */}\n <TanstackToolbar\n ref={ref}\n table={table as Table<unknown>}\n options={tableOptions}\n {...toolbar}\n actions={[\n ...(toolbar?.actions && Array.isArray(toolbar.actions)\n ? [\n ...toolbar.actions,\n ...stateToolbarActions,\n manualFiltering ? (\n <TanstackFilter table={table} key=\"filter\" />\n ) : undefined,\n ]\n : [\n ...stateToolbarActions,\n manualFiltering ? (\n <TanstackFilter table={table} key=\"filter\" />\n ) : undefined,\n ]),\n tableOptions?.reload && (\n <div\n className=\"cursor-pointer text-md\"\n onClick={() => {\n if (tableOptions?.reload?.onClick) {\n tableOptions.reload.onClick()\n } else {\n refresh()\n }\n }}\n key=\"reload\"\n >\n {tableOptions?.reloadIcon ? (\n tableOptions.reloadIcon\n ) : (\n <ReloadOutlined\n style={{\n color: token.neutral10,\n }}\n />\n )}\n </div>\n ),\n <GroupByDropDown\n table={table}\n persistenceKey={columnsState?.persistenceKey}\n key=\"groupby\"\n />,\n <ColumnDropDown column={table} key=\"settings\" />,\n ]}\n menu={{\n ...toolbar?.menu,\n }}\n selectionCount={isCheckboxSelection ? selectedRowCount : 0}\n selectionActions={\n isCheckboxSelection && selectedRowCount > 0\n ? tableAlertOptionRender?.(\n getRowIds(table),\n getSelectedRowModel(table),\n () => {\n table.resetRowSelection()\n },\n )\n : undefined\n }\n />\n {/* todo: \n {searchParams && (\n <div className=\"flex flex-wrap gap-2\">\n {Object.keys(searchParams).map((key) => {\n const value = searchParams[key]\n const getColumn = table?.getColumn(key)\n return (\n <EChip\n key={key}\n closable\n color=\"blue\"\n onClose={() => {\n setSearchParams({\n ...searchParams,\n [key]: undefined,\n })\n table.setColumnFilters({\n ...table.getState().columnFilters,\n ...getColumn?.columnDef.meta?.transform?.(value),\n })\n }}\n >\n <TableInput\n type={getColumn?.columnDef.meta?.filterVariant || \"text\"}\n name={key}\n label={getColumn?.columnDef.header as string}\n fieldProps={\n {\n value: value as string,\n } as unknown as Record<string, unknown>\n }\n readonly\n />\n </EChip>\n )\n })}\n </div>\n )} */}\n\n {/* note Pagination */}\n {paginationType === \"pagination\" && (\n <TanstackTablePagination\n table={table}\n tableInstance={table?.getState()}\n />\n )}\n {paginationType === \"cursor\" && (\n <TanstackTableCount\n table={table}\n loadedRowCount={activeData.length}\n />\n )}\n\n <div>\n {/* note Internal Table */}\n <InternalTable\n loading={\n isInfinite\n ? infiniteLoading || infiniteLoadingMore || tableLoading\n : loading || tableLoading\n }\n table={table}\n {...internalTableProps}\n />\n </div>\n </div>\n </>\n )\n },\n) as <T>(\n props: TanstackTableProps<T> & { ref?: ForwardedRef<TableRef> },\n) => JSX.Element\n\nexport { NoobTanstackTable }\n","import React from \"react\"\n\nexport interface TableViewState {\n columnOrder?: any\n columnVisibility?: any\n columnSizing?: any\n columnPinning?: any\n sorting?: any\n grouping?: any\n filters?: any\n searchParams?: any\n visibleColumns?: any\n globalSearch?: any\n}\n\nexport interface ServerExportPayload {\n [key: string]: any\n}\n\nexport interface SavedViewsControlProps {\n listKey: string\n getViewState: () => TableViewState\n applyViewState: (state: TableViewState) => void\n resetViewState: () => void\n hasInitialUrlState?: boolean\n}\n\nexport const SavedViewsControl: React.FC<SavedViewsControlProps> = () => {\n return null\n}\n\nexport interface ServerExportButtonProps {\n title?: string\n table?: any\n payload?: ServerExportPayload\n getPayload?: () => ServerExportPayload\n apiCall?: (payload: ServerExportPayload) => Promise<any>\n customExportButtons?: any\n}\n\nexport const ServerExportButton: React.FC<ServerExportButtonProps> = () => {\n return null\n}\n","import { theme } from \"antd\"\n\nexport const useAppTheme = () => {\n const { token } = theme.useToken()\n // Add fallback or custom token attributes if they are accessed by code\n // E.g., if token.primary7 or token.neutral7 is used, they are standard Ant Design tokens\n // but if some custom names like lightBorderWinterWhisper are used, we can add fallbacks.\n const customToken = {\n ...token,\n primary7: (token as any).primary7 || token.colorPrimaryActive || token.colorPrimary,\n neutral7: (token as any).neutral7 || token.colorTextSecondary || token.colorText,\n neutral3: (token as any).neutral3 || token.colorBorderSecondary || token.colorBorder,\n neutral4: (token as any).neutral4 || token.colorBorder,\n primary1: (token as any).primary1 || token.colorPrimaryBg,\n primary2: (token as any).primary2 || token.colorPrimaryBgHover,\n primary8: (token as any).primary8 || token.colorPrimaryText,\n primary4: (token as any).primary4 || token.colorPrimaryBorderHover,\n success1: (token as any).success1 || token.colorSuccessBg,\n success2: (token as any).success2 || token.colorSuccessBgHover,\n success7: (token as any).success7 || token.colorSuccess,\n success4: (token as any).success4 || token.colorSuccessBorderHover,\n error1: (token as any).error1 || token.colorErrorBg,\n error2: (token as any).error2 || token.colorErrorBgHover,\n error7: (token as any).error7 || token.colorError,\n error4: (token as any).error4 || token.colorErrorBorderHover,\n warning1: (token as any).warning1 || token.colorWarningBg,\n warning2: (token as any).warning2 || token.colorWarningBgHover,\n warning7: (token as any).warning7 || token.colorWarning,\n warning4: (token as any).warning4 || token.colorWarningBorderHover,\n info1: (token as any).info1 || token.colorInfoBg,\n info2: (token as any).info2 || token.colorInfoBgHover,\n info7: (token as any).info7 || token.colorInfo,\n info4: (token as any).info4 || token.colorInfoBorderHover,\n lightBorderWinterWhisper: (token as any).lightBorderWinterWhisper || \"#e8e8e8\",\n }\n return customToken as any\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { DndContext, DragEndEvent } from \"@dnd-kit/core\"\nimport { arrayMove, SortableContext, useSortable } from \"@dnd-kit/sortable\"\nimport { CSS } from \"@dnd-kit/utilities\"\nimport { GroupingState, Table } from \"@tanstack/react-table\"\nimport { Checkbox, Flex, Popover, Tooltip } from \"antd\"\nimport { memo, useCallback, useMemo, useState } from \"react\"\nimport { useAppTheme } from \"~/theme\"\nimport { EIcon } from \"../ProComponents/Icon\"\nimport { EText } from \"../Typography\"\n\ninterface GroupByDropDownProps<T> {\n table: Table<T>\n persistenceKey?: string\n}\n\ninterface SortableGroupItemProps {\n id: string\n columnName: string\n order: number\n onRemove: (columnId: string) => void\n}\n\nconst SortableGroupItem = memo(\n ({ id, columnName, order, onRemove }: SortableGroupItemProps) => {\n const { attributes, listeners, setNodeRef, transform, isDragging } =\n useSortable({ id })\n const token = useAppTheme()\n\n return (\n <Flex\n ref={setNodeRef}\n style={{\n transform: CSS.Transform.toString(transform),\n opacity: isDragging ? 0.6 : 1,\n padding: \"6px 8px\",\n backgroundColor: isDragging ? token.primary1 : token.neutral2,\n border: `1px solid ${token.neutral4}`,\n borderRadius: 8,\n zIndex: isDragging ? 1 : undefined,\n position: \"relative\",\n }}\n gap={8}\n justify=\"space-between\"\n align=\"center\"\n className=\"w-full\"\n >\n <Flex gap={8} flex={1} align=\"center\">\n <div\n {...listeners}\n {...attributes}\n style={{ cursor: \"grab\", display: \"flex\", touchAction: \"none\" }}\n >\n <EIcon icon=\"mdi:drag-vertical\" size={18} color={token.neutral6} />\n </div>\n <Flex\n align=\"center\"\n justify=\"center\"\n style={{\n width: 18,\n height: 18,\n borderRadius: \"50%\",\n backgroundColor: token.primary6,\n color: \"#fff\",\n fontSize: 11,\n fontWeight: 600,\n flexShrink: 0,\n }}\n >\n {order}\n </Flex>\n <EText color={token.neutral9}>{columnName}</EText>\n </Flex>\n <Tooltip title=\"Remove from grouping\">\n <EIcon\n icon=\"mdi:close\"\n size={16}\n color={token.neutral6}\n onClick={() => onRemove(id)}\n className=\"cursor-pointer\"\n />\n </Tooltip>\n </Flex>\n )\n },\n)\n\nSortableGroupItem.displayName = \"SortableGroupItem\"\n\nexport const GroupByDropDown = <T,>({\n table,\n persistenceKey,\n}: GroupByDropDownProps<T>) => {\n const token = useAppTheme()\n const currentGrouping = table.getState().grouping\n\n const loadPersistedGrouping = useCallback(() => {\n if (!persistenceKey) return []\n try {\n const stored = localStorage.getItem(`${persistenceKey}-grouping`)\n return stored ? JSON.parse(stored) : []\n } catch {\n return []\n }\n }, [persistenceKey])\n\n const [localGrouping, setLocalGrouping] = useState<string[]>(\n currentGrouping?.length > 0 ? currentGrouping : loadPersistedGrouping(),\n )\n\n const allColumns = useMemo(\n () =>\n table\n .getAllLeafColumns()\n .filter(\n (column) =>\n column.getCanHide() &&\n column.getIsVisible() &&\n // note only real data columns with a text header are groupable\n typeof column.columnDef.header === \"string\" &&\n !!column.columnDef.header &&\n column.columnDef.meta?.groupable !== false,\n ),\n [table],\n )\n\n const availableColumns = useMemo(\n () => allColumns.filter((column) => !localGrouping.includes(column.id)),\n [allColumns, localGrouping],\n )\n\n const handleAddToGrouping = (columnId: string) => {\n const newGrouping = [...localGrouping, columnId] as GroupingState\n setLocalGrouping(newGrouping)\n table.setGrouping(newGrouping)\n if (persistenceKey) {\n localStorage.setItem(\n `${persistenceKey}-grouping`,\n JSON.stringify(newGrouping),\n )\n }\n }\n\n const handleRemoveFromGrouping = (columnId: string) => {\n const newGrouping = localGrouping.filter(\n (id: string) => id !== columnId,\n ) as GroupingState\n setLocalGrouping(newGrouping)\n table.setGrouping(newGrouping)\n if (persistenceKey) {\n localStorage.setItem(\n `${persistenceKey}-grouping`,\n JSON.stringify(newGrouping),\n )\n }\n }\n\n const handleResetGrouping = () => {\n const emptyGrouping: GroupingState = []\n setLocalGrouping(emptyGrouping)\n table.setGrouping(emptyGrouping)\n if (persistenceKey) {\n localStorage.removeItem(`${persistenceKey}-grouping`)\n }\n }\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event\n if (active.id !== over?.id && over) {\n const oldIndex = localGrouping.indexOf(active.id as string)\n const newIndex = localGrouping.indexOf(over.id as string)\n const newGrouping = arrayMove(\n localGrouping,\n oldIndex,\n newIndex,\n ) as GroupingState\n setLocalGrouping(newGrouping)\n table.setGrouping(newGrouping)\n if (persistenceKey) {\n localStorage.setItem(\n `${persistenceKey}-grouping`,\n JSON.stringify(newGrouping),\n )\n }\n }\n }\n\n const Title = () => {\n return (\n <Flex gap={8} justify=\"space-between\">\n <EText>Group By</EText>\n <EText\n color={token.primary7}\n className=\"cursor-pointer\"\n onClick={handleResetGrouping}\n style={{\n opacity: localGrouping.length > 0 ? 1 : 0.5,\n pointerEvents: localGrouping.length > 0 ? \"auto\" : \"none\",\n }}\n >\n Reset\n </EText>\n </Flex>\n )\n }\n\n const Content = () => {\n return (\n <Flex vertical gap={16} style={{ minWidth: 260, padding: \"4px 0\" }}>\n {/* Selected Grouping */}\n {localGrouping.length > 0 && (\n <Flex vertical gap={8}>\n <EText color={token.neutral7} style={{ fontSize: 12 }}>\n GROUPED BY · drag to reorder priority\n </EText>\n <DndContext onDragEnd={handleDragEnd}>\n <SortableContext items={localGrouping}>\n <Flex vertical gap={6}>\n {localGrouping.map((columnId: string, idx: number) => {\n const column = allColumns.find((c) => c.id === columnId)\n return (\n <SortableGroupItem\n key={columnId}\n id={columnId}\n order={idx + 1}\n columnName={\n (column?.columnDef.header as string) || columnId\n }\n onRemove={handleRemoveFromGrouping}\n />\n )\n })}\n </Flex>\n </SortableContext>\n </DndContext>\n </Flex>\n )}\n\n {/* Divider between sections */}\n {localGrouping.length > 0 && availableColumns.length > 0 && (\n <div style={{ height: 1, backgroundColor: token.neutral4 }} />\n )}\n\n {/* Available Columns */}\n {availableColumns.length > 0 && (\n <Flex vertical gap={4}>\n <EText\n color={token.neutral7}\n style={{ fontSize: 12, marginBottom: 4 }}\n >\n AVAILABLE COLUMNS\n </EText>\n {availableColumns.map((column) => (\n <Flex\n key={column.id}\n gap={8}\n align=\"center\"\n onClick={() => handleAddToGrouping(column.id)}\n style={{\n padding: \"6px 8px\",\n borderRadius: 8,\n cursor: \"pointer\",\n }}\n className=\"group-by-available-row\"\n >\n <Checkbox checked={false} />\n <EText color={token.neutral8}>{column.columnDef.header as any}</EText>\n </Flex>\n ))}\n </Flex>\n )}\n\n {availableColumns.length === 0 && localGrouping.length === 0 && (\n <EText\n color={token.neutral7}\n style={{ textAlign: \"center\", padding: \"16px 0\" }}\n >\n No columns available for grouping\n </EText>\n )}\n </Flex>\n )\n }\n\n return (\n <Popover\n placement=\"bottomRight\"\n content={<Content />}\n overlayInnerStyle={{\n width: 280,\n }}\n title={<Title />}\n trigger=\"click\"\n arrow={false}\n >\n <EIcon\n icon=\"mdi:folder-multiple\"\n className=\"cursor-pointer text-md\"\n style={{\n color: localGrouping.length > 0 ? token.primary7 : token.neutral10,\n }}\n title=\"Group columns\"\n />\n </Popover>\n )\n}\n","import React from \"react\"\nimport { Icon } from \"@iconify/react\"\nimport { useAppTheme } from \"../../theme\"\n\nexport interface EIconProps extends Omit<React.HTMLAttributes<HTMLElement>, \"color\"> {\n icon: string | any\n color?: string\n width?: string | number\n height?: string | number\n size?: string | number\n title?: string\n style?: React.CSSProperties\n className?: string\n}\n\nexport const EIcon: React.FC<EIconProps> = ({ size, width, height, ...rest }) => {\n const finalWidth = width || size\n const finalHeight = height || size\n return <Icon width={finalWidth} height={finalHeight} {...(rest as any)} />\n}\n\nexport interface EPrimaryIconProps extends EIconProps {\n child?: boolean\n isActive?: boolean\n}\n\nexport const EPrimaryIcon: React.FC<EPrimaryIconProps> = ({\n child = false,\n isActive = false,\n ...rest\n}) => {\n const token = useAppTheme()\n return (\n <EIcon\n color={isActive ? token.primary7 : token.neutral7}\n size={16}\n {...rest}\n style={{ ...rest?.style }}\n />\n )\n}\n","import React, { ReactNode } from \"react\"\nimport { Typography } from \"antd\"\nimport { TextProps } from \"antd/es/typography/Text\"\nimport { ParagraphProps } from \"antd/es/typography/Paragraph\"\nimport { TitleProps } from \"antd/es/typography/Title\"\nimport { LinkProps } from \"antd/es/typography/Link\"\nimport { Link } from \"react-router-dom\"\n\nexport interface TextTypographyProps extends TextProps {\n children: ReactNode\n color?: string\n fontWeight?:\n | \"100\"\n | \"200\"\n | \"300\"\n | \"400\"\n | \"500\"\n | \"600\"\n | \"700\"\n | \"800\"\n | \"900\"\n textAlign?: \"center\" | \"left\" | \"right\"\n fontSize?: string\n}\n\nexport const EText: React.FC<TextTypographyProps> = ({\n children,\n fontWeight = \"400\",\n textAlign = \"left\",\n fontSize = \"14px\",\n color,\n ...rest\n}) => {\n return (\n <Typography.Text\n {...rest}\n style={{\n color,\n fontWeight,\n textAlign,\n fontSize,\n ...rest?.style,\n }}\n >\n {children}\n </Typography.Text>\n )\n}\n\nexport interface ParagraphTypographyProps extends ParagraphProps {\n children: ReactNode\n color?: string\n fontWeight?:\n | \"100\"\n | \"200\"\n | \"300\"\n | \"400\"\n | \"500\"\n | \"600\"\n | \"700\"\n | \"800\"\n | \"900\"\n textAlign?: \"center\" | \"left\" | \"right\"\n}\n\nexport const EParagraph: React.FC<ParagraphTypographyProps> = ({\n children,\n fontWeight = \"400\",\n textAlign = \"left\",\n color,\n ...rest\n}) => {\n return (\n <Typography.Paragraph\n {...rest}\n style={{\n color,\n fontSize: \"14px\",\n fontWeight,\n textAlign,\n ...rest.style,\n }}\n >\n {children}\n </Typography.Paragraph>\n )\n}\n\ninterface TitleTypographyProps extends TitleProps {\n children: ReactNode\n color?: string\n fontWeight?:\n | \"100\"\n | \"200\"\n | \"300\"\n | \"400\"\n | \"500\"\n | \"600\"\n | \"700\"\n | \"800\"\n | \"900\"\n textAlign?: \"center\" | \"left\" | \"right\"\n}\n\nexport const EHeading: React.FC<TitleTypographyProps> = ({\n children,\n fontWeight = \"400\",\n textAlign = \"left\",\n color,\n ...rest\n}) => {\n return (\n <Typography.Title\n {...rest}\n style={{\n color,\n fontSize: \"1.4rem\",\n fontWeight,\n textAlign,\n ...rest.style,\n }}\n >\n {children}\n </Typography.Title>\n )\n}\n\ninterface LinkTypographyProps extends LinkProps {\n children: ReactNode\n color?: string\n fontWeight?:\n | \"100\"\n | \"200\"\n | \"300\"\n | \"400\"\n | \"500\"\n | \"600\"\n | \"700\"\n | \"800\"\n | \"900\"\n textAlign?: \"center\" | \"left\" | \"right\"\n fontSize?: string\n linkColor?: string\n}\n\nexport const ELink: React.FC<LinkTypographyProps> = ({\n children,\n fontWeight = \"400\",\n textAlign = \"left\",\n fontSize = \"14px\",\n color,\n linkColor,\n onClick,\n ...rest\n}) => {\n const style = {\n color: linkColor || color,\n fontWeight,\n textAlign,\n fontSize,\n cursor: \"pointer\",\n ...rest.style,\n }\n\n if (rest.href) {\n return (\n <Typography.Text {...rest} style={style}>\n <Link to={rest.href} style={{ color: linkColor }} onClick={onClick} {...(rest as any)}>\n {children}\n </Link>\n </Typography.Text>\n )\n }\n\n return (\n <Typography.Link {...rest} onClick={onClick} style={style}>\n {children}\n </Typography.Link>\n )\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable no-comments/disallowComments */\nimport {\n Cell,\n Column,\n flexRender,\n Header,\n Row,\n Table,\n} from \"@tanstack/react-table\";\nimport { Flex, Skeleton } from \"antd\";\n\nimport { GetComponentProps, ProForm } from \"@ant-design/pro-components\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { useForm } from \"antd/es/form/Form\";\nimport {\n CSSProperties,\n forwardRef,\n Fragment,\n memo,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useAppTheme } from \"~/theme\";\nimport { EParagraph, EText } from \"../Typography\";\nimport {\n ShadcnTable,\n ShadcnTableBody,\n ShadcnTableCell,\n ShadcnTableFooter,\n ShadcnTableHead,\n ShadcnTableHeader,\n ShadcnTableRow,\n} from \"../ui\";\nimport \"./table.css\";\nimport { CustomTable } from \"./table.types\";\nimport {\n FilterDropDown,\n SortableHeader,\n TanstackTableEmpty,\n} from \"./tableComponents\";\nimport { TableInput, TableInputFieldTypes } from \"./tableInput\";\nimport { getCellSize } from \"./tableUtils\";\n\nexport interface InternalTableProps<T> {\n table: Table<T>;\n loading?: boolean;\n tableLoadingRowCount?: string | number;\n bordered?: boolean;\n onRow?: GetComponentProps<T>;\n // pagination?: boolean\n // virtual?: boolean\n hasNextPage?: boolean;\n isFetchingNextPage?: boolean;\n onLoadMore?: () => void;\n useViewportHeight?: boolean;\n}\n\nconst HIGHLIGHT_PRESETS = {\n danger: { tokenBg: \"error1\", tokenColor: \"error8\" },\n warning: { tokenBg: \"warning1\", tokenColor: \"warning8\" },\n success: { tokenBg: \"success1\", tokenColor: \"success8\" },\n info: { tokenBg: \"info1\", tokenColor: \"info8\" },\n} as const;\n\nconst getHighlightStyles = (\n highlight:\n | boolean\n | string\n | { backgroundColor?: string; color?: string; fontWeight?: number }\n | undefined,\n token: Record<string, any>,\n): { backgroundColor?: string; color?: string; fontWeight?: number } => {\n if (!highlight) return {};\n\n if (typeof highlight === \"string\" && highlight in HIGHLIGHT_PRESETS) {\n const preset =\n HIGHLIGHT_PRESETS[highlight as keyof typeof HIGHLIGHT_PRESETS];\n return {\n backgroundColor: token[preset.tokenBg],\n color: token[preset.tokenColor],\n fontWeight: 600,\n };\n }\n\n if (typeof highlight === \"object\") {\n return {\n fontWeight: highlight.fontWeight ?? 600,\n color: highlight.color ?? token.primary8,\n backgroundColor: highlight.backgroundColor ?? token.primary1,\n };\n }\n\n return {\n backgroundColor: token.primary1,\n color: token.primary8,\n fontWeight: 600,\n };\n};\n\nconst getCommonPinningStyles = (\n column: Column<any>,\n isRow: boolean,\n isRowSelected: boolean,\n): CSSProperties => {\n // note : https://github.com/TanStack/table/issues/5397 pinned group header issue\n\n const isPinned = column.getIsPinned();\n const columnWidth = column.getSize();\n\n const leftValue =\n column.columns.length > 0\n ? `${column.columns[0]?.getStart(\"left\")}px`\n : `${column.getStart(\"left\")}px`;\n const rightValue =\n column.columns.length > 0\n ? `${column.columns[column.columns.length - 1]?.getAfter(\"right\")}px`\n : `${column.getAfter(\"right\")}px`;\n\n return {\n boxShadow: undefined,\n left: isPinned === \"left\" ? leftValue : undefined,\n right: isPinned === \"right\" ? rightValue : undefined,\n\n // left: isPinned === \"left\" ? `${column.getStart(\"left\")}px` : undefined,\n // right: isPinned === \"right\" ? `${column.getAfter(\"right\")}px` : undefined,\n opacity: 1,\n position: isPinned ? \"sticky\" : \"relative\",\n width: columnWidth,\n minWidth: columnWidth,\n maxWidth: columnWidth,\n backgroundColor: isPinned\n ? isRow && isRowSelected\n ? \"inherit\"\n : \"#F9FAFB\"\n : undefined,\n zIndex: isPinned ? (isRow ? 1 : 10) : undefined,\n overflow: \"hidden\",\n };\n};\n\nconst UTILITY_COLUMN_IDS = new Set([\n \"rowSelection\",\n \"index\",\n \"filter\",\n \"operations\",\n \"expandable\",\n \"custom\",\n \"custom_two\",\n]);\n\nconst isUtilityColumn = (columnId: string) => UTILITY_COLUMN_IDS.has(columnId);\n\n// note https://muhimasri.com/blogs/react-editable-table/\n\nexport const InternalTable = <T,>({\n table,\n loading,\n tableLoadingRowCount = 15,\n bordered = false,\n onRow,\n hasNextPage,\n isFetchingNextPage,\n onLoadMore,\n useViewportHeight = false,\n}: InternalTableProps<T>) => {\n const token = useAppTheme();\n const layoutVersion = [\n table.getState().columnPinningVersion ?? 0,\n table.getState().columnVisibilityVersion ?? 0,\n (table.getState().columnOrder ?? []).join(\"|\"),\n ].join(\"::\");\n\n const columnSizeVars = useMemo(() => {\n const headers = table.getFlatHeaders();\n const colSizes: Record<string, number> = {};\n for (let i = 0; i < headers.length; i++) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-unnecessary-type-assertion\n const header = headers[i]!;\n colSizes[`--header-${header.id}-size`] = header.getSize();\n colSizes[`--col-${header.column.id}-size`] = header.column.getSize();\n }\n return colSizes;\n }, [table.getState().columnSizingInfo, table.getState().columnSizing]);\n\n const parentRef = useRef<HTMLDivElement>(null);\n const rowCountForLayout = table.getRowModel().rows.length;\n const rowVirtualizer = useVirtualizer({\n count: rowCountForLayout,\n getScrollElement: () => parentRef.current,\n estimateSize: () => 48,\n overscan: 12,\n measureElement: (el) => el?.getBoundingClientRect?.().height || 48,\n });\n\n // note Trigger onLoadMore when the user scrolls near the end of the container\n const handleScroll = useCallback(\n (event: React.UIEvent<HTMLDivElement>) => {\n const { scrollTop, scrollHeight, clientHeight } = event.currentTarget;\n const remaining = scrollHeight - scrollTop - clientHeight;\n // Trigger when we are within 80px of the bottom of the scroll container\n if (remaining < 80) {\n if (hasNextPage && !isFetchingNextPage) {\n onLoadMore?.();\n }\n }\n },\n [hasNextPage, isFetchingNextPage, onLoadMore],\n );\n\n // note Automatically load more if the initial loaded items do not fill the height of the container\n useEffect(() => {\n const container = parentRef.current;\n if (!container) return;\n\n const totalRowsCount = table.getRowModel().rows.length;\n if (\n totalRowsCount > 0 &&\n container.scrollHeight > 0 &&\n container.scrollHeight <= container.clientHeight\n ) {\n // Loaded rows don't fill the viewport — pull the next page so the user\n // can keep scrolling.\n if (hasNextPage && !isFetchingNextPage) {\n onLoadMore?.();\n }\n }\n }, [\n hasNextPage,\n isFetchingNextPage,\n onLoadMore,\n table.getRowModel().rows.length,\n ]);\n\n return (\n <>\n <div\n ref={parentRef}\n onScroll={handleScroll}\n style={{\n ...(useViewportHeight\n ? {\n // Fill the viewport for infinite/cursor tables so the scroll\n // trigger fires reliably on large screens.\n maxHeight: \"calc(100vh - 260px)\",\n minHeight: rowCountForLayout > 0 ? 320 : undefined,\n }\n : {\n maxHeight: \"450px\",\n }),\n overflow: \"auto\",\n boxShadow: \"rgba(0, 0, 0, 0.16) 0px 1px 4px\",\n }}\n >\n <ShadcnTable\n tabIndex={-1}\n className=\"w-full table-fixed border-separate border-spacing-0\"\n style={{\n ...columnSizeVars,\n minWidth: table.getTotalSize(),\n tableLayout: \"fixed\",\n }}\n >\n {/* note TABLE HEADER */}\n\n <ShadcnTableHeader style={{ zIndex: 50 }}>\n {table?.getHeaderGroups()?.map((headerGroup) => {\n return (\n <ShadcnTableRow key={headerGroup.id}>\n {headerGroup?.headers?.map((header, headerIndex) => {\n return (\n <ShadcnTableHead\n colSpan={header?.colSpan}\n key={header.id}\n style={{\n ...getCommonPinningStyles(\n header.column,\n false,\n false,\n ),\n width: `calc(var(--header-${header?.id}-size) * 1px)`,\n minWidth: header.column.getSize(),\n maxWidth: header.column.getSize(),\n ...(header.column.columnDef?.meta?.align\n ? { textAlign: header.column.columnDef.meta.align }\n : {}),\n ...(header.column.columnDef?.meta?.highlight\n ? {\n backgroundColor: getHighlightStyles(\n header.column.columnDef.meta.highlight,\n token,\n ).backgroundColor,\n }\n : {}),\n borderBottom: `1px solid ${token.neutral4}`,\n borderRight: `1px solid ${token.neutral4}`,\n ...(headerIndex === 0\n ? { borderLeft: `1px solid ${token.neutral4}` }\n : {}),\n }}\n className={\n isUtilityColumn(header.column.id)\n ? \"px-0 text-center\"\n : \"px-3\"\n }\n >\n {header?.isPlaceholder ? null : (\n <div\n className={`flex items-center font-bold w-full ${\n isUtilityColumn(header.column.id)\n ? \"justify-center\"\n : header.column.columnDef?.meta?.align ===\n \"right\"\n ? \"justify-end\"\n : header.column.columnDef?.meta?.align ===\n \"center\"\n ? \"justify-center\"\n : \"justify-between\"\n }`}\n >\n <Flex\n gap={16}\n flex={\n header.column.columnDef?.meta?.align\n ? undefined\n : 1\n }\n align=\"center\"\n justify={\n isUtilityColumn(header.column.id)\n ? \"center\"\n : header.subHeaders.length > 0\n ? \"center\"\n : header.column.columnDef?.meta?.align ===\n \"right\"\n ? \"flex-end\"\n : header.column.columnDef?.meta?.align ===\n \"center\"\n ? \"center\"\n : \"space-between\"\n }\n onClick={\n header.column.getCanSort()\n ? header.column.getToggleSortingHandler()\n : undefined\n }\n >\n <EText\n fontWeight=\"600\"\n className=\"text-center font-medium w-max\"\n color={\n header.column.columnDef?.meta?.highlight\n ? getHighlightStyles(\n header.column.columnDef.meta.highlight,\n token,\n ).color\n : undefined\n }\n >\n {flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )}\n </EText>\n\n <Flex gap={2}>\n {!isUtilityColumn(header.column.id) &&\n header.column.getCanSort() && (\n <SortableHeader\n header={\n header as Header<unknown, unknown>\n }\n />\n )}\n\n {!isUtilityColumn(header.column.id) &&\n header.column.getCanFilter() ? (\n <FilterDropDown\n table={table}\n key=\"filter\"\n column={\n header.column as Column<unknown, unknown>\n }\n />\n ) : null}\n </Flex>\n </Flex>\n {header.column.getCanResize() && (\n <ResizeHandle header={header} />\n )}\n </div>\n )}\n </ShadcnTableHead>\n );\n })}\n </ShadcnTableRow>\n );\n })}\n </ShadcnTableHeader>\n\n {/* note TABLE BODY */}\n {table.getState().columnSizingInfo.isResizingColumn ? (\n <TableBody\n table={table}\n bordered={bordered}\n onRow={onRow}\n layoutVersion={layoutVersion}\n />\n ) : (\n <VirtualTableBody\n data={rowVirtualizer.getVirtualItems() as any}\n totalSize={rowVirtualizer.getTotalSize()}\n table={table}\n bordered={bordered}\n onRow={onRow}\n layoutVersion={layoutVersion}\n measureElement={rowVirtualizer.measureElement}\n />\n )}\n\n {/* note Table Footer — sticky to the bottom of the scroll area so the\n summary/grand-total row stays visible while scrolling. */}\n {table\n .getFlatHeaders()\n ?.flatMap((header) => header?.column?.columnDef?.footer)\n .filter(Boolean).length > 0 && (\n <ShadcnTableFooter className=\"sticky bottom-0 z-30\">\n {table.getFooterGroups().map((footerGroup) => {\n return (\n <ShadcnTableRow key={footerGroup.id}>\n {footerGroup.headers?.map((header) => {\n const footerAlign = header.column.columnDef?.meta?.align;\n return (\n <ShadcnTableCell\n key={header.id}\n className=\"border-t font-semibold\"\n style={{\n position: \"sticky\",\n bottom: 0,\n backgroundColor: \"#fff\",\n textAlign: footerAlign || undefined,\n }}\n >\n {header?.isPlaceholder\n ? null\n : flexRender(\n header?.column?.columnDef?.footer,\n header?.getContext(),\n )}\n </ShadcnTableCell>\n );\n })}\n </ShadcnTableRow>\n );\n })}\n </ShadcnTableFooter>\n )}\n\n {/* note TABLE LOADING STATE */}\n {loading &&\n [...Array(tableLoadingRowCount)]\n .map((_, index) => ({\n key: `key${index}`,\n }))\n ?.map((item) => {\n return (\n <ShadcnTableRow key={item.key}>\n {table?.getAllColumns()?.map((column) => {\n return (\n <ShadcnTableCell className=\"p-3\" key={column.id}>\n <Skeleton active title paragraph={false} />\n </ShadcnTableCell>\n );\n })}\n </ShadcnTableRow>\n );\n })}\n </ShadcnTable>\n </div>\n {/* note TABLE EMPTY STATE */}\n {/* <ShadcnTableRow >\n <ShadcnTableCell\n colSpan={12}\n className=\"h-24 text-center text-gray-500\"\n >\n <TanstackTableEmpty />\n </ShadcnTableCell>\n </ShadcnTableRow> */}\n {!loading && table?.getFilteredRowModel().rows.length === 0 && (\n <Flex flex={1} justify=\"center\" align=\"center\">\n <TanstackTableEmpty />\n </Flex>\n )}\n </>\n );\n};\n\ninterface TableBodyProps<T> extends InternalTableProps<T> {\n table: Table<T>;\n data?: any[];\n totalSize?: number;\n layoutVersion?: string;\n}\n\nexport const TableBody = <T,>({\n table,\n bordered,\n onRow,\n layoutVersion = \"\",\n}: TableBodyProps<T>) => {\n return (\n <ShadcnTableBody tabIndex={-1} className={`p-0 ${bordered}`}>\n {table?.getRowModel().rows.map((row: Row<T>, index) => {\n return (\n <Fragment key={`${row.id}-${layoutVersion}`}>\n <EditableRow\n index={index}\n row={row}\n isSelected={row.getIsSelected()}\n onRow={onRow}\n table={table}\n bordered={bordered}\n layoutVersion={layoutVersion}\n />\n {/* If the row is expanded (for non-grouped rows), render custom expansion content */}\n {row.getIsExpanded() &&\n !row.getIsGrouped() &&\n table.options.meta?.rowExpandable && (\n <ShadcnTableRow>\n <ShadcnTableCell\n colSpan={row.getAllCells().length}\n style={{\n backgroundColor: \"#f5f5f5\",\n padding: \"16px\",\n textAlign: \"center\",\n }}\n >\n {/* Custom expansion UI can be added here */}\n </ShadcnTableCell>\n </ShadcnTableRow>\n )}\n </Fragment>\n );\n })}\n </ShadcnTableBody>\n );\n};\nexport const VirtualTableBody = <T,>({\n data,\n table,\n bordered,\n totalSize = 0,\n onRow,\n measureElement,\n layoutVersion = \"\",\n}: TableBodyProps<T> & { measureElement: (el: Element | null) => void }) => {\n const paddingTop = data && data?.length > 0 ? data[0].start || 0 : 0;\n const paddingBottom =\n data && data?.length > 0 ? totalSize - (data?.at(-1)?.end || 0) : 0;\n\n return (\n <ShadcnTableBody className={`p-0 ${bordered}`}>\n {paddingTop ? (\n <ShadcnTableRow\n style={{\n height: paddingTop,\n }}\n >\n <ShadcnTableCell colSpan={table.getFlatHeaders().length} />\n </ShadcnTableRow>\n ) : undefined}\n\n {data?.map(({ index }: Record<string, number>) => {\n const row = table.getRowModel().rows[index];\n\n return (\n <Fragment key={`${row.id}-${layoutVersion}`}>\n <EditableRow\n index={index}\n row={row}\n isSelected={row.getIsSelected()}\n onRow={onRow}\n table={table}\n bordered={bordered}\n layoutVersion={layoutVersion}\n ref={(el) => measureElement(el)}\n />\n\n {/* If the row is expanded (for non-grouped rows), render custom expansion content */}\n {row.getIsExpanded() &&\n !row.getIsGrouped() &&\n table.options.meta?.rowExpandable && (\n <ShadcnTableRow>\n <ShadcnTableCell\n colSpan={row.getAllCells().length}\n style={{\n backgroundColor: \"#f5f5f5\",\n padding: \"16px\",\n textAlign: \"center\",\n }}\n >\n {/* Custom expansion UI can be added here */}\n </ShadcnTableCell>\n </ShadcnTableRow>\n )}\n </Fragment>\n );\n })}\n\n {paddingBottom ? (\n <ShadcnTableRow\n style={{\n height: paddingBottom,\n }}\n >\n <ShadcnTableCell colSpan={table.getFlatHeaders().length} />\n </ShadcnTableRow>\n ) : undefined}\n </ShadcnTableBody>\n );\n};\n\nexport const MemoizedTableBody = memo(TableBody) as typeof TableBody;\n\nexport const MemoizedCell: React.FC<{\n cell: Cell<any, any>;\n token: any;\n table: CustomTable<any>;\n bordered: any;\n isPinning: boolean;\n isRowSelected: boolean;\n layoutVersion?: string;\n}> = memo(\n ({ cell, token, table, bordered, isRowSelected }) => {\n // Track both editing state and value\n const [isEditing, setIsEditing] = useState(false);\n const [localValue, setLocalValue] = useState(cell.getValue());\n // Sync local value with cell value when not editing\n useEffect(() => {\n if (!isEditing) {\n setLocalValue(cell.getValue());\n }\n }, [cell.getValue(), isEditing]);\n\n const onValueChange = useCallback((e: any) => {\n const newValue = e?.target?.value ?? e;\n setLocalValue(newValue);\n }, []);\n\n const onBlur = useCallback(() => {\n setIsEditing(false);\n table.options.meta?.updateData?.(\n cell.row.index,\n cell.column.id,\n localValue,\n );\n }, [cell.column.id, cell.row.index, localValue, table.options.meta]);\n\n if (!cell.column.columnDef?.meta?.editable) {\n const cellAlign = cell.column.columnDef?.meta?.align;\n const highlight = cell.column.columnDef?.meta?.highlight;\n const highlightStyles = getHighlightStyles(highlight, token);\n return (\n <ShadcnTableCell\n tabIndex={-1}\n style={{\n ...getCommonPinningStyles(cell.column, true, isRowSelected),\n width: cell.column.getSize(),\n minWidth: cell.column.getSize(),\n maxWidth: cell.column.getSize(),\n fontWeight: 400,\n color: token.neutral9,\n ...(cellAlign ? { textAlign: cellAlign } : {}),\n ...highlightStyles,\n }}\n className={`${\n isUtilityColumn(cell.column.id)\n ? `${getCellSize(table.getState()?.density)} px-0 text-center`\n : `${getCellSize(table.getState()?.density)} px-3`\n } ${bordered}`}\n key={cell.id}\n >\n {![\n \"filter\",\n \"index\",\n \"rowSelection\",\n \"operations\",\n \"expandable\",\n \"custom\",\n \"custom_two\",\n \"maintenance_follow_up\",\n ].includes(cell.column.id) ? (\n cell.getValue() === undefined ||\n cell.getValue() === null ||\n cell.getValue() === \"\" ? (\n \"-\"\n ) : typeof cell.getValue() !== \"object\" ? (\n <EParagraph\n style={{\n marginBottom: 0,\n maxWidth: \"100%\",\n ...(cellAlign ? { textAlign: cellAlign } : {}),\n ...(highlight\n ? {\n color: highlightStyles.color,\n fontWeight: highlightStyles.fontWeight,\n }\n : {}),\n }}\n className={cellAlign ? \"\" : \"w-full\"}\n ellipsis={\n cellAlign\n ? undefined\n : {\n tooltip: flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n ),\n rows: 1,\n }\n }\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </EParagraph>\n ) : (\n flexRender(cell.column.columnDef.cell, cell.getContext())\n )\n ) : (\n flexRender(cell.column.columnDef.cell, cell.getContext())\n )}\n {/* // ? flexRender(cell.column.columnDef.cell, cell.getContext())\n // : \"-\"} */}\n </ShadcnTableCell>\n );\n }\n\n const editCellAlign = cell.column.columnDef?.meta?.align;\n return (\n <ShadcnTableCell\n style={{\n ...getCommonPinningStyles(cell.column, true, isRowSelected),\n width: cell.column.getSize(),\n minWidth: cell.column.getSize(),\n maxWidth: cell.column.getSize(),\n fontWeight: 400,\n color: token.neutral9,\n ...(editCellAlign ? { textAlign: editCellAlign } : {}),\n }}\n className={`${\n isUtilityColumn(cell.column.id)\n ? `${getCellSize(table.getState()?.density)} px-0 text-center`\n : `${getCellSize(table.getState()?.density)} px-3`\n } ${bordered}`}\n key={cell.id}\n >\n <TableInput\n value={localValue}\n onChange={onValueChange}\n onBlur={onBlur}\n onFocus={() => setIsEditing(true)}\n type={cell.column.columnDef?.meta?.valueType as TableInputFieldTypes}\n {...(typeof cell.column.columnDef?.meta?.inputItemProps === \"function\"\n ? cell.column.columnDef?.meta?.inputItemProps?.(cell.row?.original)\n : cell.column.columnDef?.meta?.inputItemProps)}\n />\n </ShadcnTableCell>\n );\n },\n (prev, next) => {\n if (prev.layoutVersion !== next.layoutVersion) {\n return false;\n }\n\n if (\n prev.table.getState().columnSizingInfo.isResizingColumn ||\n next.table.getState().columnSizingInfo.isResizingColumn\n ) {\n return false;\n }\n\n // Simplified but more effective comparison\n const prevCell = prev.cell;\n const nextCell = next.cell;\n const prevColumn = prevCell.column;\n const nextColumn = nextCell.column;\n\n return (\n prevCell.getValue() === nextCell.getValue() &&\n prevColumn.getIsPinned() === nextColumn.getIsPinned() &&\n prevColumn.getIsVisible() === nextColumn.getIsVisible() &&\n prevCell.row.index === nextCell.row.index &&\n prev.isPinning === next.isPinning &&\n prev.isRowSelected === next.isRowSelected\n );\n },\n);\nMemoizedCell.displayName = \"MemoizedCell\";\n\n// Editable Row Component\nexport const EditableRow = memo(\n forwardRef<\n HTMLTableRowElement,\n {\n index: any;\n row: Row<any>;\n isSelected: boolean;\n onRow: any;\n table: Table<any>;\n bordered: any;\n layoutVersion?: string;\n data?: any[];\n height?: number;\n }\n >(\n (\n { index, row, isSelected, onRow, table, bordered, layoutVersion = \"\" },\n ref,\n ) => {\n const token = useAppTheme();\n const [form] = useForm();\n\n // Memoize row handlers\n const rowHandlers = useMemo(\n () => ({\n ...onRow?.(row.original, row?.id as unknown as number),\n }),\n [row.id, row.original, onRow],\n );\n\n // Check if this is a group row\n const isGrouped = row.getIsGrouped();\n const groupingColumnId = row.groupingColumnId;\n\n // Get nesting level for multi-level grouping (indentation)\n const groupingLevel = isGrouped ? (row.depth ?? 0) : 0;\n\n // If grouped, render as a full-width \"card header\" row: a single spanning\n // cell whose label sticks to the left and stays visible on horizontal scroll.\n if (isGrouped) {\n const groupValue = groupingColumnId\n ? row.getValue(groupingColumnId)\n : undefined;\n const groupColumnHeader = groupingColumnId\n ? table.getColumn(groupingColumnId)?.columnDef?.header\n : undefined;\n // Sequential ordinal of this group among its siblings at the same level\n // (1, 2, 3 …) — NOT the grouping level, which is always 1 for a single\n // group-by and reads as a confusing \"1, 1, 1\".\n const orderBadge =\n table\n .getRowModel()\n .rows.filter((r) => r.getIsGrouped() && r.depth === row.depth)\n .findIndex((r) => r.id === row.id) + 1;\n\n // Server group summary (correct full counts + financial totals),\n // independent of how many detail rows have streamed in. Build this\n // header's group value path (ancestors + self), then look it up —\n // exact match for leaf groups, prefix-aggregate for parent levels.\n const summaryMap = table.options.meta?.groupSummary;\n const ancestorRows =\n (row.getParentRows?.() as typeof row.subRows | undefined) ?? [];\n const keyPath = [...ancestorRows, row]\n .filter((r) => r.getIsGrouped?.())\n .map((r) => {\n const id = r.groupingColumnId;\n const v = id ? r.getValue(id) : undefined;\n return v === null || v === undefined ? null : String(v);\n });\n let summaryCount: number | undefined;\n let summaryTotal: string | undefined;\n if (summaryMap && keyPath.length > 0) {\n const exact = summaryMap.get(JSON.stringify(keyPath));\n if (exact) {\n summaryCount = exact.count;\n summaryTotal = exact.total;\n } else {\n let c = 0;\n let t = 0;\n let matched = false;\n for (const [k, v] of summaryMap.entries()) {\n const arr = JSON.parse(k) as (string | null)[];\n if (keyPath.every((kp, i) => arr[i] === kp)) {\n c += v.count;\n t += Number(v.total);\n matched = true;\n }\n }\n if (matched) {\n summaryCount = c;\n summaryTotal = t.toFixed(2);\n }\n }\n }\n const displayCount = summaryCount ?? row.subRows.length;\n\n return (\n <ShadcnTableRow\n data-index={index}\n tabIndex={-1}\n key={row?.id}\n id={`row-${row.id}`}\n ref={ref}\n onClick={() => row.getToggleExpandedHandler()?.()}\n style={{\n width: \"100%\",\n cursor: row.getCanExpand() ? \"pointer\" : \"default\",\n\n backgroundColor:\n groupingLevel === 0 ? token.primary5 : token.neutral2,\n borderTop: `1px solid ${token.neutral5}`,\n borderBottom: `1px solid ${token.neutral5}`,\n // Subtle ERP-style left accent bar to set group headers apart from\n // detail rows without being loud (inset shadow = no layout shift).\n boxShadow: `inset 3px 0 0 0 ${token.primary6}`,\n }}\n >\n <ShadcnTableCell\n colSpan={row.getVisibleCells().length}\n className={getCellSize(table.getState()?.density)}\n style={{ padding: 0 }}\n >\n <Flex\n align=\"center\"\n gap={8}\n style={{\n position: \"sticky\",\n left: 0,\n width: \"max-content\",\n paddingBlock: 8,\n paddingInlineStart: 14 + groupingLevel * 20,\n paddingInlineEnd: 14,\n fontWeight: 600,\n }}\n >\n {row.getCanExpand() && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n row.getToggleExpandedHandler()?.();\n }}\n style={{\n cursor: \"pointer\",\n display: \"flex\",\n alignItems: \"center\",\n width: 16,\n justifyContent: \"center\",\n }}\n >\n <EText color={token.neutral7} style={{ fontSize: 10 }}>\n {row.getIsExpanded() ? \"▼\" : \"▶\"}\n </EText>\n </button>\n )}\n\n <Flex\n align=\"center\"\n justify=\"center\"\n style={{\n width: 18,\n height: 18,\n borderRadius: \"50%\",\n backgroundColor: token.primary6,\n color: token.neutral1,\n fontSize: 11,\n fontWeight: 700,\n flexShrink: 0,\n }}\n >\n {orderBadge}\n </Flex>\n\n <EText color={token.neutral7} style={{ fontWeight: 500 }}>\n {typeof groupColumnHeader === \"string\"\n ? `${groupColumnHeader}:`\n : \"\"}\n </EText>\n <EText fontWeight=\"700\" color={token.neutral10}>\n {groupValue === null || groupValue === undefined\n ? \"(Blank)\"\n : String(groupValue)}\n </EText>\n\n <span\n style={{\n marginInlineStart: 6,\n backgroundColor: token.neutral1,\n border: `1px solid ${token.neutral4}`,\n color: token.neutral7,\n fontSize: 11,\n fontWeight: 600,\n padding: \"1px 8px\",\n borderRadius: 999,\n }}\n >\n {displayCount} {displayCount === 1 ? \"item\" : \"items\"}\n </span>\n\n {summaryTotal !== undefined && (\n <span\n style={{\n marginInlineStart: 4,\n backgroundColor: token.primary1,\n border: `1px solid ${token.primary3}`,\n color: token.primary8,\n fontSize: 11,\n fontWeight: 700,\n padding: \"1px 8px\",\n borderRadius: 999,\n }}\n >\n ₹{summaryTotal}\n </span>\n )}\n </Flex>\n </ShadcnTableCell>\n </ShadcnTableRow>\n );\n }\n\n // Regular data row rendering\n return (\n <ProForm key={index} submitter={false} form={form} component={false}>\n <ShadcnTableRow\n {...rowHandlers}\n data-index={index} // note needed for dynamic row height measurement\n tabIndex={-1}\n key={row?.id}\n id={`row-${row.id}`}\n ref={ref}\n style={{\n width: \"100%\",\n backgroundColor: isSelected ? token.neutral4 : undefined,\n borderBottom: `1px solid ${token.primary1}`,\n }}\n >\n {row?.getVisibleCells().map((cell: any) => {\n return (\n <MemoizedCell\n key={cell.id}\n cell={cell}\n token={token}\n table={table as CustomTable<any>}\n bordered={bordered}\n isPinning={cell.column.getIsPinned()}\n isRowSelected={isSelected}\n layoutVersion={layoutVersion}\n />\n );\n })}\n </ShadcnTableRow>\n </ProForm>\n );\n },\n ),\n (prev, next) => {\n if (prev.layoutVersion !== next.layoutVersion) {\n return false;\n }\n\n if (\n prev.table.getState().columnSizingInfo.isResizingColumn ||\n next.table.getState().columnSizingInfo.isResizingColumn\n ) {\n return false;\n }\n\n // note Always re-render group rows so the expand chevron / count stay in\n // sync with expansion state (their cell values don't change on toggle).\n if (\n prev.row.getIsGrouped() ||\n next.row.getIsGrouped() ||\n prev.row.getIsExpanded() !== next.row.getIsExpanded() ||\n prev.row.subRows.length !== next.row.subRows.length\n ) {\n return false;\n }\n\n // More efficient comparison that focuses on what matters\n const prevRow = prev.row;\n const nextRow = next.row;\n const prevVisibleColumns = prevRow.getVisibleCells().map((cell) => ({\n id: cell.column.id,\n pinned: cell.column.getIsPinned(),\n visible: cell.column.getIsVisible(),\n }));\n const prevOrderColumns = prevRow\n .getAllCells()\n .map((cell) => cell.column.id)\n .join(\"|\");\n const nextOrderColumns = nextRow\n .getAllCells()\n .map((cell) => cell.column.id)\n .join(\"|\");\n const nextVisibleColumns = nextRow.getVisibleCells().map((cell) => ({\n id: cell.column.id,\n pinned: cell.column.getIsPinned(),\n visible: cell.column.getIsVisible(),\n }));\n\n return (\n prevOrderColumns === nextOrderColumns &&\n prevRow.id === nextRow.id &&\n prev.isSelected === next.isSelected &&\n JSON.stringify(prevVisibleColumns) ===\n JSON.stringify(nextVisibleColumns) &&\n prevRow\n .getVisibleCells()\n .every(\n (cell, i) =>\n cell.getValue() === nextRow.getVisibleCells()[i].getValue(),\n )\n );\n },\n);\nEditableRow.displayName = \"EditableRow\";\n\n// Update ResizeHandle\nconst ResizeHandle = memo(({ header }: { header: any }) => (\n <div\n className={`resizer ${header.column.getIsResizing() ? \"isResizing\" : \"\"}`}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n const handler = header.getResizeHandler();\n handler(e);\n }}\n onTouchStart={(e) => {\n e.preventDefault();\n e.stopPropagation();\n const handler = header.getResizeHandler();\n handler(e);\n }}\n style={{\n transform: header.column.getIsResizing()\n ? `translateX(${\n header.getResizingOffset() * (header.column.getCanResize() ? 1 : 0)\n }px)`\n : undefined,\n }}\n />\n));\n\nResizeHandle.displayName = \"ResizeHandle\";\n","import * as React from \"react\"\nimport { cn } from \"./utils\"\n\nconst ShadcnTable = React.forwardRef<\n HTMLTableElement,\n React.HTMLAttributes<HTMLTableElement>\n>(({ className, ...props }, ref) => (\n <div className=\"relative w-full\" tabIndex={-1}>\n <table\n ref={ref}\n className={cn(\"w-full caption-bottom text-sm border-collapse\", className)}\n {...props}\n />\n </div>\n))\nShadcnTable.displayName = \"Table\"\n\nconst ShadcnTableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead\n ref={ref}\n className={cn(\"sticky top-0 z-20 bg-white [&_tr]:border-b\", className)}\n {...props}\n />\n))\nShadcnTableHeader.displayName = \"TableHeader\"\n\nconst ShadcnTableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody\n ref={ref}\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n))\nShadcnTableBody.displayName = \"TableBody\"\n\nconst ShadcnTableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn(\n \"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\",\n className,\n )}\n {...props}\n />\n))\nShadcnTableFooter.displayName = \"TableFooter\"\n\nconst ShadcnTableRow = React.forwardRef<\n HTMLTableRowElement,\n React.HTMLAttributes<HTMLTableRowElement>\n>(({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n \"border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted\",\n className,\n )}\n {...props}\n />\n))\nShadcnTableRow.displayName = \"TableRow\"\n\nconst ShadcnTableHead = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n \"h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 sticky top-0 z-10 bg-white\",\n className,\n )}\n {...props}\n />\n))\nShadcnTableHead.displayName = \"TableHead\"\n\nconst ShadcnTableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\"p-4 align-middle [&:has([role=checkbox])]:pr-0\", className)}\n {...props}\n />\n))\nShadcnTableCell.displayName = \"TableCell\"\n\nconst ShadcnTableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn(\"mt-4 text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nShadcnTableCaption.displayName = \"TableCaption\"\n\nexport {\n ShadcnTable,\n ShadcnTableHeader,\n ShadcnTableBody,\n ShadcnTableFooter,\n ShadcnTableHead,\n ShadcnTableRow,\n ShadcnTableCell,\n ShadcnTableCaption,\n}\n","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n CaretDownOutlined,\n CaretUpOutlined,\n EyeOutlined,\n FilterOutlined,\n SearchOutlined,\n SettingOutlined,\n VerticalAlignBottomOutlined,\n VerticalAlignMiddleOutlined,\n VerticalAlignTopOutlined,\n} from \"@ant-design/icons\"\nimport {\n Column,\n ColumnFiltersState,\n Header,\n Table,\n TableState,\n} from \"@tanstack/react-table\"\nimport {\n Checkbox,\n Empty,\n Flex,\n Form,\n Input,\n InputNumber,\n InputRef,\n Popover,\n Select,\n Space,\n Tooltip,\n} from \"antd\"\nimport {\n ForwardedRef,\n forwardRef,\n Fragment,\n memo,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\"\nimport {\n EDividerWithNoStyle,\n EHeading,\n ELink,\n EText,\n ProDatePicker,\n useFilePreview,\n} from \"~/shared/common\"\nimport { useAppTheme } from \"~/theme\"\nimport {\n CustomColumnMeta,\n OptionConfig,\n TableEditableCellProps,\n TableRef,\n TanstackToolbarProps,\n} from \"./table.types\"\n\nimport { ProFormDateRangePicker } from \"@ant-design/pro-components\"\nimport { DndContext, DragEndEvent } from \"@dnd-kit/core\"\nimport { arrayMove, SortableContext, useSortable } from \"@dnd-kit/sortable\"\nimport { CSS } from \"@dnd-kit/utilities\"\nimport {\n IconGripVertical,\n IconSearch,\n IconZoomExclamation,\n} from \"@tabler/icons-react\"\nimport { useSafeState } from \"ahooks\"\nimport { DefaultOptionType } from \"antd/es/select\"\nimport Link from \"antd/es/typography/Link\"\nimport dayjs from \"dayjs\"\nimport _, { isArray } from \"lodash\"\nimport { useHotkeys } from \"react-hotkeys-hook\"\nimport {\n defaultPinnedColumns,\n PAGINATION_PAGE_SIZE_OPTIONS,\n} from \"./tableConstant\"\nimport { TableInput, TableInputFieldTypes } from \"./tableInput\"\nimport { handlePinColumn, isCheckAll, isIndeterminate } from \"./tableUtils\"\n\nimport { EButton, TableClearButton } from \"../ProComponents/Button\"\nimport {\n FilterCol,\n FilterProDrawerForm,\n FilterRow,\n} from \"../ProComponents/FilterLayout\"\nimport { ETab } from \"../ProComponents/Tab\"\n\nexport const FilterDropDown = ({\n column,\n table,\n}: {\n column: Column<any>\n table: Table<any>\n}) => {\n const { filterVariant = \"search\", valueEnum } = (column.columnDef.meta ??\n {}) as CustomColumnMeta<any, any>\n\n const { manualFiltering } = table.options ?? {}\n\n const token = useAppTheme()\n const [value, setValue] = useSafeState<any>(undefined)\n const searchInputRef = useRef<InputRef>(null)\n const [isDropdownVisible, setIsDropdownVisible] = useState(false)\n\n const sortedUniqueValues = useMemo(\n () =>\n filterVariant === \"range\"\n ? []\n : // eslint-disable-next-line @typescript-eslint/require-array-sort-compare\n Array.from(column.getFacetedUniqueValues().keys())\n .sort()\n .slice(0, 5000)\n .map((item) => item),\n [column, filterVariant, isDropdownVisible],\n )\n const [allListValues, setAllListValues] = useState(sortedUniqueValues)\n useEffect(() => {\n setAllListValues(sortedUniqueValues.filter((item) => item))\n }, [sortedUniqueValues])\n\n const isFilterApplied = Object.keys(\n table?.getState()?.searchParams ?? {},\n ).includes(column.columnDef.id ?? \"\")\n\n if (manualFiltering) {\n return isFilterApplied ? (\n <>\n {filterVariant === \"search\" ? (\n <IconZoomExclamation\n size={16}\n style={{\n marginTop: 3,\n marginRight: 2,\n marginLeft: 12,\n fontWeight: 500,\n color: token.info7,\n }}\n />\n ) : (\n <FilterOutlined\n onClick={(e) => {\n e.stopPropagation()\n searchInputRef.current?.focus()\n }}\n style={{\n marginRight: 2,\n marginLeft: 12,\n fontWeight: 500,\n color: token.info7,\n }}\n />\n )}\n </>\n ) : undefined\n }\n\n const items = [\n {\n key: \"search\",\n\n label: (\n <Input\n ref={searchInputRef}\n width={\"sm\"}\n type=\"text\"\n onFocusCapture={(e) => {\n if (e.target.value) {\n searchInputRef.current?.select()\n }\n }}\n value={value}\n onChange={(e) => {\n setValue(e?.target?.value)\n _.debounce(() => column?.setFilterValue(e.target.value), 300)()\n }}\n placeholder={`Search...`}\n onClick={(e) => e.stopPropagation()}\n />\n ),\n disabled: filterVariant !== \"search\",\n },\n {\n key: \"date\",\n label: (\n <ProDatePicker\n ref={searchInputRef}\n width={\"sm\"}\n fieldProps={{\n defaultOpen: true,\n size: \"middle\",\n value,\n onClick: (e: any) => e.stopPropagation(),\n onChange: (e: any) => {\n if (e) {\n setValue(e)\n column?.setFilterValue(\n dayjs(dayjs(e).toISOString()).format(\"YYYY-MM-DD\"),\n )\n } else {\n setValue(undefined)\n column?.setFilterValue(undefined)\n }\n },\n placeholder: \"Select date\",\n }}\n />\n ),\n disabled: filterVariant !== \"date\",\n },\n {\n key: \"date-range\",\n label: (\n <ProFormDateRangePicker\n fieldProps={{\n showNow: true,\n open: isDropdownVisible,\n value,\n onClick: (e) => {\n e.stopPropagation()\n setIsDropdownVisible(true)\n },\n onChange: (e) => {\n if (e) {\n setValue(e)\n column?.setFilterValue([\n e[0]?.format(\"YYYY-MM-DD\"),\n e[1]?.format(\"YYYY-MM-DD\"),\n ])\n setIsDropdownVisible(false)\n } else {\n setValue(undefined)\n column?.setFilterValue(undefined)\n setIsDropdownVisible(false)\n }\n },\n }}\n />\n ),\n disabled: filterVariant !== \"date-range\",\n },\n {\n key: \"multi-select\",\n onMouseEnter: () => {\n searchInputRef.current?.focus()\n },\n label: (\n <div\n onClick={(e) => {\n e.stopPropagation()\n }}\n style={{\n width: \"100%\",\n padding: \"4px\",\n }}\n >\n <Checkbox\n className=\"mb-3 \"\n disabled={sortedUniqueValues.length === 0}\n indeterminate={\n isArray(column?.getFilterValue())\n ? isIndeterminate(\n column?.getFilterValue() as string[],\n sortedUniqueValues,\n ) &&\n !isCheckAll(\n column?.getFilterValue() as string[],\n sortedUniqueValues,\n )\n : false\n }\n checked={isCheckAll(\n column?.getFilterValue() as string[],\n sortedUniqueValues,\n )}\n onChange={(e) => {\n if (e.target.checked) {\n column?.setFilterValue(sortedUniqueValues)\n setValue(undefined)\n } else {\n column?.setFilterValue(undefined)\n setValue(undefined)\n }\n }}\n >\n Select all items\n </Checkbox>\n <Input\n width={120}\n className=\"mb-2\"\n placeholder=\"Search...\"\n size=\"small\"\n value={value}\n onChange={(e) => {\n const value = e.target.value\n setValue(value)\n const filteredValues = sortedUniqueValues.filter((item) => {\n return item\n ?.toLowerCase()\n .includes(value.toString().toLowerCase())\n })\n\n if (filteredValues.length > 0) {\n _.debounce(() => setAllListValues(filteredValues), 300)()\n } else {\n setAllListValues([])\n }\n }}\n />\n <div\n className=\"mb-2\"\n style={{\n height: 150,\n overflow: \"auto\",\n }}\n >\n {allListValues?.length === 0 && <Empty />}\n {allListValues?.map((item) => {\n return (\n <div className=\"pl-5\" key={item}>\n <Checkbox\n className=\"mb-1 hover:bg-gray-100 w-full rounded-sm\"\n style={{\n color: token.neutral9,\n }}\n name={item}\n checked={(column?.getFilterValue() as string[])?.includes(\n item,\n )}\n onChange={(e) => {\n e.stopPropagation()\n if (e.target.checked) {\n column?.setFilterValue((prev: any) => {\n if (prev?.includes(item)) {\n return prev?.filter((i: any) => i !== item)\n } else {\n return [...(prev ?? []), item]\n }\n })\n } else {\n column?.setFilterValue((prev: any) => {\n if (prev?.includes(item)) {\n return prev?.filter((i: any) => i !== item)\n } else {\n return [...(prev ?? []), item]\n }\n })\n }\n }}\n >\n {item}\n </Checkbox>\n </div>\n )\n })}\n </div>\n <EDividerWithNoStyle\n style={{\n marginInline: \"-18px\",\n marginTop: \"0\",\n marginBottom: 4,\n width: \"calc(100% + 34px)\",\n }}\n />\n <Link\n disabled={\n isArray(column.getFilterValue())\n ? (column.getFilterValue() as string[])?.length === 0\n : true\n }\n onClick={(e) => {\n e.stopPropagation()\n column.setFilterValue(undefined)\n }}\n >\n Reset\n </Link>\n </div>\n ),\n\n onClick: (e: any) => e.stopPropagation(),\n disabled: filterVariant !== \"multi-select\",\n },\n {\n key: \"select\",\n onMouseEnter: () => {\n searchInputRef.current?.focus()\n },\n\n label: (\n <select\n style={{\n width: \"100%\",\n padding: \"4px\",\n }}\n onChange={(e) => {\n column.setFilterValue(e.target.value)\n setValue(e.target.value)\n }}\n value={(column.getFilterValue() as string)?.toString()}\n onClick={(e) => e.stopPropagation()}\n >\n <option value=\"\">All</option>\n\n {valueEnum\n ? Object.keys(valueEnum).map((key) => (\n <option value={key} key={key}>\n {valueEnum[key]?.text}\n </option>\n ))\n : sortedUniqueValues.map((value) => (\n // note dynamically generated select options from faceted values feature\n <option value={value} key={value}>\n {valueEnum ? valueEnum?.[value]?.text : value}\n </option>\n ))}\n </select>\n ),\n disabled: filterVariant !== \"select\",\n },\n ].filter((item) => !item.disabled)\n\n return (\n <Popover content={items[0]?.label} title={undefined} trigger=\"click\">\n {filterVariant === \"search\" ? (\n value ? (\n <IconZoomExclamation\n size={16}\n style={{\n marginTop: 3,\n marginRight: 2,\n marginLeft: 12,\n fontWeight: 500,\n color: token.info7,\n }}\n />\n ) : (\n <IconSearch\n size={16}\n onClick={(e) => {\n e.stopPropagation()\n searchInputRef.current?.focus()\n }}\n style={{\n marginTop: 3,\n marginRight: 2,\n marginLeft: 12,\n fontWeight: 500,\n\n color: token.neutral7,\n }}\n />\n )\n ) : (\n <FilterOutlined\n onClick={(e) => {\n e.stopPropagation()\n searchInputRef.current?.focus()\n }}\n style={{\n marginRight: 2,\n marginLeft: 12,\n fontWeight: 500,\n color:\n value || column.getFilterValue()\n ? `${token.info7}`\n : `${token.neutral7}`,\n }}\n />\n )}\n </Popover>\n )\n}\n\ninterface ColumnDropDownProps<T> {\n column: Table<T>\n}\n\nexport const ColumnDropDown = <T,>(table: ColumnDropDownProps<T>) => {\n const token = useAppTheme()\n\n const handleColumnVisibilityChange = (\n columnId: string,\n isVisible: boolean,\n ) => {\n table.column.setColumnVisibility((prev) => ({\n ...prev,\n [columnId]: isVisible,\n }))\n }\n\n const tableState = table.column.getState()\n\n const allColumns = useMemo(\n () =>\n table.column\n .getAllLeafColumns()\n .filter((column) => !defaultPinnedColumns.includes(column.id)),\n [tableState.columnOrder, tableState.columnPinning, tableState.columnVisibility],\n )\n\n const leftColumns = useMemo(\n () =>\n table.column\n .getLeftLeafColumns()\n .filter((column) => !defaultPinnedColumns.includes(column.id)),\n [tableState.columnOrder, tableState.columnPinning, tableState.columnVisibility],\n )\n\n const rightColumns = useMemo(\n () =>\n table.column\n .getRightLeafColumns()\n .filter((column) => !defaultPinnedColumns.includes(column.id)),\n [tableState.columnOrder, tableState.columnPinning, tableState.columnVisibility],\n )\n\n const unPinnedColumns = useMemo(\n () =>\n table.column\n .getCenterLeafColumns()\n .filter(\n (column) =>\n !defaultPinnedColumns.includes(column.id) && column?.getCanPin(),\n ),\n [tableState.columnOrder, tableState.columnPinning, tableState.columnVisibility],\n )\n\n const Content = () => {\n return (\n <>\n {/* note columns pinned to left */}\n {leftColumns.length > 0 && (\n <Flex vertical gap={8} flex={1} style={{ minWidth: 200, padding: 8 }}>\n <EText color={token.neutral8}>Fixed to Left</EText>\n\n {leftColumns.map((column: any) => {\n return (\n <Flex key={column.id} gap={8}>\n {/* note Checkbox to toggle column visibility */}\n <Checkbox\n checked={column.getIsVisible()}\n disabled={!column.getCanHide()}\n onChange={(e) =>\n handleColumnVisibilityChange(\n column.id,\n e.target.checked,\n )\n }\n />{\" \"}\n {/* note Column Pinning */}\n <Flex flex={1} justify=\"space-between\">\n <EText color={token.neutral8}>{column.columnDef.header}</EText>\n <Space.Compact>\n {column.getIsPinned() === \"left\" ? (\n <Flex>\n <Tooltip title=\"Unpin\">\n <VerticalAlignMiddleOutlined\n onClick={() => {\n column?.pin(false)\n }}\n className=\"cursor-pointer\"\n />\n </Tooltip>\n <Tooltip title=\"Pin Right\">\n <VerticalAlignBottomOutlined\n onClick={() => {\n column?.pin(\"right\")\n handlePinColumn(\n column.id,\n \"right\",\n table.column as Table<unknown>,\n )\n }}\n className=\"cursor-pointer\"\n />\n </Tooltip>\n </Flex>\n ) : (\n <Flex>\n <Tooltip title=\"Pin Left\">\n <VerticalAlignTopOutlined\n onClick={() => {\n column?.pin(\"left\")\n }}\n className=\"cursor-pointer\"\n />\n </Tooltip>\n <Tooltip title=\"Unpin\">\n <VerticalAlignMiddleOutlined\n onClick={() => {\n column?.pin(false)\n }}\n className=\"cursor-pointer\"\n />\n </Tooltip>\n </Flex>\n )}\n </Space.Compact>\n </Flex>\n </Flex>\n )\n })}\n </Flex>\n )}\n\n {/* note unpinned columns */}\n {unPinnedColumns?.length > 0 && (\n <Flex vertical gap={8} flex={1} style={{ minWidth: 200, padding: 8 }}>\n <EText>Unpinned</EText>\n <DndContext\n onDragEnd={(e: DragEndEvent) => {\n const { active, over } = e\n if (active.id !== over?.id) {\n const flatAllColumns = allColumns?.flatMap((item) => item.id)\n const oldIndex = flatAllColumns?.indexOf(active.id.toString())\n const newIndex = flatAllColumns?.indexOf(\n (over?.id || \"\").toString(),\n )\n const newOrder = arrayMove(flatAllColumns, oldIndex, newIndex)\n table.column.setColumnOrder(newOrder)\n }\n }}\n >\n <SortableContext items={unPinnedColumns}>\n {unPinnedColumns?.map((column: any) => {\n return (\n <SortableColumns\n key={column.id}\n id={column.id}\n disabled={!column.getIsVisible()}\n >\n <Flex\n className=\"w-full\"\n flex={1}\n key={column.columnDef.accessorKey}\n gap={8}\n >\n {/* note Checkbox to toggle column visibility */}\n <Checkbox\n checked={column.getIsVisible()}\n disabled={!column.getCanHide()}\n onChange={(e) =>\n handleColumnVisibilityChange(\n column.id,\n e.target.checked,\n )\n }\n />{\" \"}\n {/* note Column Pinning */}\n <Flex flex={1} justify=\"space-between\">\n <EText>{column.columnDef.header}</EText>\n <Space.Compact>\n <Tooltip title=\"Pin Left\">\n <VerticalAlignTopOutlined\n onClick={() => {\n column?.pin(\"left\")\n }}\n className=\"cursor-pointer\"\n />\n </Tooltip>\n <Tooltip title=\"Pin Right\">\n <VerticalAlignBottomOutlined\n onClick={() => {\n column?.pin(\"right\")\n handlePinColumn(\n column.id,\n \"right\",\n table.column as Table<unknown>,\n )\n }}\n className=\"cursor-pointer\"\n />\n </Tooltip>\n </Space.Compact>\n </Flex>\n </Flex>\n </SortableColumns>\n )\n })}\n </SortableContext>\n </DndContext>\n </Flex>\n )}\n\n {/* note columns pinned to right */}\n {rightColumns.length > 0 && (\n <Flex vertical gap={8} flex={1} style={{ minWidth: 200, padding: 8 }}>\n <EText>Fixed to right</EText>\n\n {rightColumns.map((column: any) => {\n return (\n <Flex key={column.id} gap={8}>\n {/* note Checkbox to toggle column visibility */}\n <Checkbox\n checked={column.getIsVisible()}\n disabled={!column.getCanHide()}\n onChange={(e) =>\n handleColumnVisibilityChange(\n column.id,\n e.target.checked,\n )\n }\n />{\" \"}\n {/* note Column Pinning */}\n <Flex flex={1} justify=\"space-between\">\n <EText>{column.columnDef.header}</EText>\n <Space.Compact>\n {column.getIsPinned() === \"left\" ? (\n <Flex>\n <Tooltip title=\"Pin Right\">\n <VerticalAlignBottomOutlined\n onClick={() => {\n column?.pin(\"right\")\n }}\n className=\"cursor-pointer\"\n />\n </Tooltip>\n <Tooltip title=\"Unpin\">\n <VerticalAlignMiddleOutlined\n onClick={() => {\n column?.pin(false)\n }}\n className=\"cursor-pointer\"\n />\n </Tooltip>\n </Flex>\n ) : (\n <Flex>\n <Tooltip title=\"Unpin\">\n <VerticalAlignMiddleOutlined\n onClick={() => {\n column?.pin(false)\n }}\n className=\"cursor-pointer\"\n />\n </Tooltip>\n <Tooltip title=\"Pin Left\">\n <VerticalAlignTopOutlined\n onClick={() => {\n column?.pin(\"left\")\n }}\n className=\"cursor-pointer\"\n />\n </Tooltip>\n </Flex>\n )}\n </Space.Compact>\n </Flex>\n </Flex>\n )\n })}\n </Flex>\n )}\n </>\n )\n }\n\n const Title = () => {\n return (\n <Flex gap={8} justify=\"space-between\">\n <Flex gap={8}>\n <Checkbox\n checked={table?.column?.getIsAllColumnsVisible()}\n onChange={table?.column?.getToggleAllColumnsVisibilityHandler()}\n />\n\n <EText>Columns Display</EText>\n </Flex>\n\n <EText\n color={token.primary7}\n className=\"cursor-pointer\"\n onClick={() => {\n table?.column?.resetColumnVisibility()\n table?.column?.resetColumnPinning()\n table?.column?.resetColumnOrder()\n table?.column?.resetColumnSizing()\n }}\n >\n Reset\n </EText>\n </Flex>\n )\n }\n return (\n <Popover\n placement=\"bottomRight\"\n content={<Content />}\n overlayInnerStyle={{\n width: 250,\n }}\n title={<Title />}\n trigger=\"click\"\n arrow={false}\n >\n <SettingOutlined\n className=\"cursor-pointer text-md\"\n style={{\n color: token.neutral10,\n }}\n />\n </Popover>\n )\n}\n\nexport const SortableHeader: React.FC<{\n header: Header<unknown, unknown>\n}> = ({ header }) => {\n const token = useAppTheme()\n const { column } = header\n\n const getIconColor = (direction: \"asc\" | \"desc\") =>\n column.getIsSorted() === direction ? token.primary7 : token.neutral7\n\n const sortingIcons = (\n <Flex className=\"cursor-pointer\" vertical gap={0}>\n <CaretUpOutlined\n style={{\n color: getIconColor(\"asc\"),\n fontSize: \"12px\",\n margin: \"0\",\n }}\n />\n <CaretDownOutlined\n style={{\n color: getIconColor(\"desc\"),\n fontSize: \"12px\",\n margin: \"0\",\n }}\n />\n </Flex>\n )\n\n return <div className=\"font-bold\">{sortingIcons}</div>\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\nexport const EditableCell: React.FC<TableEditableCellProps> = ({\n valueType = \"text\" as TableInputFieldTypes,\n getValue,\n row: { index },\n column: { id },\n table,\n inputItemProps = {},\n form,\n}) => {\n const initialValue = inputItemProps?.initialValue ?? getValue()\n const searchInputRef = useRef<any>(null)\n const [value, setValue] = useSafeState(initialValue)\n\n // note When the input is blurred, we'll call our table meta's updateData function\n const onBlur = () => {\n table.options.meta?.updateData(index, id, value)\n }\n\n const handleKeyDown = useCallback((e: any) => {\n if (e.key.length === 1 && e.key !== \"enter\") {\n searchInputRef.current?.focus()\n }\n }, [])\n\n // note If the initialValue is changed external, sync it up with our state\n useEffect(() => {\n setValue(initialValue)\n }, [initialValue, form.getFieldError(id)[0]])\n\n return (\n <Tooltip\n title={form.getFieldError(id)[0]}\n trigger={[\"hover\", \"focus\", \"click\"]}\n autoAdjustOverflow\n placement=\"bottom\"\n >\n <div key={id} tabIndex={0} onKeyDown={handleKeyDown}>\n <TableInput\n tooltip={form.getFieldError(id)[0]}\n name={id}\n {...inputItemProps}\n type={valueType as TableInputFieldTypes}\n size=\"middle\"\n initialValue={value}\n hasFeedback\n fieldProps={{\n ref: searchInputRef,\n ...inputItemProps.fieldProps,\n size: \"middle\",\n value,\n onChange: (e: any) => {\n if (typeof e === \"object\") {\n setValue(e.target.value)\n } else {\n setValue(e)\n }\n },\n onBlur,\n onKeyDown: (e: any) => {\n if (e.key === \"Enter\") {\n onBlur()\n }\n },\n onFocusCapture: (e: any) => {\n if (e.target.value) {\n searchInputRef.current?.select()\n }\n },\n }}\n rules={inputItemProps?.rules}\n />\n </div>\n </Tooltip>\n )\n}\n\nexport const SortableColumns: React.FC<{\n children: React.ReactNode\n id: string | number\n disabled?: boolean\n}> = ({ children, id, disabled = false }) => {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id, disabled })\n const token = useAppTheme()\n\n return (\n <div\n ref={setNodeRef}\n style={{\n transition,\n transform: CSS.Transform.toString(transform),\n display: \"flex\",\n opacity: isDragging ? 0.5 : 1,\n flex: 1,\n alignItems: \"center\",\n ...attributes,\n }}\n >\n <IconGripVertical\n {...listeners}\n style={{\n cursor: \"grab\",\n marginRight: 10,\n color: token.neutral6,\n opacity: isDragging ? 0.5 : 1,\n }}\n />\n <div className=\"w-full\">\n {children} {/* note Use drag handle */}\n </div>\n </div>\n )\n}\n\ninterface CheckboxProps {\n indeterminate: boolean\n className?: string\n checked: boolean\n}\n\nexport const IndeterminateCheckbox: React.FC<CheckboxProps> = ({\n indeterminate,\n className = \"\",\n ...rest\n}) => {\n const ref = useRef<HTMLInputElement>(null!)\n\n useEffect(() => {\n if (typeof indeterminate === \"boolean\") {\n ref.current.indeterminate = !rest.checked && indeterminate\n }\n }, [ref, indeterminate, rest.checked])\n\n return (\n <input\n type=\"checkbox\"\n ref={ref}\n size={200}\n className={className + \" cursor-pointer\"}\n {...rest}\n />\n )\n}\n\nexport const TanstackTablePagination = <T,>({\n tableInstance,\n table,\n}: {\n table: Table<T>\n tableInstance: TableState\n}) => {\n const { pageSize, pageIndex } = tableInstance.pagination\n const rowCount = table.getRowCount()\n const pageCount = Math.max(table.getPageCount(), 1)\n const startRow = rowCount === 0 ? 0 : pageIndex * pageSize + 1\n const endRow =\n rowCount === 0 ? 0 : Math.min((pageIndex + 1) * pageSize, rowCount)\n const token = useAppTheme()\n return (\n <Flex\n justify=\"space-between\"\n align=\"center\"\n gap={4}\n style={{ marginBottom: 16 , paddingInline:20}}\n wrap=\"wrap\"\n >\n <div className=\"flex items-center gap-2 justify-end align-middle\">\n <Flex\n align=\"center\"\n justify=\"center\"\n gap={3}\n wrap=\"wrap\"\n style={{ width: \"max-content\", marginRight: 16 }}\n >\n <EText fontSize=\"12px\" color={token.neutral7} fontWeight=\"500\">\n Displaying\n </EText>\n\n {/* Note - <EText fontWeight=\"500\">{range[1] - range[0] + 1}</EText> */}\n <EText fontWeight=\"500\">\n {startRow.toLocaleString()} - {endRow.toLocaleString()}\n </EText>\n <EText fontSize=\"12px\" color={token.neutral7} fontWeight=\"500\">\n out of\n </EText>\n <EText fontWeight=\"500\">\n {rowCount.toLocaleString()}{\" \"}\n </EText>\n </Flex>\n <span className=\"flex items-center gap-1\">\n <EText fontSize=\"12px\" color={token.neutral7}>\n Page\n </EText>\n <div>\n <EText fontWeight=\"500\">\n {table.getState().pagination.pageIndex + 1}{\" \"}\n </EText>\n <EText fontSize=\"12px\" color={token.neutral7}>\n of {\"\"}\n </EText>\n <EText fontWeight=\"500\">\n {pageCount.toLocaleString()}\n </EText>\n </div>\n </span>\n\n {pageSize > 3 && (\n <Select\n value={table.getState().pagination.pageSize.toString()}\n onChange={(e) => {\n table.setPageSize(Number(e))\n }}\n style={{ width: 120 }}\n size=\"small\"\n options={PAGINATION_PAGE_SIZE_OPTIONS}\n />\n )}\n </div>\n\n <div className=\"flex items-center gap-2 justify-end\">\n <Tooltip title={\"Go to First page\"}>\n <EButton\n size=\"small\"\n style={{ fontWeight: 400 }}\n className=\"border rounded p-1 cursor-pointer\"\n onClick={() => table.firstPage()}\n disabled={!table.getCanPreviousPage()}\n type=\"link\"\n tabIndex={-1}\n >\n {\"<<\"}\n </EButton>\n </Tooltip>\n <EButton\n size=\"small\"\n style={{ fontWeight: 400, fontSize: 13 }}\n className=\"border rounded p-1 cursor-pointer\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n tabIndex={-1}\n >\n Prev\n </EButton>\n <EButton\n id=\"table-next-button\"\n size=\"small\"\n style={{ fontWeight: 400, fontSize: 13 }}\n className=\"border rounded p-1 cursor-pointer\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n tabIndex={-1}\n >\n Next\n </EButton>\n <Tooltip title={\"Go to last page\"}>\n <EButton\n size=\"small\"\n style={{ fontWeight: 400 }}\n className=\"border rounded p-1 cursor-pointer\"\n onClick={() => table.lastPage()}\n disabled={!table.getCanNextPage()}\n type=\"link\"\n tabIndex={-1}\n >\n {\">>\"}\n </EButton>\n </Tooltip>\n\n <span className=\"flex items-center gap-1\">\n <EText fontSize=\"12px\" color={token.neutral7}>\n | Go to page:\n </EText>\n\n <InputNumber\n tabIndex={-1}\n max={pageCount}\n min={1}\n defaultValue={table.getState().pagination.pageIndex + 1}\n onChange={(e) => {\n const page = e ? Number(e) - 1 : 0\n table.setPageIndex(page)\n }}\n size=\"small\"\n />\n </span>\n </div>\n </Flex>\n )\n}\n\nexport const TanstackTableCount = <T,>({\n table,\n loadedRowCount,\n}: {\n table: Table<T>\n loadedRowCount: number\n}) => {\n const rowCount = Math.max(table.getRowCount(), loadedRowCount)\n const startRow = loadedRowCount === 0 ? 0 : 1\n const endRow = loadedRowCount\n const token = useAppTheme()\n\n return (\n <Flex\n align=\"center\"\n gap={3}\n wrap=\"wrap\"\n style={{ width: \"max-content\", marginBottom: 16 }}\n >\n <EText fontSize=\"12px\" color={token.neutral7} fontWeight=\"500\">\n Displaying\n </EText>\n <EText fontWeight=\"500\">\n {startRow.toLocaleString()} - {endRow.toLocaleString()}\n </EText>\n <EText fontSize=\"12px\" color={token.neutral7} fontWeight=\"500\">\n out of\n </EText>\n <EText fontWeight=\"500\">{rowCount.toLocaleString()}</EText>\n </Flex>\n )\n}\n\nexport const TanstackTableEmpty = () => {\n const token = useAppTheme()\n return (\n <Flex\n justify=\"center\"\n align=\"center\"\n gap={41}\n vertical\n style={{ marginTop: 43 }}\n >\n {/* Note: Displaying the 'noDataImg' from the 'assets' module */}\n <Empty\n description={\n <EHeading\n level={3}\n fontWeight=\"500\"\n color={token.neutral7}\n style={{ marginLeft: 20 }}\n >\n No data found\n </EHeading>\n }\n />\n\n {/* Note: Displaying a heading indicating 'No data found' with specified styles */}\n </Flex>\n )\n}\n\nexport const TanstackToolbar = forwardRef(\n (props: TanstackToolbarProps, ref: ForwardedRef<TableRef | undefined>) => {\n const {\n actions,\n menu,\n options,\n subTitle,\n table,\n title,\n selectionCount = 0,\n selectionActions,\n } = props\n const token = useAppTheme()\n const isMenuEmpty =\n !menu || (Object.keys(menu).length === 0 && menu.constructor === Object)\n\n const isSelectionMode = selectionCount > 0\n\n return (\n <>\n <Flex\n justify=\"space-between\"\n flex={1}\n gap={6}\n wrap=\"wrap\"\n style={{\n marginBlock: 8,\n padding: 16,\n backgroundColor: token.winterWhisper,\n borderRadius: 16,\n width: \"100%\",\n }}\n >\n <Flex justify=\"flex-start\" gap={8} align=\"center\" wrap=\"wrap\">\n {!isSelectionMode && (\n <>\n {isMenuEmpty && (title || subTitle) ? (\n <Flex vertical gap={2}>\n {typeof title === \"string\" ? (\n <EHeading\n style={{\n marginBottom: 0,\n }}\n level={5}\n fontWeight=\"500\"\n color={token.neutral7}\n >\n {title}\n </EHeading>\n ) : (\n title\n )}\n {typeof subTitle === \"string\" ? (\n <EText color={token.neutral7}>{subTitle}</EText>\n ) : (\n subTitle\n )}\n </Flex>\n ) : (\n <div />\n )}\n\n {menu?.type === \"tab\" && (\n <ETab\n type=\"line\"\n size=\"small\"\n tabBarStyle={{\n borderBottom: \"none\",\n }}\n items={menu?.items}\n activeKey={menu?.activeKey}\n defaultActiveKey={menu?.defaultActiveKey}\n onChange={menu?.onChange}\n />\n )}\n {menu?.type === \"dropdown\" && (\n <Select\n options={\n menu?.items?.map((item) => ({\n label: item.label,\n value: item.key,\n })) as DefaultOptionType[]\n }\n value={menu?.activeKey}\n allowClear={false}\n defaultValue={menu?.defaultActiveKey}\n onChange={menu?.onChange}\n style={{ width: 200 }}\n />\n )}\n </>\n )}\n {/* NOTE : SearchBar - always visible */}\n {isMenuEmpty && options?.search ? (\n <TanstackGlobalFilter\n ref={ref}\n table={table as unknown as Table<unknown>}\n options={options?.search}\n />\n ) : (\n <div />\n )}\n {isSelectionMode && (\n <EText fontWeight=\"500\" color={token.neutral7}>\n {selectionCount} items selected\n </EText>\n )}\n </Flex>\n\n <Flex justify=\"flex-end\" align=\"center\" gap={8} wrap=\"wrap\">\n {!isSelectionMode && !isMenuEmpty && options?.search ? (\n <TanstackGlobalFilter\n table={table as unknown as Table<unknown>}\n options={options?.search}\n />\n ) : undefined}\n {isSelectionMode ? (\n <>\n {selectionActions}\n {actions\n ?.filter(\n (action) =>\n action?.key === \"filter\" ||\n action?.key === \"reload\" ||\n action?.key === \"settings\",\n )\n .map((Action, index) => (\n <Fragment key={index}>{Action}</Fragment>\n ))}\n </>\n ) : (\n actions?.map((Action, index) => (\n <Fragment key={index}>{Action}</Fragment>\n ))\n )}\n </Flex>\n </Flex>\n </>\n )\n },\n) as any\n\nexport const TanstackTableRowSelection: React.FC<{\n table: Table<any>\n render?: React.ReactNode\n}> = ({ table, render }) => {\n const token = useAppTheme()\n const rowCount =\n Object?.keys(table.getState()?.rowSelection).filter(\n (key) => table.getState()?.rowSelection[key],\n ).length === table.getRowModel().rows.length &&\n Object?.keys(table.getState()?.rowSelection).filter(\n (key) => table.getState()?.rowSelection[key],\n ).length !== table.getRowCount()\n const selectedRowCount = Object?.values(\n table.getState()?.rowSelection,\n ).filter((item) => item)?.length\n\n return (\n <Flex\n justify=\"space-between\"\n flex={1}\n wrap=\"wrap\"\n gap={6}\n style={{\n marginBlock: 16,\n padding: 16,\n backgroundColor: token.winterWhisper,\n borderRadius: 16,\n }}\n >\n <Flex justify=\"flex-start\" gap={8} align=\"center\" wrap=\"wrap\">\n {/* Note: Displaying the total number of items selected */}\n {rowCount ? (\n <>\n <EText fontWeight=\"500\" color={token.neutral7}>\n All {selectedRowCount} items on this page are selected.\n </EText>\n <ELink\n onClick={() => {\n table.toggleAllRowsSelected()\n }}\n >\n Select all &nbsp;{table.getPreFilteredRowModel().rows.length}\n &nbsp; items in the table.\n </ELink>\n </>\n ) : (\n <EText fontWeight=\"500\" color={token.neutral7}>\n {selectedRowCount} items selected\n </EText>\n )}\n </Flex>\n\n {\n // Note: Displaying the 'render' prop if it is passed\n\n render ? (\n <Flex justify=\"flex-end\">{render}</Flex>\n ) : (\n <Flex justify=\"flex-end\" align=\"center\" gap={8} wrap=\"wrap\">\n <Space size={\"small\"}>\n {render}\n <TableClearButton\n onClick={() => {\n table.resetRowSelection()\n }}\n indicator={Object.keys(table.getState()?.rowSelection).length}\n />\n </Space>\n </Flex>\n )\n }\n </Flex>\n )\n}\n\ninterface TanstackGlobalFilterProps {\n table: Table<unknown>\n options?: OptionConfig[\"search\"]\n}\n\nexport const TanstackGlobalFilter = forwardRef<\n TableRef | undefined,\n TanstackGlobalFilterProps\n>(({ table, options }: any, ref) => {\n const token = useAppTheme()\n const [searchText, setSearchText] = useState(table.getState().globalFilter)\n const searchInputRef = useRef<InputRef>(null)\n // Timestamp of the user's last keystroke — used to avoid clobbering the input\n // mid-type, WITHOUT blocking external syncs just because the box is focused\n // (the input auto-focuses on mount, which previously suppressed the sync when\n // a default saved view applied its global search).\n const lastTypedRef = useRef(0)\n\n // note Keep the input in sync when global search changes externally\n // (e.g. a saved view is applied). Only skip if the user is actively typing.\n const tableGlobalFilter = table.getState().globalFilter\n useEffect(() => {\n if (Date.now() - lastTypedRef.current < 600) return\n setSearchText(tableGlobalFilter ?? \"\")\n }, [tableGlobalFilter])\n\n useHotkeys(\"meta+f\", (e) => {\n searchInputRef.current?.focus()\n e.preventDefault()\n })\n\n const { placeholder, autoFocus } = options\n\n // note Use the forwarded ref to expose focus/blur methods\n useImperativeHandle(\n ref,\n () => ({\n reload: () => {\n table.options.meta?.reload()\n },\n focus: () => {\n searchInputRef.current?.focus()\n },\n blur: () => {\n searchInputRef.current?.blur()\n },\n }),\n [table, searchInputRef],\n )\n\n return (\n <Input\n id=\"table-global-filter\"\n autoFocus={autoFocus ?? true}\n ref={searchInputRef}\n style={{\n width: 200,\n borderRadius: 8,\n borderColor: token.neutral7,\n color: token.neutral7,\n }}\n onFocusCapture={(e) => {\n if (e.target.value) {\n searchInputRef.current?.select()\n }\n }}\n onBlur={() => {\n searchInputRef.current?.blur()\n }}\n value={searchText}\n onChange={(e) => {\n lastTypedRef.current = Date.now()\n setSearchText(e.target.value)\n table.setGlobalFilter(e.target.value)\n }}\n placeholder={placeholder || \"Search...\"}\n prefix={\n <SearchOutlined\n style={{\n color: token.neutral7,\n fontSize: 16,\n }}\n />\n }\n />\n )\n})\n\nexport const TanstackFilter = ({ table }: { table: Table<any> }) => {\n const [filterParams, setFilterParams] = useState({})\n const [form] = Form.useForm()\n\n const allColumns = table\n ?.getAllColumns()\n ?.filter((column) => column.getCanFilter())\n\n const initialValues = useMemo(() => {\n return table.getState().searchParams || form.getFieldsValue()\n }, [table.getState().searchParams, form])\n\n return (\n <FilterProDrawerForm\n form={form}\n initialValues={{ ...initialValues }}\n onReset={() => {\n table.options.meta?.onSearchParamsChange?.({})\n table.setColumnFilters([])\n setFilterParams({})\n }}\n onFinish={async (values) => {\n console.log(filterParams, \"values\")\n table.options.meta?.onSearchParamsChange?.(values)\n table.options?.onColumnFiltersChange?.(\n filterParams as ColumnFiltersState,\n )\n return true\n }}\n onValuesChange={(changedValues) => {\n const column = table.getColumn(Object.keys(changedValues)[0])\n const changedvalues =\n typeof column?.columnDef?.meta?.transform === \"function\"\n ? column.columnDef.meta.transform(Object.values(changedValues)[0])\n : undefined\n\n setFilterParams((prev) => ({\n ...prev,\n ...(changedvalues ?? changedValues),\n }))\n }}\n >\n <FilterRow>\n {allColumns?.map((column: Column<any>, index: number) => {\n return (\n <FilterCol key={index}>\n <TableInput\n form={form as any}\n type={column.columnDef.meta?.filterVariant || \"text\"}\n name={column.id}\n label={column.columnDef.header as string}\n {...(typeof column.columnDef.meta?.inputItemProps === \"function\"\n ? column.columnDef.meta?.inputItemProps?.(column.id)\n : column.columnDef.meta?.inputItemProps)}\n />\n </FilterCol>\n )\n })}\n </FilterRow>\n </FilterProDrawerForm>\n )\n}\n\n// note Set the display name for the component\nTanstackGlobalFilter.displayName = \"TanstackGlobalFilter\"\nTanstackToolbar.displayName = \"TanstackToolbar\"\nTanstackFilter.displayName = \"TanstackFilter\"\n\nexport const FilePreviewCell: React.FC<{ fileId: string; filename: string }> =\n memo(({ fileId, filename }) => {\n const { previewFile, loading } = useFilePreview()\n return (\n <Tooltip title={filename}>\n <EButton\n type=\"link\"\n size=\"small\"\n icon={<EyeOutlined />}\n loading={loading}\n onClick={() => previewFile(fileId)}\n style={{ padding: 0 }}\n >\n {filename}\n </EButton>\n </Tooltip>\n )\n })\n\nFilePreviewCell.displayName = \"FilePreviewCell\"\n","import { Button, ButtonProps } from \"antd\"\nimport { RefObject } from \"react\"\n\nexport interface EButtonProps extends Omit<ButtonProps, \"variant\"> {\n ref?: RefObject<any>\n}\n\nexport const EButton: React.FC<EButtonProps> = (props) => {\n return (\n <Button\n ref={{ ...(props?.ref as unknown as RefObject<any>) }}\n {...props}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n ...props?.style,\n }}\n />\n )\n}\n\nexport interface TableDeleteButtonProps extends ButtonProps {\n indicator?: number\n}\n\nexport const TableClearButton: React.FC<TableDeleteButtonProps> = ({\n indicator,\n ...rest\n}) => {\n return (\n <EButton\n type=\"link\"\n style={{ fontWeight: \"500\", display: \"flex\", alignItems: \"center\" }}\n {...rest}\n >\n Clear({indicator})\n </EButton>\n )\n}\n","import { Tabs, TabsProps } from \"antd\"\nimport React from \"react\"\nimport { createStyles } from \"antd-style\"\n\nconst useStyles = createStyles(() => ({\n tabWrapper: {\n \"& .ant-tabs-tab-btn\": {\n fontWeight: 500,\n },\n },\n}))\n\nexport interface ETabProps extends TabsProps {\n enableKeyboardNavigation?: boolean\n}\n\nexport const ETab: React.FC<ETabProps> = ({\n enableKeyboardNavigation = false,\n ...rest\n}) => {\n const { styles } = useStyles()\n\n return (\n <Tabs\n className={styles.tabWrapper}\n {...rest}\n items={rest.items?.map((item, index) => ({\n ...item,\n children: (\n <div data-tab-key={item.key} data-tab-index={index}>\n {item.children}\n </div>\n ),\n }))}\n />\n )\n}\n","import { Dropdown, DropdownProps } from \"antd\"\nimport React from \"react\"\nimport { createStyles } from \"antd-style\"\nimport { useAppTheme } from \"../theme\"\n\nconst useStyles = () => {\n const token = useAppTheme()\n return createStyles(() => ({\n container: {\n zIndex: 1001,\n \".ant-dropdown-menu-item\": {\n width: 196,\n },\n \".ant-dropdown-menu-item-icon\": {\n color: token.colorPrimary,\n fontSize: `18px !important`,\n minWidth: `18px !important`,\n },\n \".ant-dropdown-menu-item-divider\": {\n color: token.colorPrimary,\n backgroundColor: `${token.primary2} !important`,\n marginInline: `-${token.sizeUnit}px !important`,\n },\n },\n }))()\n}\n\nexport interface EDropdownProps extends DropdownProps {\n width?: string | number\n}\n\nexport const EDropdown: React.FC<EDropdownProps> = ({\n width = 196,\n ...rest\n}) => {\n const { styles } = useStyles()\n return (\n <div>\n <Dropdown\n trigger={[\"click\"]}\n overlayStyle={{ width, ...rest?.overlayStyle }}\n className={styles.container}\n overlayClassName={styles.container}\n {...rest}\n />\n </div>\n )\n}\n","import React from \"react\"\nimport { ProFormSelect, ProFormSelectProps } from \"@ant-design/pro-components\"\n\nexport interface ProSelectProps extends ProFormSelectProps {\n isFullWidth?: boolean\n}\n\nexport const ProSelect: React.FC<ProSelectProps> = ({\n isFullWidth,\n fieldProps,\n ...rest\n}) => {\n return (\n <ProFormSelect\n fieldProps={{\n ...fieldProps,\n style: {\n width: isFullWidth ? \"100%\" : fieldProps?.style?.width,\n ...fieldProps?.style,\n },\n }}\n {...rest}\n />\n )\n}\n","import React, { useCallback, useEffect } from \"react\"\nimport {\n ProForm,\n ProFormDatePicker,\n ProFormDateRangePicker,\n ProFormDigit,\n ProFormDigitProps,\n ProFormFieldProps,\n} from \"@ant-design/pro-components\"\nimport { IconCurrencyRupee } from \"@tabler/icons-react\"\nimport {\n DatePickerProps,\n Flex,\n FormInstance,\n Input,\n InputNumber,\n InputNumberProps,\n Popover,\n PopoverProps,\n Select,\n SelectProps,\n} from \"antd\"\nimport { InputProps } from \"antd/lib\"\nimport { CalendarTwoTone, InfoCircleOutlined } from \"@ant-design/icons\"\nimport { useWatch } from \"antd/es/form/Form\"\nimport useFormInstance from \"antd/es/form/hooks/useFormInstance\"\nimport dayjs from \"dayjs\"\n\nimport { useAppTheme } from \"../theme\"\nimport { EText, TextTypographyProps } from \"../Typography\"\n\n// Constants\nexport const DEFAULT_DATE_FORMAT = \"DD-MM-YYYY\"\nexport const DEFAULT_BACKEND_DATE_FORMAT = \"YYYY-MM-DD\"\nexport const DEFAULT_DATE_MONTH_FORMAT = \"DD MMM, YYYY\"\nexport const DEFAULT_DATE_TIME_FORMAT = \"DD-MM-YYYY h:mm A\"\nexport const VIEW_DATE_TIME_FORMAT = \"DD MMM, YYYY h:mm A\"\nexport const FullColumnWIdth = \"100%\" as \"xl\"\n\n// parseDateTime local helper using dayjs\nexport const parseDateTime = (str: Date | string) => {\n if (str instanceof Date) return str\n const parsed = dayjs(str)\n return parsed.isValid() ? parsed.toDate() : null\n}\n\n// 1. ProAmount Component\nexport const ProAmount: React.FC<ProFormDigitProps> = ({\n fieldProps,\n ...rest\n}) => {\n const token = useAppTheme()\n\n const amountFormatter = (value: string | number | undefined) => {\n if (value) {\n const numValue =\n typeof value === \"string\"\n ? parseFloat(value.replace(/[^0-9.-]+/g, \"\"))\n : value\n return Number(numValue).toLocaleString(\"en-US\", {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })\n }\n return \"\"\n }\n\n return (\n <ProFormDigit\n {...rest}\n fieldProps={{\n precision: 2,\n prefix: <IconCurrencyRupee color={token.neutral6 || \"#bfbfbf\"} size={18} />,\n controls: false,\n formatter: amountFormatter,\n ...fieldProps,\n }}\n style={{ width: \"100%\", ...rest?.style }}\n />\n )\n}\n\n// 2. ProDatePicker Component\ninterface ProDatePickerProps extends ProFormFieldProps<any, DatePickerProps> {\n name?: string | number\n}\n\nexport const ProDatePicker: React.FC<ProDatePickerProps> = ({\n name,\n width = FullColumnWIdth,\n fieldProps,\n ...rest\n}) => {\n const isControlled = fieldProps?.value !== undefined\n const form = useFormInstance()\n const antdFieldValue = useWatch(name as string, form)\n\n const displayDate = isControlled\n ? fieldProps?.value\n ? dayjs(fieldProps.value)\n : undefined\n : antdFieldValue\n ? dayjs(antdFieldValue)\n : undefined\n\n const handleChange = useCallback(\n (date: dayjs.Dayjs | null) => {\n if (isControlled) {\n fieldProps?.onChange?.(date as any)\n } else {\n const backendValue = date\n ? date.format(DEFAULT_BACKEND_DATE_FORMAT)\n : undefined\n form.setFieldValue(name as string, backendValue)\n fieldProps?.onChange?.(date as any)\n }\n },\n [isControlled, form, name, fieldProps?.onChange],\n )\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n const inputValue = e?.target?.value\n if (inputValue?.length > 0) {\n const parts = inputValue.split(\"-\")\n const parsedDateTime = parseDateTime(\n parts.length === 3\n ? `${parseInt(parts[2], 10)}-${parseInt(parts[1], 10)}-${parseInt(\n parts[0],\n 10,\n )}`\n : inputValue,\n )\n if (parsedDateTime) {\n const parsedDayjs = dayjs(parsedDateTime)\n const isDisabled = fieldProps?.disabledDate?.(parsedDayjs)\n if (!isDisabled) {\n if (isControlled) {\n fieldProps?.onChange?.(parsedDayjs as any)\n } else {\n const backendValue = parsedDayjs.format(\n DEFAULT_BACKEND_DATE_FORMAT,\n )\n form.setFieldValue(name as string, backendValue)\n fieldProps?.onChange?.(parsedDayjs as any)\n }\n }\n }\n }\n fieldProps?.onBlur?.(e as any)\n },\n [\n isControlled,\n form,\n name,\n fieldProps?.onChange,\n fieldProps?.onBlur,\n fieldProps?.disabledDate,\n ],\n )\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setTimeout(() => e?.target?.select(), 0)\n fieldProps?.onFocus?.(e as any)\n },\n [fieldProps?.onFocus],\n )\n\n return (\n <ProFormDatePicker\n name={name}\n width={width}\n {...rest}\n fieldProps={{\n ...fieldProps,\n format: DEFAULT_DATE_FORMAT,\n picker: \"date\",\n value: displayDate,\n onChange: handleChange,\n onBlur: handleBlur,\n onFocus: handleFocus,\n size: \"md\" as any,\n }}\n transform={(value: any) => {\n const dateValue = value || antdFieldValue\n if (dateValue) {\n const dayjsDate = dayjs.isDayjs(dateValue)\n ? dateValue\n : dayjs(dateValue, DEFAULT_DATE_FORMAT, true).isValid()\n ? dayjs(dateValue, DEFAULT_DATE_FORMAT)\n : dayjs(dateValue)\n return {\n [name as string]: dayjsDate.format(DEFAULT_BACKEND_DATE_FORMAT),\n }\n }\n return \"\"\n }}\n />\n )\n}\n\n// 3. ProDateRangePicker Component\nexport const ProDateRangePicker: React.FC<ProDatePickerProps> = ({\n name,\n fieldProps,\n ...rest\n}) => {\n return (\n <ProFormDateRangePicker\n name={name}\n width={FullColumnWIdth}\n {...rest}\n fieldProps={{\n format: DEFAULT_DATE_FORMAT,\n ...fieldProps,\n }}\n transform={(value: any) => {\n if (value && Array.isArray(value) && value.length === 2) {\n const [start, end] = value\n const formatDate = (v: string) => {\n const isValid = dayjs(v, DEFAULT_DATE_FORMAT, true).isValid()\n const formatted = isValid ? v : dayjs(v).format(DEFAULT_DATE_FORMAT)\n return dayjs(formatted, DEFAULT_DATE_FORMAT).format(\n DEFAULT_BACKEND_DATE_FORMAT,\n )\n }\n return {\n [name as string]: [formatDate(start), formatDate(end)],\n }\n }\n return { [name as string]: value }\n }}\n />\n )\n}\n\n// 4. ProDateField Component\nexport type dateFormat =\n | \"default\"\n | \"DD-MMM-YYYY h:mm A\"\n | \"DD MMM, YYYY\"\n | \"DD MMM, YYYY h:mm A\"\n | \"no_of_hours\"\n\ninterface ProDateFieldProps {\n date?: number | string\n format?: dateFormat\n iconColor?: string\n textProps?: TextTypographyProps\n popoverProps?: PopoverProps\n info?: React.ReactNode\n infoTitle?: string\n suffix?: React.ReactNode | string\n}\n\nexport const ProDateField: React.FC<ProDateFieldProps> = ({\n date,\n format = DEFAULT_DATE_FORMAT,\n iconColor,\n textProps,\n info,\n suffix,\n infoTitle,\n popoverProps,\n}) => {\n const token = useAppTheme()\n iconColor = iconColor || token.neutral7\n\n const getDateFormat = (format: dateFormat) => {\n switch (format) {\n case \"default\":\n return DEFAULT_DATE_FORMAT\n case \"DD MMM, YYYY h:mm A\":\n return VIEW_DATE_TIME_FORMAT\n case \"DD MMM, YYYY\":\n return DEFAULT_DATE_MONTH_FORMAT\n case \"DD-MMM-YYYY h:mm A\":\n return DEFAULT_DATE_TIME_FORMAT\n case \"no_of_hours\":\n return \"HH:mm:ss\"\n default:\n return DEFAULT_DATE_FORMAT\n }\n }\n\n const isDateValid = dayjs(\n date,\n getDateFormat(format as dateFormat),\n true,\n ).isValid()\n\n const formatValue = isDateValid\n ? dayjs(date).format(\n format === \"no_of_hours\"\n ? \"HH:mm:ss\"\n : getDateFormat(format as dateFormat),\n )\n : date\n ? dayjs(date).format(\n format === \"no_of_hours\"\n ? \"HH:mm:ss\"\n : getDateFormat(format as dateFormat),\n )\n : undefined\n\n return formatValue ? (\n <Flex align=\"center\" gap={4}>\n <CalendarTwoTone twoToneColor={iconColor} />\n <Flex flex={1} align=\"center\">\n <EText {...textProps}>{formatValue}</EText>\n {typeof suffix === \"string\" ? (\n <EText {...textProps} color={token.neutral7}>\n &nbsp;\n {suffix}\n </EText>\n ) : (\n suffix\n )}\n </Flex>\n {info && (\n <Popover\n title={infoTitle}\n showArrow\n content={info}\n trigger={[\"hover\"]}\n {...popoverProps}\n >\n <InfoCircleOutlined style={{ color: token.neutral8 }} />\n </Popover>\n )}\n </Flex>\n ) : (\n \"-\"\n )\n}\n\n// 5. PreInputFormField Component\ninterface BasePreInputFormFieldProps\n extends Omit<ProFormFieldProps<any, InputProps>, \"addonBefore\"> {\n selectProps?: SelectProps\n form?: FormInstance<any>\n}\n\ninterface TextPreInputFormFieldProps extends BasePreInputFormFieldProps {\n inputType?: \"text\"\n inputProps?: InputProps\n inputNumberProps?: never\n}\n\ninterface NumberPreInputFormFieldProps extends BasePreInputFormFieldProps {\n inputType: \"number\"\n inputNumberProps?: InputNumberProps\n inputProps?: never\n}\n\nexport type PreInputFormFieldProps =\n | TextPreInputFormFieldProps\n | NumberPreInputFormFieldProps\n\nexport const PreInputFormField: React.FC<PreInputFormFieldProps> = ({\n label,\n name,\n fieldProps,\n required = true,\n selectProps,\n inputNumberProps,\n inputProps,\n inputType = \"text\",\n width = \"100%\",\n form,\n ...rest\n}) => {\n const defaultSelectedValue = selectProps?.options?.find(\n (item) => item.label === selectProps?.defaultValue,\n )\n\n const selectBefore = (\n <ProForm.Item\n noStyle\n name={`${name}-selected-option`}\n transform={(value: any) => {\n return {\n [name as string]: {\n selectedOption: value,\n value: form?.getFieldValue(name)?.value ?? 0,\n },\n [`${name}-selected-option`]: undefined,\n }\n }}\n >\n <Select\n styles={{\n root: {\n minWidth: 60,\n fontSize: 12,\n background: \"white\",\n borderBlock: \"1px solid #d9d9d9\",\n borderTopLeftRadius: \"6px\",\n borderBottomLeftRadius: \"6px\",\n },\n }}\n {...selectProps}\n defaultValue={selectProps?.defaultValue}\n onChange={(value) => {\n if (value) {\n form?.setFieldsValue({\n [name as string]: {\n selectedOption: value,\n value: form?.getFieldValue(name)?.value ?? 0,\n },\n })\n }\n }}\n />\n </ProForm.Item>\n )\n\n useEffect(() => {\n if (form?.getFieldValue(name)?.selectedOption) {\n form?.setFieldsValue({\n [`${name}-selected-option`]:\n form?.getFieldValue(name)?.selectedOption ||\n defaultSelectedValue?.value,\n })\n } else {\n form?.setFieldsValue({\n [`${name}-selected-option`]:\n (defaultSelectedValue?.value as string) || undefined,\n })\n form?.setFieldsValue({\n [name as string]: {\n selectedOption: (defaultSelectedValue?.value as string) || undefined,\n value: form?.getFieldValue(name)?.value ?? 0,\n },\n })\n }\n }, [form])\n\n return (\n <ProForm.Item\n {...rest}\n label={label}\n name={name}\n dependencies={[`${name}-selected-option`]}\n convertValue={(value: any) => {\n if (typeof value !== \"object\") {\n return value\n }\n return value?.value\n }}\n transform={(value: any) => {\n if (typeof value !== \"object\") {\n return {\n [name as string]: {\n selectedOption: form?.getFieldValue(`${name}-selected-option`),\n value,\n },\n }\n }\n return {\n [name as string]: {\n selectedOption: form?.getFieldValue(`${name}-selected-option`),\n value: value?.value,\n },\n }\n }}\n >\n {inputType === \"number\" ? (\n <InputNumber\n addonBefore={selectBefore}\n {...(inputNumberProps as InputNumberProps)}\n style={{\n width,\n }}\n onChange={(value) => {\n if (value) {\n form?.setFieldsValue({\n [name as string]: {\n selectedOption: form?.getFieldValue(\n `${name}-selected-option`,\n ),\n value,\n },\n })\n } else {\n form?.setFieldsValue({\n [name as string]: {\n selectedOption: undefined,\n value: 0,\n },\n [`${name}-selected-option`]: undefined,\n })\n }\n }}\n defaultValue={form?.getFieldValue(name)?.value || 0}\n />\n ) : (\n <Input\n addonBefore={selectBefore}\n {...(inputProps as InputProps)}\n style={{\n width,\n }}\n />\n )}\n </ProForm.Item>\n )\n}\n","// Barrel export for all required ProComponents and typography wrappers in the standalone package\n\nexport * from \"./Icon\"\nexport * from \"./Button\"\nexport * from \"./Tab\"\nexport * from \"./Dropdown\"\nexport * from \"./ProSelect\"\nexport * from \"./ProFields\"\n\n// Typography exports\nexport * from \"../Typography\"\n\n// EDividerWithNoStyle\nimport { Divider, DividerProps } from \"antd\"\nimport React, { useCallback, useState } from \"react\"\nimport { message } from \"antd\"\n\nexport interface EDividerProps extends DividerProps {\n marginTop?: number\n marginBottom?: number\n}\n\nexport const EDividerWithNoStyle: React.FC<EDividerProps> = ({\n marginTop = 6,\n marginBottom = 6,\n children,\n ...rest\n}) => {\n return (\n <Divider style={{ marginTop, marginBottom, ...rest?.style }} {...rest}>\n {children}\n </Divider>\n )\n}\n\n// useFilePreview Hook\nexport const useFilePreview = () => {\n const [loading, setLoading] = useState(false)\n\n const previewFile = useCallback(async (fileId: string) => {\n if (!fileId) {\n message.error(\"File ID is required\")\n return null\n }\n\n setLoading(true)\n try {\n const response = await fetch(`/api/storage/presigned-url/download/${fileId}`)\n if (!response.ok) throw new Error(\"Failed to fetch preview URL\")\n const result = await response.json()\n const { url } = result.data\n\n window.open(url, \"_blank\")\n return url\n } catch (error) {\n console.error(\"Failed to get preview URL:\", error)\n message.error(\"Failed to preview file\")\n return null\n } finally {\n setLoading(false)\n }\n }, [])\n\n const getDownloadUrl = useCallback(async (fileId: string) => {\n if (!fileId) {\n message.error(\"File ID is required\")\n return null\n }\n\n setLoading(true)\n try {\n const response = await fetch(`/api/storage/presigned-url/download/${fileId}`)\n if (!response.ok) throw new Error(\"Failed to fetch download URL\")\n const result = await response.json()\n return result.data\n } catch (error) {\n console.error(\"Failed to get download URL:\", error)\n message.error(\"Failed to get download URL\")\n return null\n } finally {\n setLoading(false)\n }\n }, [])\n\n const downloadFile = useCallback(\n async (fileId: string, filename?: string) => {\n const result = await getDownloadUrl(fileId)\n if (!result) return\n\n const link = document.createElement(\"a\")\n link.href = result.url\n link.download = filename || result.filename\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n },\n [getDownloadUrl],\n )\n\n return {\n previewFile,\n getDownloadUrl,\n downloadFile,\n loading,\n }\n}\n","export const PAGINATION_PAGE_SIZE_OPTIONS = [\n { value: \"10\", label: \"10 / Page\" },\n { value: \"20\", label: \"20 / Page\" },\n { value: \"50\", label: \"50 / Page\" },\n { value: \"100\", label: \"100 / Page\" },\n { value: \"500\", label: \"500 / Page\" },\n { value: \"1000\", label: \"1k / Page\" },\n // { value: \"10000\", label: \"10k / Page\" },\n // { value: \"50000\", label: \"50k / Page\" },\n]\n\nexport const defaultPinnedColumns = [\"rowSelection\", \"filter\", \"index\"]\n\nexport const OPTIONS_FOR_NUMERIC_QUANTITY = [\n {\n label: \"=\",\n value: \"eq\",\n },\n {\n label: \">\",\n value: \"gt\",\n },\n {\n label: \"<\",\n value: \"lt\",\n },\n {\n label: \">=\",\n value: \"gte\",\n },\n {\n label: \"<=\",\n value: \"lte\",\n },\n]\n","import {\n ProFormDigit,\n ProFormDigitProps,\n ProFormItemProps,\n ProFormRadio,\n ProFormRadioGroupProps,\n ProFormText,\n} from \"@ant-design/pro-components\"\nimport { InputProps } from \"antd\"\nimport React from \"react\"\nimport {\n PreInputFormField,\n ProAmount,\n ProDatePicker,\n ProDateRangePicker,\n ProSelect,\n ProSelectProps,\n} from \"../ProComponents\"\n\nimport { DatePickerProps } from \"antd/lib\"\nimport { RangePickerProps } from \"antd/lib/date-picker\"\nimport { WEIGHT_INPUT_PRECISION } from \"~/form-constants\"\nimport { OPTIONS_FOR_NUMERIC_QUANTITY } from \"./tableConstant\"\n\n// NOTE: Defining the combined props type for the custom input component\nexport type BaseInputProps = InputProps & ProFormDigitProps & ProSelectProps\n\nexport type TableInputFieldTypes =\n | \"select\"\n | \"digit\"\n | \"text\"\n | \"amount\"\n | \"quantity\"\n | \"date\"\n | \"radio\"\n | \"date-range\"\n | \"multi-select\"\n | \"mobile\"\n | \"attachment\"\n | \"dynamic-select\"\n | \"code\"\n | \"textarea\"\n | \"email\"\n | \"password\"\n | \"url\"\n | \"number\"\n | \"percentage\"\n | \"weight\"\n | \"km\"\n | \"pincode\"\n | \"datetime\"\n | \"time\"\n | \"google-location\"\n | \"pan\"\n | \"gst\"\n | \"latitude\"\n | \"longitude\"\n | \"presigned-upload\"\n | \"checkbox\"\n | \"modal-table-select\"\n | \"nestedEditableTable\"\n | \"serial-number-select\"\n\nexport interface TableInputProps extends BaseInputProps {\n type?: TableInputFieldTypes | string\n}\n\n// NOTE: Functional component for the custom input element\nexport const TableInput: React.FC<TableInputProps> = ({\n type = \"text\",\n ...rest\n}) => {\n // NOTE: Rendering different input components based on the specified type\n switch (type) {\n case \"digit\":\n return (\n <PreInputFormField\n {...(rest as ProFormDigitProps)}\n inputType=\"number\"\n selectProps={{\n options: OPTIONS_FOR_NUMERIC_QUANTITY,\n }}\n style={{ width: \"100%\", ...rest?.style }}\n />\n )\n case \"select\":\n return (\n <ProSelect\n fieldProps={{\n labelInValue: true,\n dropdownStyle: {\n zIndex: 9999,\n },\n }}\n isFullWidth\n {...(rest as ProSelectProps)}\n />\n )\n case \"multi-select\":\n return (\n <ProSelect\n mode=\"multiple\"\n fieldProps={{\n labelInValue: true,\n dropdownStyle: {\n zIndex: 9999,\n },\n }}\n isFullWidth\n {...(rest as ProSelectProps)}\n />\n )\n case \"amount\":\n return <ProAmount {...(rest as ProFormDigitProps)} noStyle={false} />\n case \"quantity\":\n return (\n <ProFormDigit\n {...(rest as ProFormDigitProps)}\n fieldProps={{\n ...rest.fieldProps,\n precision: WEIGHT_INPUT_PRECISION,\n }}\n style={{ width: \"100%\", ...rest?.style }}\n />\n )\n case \"date\":\n return (\n <ProDatePicker\n {...(rest as ProFormItemProps)}\n fieldProps={{\n format: \"DD-MMM-YYYY\",\n style: { width: \"100%\" },\n ...(rest.fieldProps as ProFormItemProps<DatePickerProps>[\"fieldProps\"]),\n }}\n />\n )\n\n case \"date-range\":\n return (\n <ProDateRangePicker\n {...(rest as ProFormItemProps)}\n fieldProps={{\n style: { width: \"100%\" },\n ...(rest.fieldProps as ProFormItemProps<RangePickerProps>[\"fieldProps\"]),\n }}\n />\n )\n case \"radio\":\n return (\n <ProFormRadio.Group\n {...(rest as ProFormRadioGroupProps)}\n fieldProps={{\n ...(rest.fieldProps as ProFormRadioGroupProps[\"fieldProps\"]),\n style: { width: \"100%\" },\n }}\n />\n )\n\n default:\n return (\n // NOTE: Default Input component with themed styles\n <ProFormText {...(rest as ProFormItemProps)} />\n )\n }\n}\n","export const WEIGHT_INPUT_PRECISION = 3\n","import { Table } from \"@tanstack/react-table\"\nimport _ from \"lodash\"\nimport { ComponentType } from \"~/global\"\nimport { flattenToLeafColumns } from \"~Form/utils/editableTableUtils\"\nimport { DensityState } from \"./table.types\"\nimport { useTanstackTable } from \"./useTanstackTable\"\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const getHiddenColumns = (columns: any[]) => {\n // Flatten grouped columns to leaf columns before building visibility state\n const leaves = flattenToLeafColumns(columns)\n // note returns an object with column id as key and boolean as value\n const hiddenColumns = leaves.reduce((acc, column) => {\n return {\n ...acc,\n [column.id || column.accessorKey]: !column?.meta?.hidden,\n }\n }, {})\n return { ...hiddenColumns, rowSelection: true, index: true, filter: true }\n}\nexport const getRowIds = <T,>(table: Table<T>) =>\n _.keys(_.pickBy(table?.getState()?.rowSelection, _.identity))\n\nexport const getSelectedRowModel = <T,>(table: Table<T>) =>\n table?.getSelectedRowModel()?.flatRows?.map((row) => row.original)\n\nexport const getCellSize = (type: DensityState) => {\n switch (type) {\n case \"small\":\n return \"py-2\"\n case \"middle\":\n return \"py-4\"\n case \"large\":\n return \"py-6\"\n default:\n return \"py-2\"\n }\n}\n\nexport const getBordered = (bordered: boolean) => {\n return bordered ? \"border\" : \"\"\n}\n\nexport const handlePinColumn = (\n columnId: string,\n pinType: \"left\" | \"right\",\n table: Table<unknown>,\n) => {\n const currentPinned = table.getState().columnPinning\n const newPinned = { ...currentPinned }\n\n if (pinType === \"right\") {\n // note Remove the column if it already exists in either pinned group\n newPinned.left = newPinned.left?.filter((id) => id !== columnId) || []\n newPinned.right = newPinned.right?.filter((id) => id !== columnId) || []\n\n // note Insert the new column before 'filter' or at the end if 'filter' isn't found\n const filterIndex = newPinned.right.findIndex((id) => id === \"filter\")\n if (filterIndex !== -1) {\n newPinned.right.splice(filterIndex, 0, columnId) // note Insert before 'filter'\n } else {\n newPinned.right.push(columnId) // note Add to the end\n }\n } else if (pinType === \"left\") {\n // note Remove from 'right' if it exists\n newPinned.right = newPinned.right?.filter((id) => id !== columnId) || []\n newPinned.left = [...(newPinned.left || []), columnId]\n }\n\n table.setColumnPinning(newPinned)\n}\n\nexport const getExtraColumns = <T,>({\n rowSelection,\n rowExpandable,\n}: {\n rowSelection?: unknown\n rowExpandable?: unknown\n}) => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const { rowSelectionColumn, expandableColumn } = useTanstackTable<T>()\n\n const allExtraColumns = {\n rowSelection: rowSelectionColumn,\n rowExpandable: expandableColumn,\n }\n return Object.values(\n _.pickBy(allExtraColumns, (_, key) => {\n return (\n (rowSelection && key === \"rowSelection\") ||\n (rowExpandable && key === \"rowExpandable\")\n )\n }),\n )\n}\n\nexport const isIndeterminate = (selected: string[], allOptions: string[]) => {\n return selected?.length > 0\n ? selected?.some((item) => allOptions?.includes(item))\n : false\n}\n\nexport const isCheckAll = (selected: string[], allOptions: string[]) =>\n selected?.length === allOptions?.length && allOptions?.length > 0\n\nexport const getHeading = (type: ComponentType) => {\n switch (type) {\n case \"VIEW\":\n return \"View\"\n case \"EDIT\":\n return \"Edit\"\n\n default:\n return \"Add\"\n }\n}\n","export function isGroupColumn(col: any): boolean {\n return col && !col.accessorKey && !col.id && Array.isArray(col.columns)\n}\n\nexport function flattenToLeafColumns(columns: any[]): any[] {\n const leaves: any[] = []\n for (const col of columns) {\n if (isGroupColumn(col)) {\n leaves.push(...flattenToLeafColumns(col.columns))\n } else {\n leaves.push(col)\n }\n }\n return leaves\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { createColumnHelper, RowSelectionState } from \"@tanstack/react-table\"\nimport { EButton } from \"../ProComponents/Button\"\nimport { CustomTable } from \"./table.types\"\nimport { IndeterminateCheckbox } from \"./tableComponents\"\n\nimport { IndexColumn } from \"@ant-design/pro-components\"\nimport { Flex, Radio, Tag } from \"antd\"\nimport { MenuItemType } from \"antd/es/menu/interface\"\nimport { useState } from \"react\"\nimport { ComponentType } from \"~/global\"\nimport { EDropdown, EIcon } from \"../ProComponents\"\n\nexport const useTanstackTable = <T,>() => {\n const columnHelper = createColumnHelper<T>()\n\n const rowSelectionItems = (table: CustomTable<T>): MenuItemType[] => {\n const isArray = Array.isArray(table.options?.meta?.rowSelection?.selections)\n return [\n {\n key: \"1\",\n label: <h1>Select Even</h1>,\n onClick: () => {\n const getEvenRows = table\n .getCoreRowModel()\n ?.rows?.filter((_, index) => index % 2 === 0)\n .flatMap((row) => row.id)\n\n const output = getEvenRows.reduce(\n (acc: Record<string, boolean>, key) => {\n acc[key] = true\n return acc\n },\n {},\n )\n\n table.setRowSelection(output)\n },\n },\n {\n key: \"2\",\n label: <h1>Invert Current Page(for this page)</h1>,\n onClick: () => {\n const allRows = table.getRowModel()?.rows?.flatMap((row) => ({\n key: row.id,\n isSelected: row.getIsSelected(),\n }))\n\n const output = allRows.reduce(\n (acc: Record<string, boolean>, { key, isSelected }) => {\n acc[key] = !isSelected\n\n return acc\n },\n {},\n )\n\n table.setRowSelection(output)\n },\n },\n {\n key: \"3\",\n label: <h1>Select Even (for this page)</h1>,\n onClick: () => {\n const getEvenRows = table\n .getRowModel()\n ?.rows?.filter((_, index) => index % 2 === 0)\n .flatMap((row) => row.id)\n const output = getEvenRows.reduce(\n (acc: Record<string, boolean>, key) => {\n acc[key] = true\n return acc\n },\n {},\n )\n\n table.setRowSelection(output)\n },\n },\n {\n key: \"4\",\n label: <h1>Invert Current Page (for all)</h1>,\n onClick: () => {\n const allRows = table.getRowModel()?.rowsById\n const output = Object.entries(allRows).reduce(\n (acc: Record<string, boolean>, key) => {\n acc[key[0]] = !key[1].getIsSelected()\n\n return acc\n },\n {},\n )\n // note : filter out the false values\n const selectedRows = Object.fromEntries(\n Object.entries(output).filter(([_, value]) => value),\n )\n table.setRowSelection(selectedRows)\n },\n },\n\n {\n key: \"5\",\n disabled: !table?.options?.meta?.rowExpandable,\n label: <h1>Expand All</h1>,\n\n onClick: () => {\n table.setExpanded(true)\n },\n },\n {\n key: \"6\",\n disabled: !table?.options?.meta?.rowExpandable,\n label: <h1>Collapse All</h1>,\n\n onClick: () => {\n table.resetExpanded()\n },\n },\n ...((isArray\n ? table.options?.meta?.rowSelection?.selections\n : []) as MenuItemType[]),\n ].filter((item) => !item.disabled)\n }\n\n const rowSelectionColumn = columnHelper.display({\n id: \"rowSelection\",\n enablePinning: false,\n enableHiding: false,\n enableResizing: false,\n\n header: ({ table }: any) => {\n const isArray = Array.isArray(\n table.options?.meta?.rowSelection?.selections,\n )\n return table.options?.meta?.rowSelection?.selectionType !== \"radio\" ? (\n <Flex justify=\"center\" align=\"center\">\n <IndeterminateCheckbox\n {...{\n checked: table.getIsAllPageRowsSelected(),\n indeterminate: table.getIsSomePageRowsSelected(),\n onChange: table.getToggleAllPageRowsSelectedHandler(),\n }}\n />\n\n {isArray || table.options?.meta?.rowSelection?.selections ? (\n <EDropdown\n menu={{\n items: rowSelectionItems(table as CustomTable<T>),\n }}\n trigger={[\"click\"]}\n placement=\"bottomLeft\"\n >\n <EButton\n type=\"text\"\n icon={<EIcon icon={\"material-symbols:add-rounded\"} />}\n />\n </EDropdown>\n ) : undefined}\n </Flex>\n ) : undefined\n },\n cell: ({ row, getValue }) => {\n return row.getCanMultiSelect() ? (\n <div className=\"flex items-center justify-center\">\n <IndeterminateCheckbox\n {...{\n checked: row.getIsSelected(),\n disabled: !row.getCanSelect(),\n indeterminate: row.getIsSomeSelected(),\n onChange: row.getToggleSelectedHandler(),\n }}\n />\n {getValue<boolean>()}\n </div>\n ) : (\n <div className=\"text-center\">\n <Radio\n tabIndex={0}\n style={{\n marginInlineEnd: 0,\n }}\n checked={row.getIsSelected()}\n disabled={!row.getCanSelect()}\n onChange={row.getToggleSelectedHandler()}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e: any) => {\n e.preventDefault()\n if (!row.getCanSelect()) return\n if (e.key === \"Enter\" || e.key === \" \") {\n row.getToggleSelectedHandler()(e.target.checked)\n }\n\n if (e.key === \"Tab\" && e.shiftKey) {\n e.preventDefault()\n const prevRadio = e.currentTarget\n .closest(\"tr\")\n ?.previousElementSibling?.querySelector(\n 'input[type=\"radio\"]',\n ) as HTMLInputElement | null\n if (prevRadio) {\n prevRadio.focus()\n }\n } else if (e.key === \"Tab\") {\n e.preventDefault()\n const nextRadio = e.currentTarget\n .closest(\"tr\")\n ?.nextElementSibling?.querySelector(\n 'input[type=\"radio\"]',\n ) as HTMLInputElement | null\n if (nextRadio) {\n nextRadio.focus()\n } else {\n // note Hardcoded focus to the next element after table\n const nextElement =\n document.getElementById(\"table-next-button\")\n if (nextElement) nextElement.focus()\n }\n }\n }}\n aria-label={`Select row ${row.index + 1}`}\n />\n </div>\n )\n },\n size: 44,\n minSize: 40,\n maxSize: 60,\n })\n\n const expandableColumn = columnHelper.display({\n id: \"expandable\",\n enablePinning: false,\n enableHiding: false,\n header: \"\",\n size: 20,\n cell: ({ row }) =>\n row.getCanExpand() ? (\n <button\n className=\"ml-8\"\n {...{\n onClick: row.getToggleExpandedHandler(),\n style: { cursor: \"pointer\" },\n }}\n >\n {row.getIsExpanded() ? \"👇\" : \"👉\"}\n </button>\n ) : (\n \"🔵\"\n ),\n })\n const indexColumn = columnHelper.display({\n id: \"index\",\n enablePinning: true,\n enableHiding: false,\n enableResizing: false,\n header: \"\",\n size: 52,\n minSize: 46,\n maxSize: 70,\n cell: ({ table, row }) => {\n // note count only leaf/data rows so group header rows don't consume index numbers\n const dataRows = table\n .getRowModel()\n .rows.filter((r) => !r.getIsGrouped())\n const { pageIndex, pageSize } = table.getState().pagination\n const rowIndex = dataRows.findIndex((r) => r.id === row.id)\n const visualIndex = pageIndex * pageSize + rowIndex + 1\n return <IndexColumn border>{visualIndex}</IndexColumn>\n },\n })\n\n const getFilterColumn = (\n threeDot: (value: T) => any,\n type?: ComponentType,\n ) => {\n return threeDot\n ? columnHelper.display({\n id: \"filter\",\n enableResizing: false,\n size: 96,\n minSize: 88,\n maxSize: 124,\n header: \"\",\n\n cell: (info) => (\n <a\n onClick={(event) => event.stopPropagation()}\n className=\"flex justify-center items-center\"\n >\n <EDropdown\n menu={{ items: threeDot(info.row.original) }}\n trigger={[\"click\"]}\n placement=\"bottomRight\"\n width={204}\n >\n <Tag\n color={\"volcano-inverse\"}\n className={`${\n type === \"VIEW\" ? \"cursor-not-allowed\" : \"cursor-pointer\"\n }`}\n >\n Actions\n </Tag>\n </EDropdown>\n </a>\n ),\n })\n : undefined\n }\n\n const [rowSelectionState, setRowSelectionState] = useState<RowSelectionState>(\n {},\n )\n\n const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([])\n\n return {\n rowSelectionState,\n setRowSelectionState,\n columnHelper,\n rowSelectionColumn,\n getFilterColumn,\n expandableColumn,\n selectedRowKeys,\n setSelectedRowKeys,\n indexColumn,\n }\n}\n","import React, { useEffect, useState } from \"react\"\nimport { DrawerForm, DrawerFormProps } from \"@ant-design/pro-components\"\nimport { Button, Col, Flex, Row, Tooltip, Grid } from \"antd\"\nimport { IconFilter } from \"@tabler/icons-react\"\n\nimport { EText } from \"../../Typography\"\n\n// ShadcnFilterButton inline implementation\nexport function ShadcnFilterButton({ ...rest }) {\n return (\n <Tooltip title=\"Filter\">\n <Button \n {...rest} \n style={{ \n display: \"flex\", \n alignItems: \"center\", \n justifyContent: \"center\",\n ...rest?.style\n }} \n size=\"middle\"\n >\n <IconFilter size={14} />\n </Button>\n </Tooltip>\n )\n}\n\n// ProDrawerForm decoupled implementation\ninterface ProDrawerFormProps extends DrawerFormProps {}\n\nexport const ProDrawerForm: React.FC<ProDrawerFormProps> = ({\n children,\n drawerProps,\n submitter,\n ...rest\n}) => {\n const { useBreakpoint } = Grid\n const screens = useBreakpoint()\n const [drawerWidth, setDrawerWidth] = useState(\"55%\")\n\n useEffect(() => {\n if (screens.md) {\n setDrawerWidth(\"55%\")\n } else {\n setDrawerWidth(\"75%\")\n }\n }, [screens])\n\n return (\n <DrawerForm\n key={drawerWidth}\n autoFocusFirstInput\n preserve={false}\n drawerProps={{\n zIndex: 1006,\n destroyOnClose: true,\n ...drawerProps,\n }}\n submitter={\n submitter && {\n searchConfig: {\n submitText: \"Save\",\n resetText: \"Cancel\",\n },\n ...submitter,\n }\n }\n width={drawerWidth}\n {...rest}\n >\n {children}\n </DrawerForm>\n )\n}\n\n// FilterRow\nexport const FilterRow: React.FC<{\n children: React.ReactNode\n}> = ({ children }) => {\n return <Row gutter={[16, 16]}>{children}</Row>\n}\n\n// FilterCol\nexport const FilterCol: React.FC<{\n children: React.ReactNode\n}> = ({ children }) => {\n return (\n <Col lg={8} md={12} sm={24} xs={24}>\n {children}\n </Col>\n )\n}\n\n// FilterProDrawerForm\ninterface FilterProDrawerFormProps extends DrawerFormProps {\n onReset?: () => void\n initialValues: Record<string, unknown>\n}\n\nexport const FilterProDrawerForm: React.FC<FilterProDrawerFormProps> = ({\n children,\n form,\n onReset,\n initialValues,\n ...rest\n}) => {\n return (\n <ProDrawerForm\n initialValues={initialValues}\n title={\n <Flex justify=\"space-between\" align=\"center\">\n <EText>Apply Filter</EText>\n <Button\n onClick={() => {\n const fields = form?.getFieldsValue()\n form?.setFieldsValue({\n ...Object.keys(fields || {}).reduce<Record<string, unknown>>(\n (acc, key) => {\n acc[key as any] = undefined\n return acc\n },\n {},\n ),\n })\n onReset?.()\n }}\n type=\"default\"\n >\n Reset\n </Button>\n </Flex>\n }\n form={form}\n omitNil={false}\n trigger={<ShadcnFilterButton />}\n autoFocusFirstInput\n {...rest}\n drawerProps={{\n ...rest.drawerProps,\n zIndex: 1999,\n }}\n width=\"70%\"\n >\n {children}\n </ProDrawerForm>\n )\n}\n","import { useCallback, useMemo } from \"react\"\nimport { useSearchParams } from \"react-router-dom\"\nimport {\n FILTER_PREFIX,\n SEARCH_KEY,\n UrlFilterValue,\n filtersToUrlParams,\n parseUrlToFilters,\n} from \"./filter-url-utils\"\n\ninterface UseTableUrlSyncOptions {\n enabled: boolean\n}\n\ninterface UseTableUrlSyncReturn {\n params: Record<string, unknown>\n initialFilters: Record<string, UrlFilterValue>\n initialSearchParams: Record<string, unknown>\n initialGlobalSearch: string | undefined\n syncFiltersToUrl: (filters: Record<string, UrlFilterValue>) => void\n syncGlobalSearchToUrl: (search: string | undefined) => void\n clearUrlFilters: () => void\n}\n\nexport function useTableUrlSync({\n enabled,\n}: UseTableUrlSyncOptions): UseTableUrlSyncReturn {\n const [searchParams, setSearchParams] = useSearchParams()\n const params = Object.fromEntries(searchParams.entries())\n\n const initialState = useMemo(() => {\n if (!enabled)\n return { filters: {}, searchParams: {}, globalSearch: undefined }\n\n const filters = parseUrlToFilters(searchParams)\n const globalSearch = searchParams.get(SEARCH_KEY) || undefined\n\n const formValues: Record<string, unknown> = {}\n for (const [key, filter] of Object.entries(filters)) {\n formValues[key] = filter.value\n }\n\n return {\n filters,\n searchParams: formValues,\n globalSearch,\n params,\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const syncFiltersToUrl = useCallback(\n (filters: Record<string, UrlFilterValue>) => {\n if (!enabled) return\n setSearchParams(\n (prev) => {\n const next = new URLSearchParams()\n\n prev.forEach((value, key) => {\n if (!key.startsWith(FILTER_PREFIX) && key !== SEARCH_KEY) {\n next.set(key, value)\n }\n })\n\n const currentSearch = prev.get(SEARCH_KEY)\n if (currentSearch) next.set(SEARCH_KEY, currentSearch)\n\n const filterParams = filtersToUrlParams(filters)\n for (const [key, value] of Object.entries(filterParams)) {\n next.set(key, value)\n }\n\n return next\n },\n { replace: true },\n )\n },\n [enabled, setSearchParams],\n )\n\n const syncGlobalSearchToUrl = useCallback(\n (search: string | undefined) => {\n if (!enabled) return\n setSearchParams(\n (prev) => {\n const next = new URLSearchParams(prev)\n if (search) {\n next.set(SEARCH_KEY, search)\n } else {\n next.delete(SEARCH_KEY)\n }\n return next\n },\n { replace: true },\n )\n },\n [enabled, setSearchParams],\n )\n\n const clearUrlFilters = useCallback(() => {\n if (!enabled) return\n setSearchParams(\n (prev) => {\n const next = new URLSearchParams()\n prev.forEach((value, key) => {\n if (!key.startsWith(FILTER_PREFIX) && key !== SEARCH_KEY) {\n next.set(key, value)\n }\n })\n return next\n },\n { replace: true },\n )\n }, [enabled, setSearchParams])\n\n return {\n initialFilters: initialState.filters,\n initialSearchParams: initialState.searchParams,\n initialGlobalSearch: initialState.globalSearch,\n syncFiltersToUrl,\n syncGlobalSearchToUrl,\n clearUrlFilters,\n params,\n }\n}\n","export const FILTER_PREFIX = \"f.\"\nexport const SEARCH_KEY = \"search\"\n\nexport const ARRAY_OPERATORS = new Set([\"in\", \"notIn\", \"between\"])\n\nexport interface UrlFilterValue {\n operator: string\n value: unknown\n}\n\nexport interface NavigationSearchParams {\n filters?: Record<string, UrlFilterValue>\n search?: string\n query?: Record<string, string>\n}\n\nexport function parseUrlToFilters(\n searchParams: URLSearchParams,\n): Record<string, UrlFilterValue> {\n const filters: Record<string, UrlFilterValue> = {}\n searchParams.forEach((value, key) => {\n if (!key.startsWith(FILTER_PREFIX)) return\n const withoutPrefix = key.slice(FILTER_PREFIX.length)\n const lastDotIndex = withoutPrefix.lastIndexOf(\".\")\n if (lastDotIndex === -1) return\n\n const fieldName = withoutPrefix.slice(0, lastDotIndex)\n const operator = withoutPrefix.slice(lastDotIndex + 1)\n\n const parsedValue = ARRAY_OPERATORS.has(operator) ? value.split(\",\") : value\n\n filters[fieldName] = { operator, value: parsedValue }\n })\n return filters\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function filtersToUrlParams(\n filters: Record<string, UrlFilterValue>,\n): Record<string, string> {\n const params: Record<string, string> = {}\n\n for (const [fieldName, rawFilter] of Object.entries(filters)) {\n if (rawFilter === undefined || rawFilter === null) continue\n\n const filter =\n typeof rawFilter === \"object\" &&\n rawFilter !== null &&\n \"value\" in rawFilter\n ? rawFilter\n : {\n operator: \"eq\",\n value: Array.isArray(rawFilter) ? rawFilter : [rawFilter],\n }\n\n const { value, operator } = filter\n\n if (value === undefined || value === null) continue\n if (typeof value === \"string\" && value.trim() === \"\") continue\n if (Array.isArray(value) && value.length === 0) continue\n\n const key = `${FILTER_PREFIX}${fieldName}.${operator}`\n const paramValue = Array.isArray(value) ? value.join(\",\") : String(value)\n\n params[key] = paramValue\n }\n\n return params\n}\n\nexport function buildSearchString(\n navSearchParams: NavigationSearchParams,\n): string {\n const urlParams = new URLSearchParams()\n\n if (navSearchParams.filters) {\n const filterParams = filtersToUrlParams(navSearchParams.filters)\n for (const [key, value] of Object.entries(filterParams)) {\n urlParams.set(key, value)\n }\n }\n\n if (navSearchParams.search) {\n urlParams.set(SEARCH_KEY, navSearchParams.search)\n }\n if (navSearchParams.query) {\n for (const [key, value] of Object.entries(navSearchParams.query)) {\n urlParams.set(key, value)\n }\n }\n\n return urlParams.toString()\n}\n","import { createStyles } from \"antd-style\"\nimport { useAppTheme } from \"~/theme\"\n\nexport const useTableStyles = () => {\n const token = useAppTheme()\n return createStyles((_) => ({\n body: {\n \".ant-form-item\": {\n marginBottom: \"0px !important\",\n },\n },\n dropDown: {\n \".ant-dropdown-menu\": {\n padding: 0,\n borderRadius: \"none\",\n \"&:hover\": {\n backgroundColor: \"white !important\",\n },\n },\n \".ant-dropdown-menu-item\": {\n padding: \"8px 12px\",\n \"&:hover\": {\n backgroundColor: \"white !important\",\n },\n },\n },\n tableHead: {\n backgroundColor: token.neutral10,\n color: token.neutral9,\n textAlign: \"left\",\n fontWeight: 600,\n margin: 0,\n maxWidth: \"50%\",\n },\n }))()\n}\n"],"mappings":"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","names":["useSafeState","dayjs","forwardRef","useEffect","useImperativeHandle","useMemo","useRef","useState","jsx","jsx","Flex","ProForm","forwardRef","Fragment","memo","useCallback","useEffect","useMemo","useRef","useState","jsx","Checkbox","Flex","Input","InputNumber","Popover","Select","Tooltip","forwardRef","memo","useCallback","useEffect","useMemo","useState","jsx","jsxs","jsx","createStyles","jsx","useStyles","createStyles","jsx","useCallback","Flex","Popover","jsx","jsxs","useCallback","format","Flex","Popover","useCallback","useState","jsx","ProFormDateRangePicker","DndContext","arrayMove","SortableContext","useSortable","CSS","Link","dayjs","_","ProFormDigit","jsx","ProFormDigit","Flex","useState","jsx","jsxs","isArray","_","Flex","useState","_","useEffect","useState","Button","Flex","Tooltip","jsx","jsxs","Tooltip","Button","useState","useEffect","Flex","Fragment","jsx","jsxs","useState","useMemo","useEffect","Input","_","dayjs","ProFormDateRangePicker","Checkbox","value","Link","Popover","Flex","Tooltip","DndContext","arrayMove","SortableContext","useCallback","useSortable","CSS","Select","InputNumber","forwardRef","memo","Fragment","jsx","jsxs","useMemo","useRef","useCallback","useEffect","Flex","_","memo","useState","forwardRef","ProForm","useCallback","useMemo","useMemo","useCallback","isArray","Fragment","jsx","jsxs","dayjs","forwardRef","useState","useSafeState","useRef","useMemo","useEffect","pagination","useImperativeHandle","createStyles","createStyles","_"]}