@lax-wp/design-system 0.14.36 → 0.14.38
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.
- package/dist/components/data-display/infinite-table/CellContextMenuPortal.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/CellContextMenuPortal.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/CellContextMenuPortal.d.ts +16 -1
- package/dist/components/data-display/infinite-table/CellContextMenuPortal.es.js +176 -124
- package/dist/components/data-display/infinite-table/CellContextMenuPortal.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/body/cell/DataCell.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/body/cell/DataCell.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/body/cell/DataCell.es.js +125 -127
- package/dist/components/data-display/infinite-table/body/cell/DataCell.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/copy-text.cjs.js +2 -0
- package/dist/components/data-display/infinite-table/copy-text.cjs.js.map +1 -0
- package/dist/components/data-display/infinite-table/copy-text.d.ts +13 -0
- package/dist/components/data-display/infinite-table/copy-text.es.js +56 -0
- package/dist/components/data-display/infinite-table/copy-text.es.js.map +1 -0
- package/dist/components/data-display/infinite-table/index.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/index.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/index.es.js +260 -255
- package/dist/components/data-display/infinite-table/index.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/types.d.ts +5 -3
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../../../src/components/data-display/infinite-table/index.tsx"],"sourcesContent":["import { useCheckbox } from \"../../../hooks/useCheckbox\";\nimport { useTableConfig } from \"../../../providers/design-system-provider/hooks\";\nimport {\n canEditTableView,\n mergeViewColumnsWithTableColumns,\n} from \"../../../utils/table\";\nimport Button from \"../../button/Button\";\nimport { FloatingBar } from \"../../floating-bar/FloatingBar\";\nimport { NoDataFound, NoDataFoundWidgets } from \"../empty-state\";\nimport { Typography } from \"../typography/Typography\";\nimport {\n DndContext,\n DragOverlay,\n type DragEndEvent,\n type DragStartEvent,\n type DropAnimation,\n MouseSensor,\n TouchSensor,\n closestCorners,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\nimport React, {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { AutoSizer as _AutoSizer } from \"react-virtualized-auto-sizer\";\nimport { createPortal } from \"react-dom\";\nimport type { Row as ReactTableRow } from \"react-table\";\nimport { useResizeColumns, useTable } from \"react-table\";\n\nimport { Body } from \"./body\";\nimport { validateCellValue } from \"./validateCell\";\nimport { Row } from \"./body/rows/row\";\nimport { TableContext } from \"./context\";\nimport { CellContextMenuPortal } from \"./CellContextMenuPortal\";\nimport { CurrencyDropdownPortal } from \"./CurrencyDropdownPortal\";\nimport { Head } from \"./head\";\nimport { PendingEditsFloatingBar } from \"./PendingEditsFloatingBar\";\nimport type {\n ICellContextMenuState,\n ICurrencyDropdownConfig,\n IColumn,\n IMasterDataModalConfig,\n ITableProps,\n ITableView,\n PendingEditsMap,\n IPendingEdit,\n} from \"./types\";\nimport { Add2Icon } from \"../../icon\";\nimport {\n TOOLBAR_FIRST_BREAKPOINT,\n TOOLBAR_SECOND_BREAKPOINT,\n DEFAULT_PAGE_SIZE,\n DEFAULT_COLUMN_MIN_WIDTH,\n DEFAULT_COLUMN_WIDTH,\n DEFAULT_COLUMN_MAX_WIDTH,\n DND_ACTIVATION_DISTANCE,\n DROP_ANIMATION_EASING,\n DROP_ANIMATION_DURATION,\n SCROLL_TO_CELL_COLUMN_WIDTH_FALLBACK,\n SCROLL_TO_CELL_LEFT_OFFSET,\n ROW_ADDITIONAL_ACTIONS_DEFAULT_WIDTH,\n ROW_OPTIONS_COLUMN_WIDTH,\n OS_VIEWPORT_SELECTOR,\n DATA_ROW_ID_ATTR,\n DATA_COLUMN_KEY_ATTR,\n} from \"./constants\";\nimport { getRowSlotHeight, useRowHeight } from \"./useRowHeight\";\n\nconst AutoSizer = _AutoSizer as unknown as React.ComponentType<{\n renderProp: (size: { width: number; height: number }) => React.ReactNode;\n style?: React.CSSProperties;\n}>;\n\nconst CREATE_COLUMN_LABEL = \"Create Column\";\n\nconst getEmptyButtonId = (label: string, index: number): string => {\n const slug = label\n .toLowerCase()\n .trim()\n .replace(/\\s+/g, \"-\")\n .replace(/[^a-z0-9-_]/g, \"\");\n return `button-admin-${slug || index}`;\n};\n\nexport const InfiniteTable = React.memo(\n ({\n tableKey,\n searchConfig = {\n search: \"\",\n handleSearch: () => null,\n allowAStarSearch: false,\n },\n filterConfig = {\n columnFilters: [],\n onFilter: () => null,\n onRemoveFilter: () => null,\n onClearFilter: () => null,\n onResetFilter: () => Promise.resolve({}),\n asyncRowOptionsFilter: () => Promise.resolve({}),\n },\n sortConfig = {\n onSort: () => null,\n columnSort: { field: \"\", order: \"\" },\n onRemoveSort: () => null,\n },\n headerConfig = {\n showExportButton: null,\n showFilters: true,\n showSorts: true,\n showSearch: true,\n showTableView: true,\n showTableViewAsModal: false,\n content: null,\n postContent: null,\n preContent: null,\n isLoading: false,\n showDivider: false,\n },\n hoverConfig = null,\n columns,\n modelName,\n enableMasterDataEnumSuggestions = false,\n agreementId,\n enumSuggestionsExtraParams,\n enumSuggestionsData,\n data = [],\n onRowClick,\n showHeader,\n showSubHeader = true,\n tableActions,\n rowOptions,\n hideRowOptionWidth,\n checkboxUtilities,\n isLoading = false,\n onScroll,\n onScrolling,\n isColumnConfigurable,\n onAddColumnClick,\n emptyMessage,\n noDataWidget,\n buttons,\n onEditColumnClick,\n onDeleteColumnClick,\n onRowTooltipClick,\n tooltiptext,\n cascadingTableConfig,\n originalsOnly,\n disableOptionsForRowIndex,\n tableHeightClass = \"h-[calc(100vh-220px)]\",\n getFullRowDataOnClick,\n selectedRowId = null,\n onRowEdit,\n onBulkRowEdit,\n inlineEditColumns,\n isResizable = true,\n paginationConfig,\n dndSortableUtils,\n multipleContexts,\n withSortable,\n withDraggable,\n enableRootDrag,\n pageSize = DEFAULT_PAGE_SIZE,\n onCascadingRowExpand,\n totalItems,\n showRecordCount = false,\n getInnerRowData,\n maxLevel,\n expandedRows = {},\n setExpandedRows,\n showNewItem,\n rawData,\n dragConfig,\n isOverlayLoading,\n style = {},\n floatingBarConfig,\n rowWrapper,\n rowLinkConfig,\n isCellClickDisabled,\n setHeaderOnParent,\n optimizeTable = false,\n multiSelectConfig,\n cellContextMenuConfig,\n headerContextOptions,\n showHeaderContextOptions,\n setShowHeaderContextOptions,\n showDataTypeIcon = false,\n rowAdditionalActions,\n rowAdditionalActionsWidth,\n setVisibleHeaders,\n cellEditing = null,\n cellEditingValue = null,\n allowInlineEdit = false,\n onFieldOperationFlow,\n fieldOperationLoading = null,\n onTableActionsReady,\n onPendingEditsChange,\n onCancelPendingEdits,\n }: ITableProps) => {\n const tableConfig = useTableConfig();\n\n // Row slot height tracks the `h-row` viewport clamp so the paginated\n // container sizes to the rows the virtualized body actually renders.\n const rowSlotHeight = getRowSlotHeight(useRowHeight());\n\n const isSearch = Boolean(searchConfig?.search);\n\n const isFilters = filterConfig?.columnFilters?.length > 0;\n const isAnyFilters = isSearch || isFilters;\n\n const isCheckbox = Boolean(checkboxUtilities);\n\n const defaultTableView =\n tableConfig?.getTableView?.(tableKey as string) ?? null;\n const [selectedTableView, setSelectedTableView] =\n useState<ITableView | null>(defaultTableView || null);\n const isReadOnlyView = !canEditTableView(\n selectedTableView,\n tableConfig?.getUserId?.()\n );\n const [showFilters, setShowFilters] = useState(false);\n const [showSorts, setShowSorts] = useState(false);\n const [newFilterColumn, setNewFilterColumn] = useState<unknown>(null);\n const [tableHeaders, setTableHeaders] = useState<IColumn[]>(columns);\n const isEmpty = (data.length === 0 || !tableHeaders.length) && !isLoading;\n const [showHeaderOptions, setShowHeaderOptions] = useState<string | null>(\n null\n );\n const [showDataFilterModal, setShowDataFilterModal] =\n useState<boolean>(false);\n const [dataFilterColumn, setDataFilterColumn] = useState<unknown>(null);\n const [isAllChecked, setIsAllChecked] = useState(false);\n const [isShowSortArrowAsc, setIsShowSortArrowAsc] = useState<string | null>(\n null\n );\n const [isShowSortArrowDesc, setIsShowSortArrowDesc] = useState<\n string | null\n >(null);\n const [sortableListByContext, setSortableListByContext] = useState<\n Record<string, unknown>\n >({});\n const [activeItem, setActiveItem] = useState<ReactTableRow<object> | null>(\n null\n );\n const [dndLoading, setDndLoading] = useState<boolean>(false);\n const [headerDivWidth, setHeaderDivWidth] = useState(0);\n const headerDivRef = useRef<HTMLDivElement>(null);\n const tableContainerRef = useRef<HTMLDivElement>(null);\n const [tableContainerSize, setTableContainerSize] = useState({\n width: 0,\n height: 0,\n });\n const [activeInlineEdit, setActiveInlineEdit] = useState<{\n rowId: string;\n columnKey: string;\n } | null>(null);\n const [masterDataModalConfig, setMasterDataModalConfig] =\n useState<IMasterDataModalConfig | null>(null);\n const [selectedMasterData, setSelectedMasterData] = useState<{\n value: unknown;\n reference: unknown;\n } | null>(null);\n const [currencyDropdownConfig, setCurrencyDropdownConfig] =\n useState<ICurrencyDropdownConfig | null>(null);\n const [cellContextMenu, setCellContextMenu] =\n useState<ICellContextMenuState | null>(null);\n const [selectedCurrenciesMap, setSelectedCurrenciesMap] = useState<\n Record<string, string>\n >({});\n const hasAppliedInitialFilters = useRef(false);\n const userClearedFiltersRef = useRef(false);\n\n const selectedTableViewRef = useRef(selectedTableView);\n selectedTableViewRef.current = selectedTableView;\n const tableConfigRef = useRef(tableConfig);\n tableConfigRef.current = tableConfig;\n const columnsRef = useRef(columns);\n columnsRef.current = columns;\n const filterConfigRef = useRef(filterConfig);\n filterConfigRef.current = filterConfig;\n const headerGroupsRef = useRef<unknown[] | null>(null);\n const resolveTableViewRef = useRef<() => ITableView>(\n () => ({}) as ITableView\n );\n const computeListRef = useRef<() => unknown>(() => ({}));\n\n const [pendingEdits, setPendingEdits] = useState<PendingEditsMap>({});\n\n const addPendingEdit = useCallback(\n (rowId: string, columnKey: string, edit: IPendingEdit) => {\n setPendingEdits((prev) => {\n const existingEdit = prev[rowId]?.[columnKey];\n let resolvedValidationError: string | null | undefined =\n edit.validationError;\n if (resolvedValidationError === undefined) {\n const column = tableHeaders.find((col) => col.key === columnKey);\n if (column) {\n const result = validateCellValue(\n edit.value,\n column as { type?: string; is_required?: boolean }\n );\n resolvedValidationError = !result.isValid\n ? result.error || \"Invalid\"\n : null;\n } else {\n resolvedValidationError = existingEdit?.validationError ?? null;\n }\n }\n return {\n ...prev,\n [rowId]: {\n ...(prev[rowId] || {}),\n [columnKey]: {\n ...edit,\n validationError: resolvedValidationError ?? null,\n },\n },\n };\n });\n },\n [tableHeaders]\n );\n\n const hasPendingEdits = useCallback(() => {\n return Object.values(pendingEdits).some(\n (rowEdits) => Object.keys(rowEdits).length > 0\n );\n }, [pendingEdits]);\n\n useEffect(() => {\n if (onTableActionsReady)\n onTableActionsReady({\n addPendingEdit: addPendingEdit as (\n rowId: string,\n columnKey: string,\n edit: { value: unknown; originalValue?: unknown; meta?: unknown }\n ) => void,\n hasPendingEdits,\n });\n }, [onTableActionsReady, addPendingEdit, hasPendingEdits]);\n\n const removePendingEdit = useCallback(\n (rowId: string, columnKey: string) => {\n setPendingEdits((prev) => {\n const newEdits = { ...prev };\n if (newEdits[rowId]) {\n const { [columnKey]: _removed, ...rest } = newEdits[rowId];\n void _removed;\n if (Object.keys(rest).length === 0) delete newEdits[rowId];\n else newEdits[rowId] = rest;\n }\n return newEdits;\n });\n },\n []\n );\n\n const getPendingEdit = useCallback(\n (rowId: string, columnKey: string): IPendingEdit | undefined =>\n pendingEdits[rowId]?.[columnKey],\n [pendingEdits]\n );\n\n const hasPendingEdit = useCallback(\n (rowId: string, columnKey: string): boolean =>\n Boolean(pendingEdits[rowId]?.[columnKey]),\n [pendingEdits]\n );\n\n const clearAllPendingEdits = useCallback(() => {\n if (fieldOperationLoading) return;\n if (onCancelPendingEdits && Object.keys(pendingEdits).length > 0)\n onCancelPendingEdits(pendingEdits);\n setPendingEdits({});\n setSelectedCurrenciesMap({});\n setActiveInlineEdit(null);\n }, [fieldOperationLoading, onCancelPendingEdits, pendingEdits]);\n\n const scrollToCell = useCallback(\n (rowId: string, columnKey: string, rowIndex: number) => {\n setTimeout(() => {\n tableConfig?.dispatchEvent?.(\"SCROLL_TO_TABLE_ROW\", { rowIndex });\n const colIndex = tableHeaders.findIndex(\n (col) => col.key === columnKey\n );\n setTimeout(() => {\n const cellElement = document.querySelector(\n `[${DATA_ROW_ID_ATTR}=\"${rowId}\"] [${DATA_COLUMN_KEY_ATTR}=\"${columnKey}\"]`\n );\n if (cellElement) {\n cellElement.scrollIntoView({\n behavior: \"smooth\",\n block: \"center\",\n inline: \"center\",\n });\n } else if (colIndex > 0) {\n const scrollContainer =\n document.querySelector(OS_VIEWPORT_SELECTOR);\n if (scrollContainer) {\n let scrollLeft = 0;\n for (let i = 0; i < colIndex; i++) {\n const col = tableHeaders[i];\n if (!col?.sticky)\n scrollLeft +=\n col?.width || SCROLL_TO_CELL_COLUMN_WIDTH_FALLBACK;\n }\n scrollLeft = Math.max(\n 0,\n scrollLeft - SCROLL_TO_CELL_LEFT_OFFSET\n );\n scrollContainer.scrollTo({\n left: scrollLeft,\n behavior: \"smooth\",\n });\n }\n }\n setActiveInlineEdit({ rowId, columnKey });\n }, 350);\n }, 100);\n },\n [tableHeaders, tableConfig]\n );\n\n const validateAllPendingEdits = useCallback(\n (\n editsToValidate: PendingEditsMap\n ): {\n hasErrors: boolean;\n updatedEdits: PendingEditsMap;\n firstError: { rowId: string; columnKey: string } | null;\n errorTypes: Set<string>;\n } => {\n let hasErrors = false;\n let firstError: { rowId: string; columnKey: string } | null = null;\n const updatedEdits: PendingEditsMap = {};\n const errorTypes = new Set<string>();\n\n Object.entries(editsToValidate).forEach(([rowId, rowEdits]) => {\n updatedEdits[rowId] = {};\n Object.entries(rowEdits).forEach(([columnKey, edit]) => {\n const column = tableHeaders.find((col) => col.key === columnKey);\n const result = validateCellValue(\n edit.value,\n column as { type?: string; is_required?: boolean }\n );\n if (!result.isValid) {\n hasErrors = true;\n if (result.error) errorTypes.add(result.error);\n if (!firstError) firstError = { rowId, columnKey };\n updatedEdits[rowId][columnKey] = {\n ...edit,\n validationError: result.error,\n };\n } else {\n updatedEdits[rowId][columnKey] = {\n ...edit,\n validationError: null,\n };\n }\n });\n });\n\n return { hasErrors, updatedEdits, firstError, errorTypes };\n },\n [tableHeaders]\n );\n\n const getValidationToastMessage = useCallback((errorTypes: Set<string>) => {\n const hasRequired = errorTypes.has(\"Field required\");\n const hasFormat = errorTypes.size > (hasRequired ? 1 : 0);\n if (hasRequired && hasFormat)\n return \"Missing required field(s) and invalid format detected. Please review highlighted field(s).\";\n if (hasRequired)\n return \"Missing required field(s). Please review highlighted field(s).\";\n return \"Invalid field value(s). Please review highlighted field(s).\";\n }, []);\n\n const saveAllPendingEdits = useCallback(() => {\n const { hasErrors, updatedEdits, firstError, errorTypes } =\n validateAllPendingEdits(pendingEdits);\n if (hasErrors) {\n setPendingEdits(updatedEdits);\n tableConfig?.showNotification?.(\n \"error\",\n getValidationToastMessage(errorTypes)\n );\n if (firstError) {\n const rowIndex = data.findIndex(\n (row: Record<string, unknown>) => row.id === firstError!.rowId\n );\n scrollToCell(firstError!.rowId, firstError!.columnKey, rowIndex);\n }\n return;\n }\n\n const editedRows: Array<Record<string, unknown>> = [];\n Object.entries(pendingEdits).forEach(([rowId, rowEdits]) => {\n const originalRow = data.find(\n (row: Record<string, unknown>) => row.id === rowId\n );\n if (originalRow) {\n const updatedRow = { ...originalRow };\n const editedFields: Record<\n string,\n { value: unknown; meta?: unknown }\n > = {};\n Object.entries(rowEdits).forEach(([columnKey, edit]) => {\n updatedRow[columnKey] = edit.value;\n editedFields[columnKey] = { value: edit.value, meta: edit.meta };\n });\n editedRows.push({ ...updatedRow, __editedFields: editedFields });\n }\n });\n\n if (editedRows.length > 0) {\n if (onBulkRowEdit) onBulkRowEdit(editedRows);\n else if (onRowEdit)\n onRowEdit(null, null, null, null, null, {\n isBulk: true,\n rows: editedRows,\n });\n }\n\n setPendingEdits({});\n setSelectedCurrenciesMap({});\n setActiveInlineEdit(null);\n }, [\n pendingEdits,\n data,\n onRowEdit,\n onBulkRowEdit,\n validateAllPendingEdits,\n getValidationToastMessage,\n scrollToCell,\n tableConfig,\n ]);\n\n const clearRowPendingEdits = useCallback(\n (rowId: string) => {\n if (fieldOperationLoading) return;\n const rowEdits = pendingEdits[rowId];\n if (rowEdits && onCancelPendingEdits)\n onCancelPendingEdits({ [rowId]: rowEdits });\n setPendingEdits((prev) => {\n const n = { ...prev };\n delete n[rowId];\n return n;\n });\n setSelectedCurrenciesMap((prev) => {\n const n = { ...prev };\n Object.keys(n).forEach((k) => {\n if (k.startsWith(`${rowId}-`)) delete n[k];\n });\n return n;\n });\n setActiveInlineEdit(null);\n },\n [fieldOperationLoading, onCancelPendingEdits, pendingEdits]\n );\n\n const saveRowPendingEdits = useCallback(\n (rowId: string) => {\n const rowEdits = pendingEdits[rowId];\n if (!rowEdits || Object.keys(rowEdits).length === 0) return;\n\n const { hasErrors, updatedEdits, firstError, errorTypes } =\n validateAllPendingEdits({ [rowId]: rowEdits });\n if (hasErrors) {\n setPendingEdits((prev) => ({\n ...prev,\n [rowId]: updatedEdits[rowId],\n }));\n tableConfig?.showNotification?.(\n \"error\",\n getValidationToastMessage(errorTypes)\n );\n if (firstError) {\n const rowIndex = data.findIndex(\n (row: Record<string, unknown>) => row.id === firstError!.rowId\n );\n scrollToCell(firstError!.rowId, firstError!.columnKey, rowIndex);\n }\n return;\n }\n\n const originalRow = data.find(\n (row: Record<string, unknown>) => row.id === rowId\n );\n if (!originalRow) return;\n const updatedRow = { ...originalRow };\n const editedFields: Record<string, { value: unknown; meta?: unknown }> =\n {};\n Object.entries(rowEdits).forEach(([columnKey, edit]) => {\n updatedRow[columnKey] = edit.value;\n editedFields[columnKey] = { value: edit.value, meta: edit.meta };\n });\n\n const editedRowData = { ...updatedRow, __editedFields: editedFields };\n\n if (onBulkRowEdit) onBulkRowEdit([editedRowData]);\n else if (onRowEdit)\n onRowEdit(null, null, null, null, null, {\n isBulk: true,\n rows: [editedRowData],\n });\n\n setPendingEdits((prev) => {\n const n = { ...prev };\n delete n[rowId];\n return n;\n });\n setSelectedCurrenciesMap((prev) => {\n const n = { ...prev };\n Object.keys(n).forEach((k) => {\n if (k.startsWith(`${rowId}-`)) delete n[k];\n });\n return n;\n });\n setActiveInlineEdit(null);\n },\n [\n pendingEdits,\n data,\n onRowEdit,\n onBulkRowEdit,\n validateAllPendingEdits,\n getValidationToastMessage,\n scrollToCell,\n tableConfig,\n ]\n );\n\n const pendingEditsCount = useMemo(() => {\n return Object.values(pendingEdits).reduce(\n (total, rowEdits) => total + Object.keys(rowEdits).length,\n 0\n );\n }, [pendingEdits]);\n\n useEffect(() => {\n onPendingEditsChange?.(pendingEditsCount > 0, pendingEditsCount);\n }, [pendingEditsCount, onPendingEditsChange]);\n\n const pendingEditsList = useMemo(() => {\n const list: Array<{\n rowId: string;\n columnKey: string;\n fieldName: string;\n value: unknown;\n originalValue: unknown;\n meta?: IPendingEdit[\"meta\"];\n originalMeta?: IPendingEdit[\"originalMeta\"];\n rowIndex: number;\n }> = [];\n Object.entries(pendingEdits).forEach(([rowId, rowEdits]) => {\n const rowIndex = data.findIndex(\n (row: Record<string, unknown>) => row.id === rowId\n );\n Object.entries(rowEdits).forEach(([columnKey, edit]) => {\n const column = tableHeaders.find((col) => col.key === columnKey);\n list.push({\n rowId,\n columnKey,\n fieldName: column?.Header || column?.display_name || columnKey,\n value: edit.value,\n originalValue: edit.originalValue,\n meta: edit.meta,\n originalMeta: edit.originalMeta,\n rowIndex,\n });\n });\n });\n return list;\n }, [pendingEdits, tableHeaders, data]);\n\n const rowsWithPendingEdits = useMemo(() => {\n const rowsMap = new Map<\n string,\n { rowId: string; rowIndex: number; editCount: number }\n >();\n Object.entries(pendingEdits).forEach(([rowId, rowEdits]) => {\n const rowIndex = data.findIndex(\n (row: Record<string, unknown>) => row.id === rowId\n );\n rowsMap.set(rowId, {\n rowId,\n rowIndex,\n editCount: Object.keys(rowEdits).length,\n });\n });\n return Array.from(rowsMap.values()).sort(\n (a, b) => a.rowIndex - b.rowIndex\n );\n }, [pendingEdits, data]);\n\n const openMasterDataModal = useCallback(\n (config: IMasterDataModalConfig) => setMasterDataModalConfig(config),\n []\n );\n const closeMasterDataModal = useCallback(\n () => setMasterDataModalConfig(null),\n []\n );\n\n const handleMasterDataSelected = useCallback(\n (value: unknown, row?: unknown) => {\n setSelectedMasterData({ value, reference: row });\n if (masterDataModalConfig?.onSelected)\n masterDataModalConfig.onSelected(value, row);\n closeMasterDataModal();\n },\n [masterDataModalConfig, closeMasterDataModal]\n );\n\n const clearSelectedMasterData = useCallback(\n () => setSelectedMasterData(null),\n []\n );\n\n const openCurrencyDropdown = useCallback(\n (config: ICurrencyDropdownConfig) => setCurrencyDropdownConfig(config),\n []\n );\n const closeCurrencyDropdown = useCallback(\n () => setCurrencyDropdownConfig(null),\n []\n );\n\n const openCellContextMenu = useCallback(\n (state: ICellContextMenuState) => setCellContextMenu(state),\n []\n );\n const closeCellContextMenu = useCallback(() => setCellContextMenu(null), []);\n\n const setCurrencyForCell = useCallback(\n (cellKey: string, currency: string) => {\n setSelectedCurrenciesMap((prev) => ({ ...prev, [cellKey]: currency }));\n },\n []\n );\n\n const getCurrencyForCell = useCallback(\n (cellKey: string): string | undefined => selectedCurrenciesMap[cellKey],\n [selectedCurrenciesMap]\n );\n\n const fallbackHeight = useMemo(() => {\n const pxMatch = tableHeightClass.match(/h-\\[(\\d+px)\\]/);\n if (pxMatch) return pxMatch[1];\n const calcMatch = tableHeightClass.match(/h-\\[(calc\\(.+\\))\\]/);\n if (calcMatch)\n return calcMatch[1].replace(/([+-])/g, \" $1 \").replace(/\\s+/g, \" \");\n return undefined;\n }, [tableHeightClass]);\n\n const emptySwitchProps = {\n isEmpty,\n isFilters: isAnyFilters,\n isColumnConfigurable,\n handleOnClick: onAddColumnClick,\n emptyMessage,\n buttons,\n noDataWidget,\n };\n const translatedCreateColumnLabel =\n tableConfig?.t?.(CREATE_COLUMN_LABEL) ?? CREATE_COLUMN_LABEL;\n const defaultEmptyText = isAnyFilters\n ? \"No Results Found\"\n : emptyMessage || \"No Data Found\";\n const resolvedEmptyText =\n typeof defaultEmptyText === \"string\"\n ? (tableConfig?.t?.(defaultEmptyText) ?? defaultEmptyText)\n : defaultEmptyText;\n\n const loaderData = { __isLoading: true };\n const cellLoaders = new Array(1).fill(loaderData);\n const tableLoaders = new Array(pageSize).fill(loaderData);\n\n const visibleColumns = useMemo(\n () => tableHeaders.filter((header) => Boolean(header?.visible)),\n [tableHeaders]\n );\n\n const table = useTable(\n {\n columns: optimizeTable ? visibleColumns : tableHeaders,\n data: [\n ...data,\n ...(isLoading ? (data?.length ? cellLoaders : tableLoaders) : []),\n ],\n defaultColumn: {\n minWidth: DEFAULT_COLUMN_MIN_WIDTH,\n width: DEFAULT_COLUMN_WIDTH,\n maxWidth: DEFAULT_COLUMN_MAX_WIDTH,\n },\n },\n useResizeColumns\n );\n\n const { getTableProps, getTableBodyProps, headerGroups, prepareRow, rows } =\n table;\n headerGroupsRef.current = headerGroups;\n\n const headerKeys = JSON.stringify(\n headerGroups[0]?.headers?.map(\n (header) => (header as unknown as Record<string, unknown>)?.Header\n )\n );\n useEffect(() => {\n if (setVisibleHeaders) {\n const groups = headerGroupsRef.current as Array<{\n headers?: Array<Record<string, unknown>>;\n }> | null;\n setVisibleHeaders?.(\n groups?.[0]?.headers?.map((header) => header?.Header as string) ?? []\n );\n }\n }, [headerKeys, setVisibleHeaders]);\n\n const { checkboxConfig } = useCheckbox({\n rows: rows as never,\n checkedIds: checkboxUtilities?.checkedIds as string[],\n isCheckAllDisabled: checkboxUtilities?.isCheckAllDisabled,\n selectionDisabledRowIds: checkboxUtilities?.selectionDisabledRowIds,\n rawData,\n onAllChecked: setIsAllChecked,\n setCheckedIds: checkboxUtilities?.setCheckedIds as (\n ids: string[]\n ) => void,\n checkboxMetadata: checkboxUtilities?.checkboxMetadata as {\n checkedIds: string[];\n tooltip: string;\n highlight: string;\n },\n });\n\n const sensors = useSensors(\n useSensor(MouseSensor, {\n activationConstraint: { distance: DND_ACTIVATION_DISTANCE },\n }),\n useSensor(TouchSensor, {\n activationConstraint: { distance: DND_ACTIVATION_DISTANCE },\n })\n );\n\n const dropAnimation: DropAnimation = {\n easing: DROP_ANIMATION_EASING,\n duration: DROP_ANIMATION_DURATION,\n };\n\n function computeList() {\n if (!multipleContexts?.length || !withSortable) return rows;\n return multipleContexts.reduce(\n (acc: Record<string, unknown>, contextKey: string) => {\n acc[contextKey] = rows.filter(\n (e) => (e.original as Record<string, unknown>)?.type === contextKey\n );\n return acc;\n },\n {}\n );\n }\n computeListRef.current = computeList;\n\n const handleDragStart = (event: DragStartEvent) => {\n const { active } = event;\n setActiveItem(\n rows.find(\n (item) =>\n (item.original as Record<string, unknown>)?.id === active?.id\n ) ?? null\n );\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over) return;\n if (dndSortableUtils?.checkDndDragEnd) {\n dndSortableUtils.checkDndDragEnd(\n active,\n over,\n sortableListByContext,\n (newState: Record<string, unknown>) => {\n setSortableListByContext(newState as Record<string, unknown>);\n setDndLoading(true);\n dndSortableUtils.onDragSuccess?.({\n draggedId: active.id as string,\n droppedId: over.id as string,\n draggedType: (active.data.current as Record<string, unknown>)\n ?.type,\n droppedType: (over.data.current as Record<string, unknown>)?.type,\n updatedList: newState,\n cb: () => setDndLoading(false),\n });\n }\n );\n }\n setActiveItem(null);\n };\n\n const handleDragCancel = () => setActiveItem(null);\n\n const toggleHeaderOption = (key: string) => {\n if (!sortConfig?.onSort && !filterConfig?.onFilter) return;\n if (showHeaderOptions === key) setShowHeaderOptions(null);\n else setShowHeaderOptions(key);\n };\n\n const toggleDataFilterModal = (col: unknown) => {\n setDataFilterColumn(col);\n setShowDataFilterModal(!showDataFilterModal);\n setShowHeaderOptions(null);\n };\n\n const handleRemoveSort = useCallback(() => {\n if (sortConfig?.onRemoveSort) sortConfig.onRemoveSort();\n else if (sortConfig?.onSort) sortConfig.onSort(\"\", \"\");\n }, [sortConfig]);\n\n const toggleShowFilters = useCallback((col: unknown = null) => {\n setNewFilterColumn(col);\n setShowFilters((prev) => (col ? true : !prev));\n }, []);\n const toggleShowSorts = useCallback(\n () => setShowSorts((prev) => !prev),\n []\n );\n\n const lastNonStickyColumnIndex = () => {\n const reverseHeaders = (\n headerGroups[0]?.headers as unknown as Array<Record<string, unknown>>\n )?.filter((header) => header?.visible !== false);\n for (let i = 0; i < reverseHeaders.length; i++) {\n if (reverseHeaders[i].sticky) return i - 1;\n }\n return reverseHeaders.length - 1;\n };\n\n const getSumOfNextVisibleColumnWidth = useCallback(\n (currentIndex: number) => {\n let sum = 0;\n for (let i = currentIndex + 1; i < visibleColumns.length; i++) {\n if (visibleColumns[i].visible !== false)\n sum += visibleColumns[i].width ?? 0;\n }\n if (rowAdditionalActions)\n sum +=\n rowAdditionalActionsWidth || ROW_ADDITIONAL_ACTIONS_DEFAULT_WIDTH;\n if (rowOptions)\n sum += hideRowOptionWidth ? 0 : ROW_OPTIONS_COLUMN_WIDTH;\n return sum;\n },\n [\n visibleColumns,\n rowAdditionalActionsWidth,\n hideRowOptionWidth,\n rowAdditionalActions,\n rowOptions,\n ]\n );\n\n const resolveTableView = (): ITableView => {\n const userId = tableConfig?.getUserId?.();\n return {\n ...(selectedTableView || {}),\n name: selectedTableView?.name || \"Untitled View\",\n created_by: selectedTableView?.created_by || userId,\n filters: selectedTableView?.filters || filterConfig?.columnFilters,\n id: selectedTableView?.id || \"untitled-view\",\n table_key: selectedTableView?.table_key || tableKey,\n columns:\n selectedTableView?.columns ||\n columns?.map((column, index) => ({\n name: column.Header,\n width: column.width,\n visible: column.visible,\n sticky: column.sticky,\n order: index + 1,\n display_name: column.Header,\n sequence: index + 1,\n Header: column.Header,\n })),\n };\n };\n resolveTableViewRef.current = resolveTableView;\n\n const handleUpdateColumnWidth = (columnName: string, width: number) => {\n const updatedTableView = resolveTableView();\n setSelectedTableView({\n ...updatedTableView,\n columns: updatedTableView?.columns?.map((column) =>\n column.name === columnName ? { ...column, width } : column\n ),\n unsaved: isReadOnlyView ? updatedTableView?.unsaved : true,\n });\n };\n\n useEffect(() => {\n if (filterConfig?.columnFilters?.length > 0) setShowFilters(true);\n if (isReadOnlyView) return;\n const currentView = selectedTableViewRef.current;\n if (\n JSON.stringify(currentView?.filters || []) !==\n JSON.stringify(filterConfig?.columnFilters || [])\n ) {\n const hasViewFilters = (currentView?.filters?.length ?? 0) > 0;\n const hasConfigFilters = filterConfig?.columnFilters?.length > 0;\n // Skip sync only during the initial load window where the view already has filters\n // but they haven't propagated to columnFilters yet. If the user explicitly cleared\n // filters from ActiveFilters (X button or Clear), we must propagate the empty state.\n const isClearingFilters =\n hasViewFilters && !hasConfigFilters && !userClearedFiltersRef.current;\n if (!isClearingFilters) {\n const updatedTableView = resolveTableViewRef.current();\n setSelectedTableView({\n ...updatedTableView,\n filters: JSON.parse(\n JSON.stringify(filterConfig?.columnFilters || [])\n ),\n unsaved: true,\n });\n }\n userClearedFiltersRef.current = false;\n }\n }, [filterConfig?.columnFilters, isReadOnlyView]);\n\n const handleActiveRemoveFilter = useCallback(\n (key: string) => {\n userClearedFiltersRef.current = true;\n filterConfig?.onRemoveFilter?.(key);\n },\n [filterConfig?.onRemoveFilter]\n );\n\n const handleActiveClearFilter = useCallback(() => {\n userClearedFiltersRef.current = true;\n filterConfig?.onClearFilter?.();\n }, [filterConfig?.onClearFilter]);\n\n useEffect(() => {\n if (sortConfig?.columnSort?.field) {\n setShowSorts(true);\n if (sortConfig.columnSort.order === \"asc\") {\n setIsShowSortArrowAsc(sortConfig.columnSort.field);\n setIsShowSortArrowDesc(null);\n } else if (sortConfig.columnSort.order === \"desc\") {\n setIsShowSortArrowDesc(sortConfig.columnSort.field);\n setIsShowSortArrowAsc(null);\n }\n } else {\n setIsShowSortArrowAsc(null);\n setIsShowSortArrowDesc(null);\n }\n }, [sortConfig?.columnSort?.field, sortConfig?.columnSort?.order]);\n\n useEffect(() => {\n setTableHeaders(\n mergeViewColumnsWithTableColumns(\n selectedTableViewRef.current?.columns || [],\n columns\n )\n );\n }, [columns]);\n\n useEffect(() => {\n if (selectedTableView?.unsaved)\n tableConfigRef.current?.persistTableView?.(selectedTableView);\n }, [selectedTableView]);\n\n useEffect(() => {\n setSortableListByContext(\n computeListRef.current() as Record<string, unknown>\n );\n }, [rows.length]);\n\n useEffect(() => {\n setSelectedTableView(defaultTableView || null);\n if (defaultTableView?.columns) {\n setTableHeaders(\n mergeViewColumnsWithTableColumns(\n defaultTableView?.columns || [],\n columnsRef.current\n )\n );\n }\n if (\n defaultTableView?.filters &&\n defaultTableView.filters.length > 0 &&\n !hasAppliedInitialFilters.current\n ) {\n requestAnimationFrame(() => {\n filterConfigRef.current?.onFilter?.(defaultTableView.filters);\n });\n hasAppliedInitialFilters.current = true;\n } else if (\n defaultTableView?.filters &&\n hasAppliedInitialFilters.current\n ) {\n const filtersAreDifferent =\n JSON.stringify(defaultTableView.filters) !==\n JSON.stringify(filterConfigRef.current?.columnFilters);\n if (filtersAreDifferent)\n filterConfigRef.current?.onFilter?.(defaultTableView.filters);\n }\n }, [defaultTableView]);\n\n useEffect(() => {\n if (headerDivRef.current) {\n const resizeObserver = new ResizeObserver((entries) =>\n setHeaderDivWidth(entries[0].contentRect.width)\n );\n resizeObserver.observe(headerDivRef.current);\n return () => resizeObserver.disconnect();\n }\n }, []);\n\n useEffect(() => {\n if (!tableContainerRef.current) return;\n const resizeObserver = new ResizeObserver((entries) => {\n const { width, height } = entries[0].contentRect;\n setTableContainerSize({ width, height });\n });\n resizeObserver.observe(tableContainerRef.current);\n return () => resizeObserver.disconnect();\n }, []);\n\n const tableHeader = (\n <Head\n isResizable={isResizable}\n headerGroups={headerGroups as never}\n isCheckbox={isCheckbox}\n checkboxConfig={checkboxConfig}\n isAllChecked={isAllChecked}\n showHeaderOptions={showHeaderOptions ?? \"\"}\n setShowHeaderOptions={setShowHeaderOptions}\n isShowSortArrowAsc={isShowSortArrowAsc}\n isShowSortArrowDesc={isShowSortArrowDesc}\n onSort={\n sortConfig?.onSort as\n | ((field: string, order?: string) => void)\n | undefined\n }\n onFilter={filterConfig?.onFilter}\n toggleHeaderOption={toggleHeaderOption}\n setIsShowSortArrowAsc={setIsShowSortArrowAsc}\n setIsShowSortArrowDesc={setIsShowSortArrowDesc}\n toggleDataFilterModal={toggleShowFilters}\n rowOptions={(Array.isArray(rowOptions) ? rowOptions : []) as unknown[]}\n isColumnConfigurable={isColumnConfigurable ?? false}\n onAddColumnClick={\n onAddColumnClick as (column: {\n id: string;\n key: string;\n [k: string]: unknown;\n }) => void\n }\n onEditColumnClick={\n onEditColumnClick as (column: {\n id: string;\n key: string;\n [k: string]: unknown;\n }) => void\n }\n onDeleteColumnClick={\n onDeleteColumnClick as (column: {\n id: string;\n key: string;\n [k: string]: unknown;\n }) => void\n }\n tableActions={tableActions || null}\n isLoading={isLoading}\n rowAdditionalActions={\n (rowAdditionalActions ?? null) as (() => React.ReactNode) | null\n }\n showPendingEditsColumn={pendingEditsCount > 0}\n />\n );\n\n const tableView = (\n <>\n {dndLoading || isOverlayLoading ? (\n <div className=\"absolute left-0 top-0 w-full h-full z-40 flex items-center justify-center bg-neutral-100 dark:bg-black-700\" />\n ) : null}\n <div\n {...getTableProps()}\n className=\"w-full text-sm text-left text-neutral-500 dark:text-neutral-200 h-full bg-white dark:bg-black-800\"\n >\n {isEmpty ? (\n <div className=\"z-10\">\n {tableHeader}\n <div className=\"absolute w-full\">\n {tableConfig?.renderEmpty ? (\n tableConfig.renderEmpty(emptySwitchProps)\n ) : (\n <div className=\"flex flex-col items-center justify-center w-full h-[12rem] text-neutral-900 dark:text-neutral-200 mt-8\">\n {noDataWidget && !isAnyFilters ? (\n <NoDataFoundWidgets widgetType=\"TABLE\" />\n ) : (\n <NoDataFound text={resolvedEmptyText} />\n )}\n {isColumnConfigurable && !isAnyFilters ? (\n <div className=\"my-4\">\n <Button\n id=\"btn-table-shell-create-column\"\n status=\"primary\"\n appearance=\"ghost\"\n onClick={\n onAddColumnClick as\n | ((\n event: React.MouseEvent<HTMLButtonElement>\n ) => void)\n | undefined\n }\n >\n <Add2Icon className=\"text-white dark:text-white\" />{\" \"}\n {translatedCreateColumnLabel}\n </Button>\n </div>\n ) : null}\n {!isAnyFilters &&\n buttons?.map((button, index) => (\n <Button\n key={`${button.label}-${index}`}\n status=\"secondary\"\n id={getEmptyButtonId(button.label, index)}\n onClick={button.onClick}\n >\n {tableConfig?.t?.(button.label) ?? button.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n </div>\n ) : (\n <AutoSizer\n style={{ width: \"100%\", height: \"100%\" }}\n renderProp={({ width, height }) => {\n const effectiveWidth =\n width > 0 ? width : tableContainerSize.width;\n const effectiveHeight =\n height > 0 ? height : tableContainerSize.height;\n return effectiveWidth > 0 && effectiveHeight > 0 ? (\n <Body\n {...{\n getTableBodyProps:\n getTableBodyProps as unknown as () => Record<\n string,\n unknown\n >,\n rows: rows as never,\n prepareRow: prepareRow as never,\n isLoading,\n onScroll,\n onScrolling,\n columns,\n width: effectiveWidth,\n height: effectiveHeight,\n withSortable,\n allowAstarSearch: searchConfig?.allowAStarSearch || false,\n }}\n />\n ) : null;\n }}\n />\n )}\n </div>\n </>\n );\n\n const tableWrapper = forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n >((props, ref) => (\n <div className=\"h-full w-full\" {...props} ref={ref}>\n {tableHeader}\n <div className=\"relative w-full h-full\">{props?.children}</div>\n </div>\n ));\n\n const tableBodyWrapper = forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n >((props, ref) => (\n <div className=\"h-full w-full\" {...props} ref={ref}>\n <div className=\"relative w-full h-full\">{props?.children}</div>\n </div>\n ));\n\n const TableHeaderComponent = useMemo(() => {\n if (tableConfig?.renderTableHeader) {\n return tableConfig.renderTableHeader({\n tableKey,\n search: searchConfig?.search,\n handleSearch: searchConfig?.handleSearch,\n toggleShowFilters,\n toggleShowSorts,\n filterCounts: filterConfig?.columnFilters?.length,\n columns,\n columnFilters: filterConfig?.columnFilters,\n setSelectedTableView,\n selectedTableView,\n enableTableView: headerConfig?.showTableView,\n modelName: modelName as string,\n enableMasterDataEnumSuggestions,\n onRemoveFilter: filterConfig?.onRemoveFilter,\n onClearFilter: filterConfig?.onClearFilter,\n onFilter: filterConfig?.onFilter,\n data: enumSuggestionsData ?? data,\n tableHeaders,\n showTableViewAsModal: headerConfig?.showTableViewAsModal,\n additionalOptions: headerConfig?.additionalOptions,\n inlineActions: headerConfig?.inlineActions,\n showFilters: headerConfig?.showFilters,\n showSorts: headerConfig?.showSorts,\n showSearch: headerConfig?.showSearch,\n isLoading: Boolean(headerConfig?.isLoading),\n setTableHeaders,\n allowAStarSearch: Boolean(searchConfig?.allowAStarSearch),\n withContent: !!headerConfig?.content,\n setShowFilters,\n sort: sortConfig?.columnSort,\n onSort: sortConfig?.onSort,\n onRemoveSort: handleRemoveSort,\n showExportButton: headerConfig?.showExportButton,\n onExportClick: headerConfig?.onExportClick,\n agreementId,\n enumSuggestionsExtraParams,\n });\n }\n return null;\n }, [\n tableKey,\n searchConfig?.search,\n searchConfig?.handleSearch,\n toggleShowFilters,\n toggleShowSorts,\n filterConfig?.columnFilters,\n columns,\n setSelectedTableView,\n selectedTableView,\n headerConfig,\n modelName,\n filterConfig?.onRemoveFilter,\n filterConfig?.onClearFilter,\n filterConfig?.onFilter,\n data,\n enumSuggestionsData,\n tableHeaders,\n sortConfig?.columnSort,\n sortConfig?.onSort,\n handleRemoveSort,\n tableConfig,\n searchConfig?.allowAStarSearch,\n enableMasterDataEnumSuggestions,\n agreementId,\n enumSuggestionsExtraParams,\n ]);\n\n useEffect(() => {\n if (setHeaderOnParent) setHeaderOnParent(TableHeaderComponent);\n }, [TableHeaderComponent, setHeaderOnParent]);\n\n return (\n <TableContext.Provider\n value={{\n tableWrapper,\n tableBodyWrapper,\n lastNonStickyColumnIndex,\n search: searchConfig?.search,\n columnFilters: filterConfig?.columnFilters,\n onRowClick,\n onSort: sortConfig?.onSort,\n onFilter: filterConfig?.onFilter,\n toggleShowFilters,\n toggleShowSorts,\n onRemoveFilter: filterConfig?.onRemoveFilter,\n onClearFilter: filterConfig?.onClearFilter,\n rowOptions,\n checkboxConfig,\n onResetFilter: filterConfig?.onResetFilter,\n isColumnConfigurable,\n onAddColumnClick,\n onEditColumnClick,\n onDeleteColumnClick,\n onRowTooltipClick,\n tooltiptext,\n cascadingTableConfig,\n activeInlineEdit,\n setActiveInlineEdit,\n originalsOnly,\n disableOptionsForRowIndex,\n getFullRowDataOnClick,\n selectedRowId,\n getSumOfNextVisibleColumnWidth,\n onRowEdit,\n inlineEditColumns,\n tableActions,\n dndSortableUtils,\n withSortable,\n withDraggable,\n onCascadingRowExpand,\n getInnerRowData,\n tableHeaders,\n maxLevel,\n expandedRows,\n setExpandedRows,\n showNewItem,\n rawData,\n dragConfig,\n rowWrapper,\n rowLinkConfig,\n isCellClickDisabled,\n asyncRowOptionsFilter: filterConfig?.asyncRowOptionsFilter,\n handleUpdateColumnWidth,\n isTableViewReadOnly: isReadOnlyView,\n multiSelectConfig,\n cellContextMenuConfig,\n openCellContextMenu,\n closeCellContextMenu,\n headerContextOptions,\n showHeaderContextOptions,\n setShowHeaderContextOptions: setShowHeaderContextOptions as\n | ((value: string | null) => void)\n | undefined,\n headerDivWidth,\n showDataTypeIcon,\n rowAdditionalActions,\n hoverConfig,\n rowAdditionalActionsWidth,\n cellEditing,\n cellEditingValue,\n openMasterDataModal,\n closeMasterDataModal,\n selectedMasterData,\n clearSelectedMasterData,\n allowInlineEdit,\n openCurrencyDropdown,\n closeCurrencyDropdown,\n currencyDropdownConfig,\n selectedCurrenciesMap,\n setCurrencyForCell,\n getCurrencyForCell,\n pendingEdits,\n addPendingEdit,\n removePendingEdit,\n getPendingEdit,\n hasPendingEdit,\n clearAllPendingEdits,\n saveAllPendingEdits,\n clearRowPendingEdits,\n saveRowPendingEdits,\n pendingEditsCount,\n scrollToCell,\n onFieldOperationFlow,\n fieldOperationLoading,\n validateAllPendingEdits,\n }}\n >\n {showHeader ? (\n <div\n ref={headerDivRef}\n className={`mb-2 flex w-full min-w-0 gap-2 justify-end dark:bg-black-800 ${\n headerDivWidth < TOOLBAR_FIRST_BREAKPOINT\n ? \"flex-col items-stretch\"\n : \"flex-row flex-wrap items-center\"\n }`}\n >\n <div\n className={`flex items-center gap-x-2 gap-y-1 ${\n headerDivWidth < TOOLBAR_FIRST_BREAKPOINT\n ? \"w-full flex-wrap\"\n : \"\"\n } ${headerConfig?.content ? \"min-w-0 flex-1\" : \"shrink-0\"}`}\n >\n {headerConfig?.content ? (\n <div\n className={`min-w-0 ${headerDivWidth < TOOLBAR_FIRST_BREAKPOINT ? \"w-full\" : \"flex-1\"}`}\n >\n {headerConfig.content}\n </div>\n ) : null}\n {showRecordCount ? (\n <div className=\"flex items-center gap-1.5 shrink-0\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-neutral-500 dark:text-neutral-400 flex-shrink-0\"\n aria-hidden\n >\n <ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\" />\n <path d=\"M3 5v4c0 1.66 4.03 3 9 3s9-1.34 9-3V5\" />\n <path d=\"M3 9v4c0 1.66 4.03 3 9 3s9-1.34 9-3V9\" />\n <path d=\"M3 13v4c0 1.66 4.03 3 9 3s9-1.34 9-3v-4\" />\n </svg>\n <Typography\n size=\"small\"\n variant=\"semibold\"\n appearance=\"title\"\n >\n {(totalItems ?? data.length).toLocaleString()}\n </Typography>\n <Typography\n size=\"small\"\n variant=\"regular\"\n appearance=\"subtitle\"\n >\n total records\n </Typography>\n </div>\n ) : headerConfig?.preContent ? (\n <div className=\"flex min-w-0 shrink-0 justify-start items-center\">\n {headerConfig.preContent}\n </div>\n ) : null}\n </div>\n <div\n className={`flex min-w-0 items-center justify-end ${\n headerDivWidth < TOOLBAR_FIRST_BREAKPOINT\n ? \"w-full\"\n : headerConfig?.content\n ? \"shrink-0\"\n : \"flex-1\"\n } ${headerDivWidth < TOOLBAR_SECOND_BREAKPOINT ? \"flex-col\" : \"flex-row flex-wrap\"} ${\n headerConfig?.postContent ? \"gap-2\" : \"\"\n }`}\n >\n {showRecordCount && headerConfig?.preContent ? (\n <div className=\"flex w-full justify-start items-center\">\n {headerConfig.preContent}\n </div>\n ) : null}\n <div\n className={`flex justify-end items-center min-w-0 ${\n headerDivWidth < TOOLBAR_SECOND_BREAKPOINT\n ? \"w-full\"\n : headerDivWidth < TOOLBAR_FIRST_BREAKPOINT\n ? \"w-full\"\n : \"\"\n }`}\n >\n {TableHeaderComponent}\n </div>\n {headerConfig?.postContent ? (\n <div\n className={`flex justify-end items-center ${headerDivWidth < TOOLBAR_SECOND_BREAKPOINT ? \"w-full\" : \"\"}`}\n >\n {headerConfig.postContent}\n </div>\n ) : null}\n </div>\n </div>\n ) : null}\n {headerConfig?.showDivider ? (\n <div className=\"border-b pb-2 w-full dark:bg-black-800\" />\n ) : null}\n {showSubHeader && (showFilters || showSorts) ? (\n <div className=\"flex justify-between items-center pb-4 dark:bg-black-800\">\n <div className=\"flex gap-2 items-center\">\n {showSorts && tableConfig?.renderSortItem\n ? tableConfig.renderSortItem({\n sort: sortConfig?.columnSort,\n onRemoveSort: handleRemoveSort,\n onSort: sortConfig?.onSort,\n tableHeaders,\n data,\n disabled: isReadOnlyView,\n })\n : null}\n {showFilters &&\n showSorts &&\n sortConfig?.columnSort?.field !== \"\" ? (\n <div className=\"h-8 w-[1px] flex-shrink-0 bg-neutral-200\" />\n ) : null}\n {showFilters ? (\n <div className=\"flex gap-2 items-center\">\n {(isFilters || filterConfig?.onResetFilter) &&\n tableConfig?.renderActiveFilters &&\n tableConfig.renderActiveFilters({\n filters: filterConfig?.columnFilters,\n onRemoveFilter: handleActiveRemoveFilter,\n onClearFilter: handleActiveClearFilter,\n onResetFilter: filterConfig?.onResetFilter,\n onFilter: filterConfig?.onFilter,\n tableHeaders,\n columnFilters: filterConfig?.columnFilters,\n modelName,\n enableMasterDataEnumSuggestions,\n noSpacing: true,\n notionStyle: filterConfig?.notionStyle,\n context: filterConfig?.context,\n data: enumSuggestionsData ?? data,\n agreementId,\n enumSuggestionsExtraParams,\n disabled: isReadOnlyView,\n })}\n {tableConfig?.renderFilterButtons &&\n tableConfig.renderFilterButtons({\n onClearFilter: filterConfig?.onClearFilter,\n onClose: toggleDataFilterModal,\n modelName,\n enableMasterDataEnumSuggestions,\n defaultFilterColumn: newFilterColumn,\n resetDefaultFilterColumn: () => setNewFilterColumn(null),\n column: dataFilterColumn,\n onFilter: filterConfig?.onFilter,\n tableHeaders,\n columnFilters: filterConfig?.columnFilters,\n data: enumSuggestionsData ?? data,\n notionStyle: filterConfig?.notionStyle,\n context: filterConfig?.context,\n agreementId,\n enumSuggestionsExtraParams,\n disabled: isReadOnlyView,\n })}\n </div>\n ) : null}\n </div>\n </div>\n ) : null}\n {floatingBarConfig && Object.keys(floatingBarConfig).length ? (\n <FloatingBar {...floatingBarConfig} />\n ) : null}\n {!showHeader && showRecordCount ? (\n <div className=\"flex items-center gap-1.5 mb-2\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-neutral-500 dark:text-neutral-400 flex-shrink-0\"\n aria-hidden\n >\n <ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\" />\n <path d=\"M3 5v4c0 1.66 4.03 3 9 3s9-1.34 9-3V5\" />\n <path d=\"M3 9v4c0 1.66 4.03 3 9 3s9-1.34 9-3V9\" />\n <path d=\"M3 13v4c0 1.66 4.03 3 9 3s9-1.34 9-3v-4\" />\n </svg>\n <Typography size=\"small\" variant=\"semibold\" appearance=\"title\">\n {(totalItems ?? data.length).toLocaleString()}\n </Typography>\n <Typography size=\"small\" variant=\"regular\" appearance=\"subtitle\">\n total records\n </Typography>\n </div>\n ) : !showHeader && headerConfig?.preContent ? (\n <div className=\"flex items-center mb-2\">\n {headerConfig.preContent}\n </div>\n ) : null}\n <div\n ref={tableContainerRef}\n className={`w-full ${paginationConfig ? `h-auto` : tableHeightClass} rounded-lg relative border overflow-x-hidden`}\n style={{\n ...(paginationConfig\n ? {\n height:\n data?.length > 0\n ? `${(data?.length + 1) * rowSlotHeight + 4}px`\n : \"350px\",\n }\n : { height: fallbackHeight }),\n ...style,\n }}\n >\n {enableRootDrag ? (\n tableView\n ) : (\n <DndContext\n sensors={sensors}\n onDragEnd={handleDragEnd}\n onDragStart={handleDragStart}\n onDragCancel={handleDragCancel}\n collisionDetection={closestCorners}\n >\n {tableView}\n {activeItem\n ? createPortal(\n <DragOverlay\n adjustScale={true}\n dropAnimation={dropAnimation}\n >\n <table\n {...getTableProps()}\n className=\"w-full text-sm text-left text-neutral-500 dark:text-neutral-200 bg-white dark:bg-black-700 table-auto border-collapse\"\n >\n <tbody\n {...getTableBodyProps()}\n className=\"bg-transparent divide-y divide-neutral-200\"\n >\n {void prepareRow(activeItem)}\n <Row\n key={\n (activeItem.original as Record<string, unknown>)\n .id as string\n }\n row={activeItem as never}\n index={rows?.findIndex(\n (item) =>\n item.id ===\n (activeItem.original as Record<string, unknown>)\n .id\n )}\n />\n </tbody>\n </table>\n </DragOverlay>,\n document.getElementById(\"full-screen-container\") ||\n document.body\n )\n : null}\n </DndContext>\n )}\n </div>\n {paginationConfig && tableConfig?.renderPagination\n ? tableConfig.renderPagination(paginationConfig)\n : null}\n\n {tableConfig?.renderMasterDataModal &&\n tableConfig.renderMasterDataModal({\n isVisible: !!masterDataModalConfig,\n onSelected: handleMasterDataSelected,\n onClose: closeMasterDataModal,\n masterDataColumnName: masterDataModalConfig?.masterDataColumnName,\n masterDataFormula: masterDataModalConfig?.masterDataFormula,\n masterDataFilters: masterDataModalConfig?.masterDataFilters,\n masterDataName: masterDataModalConfig?.masterDataName,\n masterDataId: masterDataModalConfig?.masterDataName,\n showFilters: true,\n })}\n\n <CurrencyDropdownPortal\n config={currencyDropdownConfig}\n onClose={closeCurrencyDropdown}\n />\n\n <CellContextMenuPortal\n state={cellContextMenu}\n config={cellContextMenuConfig}\n onClose={closeCellContextMenu}\n />\n\n <PendingEditsFloatingBar\n pendingEditsCount={pendingEditsCount}\n pendingEditsList={pendingEditsList}\n rowsWithPendingEdits={rowsWithPendingEdits}\n fieldOperationLoading={fieldOperationLoading}\n onClearAll={clearAllPendingEdits}\n onSaveAll={saveAllPendingEdits}\n onScrollToCell={scrollToCell}\n />\n </TableContext.Provider>\n );\n }\n);\n"],"names":["AutoSizer","_AutoSizer","CREATE_COLUMN_LABEL","getEmptyButtonId","label","index","InfiniteTable","React","tableKey","searchConfig","filterConfig","sortConfig","headerConfig","hoverConfig","columns","modelName","enableMasterDataEnumSuggestions","agreementId","enumSuggestionsExtraParams","enumSuggestionsData","data","onRowClick","showHeader","showSubHeader","tableActions","rowOptions","hideRowOptionWidth","checkboxUtilities","isLoading","onScroll","onScrolling","isColumnConfigurable","onAddColumnClick","emptyMessage","noDataWidget","buttons","onEditColumnClick","onDeleteColumnClick","onRowTooltipClick","tooltiptext","cascadingTableConfig","originalsOnly","disableOptionsForRowIndex","tableHeightClass","getFullRowDataOnClick","selectedRowId","onRowEdit","onBulkRowEdit","inlineEditColumns","isResizable","paginationConfig","dndSortableUtils","multipleContexts","withSortable","withDraggable","enableRootDrag","pageSize","DEFAULT_PAGE_SIZE","onCascadingRowExpand","totalItems","showRecordCount","getInnerRowData","maxLevel","expandedRows","setExpandedRows","showNewItem","rawData","dragConfig","isOverlayLoading","style","floatingBarConfig","rowWrapper","rowLinkConfig","isCellClickDisabled","setHeaderOnParent","optimizeTable","multiSelectConfig","cellContextMenuConfig","headerContextOptions","showHeaderContextOptions","setShowHeaderContextOptions","showDataTypeIcon","rowAdditionalActions","rowAdditionalActionsWidth","setVisibleHeaders","cellEditing","cellEditingValue","allowInlineEdit","onFieldOperationFlow","fieldOperationLoading","onTableActionsReady","onPendingEditsChange","onCancelPendingEdits","tableConfig","useTableConfig","rowSlotHeight","getRowSlotHeight","useRowHeight","isSearch","isFilters","isAnyFilters","isCheckbox","defaultTableView","selectedTableView","setSelectedTableView","useState","isReadOnlyView","canEditTableView","showFilters","setShowFilters","showSorts","setShowSorts","newFilterColumn","setNewFilterColumn","tableHeaders","setTableHeaders","isEmpty","showHeaderOptions","setShowHeaderOptions","showDataFilterModal","setShowDataFilterModal","dataFilterColumn","setDataFilterColumn","isAllChecked","setIsAllChecked","isShowSortArrowAsc","setIsShowSortArrowAsc","isShowSortArrowDesc","setIsShowSortArrowDesc","sortableListByContext","setSortableListByContext","activeItem","setActiveItem","dndLoading","setDndLoading","headerDivWidth","setHeaderDivWidth","headerDivRef","useRef","tableContainerRef","tableContainerSize","setTableContainerSize","activeInlineEdit","setActiveInlineEdit","masterDataModalConfig","setMasterDataModalConfig","selectedMasterData","setSelectedMasterData","currencyDropdownConfig","setCurrencyDropdownConfig","cellContextMenu","setCellContextMenu","selectedCurrenciesMap","setSelectedCurrenciesMap","hasAppliedInitialFilters","userClearedFiltersRef","selectedTableViewRef","tableConfigRef","columnsRef","filterConfigRef","headerGroupsRef","resolveTableViewRef","computeListRef","pendingEdits","setPendingEdits","addPendingEdit","useCallback","rowId","columnKey","edit","prev","existingEdit","resolvedValidationError","column","col","result","validateCellValue","hasPendingEdits","rowEdits","useEffect","removePendingEdit","newEdits","_removed","rest","getPendingEdit","hasPendingEdit","clearAllPendingEdits","scrollToCell","rowIndex","colIndex","cellElement","DATA_ROW_ID_ATTR","DATA_COLUMN_KEY_ATTR","scrollContainer","OS_VIEWPORT_SELECTOR","scrollLeft","i","SCROLL_TO_CELL_COLUMN_WIDTH_FALLBACK","SCROLL_TO_CELL_LEFT_OFFSET","validateAllPendingEdits","editsToValidate","hasErrors","firstError","updatedEdits","errorTypes","getValidationToastMessage","hasRequired","hasFormat","saveAllPendingEdits","row","editedRows","originalRow","updatedRow","editedFields","clearRowPendingEdits","k","saveRowPendingEdits","editedRowData","n","pendingEditsCount","useMemo","total","pendingEditsList","list","rowsWithPendingEdits","rowsMap","a","b","openMasterDataModal","config","closeMasterDataModal","handleMasterDataSelected","value","clearSelectedMasterData","openCurrencyDropdown","closeCurrencyDropdown","openCellContextMenu","state","closeCellContextMenu","setCurrencyForCell","cellKey","currency","getCurrencyForCell","fallbackHeight","pxMatch","calcMatch","emptySwitchProps","translatedCreateColumnLabel","defaultEmptyText","resolvedEmptyText","loaderData","cellLoaders","tableLoaders","visibleColumns","header","table","useTable","DEFAULT_COLUMN_MIN_WIDTH","DEFAULT_COLUMN_WIDTH","DEFAULT_COLUMN_MAX_WIDTH","useResizeColumns","getTableProps","getTableBodyProps","headerGroups","prepareRow","rows","headerKeys","groups","checkboxConfig","useCheckbox","sensors","useSensors","useSensor","MouseSensor","DND_ACTIVATION_DISTANCE","TouchSensor","dropAnimation","DROP_ANIMATION_EASING","DROP_ANIMATION_DURATION","computeList","acc","contextKey","e","handleDragStart","event","active","item","handleDragEnd","over","newState","handleDragCancel","toggleHeaderOption","key","toggleDataFilterModal","handleRemoveSort","toggleShowFilters","toggleShowSorts","lastNonStickyColumnIndex","reverseHeaders","getSumOfNextVisibleColumnWidth","currentIndex","sum","ROW_ADDITIONAL_ACTIONS_DEFAULT_WIDTH","ROW_OPTIONS_COLUMN_WIDTH","resolveTableView","userId","handleUpdateColumnWidth","columnName","width","updatedTableView","currentView","hasViewFilters","hasConfigFilters","handleActiveRemoveFilter","handleActiveClearFilter","mergeViewColumnsWithTableColumns","resizeObserver","entries","height","tableHeader","jsx","Head","tableView","jsxs","Fragment","NoDataFoundWidgets","NoDataFound","Button","Add2Icon","button","effectiveWidth","effectiveHeight","Body","tableWrapper","forwardRef","props","ref","tableBodyWrapper","TableHeaderComponent","TableContext","TOOLBAR_FIRST_BREAKPOINT","Typography","TOOLBAR_SECOND_BREAKPOINT","FloatingBar","DndContext","closestCorners","createPortal","DragOverlay","Row","CurrencyDropdownPortal","CellContextMenuPortal","PendingEditsFloatingBar"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../../../src/components/data-display/infinite-table/index.tsx"],"sourcesContent":["import { useCheckbox } from \"../../../hooks/useCheckbox\";\nimport { useTableConfig } from \"../../../providers/design-system-provider/hooks\";\nimport {\n canEditTableView,\n mergeViewColumnsWithTableColumns,\n} from \"../../../utils/table\";\nimport Button from \"../../button/Button\";\nimport { FloatingBar } from \"../../floating-bar/FloatingBar\";\nimport { NoDataFound, NoDataFoundWidgets } from \"../empty-state\";\nimport { Typography } from \"../typography/Typography\";\nimport {\n DndContext,\n DragOverlay,\n type DragEndEvent,\n type DragStartEvent,\n type DropAnimation,\n MouseSensor,\n TouchSensor,\n closestCorners,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\nimport React, {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { AutoSizer as _AutoSizer } from \"react-virtualized-auto-sizer\";\nimport { createPortal } from \"react-dom\";\nimport type { Row as ReactTableRow } from \"react-table\";\nimport { useResizeColumns, useTable } from \"react-table\";\n\nimport { Body } from \"./body\";\nimport { validateCellValue } from \"./validateCell\";\nimport { Row } from \"./body/rows/row\";\nimport { TableContext } from \"./context\";\nimport { CellContextMenuPortal } from \"./CellContextMenuPortal\";\nimport { CurrencyDropdownPortal } from \"./CurrencyDropdownPortal\";\nimport { Head } from \"./head\";\nimport { PendingEditsFloatingBar } from \"./PendingEditsFloatingBar\";\nimport type {\n ICellContextMenuState,\n ICurrencyDropdownConfig,\n IColumn,\n IMasterDataModalConfig,\n ITableProps,\n ITableView,\n PendingEditsMap,\n IPendingEdit,\n} from \"./types\";\nimport { Add2Icon } from \"../../icon\";\nimport {\n TOOLBAR_FIRST_BREAKPOINT,\n TOOLBAR_SECOND_BREAKPOINT,\n DEFAULT_PAGE_SIZE,\n DEFAULT_COLUMN_MIN_WIDTH,\n DEFAULT_COLUMN_WIDTH,\n DEFAULT_COLUMN_MAX_WIDTH,\n DND_ACTIVATION_DISTANCE,\n DROP_ANIMATION_EASING,\n DROP_ANIMATION_DURATION,\n SCROLL_TO_CELL_COLUMN_WIDTH_FALLBACK,\n SCROLL_TO_CELL_LEFT_OFFSET,\n ROW_ADDITIONAL_ACTIONS_DEFAULT_WIDTH,\n ROW_OPTIONS_COLUMN_WIDTH,\n OS_VIEWPORT_SELECTOR,\n DATA_ROW_ID_ATTR,\n DATA_COLUMN_KEY_ATTR,\n} from \"./constants\";\nimport { getRowSlotHeight, useRowHeight } from \"./useRowHeight\";\n\nconst AutoSizer = _AutoSizer as unknown as React.ComponentType<{\n renderProp: (size: { width: number; height: number }) => React.ReactNode;\n style?: React.CSSProperties;\n}>;\n\nconst CREATE_COLUMN_LABEL = \"Create Column\";\n\nconst getEmptyButtonId = (label: string, index: number): string => {\n const slug = label\n .toLowerCase()\n .trim()\n .replace(/\\s+/g, \"-\")\n .replace(/[^a-z0-9-_]/g, \"\");\n return `button-admin-${slug || index}`;\n};\n\nexport const InfiniteTable = React.memo(\n ({\n tableKey,\n searchConfig = {\n search: \"\",\n handleSearch: () => null,\n allowAStarSearch: false,\n },\n filterConfig = {\n columnFilters: [],\n onFilter: () => null,\n onRemoveFilter: () => null,\n onClearFilter: () => null,\n onResetFilter: () => Promise.resolve({}),\n asyncRowOptionsFilter: () => Promise.resolve({}),\n },\n sortConfig = {\n onSort: () => null,\n columnSort: { field: \"\", order: \"\" },\n onRemoveSort: () => null,\n },\n headerConfig = {\n showExportButton: null,\n showFilters: true,\n showSorts: true,\n showSearch: true,\n showTableView: true,\n showTableViewAsModal: false,\n content: null,\n postContent: null,\n preContent: null,\n isLoading: false,\n showDivider: false,\n },\n hoverConfig = null,\n columns,\n modelName,\n enableMasterDataEnumSuggestions = false,\n agreementId,\n enumSuggestionsExtraParams,\n enumSuggestionsData,\n data = [],\n onRowClick,\n showHeader,\n showSubHeader = true,\n tableActions,\n rowOptions,\n hideRowOptionWidth,\n checkboxUtilities,\n isLoading = false,\n onScroll,\n onScrolling,\n isColumnConfigurable,\n onAddColumnClick,\n emptyMessage,\n noDataWidget,\n buttons,\n onEditColumnClick,\n onDeleteColumnClick,\n onRowTooltipClick,\n tooltiptext,\n cascadingTableConfig,\n originalsOnly,\n disableOptionsForRowIndex,\n tableHeightClass = \"h-[calc(100vh-220px)]\",\n getFullRowDataOnClick,\n selectedRowId = null,\n onRowEdit,\n onBulkRowEdit,\n inlineEditColumns,\n isResizable = true,\n paginationConfig,\n dndSortableUtils,\n multipleContexts,\n withSortable,\n withDraggable,\n enableRootDrag,\n pageSize = DEFAULT_PAGE_SIZE,\n onCascadingRowExpand,\n totalItems,\n showRecordCount = false,\n getInnerRowData,\n maxLevel,\n expandedRows = {},\n setExpandedRows,\n showNewItem,\n rawData,\n dragConfig,\n isOverlayLoading,\n style = {},\n floatingBarConfig,\n rowWrapper,\n rowLinkConfig,\n isCellClickDisabled,\n setHeaderOnParent,\n optimizeTable = false,\n multiSelectConfig,\n cellContextMenuConfig,\n headerContextOptions,\n showHeaderContextOptions,\n setShowHeaderContextOptions,\n showDataTypeIcon = false,\n rowAdditionalActions,\n rowAdditionalActionsWidth,\n setVisibleHeaders,\n cellEditing = null,\n cellEditingValue = null,\n allowInlineEdit = false,\n onFieldOperationFlow,\n fieldOperationLoading = null,\n onTableActionsReady,\n onPendingEditsChange,\n onCancelPendingEdits,\n }: ITableProps) => {\n const tableConfig = useTableConfig();\n\n // Row slot height tracks the `h-row` viewport clamp so the paginated\n // container sizes to the rows the virtualized body actually renders.\n const rowSlotHeight = getRowSlotHeight(useRowHeight());\n\n const isSearch = Boolean(searchConfig?.search);\n\n const isFilters = filterConfig?.columnFilters?.length > 0;\n const isAnyFilters = isSearch || isFilters;\n\n const isCheckbox = Boolean(checkboxUtilities);\n\n const defaultTableView =\n tableConfig?.getTableView?.(tableKey as string) ?? null;\n const [selectedTableView, setSelectedTableView] =\n useState<ITableView | null>(defaultTableView || null);\n const isReadOnlyView = !canEditTableView(\n selectedTableView,\n tableConfig?.getUserId?.()\n );\n const [showFilters, setShowFilters] = useState(false);\n const [showSorts, setShowSorts] = useState(false);\n const [newFilterColumn, setNewFilterColumn] = useState<unknown>(null);\n const [tableHeaders, setTableHeaders] = useState<IColumn[]>(columns);\n const isEmpty = (data.length === 0 || !tableHeaders.length) && !isLoading;\n const [showHeaderOptions, setShowHeaderOptions] = useState<string | null>(\n null\n );\n const [showDataFilterModal, setShowDataFilterModal] =\n useState<boolean>(false);\n const [dataFilterColumn, setDataFilterColumn] = useState<unknown>(null);\n const [isAllChecked, setIsAllChecked] = useState(false);\n const [isShowSortArrowAsc, setIsShowSortArrowAsc] = useState<string | null>(\n null\n );\n const [isShowSortArrowDesc, setIsShowSortArrowDesc] = useState<\n string | null\n >(null);\n const [sortableListByContext, setSortableListByContext] = useState<\n Record<string, unknown>\n >({});\n const [activeItem, setActiveItem] = useState<ReactTableRow<object> | null>(\n null\n );\n const [dndLoading, setDndLoading] = useState<boolean>(false);\n const [headerDivWidth, setHeaderDivWidth] = useState(0);\n const headerDivRef = useRef<HTMLDivElement>(null);\n const tableContainerRef = useRef<HTMLDivElement>(null);\n const [tableContainerSize, setTableContainerSize] = useState({\n width: 0,\n height: 0,\n });\n const [activeInlineEdit, setActiveInlineEdit] = useState<{\n rowId: string;\n columnKey: string;\n } | null>(null);\n const [masterDataModalConfig, setMasterDataModalConfig] =\n useState<IMasterDataModalConfig | null>(null);\n const [selectedMasterData, setSelectedMasterData] = useState<{\n value: unknown;\n reference: unknown;\n } | null>(null);\n const [currencyDropdownConfig, setCurrencyDropdownConfig] =\n useState<ICurrencyDropdownConfig | null>(null);\n const [cellContextMenu, setCellContextMenu] =\n useState<ICellContextMenuState | null>(null);\n const [selectedCurrenciesMap, setSelectedCurrenciesMap] = useState<\n Record<string, string>\n >({});\n const hasAppliedInitialFilters = useRef(false);\n const userClearedFiltersRef = useRef(false);\n\n const selectedTableViewRef = useRef(selectedTableView);\n selectedTableViewRef.current = selectedTableView;\n const tableConfigRef = useRef(tableConfig);\n tableConfigRef.current = tableConfig;\n const columnsRef = useRef(columns);\n columnsRef.current = columns;\n const filterConfigRef = useRef(filterConfig);\n filterConfigRef.current = filterConfig;\n const headerGroupsRef = useRef<unknown[] | null>(null);\n const resolveTableViewRef = useRef<() => ITableView>(\n () => ({}) as ITableView\n );\n const computeListRef = useRef<() => unknown>(() => ({}));\n\n const [pendingEdits, setPendingEdits] = useState<PendingEditsMap>({});\n\n const addPendingEdit = useCallback(\n (rowId: string, columnKey: string, edit: IPendingEdit) => {\n setPendingEdits((prev) => {\n const existingEdit = prev[rowId]?.[columnKey];\n let resolvedValidationError: string | null | undefined =\n edit.validationError;\n if (resolvedValidationError === undefined) {\n const column = tableHeaders.find((col) => col.key === columnKey);\n if (column) {\n const result = validateCellValue(\n edit.value,\n column as { type?: string; is_required?: boolean }\n );\n resolvedValidationError = !result.isValid\n ? result.error || \"Invalid\"\n : null;\n } else {\n resolvedValidationError = existingEdit?.validationError ?? null;\n }\n }\n return {\n ...prev,\n [rowId]: {\n ...(prev[rowId] || {}),\n [columnKey]: {\n ...edit,\n validationError: resolvedValidationError ?? null,\n },\n },\n };\n });\n },\n [tableHeaders]\n );\n\n const hasPendingEdits = useCallback(() => {\n return Object.values(pendingEdits).some(\n (rowEdits) => Object.keys(rowEdits).length > 0\n );\n }, [pendingEdits]);\n\n useEffect(() => {\n if (onTableActionsReady)\n onTableActionsReady({\n addPendingEdit: addPendingEdit as (\n rowId: string,\n columnKey: string,\n edit: { value: unknown; originalValue?: unknown; meta?: unknown }\n ) => void,\n hasPendingEdits,\n });\n }, [onTableActionsReady, addPendingEdit, hasPendingEdits]);\n\n const removePendingEdit = useCallback(\n (rowId: string, columnKey: string) => {\n setPendingEdits((prev) => {\n const newEdits = { ...prev };\n if (newEdits[rowId]) {\n const { [columnKey]: _removed, ...rest } = newEdits[rowId];\n void _removed;\n if (Object.keys(rest).length === 0) delete newEdits[rowId];\n else newEdits[rowId] = rest;\n }\n return newEdits;\n });\n },\n []\n );\n\n const getPendingEdit = useCallback(\n (rowId: string, columnKey: string): IPendingEdit | undefined =>\n pendingEdits[rowId]?.[columnKey],\n [pendingEdits]\n );\n\n const hasPendingEdit = useCallback(\n (rowId: string, columnKey: string): boolean =>\n Boolean(pendingEdits[rowId]?.[columnKey]),\n [pendingEdits]\n );\n\n const clearAllPendingEdits = useCallback(() => {\n if (fieldOperationLoading) return;\n if (onCancelPendingEdits && Object.keys(pendingEdits).length > 0)\n onCancelPendingEdits(pendingEdits);\n setPendingEdits({});\n setSelectedCurrenciesMap({});\n setActiveInlineEdit(null);\n }, [fieldOperationLoading, onCancelPendingEdits, pendingEdits]);\n\n const scrollToCell = useCallback(\n (rowId: string, columnKey: string, rowIndex: number) => {\n setTimeout(() => {\n tableConfig?.dispatchEvent?.(\"SCROLL_TO_TABLE_ROW\", { rowIndex });\n const colIndex = tableHeaders.findIndex(\n (col) => col.key === columnKey\n );\n setTimeout(() => {\n const cellElement = document.querySelector(\n `[${DATA_ROW_ID_ATTR}=\"${rowId}\"] [${DATA_COLUMN_KEY_ATTR}=\"${columnKey}\"]`\n );\n if (cellElement) {\n cellElement.scrollIntoView({\n behavior: \"smooth\",\n block: \"center\",\n inline: \"center\",\n });\n } else if (colIndex > 0) {\n const scrollContainer =\n document.querySelector(OS_VIEWPORT_SELECTOR);\n if (scrollContainer) {\n let scrollLeft = 0;\n for (let i = 0; i < colIndex; i++) {\n const col = tableHeaders[i];\n if (!col?.sticky)\n scrollLeft +=\n col?.width || SCROLL_TO_CELL_COLUMN_WIDTH_FALLBACK;\n }\n scrollLeft = Math.max(\n 0,\n scrollLeft - SCROLL_TO_CELL_LEFT_OFFSET\n );\n scrollContainer.scrollTo({\n left: scrollLeft,\n behavior: \"smooth\",\n });\n }\n }\n setActiveInlineEdit({ rowId, columnKey });\n }, 350);\n }, 100);\n },\n [tableHeaders, tableConfig]\n );\n\n const validateAllPendingEdits = useCallback(\n (\n editsToValidate: PendingEditsMap\n ): {\n hasErrors: boolean;\n updatedEdits: PendingEditsMap;\n firstError: { rowId: string; columnKey: string } | null;\n errorTypes: Set<string>;\n } => {\n let hasErrors = false;\n let firstError: { rowId: string; columnKey: string } | null = null;\n const updatedEdits: PendingEditsMap = {};\n const errorTypes = new Set<string>();\n\n Object.entries(editsToValidate).forEach(([rowId, rowEdits]) => {\n updatedEdits[rowId] = {};\n Object.entries(rowEdits).forEach(([columnKey, edit]) => {\n const column = tableHeaders.find((col) => col.key === columnKey);\n const result = validateCellValue(\n edit.value,\n column as { type?: string; is_required?: boolean }\n );\n if (!result.isValid) {\n hasErrors = true;\n if (result.error) errorTypes.add(result.error);\n if (!firstError) firstError = { rowId, columnKey };\n updatedEdits[rowId][columnKey] = {\n ...edit,\n validationError: result.error,\n };\n } else {\n updatedEdits[rowId][columnKey] = {\n ...edit,\n validationError: null,\n };\n }\n });\n });\n\n return { hasErrors, updatedEdits, firstError, errorTypes };\n },\n [tableHeaders]\n );\n\n const getValidationToastMessage = useCallback((errorTypes: Set<string>) => {\n const hasRequired = errorTypes.has(\"Field required\");\n const hasFormat = errorTypes.size > (hasRequired ? 1 : 0);\n if (hasRequired && hasFormat)\n return \"Missing required field(s) and invalid format detected. Please review highlighted field(s).\";\n if (hasRequired)\n return \"Missing required field(s). Please review highlighted field(s).\";\n return \"Invalid field value(s). Please review highlighted field(s).\";\n }, []);\n\n const saveAllPendingEdits = useCallback(() => {\n const { hasErrors, updatedEdits, firstError, errorTypes } =\n validateAllPendingEdits(pendingEdits);\n if (hasErrors) {\n setPendingEdits(updatedEdits);\n tableConfig?.showNotification?.(\n \"error\",\n getValidationToastMessage(errorTypes)\n );\n if (firstError) {\n const rowIndex = data.findIndex(\n (row: Record<string, unknown>) => row.id === firstError!.rowId\n );\n scrollToCell(firstError!.rowId, firstError!.columnKey, rowIndex);\n }\n return;\n }\n\n const editedRows: Array<Record<string, unknown>> = [];\n Object.entries(pendingEdits).forEach(([rowId, rowEdits]) => {\n const originalRow = data.find(\n (row: Record<string, unknown>) => row.id === rowId\n );\n if (originalRow) {\n const updatedRow = { ...originalRow };\n const editedFields: Record<\n string,\n { value: unknown; meta?: unknown }\n > = {};\n Object.entries(rowEdits).forEach(([columnKey, edit]) => {\n updatedRow[columnKey] = edit.value;\n editedFields[columnKey] = { value: edit.value, meta: edit.meta };\n });\n editedRows.push({ ...updatedRow, __editedFields: editedFields });\n }\n });\n\n if (editedRows.length > 0) {\n if (onBulkRowEdit) onBulkRowEdit(editedRows);\n else if (onRowEdit)\n onRowEdit(null, null, null, null, null, {\n isBulk: true,\n rows: editedRows,\n });\n }\n\n setPendingEdits({});\n setSelectedCurrenciesMap({});\n setActiveInlineEdit(null);\n }, [\n pendingEdits,\n data,\n onRowEdit,\n onBulkRowEdit,\n validateAllPendingEdits,\n getValidationToastMessage,\n scrollToCell,\n tableConfig,\n ]);\n\n const clearRowPendingEdits = useCallback(\n (rowId: string) => {\n if (fieldOperationLoading) return;\n const rowEdits = pendingEdits[rowId];\n if (rowEdits && onCancelPendingEdits)\n onCancelPendingEdits({ [rowId]: rowEdits });\n setPendingEdits((prev) => {\n const n = { ...prev };\n delete n[rowId];\n return n;\n });\n setSelectedCurrenciesMap((prev) => {\n const n = { ...prev };\n Object.keys(n).forEach((k) => {\n if (k.startsWith(`${rowId}-`)) delete n[k];\n });\n return n;\n });\n setActiveInlineEdit(null);\n },\n [fieldOperationLoading, onCancelPendingEdits, pendingEdits]\n );\n\n const saveRowPendingEdits = useCallback(\n (rowId: string) => {\n const rowEdits = pendingEdits[rowId];\n if (!rowEdits || Object.keys(rowEdits).length === 0) return;\n\n const { hasErrors, updatedEdits, firstError, errorTypes } =\n validateAllPendingEdits({ [rowId]: rowEdits });\n if (hasErrors) {\n setPendingEdits((prev) => ({\n ...prev,\n [rowId]: updatedEdits[rowId],\n }));\n tableConfig?.showNotification?.(\n \"error\",\n getValidationToastMessage(errorTypes)\n );\n if (firstError) {\n const rowIndex = data.findIndex(\n (row: Record<string, unknown>) => row.id === firstError!.rowId\n );\n scrollToCell(firstError!.rowId, firstError!.columnKey, rowIndex);\n }\n return;\n }\n\n const originalRow = data.find(\n (row: Record<string, unknown>) => row.id === rowId\n );\n if (!originalRow) return;\n const updatedRow = { ...originalRow };\n const editedFields: Record<string, { value: unknown; meta?: unknown }> =\n {};\n Object.entries(rowEdits).forEach(([columnKey, edit]) => {\n updatedRow[columnKey] = edit.value;\n editedFields[columnKey] = { value: edit.value, meta: edit.meta };\n });\n\n const editedRowData = { ...updatedRow, __editedFields: editedFields };\n\n if (onBulkRowEdit) onBulkRowEdit([editedRowData]);\n else if (onRowEdit)\n onRowEdit(null, null, null, null, null, {\n isBulk: true,\n rows: [editedRowData],\n });\n\n setPendingEdits((prev) => {\n const n = { ...prev };\n delete n[rowId];\n return n;\n });\n setSelectedCurrenciesMap((prev) => {\n const n = { ...prev };\n Object.keys(n).forEach((k) => {\n if (k.startsWith(`${rowId}-`)) delete n[k];\n });\n return n;\n });\n setActiveInlineEdit(null);\n },\n [\n pendingEdits,\n data,\n onRowEdit,\n onBulkRowEdit,\n validateAllPendingEdits,\n getValidationToastMessage,\n scrollToCell,\n tableConfig,\n ]\n );\n\n const pendingEditsCount = useMemo(() => {\n return Object.values(pendingEdits).reduce(\n (total, rowEdits) => total + Object.keys(rowEdits).length,\n 0\n );\n }, [pendingEdits]);\n\n useEffect(() => {\n onPendingEditsChange?.(pendingEditsCount > 0, pendingEditsCount);\n }, [pendingEditsCount, onPendingEditsChange]);\n\n const pendingEditsList = useMemo(() => {\n const list: Array<{\n rowId: string;\n columnKey: string;\n fieldName: string;\n value: unknown;\n originalValue: unknown;\n meta?: IPendingEdit[\"meta\"];\n originalMeta?: IPendingEdit[\"originalMeta\"];\n rowIndex: number;\n }> = [];\n Object.entries(pendingEdits).forEach(([rowId, rowEdits]) => {\n const rowIndex = data.findIndex(\n (row: Record<string, unknown>) => row.id === rowId\n );\n Object.entries(rowEdits).forEach(([columnKey, edit]) => {\n const column = tableHeaders.find((col) => col.key === columnKey);\n list.push({\n rowId,\n columnKey,\n fieldName: column?.Header || column?.display_name || columnKey,\n value: edit.value,\n originalValue: edit.originalValue,\n meta: edit.meta,\n originalMeta: edit.originalMeta,\n rowIndex,\n });\n });\n });\n return list;\n }, [pendingEdits, tableHeaders, data]);\n\n const rowsWithPendingEdits = useMemo(() => {\n const rowsMap = new Map<\n string,\n { rowId: string; rowIndex: number; editCount: number }\n >();\n Object.entries(pendingEdits).forEach(([rowId, rowEdits]) => {\n const rowIndex = data.findIndex(\n (row: Record<string, unknown>) => row.id === rowId\n );\n rowsMap.set(rowId, {\n rowId,\n rowIndex,\n editCount: Object.keys(rowEdits).length,\n });\n });\n return Array.from(rowsMap.values()).sort(\n (a, b) => a.rowIndex - b.rowIndex\n );\n }, [pendingEdits, data]);\n\n const openMasterDataModal = useCallback(\n (config: IMasterDataModalConfig) => setMasterDataModalConfig(config),\n []\n );\n const closeMasterDataModal = useCallback(\n () => setMasterDataModalConfig(null),\n []\n );\n\n const handleMasterDataSelected = useCallback(\n (value: unknown, row?: unknown) => {\n setSelectedMasterData({ value, reference: row });\n if (masterDataModalConfig?.onSelected)\n masterDataModalConfig.onSelected(value, row);\n closeMasterDataModal();\n },\n [masterDataModalConfig, closeMasterDataModal]\n );\n\n const clearSelectedMasterData = useCallback(\n () => setSelectedMasterData(null),\n []\n );\n\n const openCurrencyDropdown = useCallback(\n (config: ICurrencyDropdownConfig) => setCurrencyDropdownConfig(config),\n []\n );\n const closeCurrencyDropdown = useCallback(\n () => setCurrencyDropdownConfig(null),\n []\n );\n\n const openCellContextMenu = useCallback(\n (state: ICellContextMenuState) => setCellContextMenu(state),\n []\n );\n const closeCellContextMenu = useCallback(() => setCellContextMenu(null), []);\n\n const setCurrencyForCell = useCallback(\n (cellKey: string, currency: string) => {\n setSelectedCurrenciesMap((prev) => ({ ...prev, [cellKey]: currency }));\n },\n []\n );\n\n const getCurrencyForCell = useCallback(\n (cellKey: string): string | undefined => selectedCurrenciesMap[cellKey],\n [selectedCurrenciesMap]\n );\n\n const fallbackHeight = useMemo(() => {\n const pxMatch = tableHeightClass.match(/h-\\[(\\d+px)\\]/);\n if (pxMatch) return pxMatch[1];\n const calcMatch = tableHeightClass.match(/h-\\[(calc\\(.+\\))\\]/);\n if (calcMatch)\n return calcMatch[1].replace(/([+-])/g, \" $1 \").replace(/\\s+/g, \" \");\n return undefined;\n }, [tableHeightClass]);\n\n const emptySwitchProps = {\n isEmpty,\n isFilters: isAnyFilters,\n isColumnConfigurable,\n handleOnClick: onAddColumnClick,\n emptyMessage,\n buttons,\n noDataWidget,\n };\n const translatedCreateColumnLabel =\n tableConfig?.t?.(CREATE_COLUMN_LABEL) ?? CREATE_COLUMN_LABEL;\n const defaultEmptyText = isAnyFilters\n ? \"No Results Found\"\n : emptyMessage || \"No Data Found\";\n const resolvedEmptyText =\n typeof defaultEmptyText === \"string\"\n ? (tableConfig?.t?.(defaultEmptyText) ?? defaultEmptyText)\n : defaultEmptyText;\n\n const loaderData = { __isLoading: true };\n const cellLoaders = new Array(1).fill(loaderData);\n const tableLoaders = new Array(pageSize).fill(loaderData);\n\n const visibleColumns = useMemo(\n () => tableHeaders.filter((header) => Boolean(header?.visible)),\n [tableHeaders]\n );\n\n const table = useTable(\n {\n columns: optimizeTable ? visibleColumns : tableHeaders,\n data: [\n ...data,\n ...(isLoading ? (data?.length ? cellLoaders : tableLoaders) : []),\n ],\n defaultColumn: {\n minWidth: DEFAULT_COLUMN_MIN_WIDTH,\n width: DEFAULT_COLUMN_WIDTH,\n maxWidth: DEFAULT_COLUMN_MAX_WIDTH,\n },\n },\n useResizeColumns\n );\n\n const { getTableProps, getTableBodyProps, headerGroups, prepareRow, rows } =\n table;\n headerGroupsRef.current = headerGroups;\n\n const headerKeys = JSON.stringify(\n headerGroups[0]?.headers?.map(\n (header) => (header as unknown as Record<string, unknown>)?.Header\n )\n );\n useEffect(() => {\n if (setVisibleHeaders) {\n const groups = headerGroupsRef.current as Array<{\n headers?: Array<Record<string, unknown>>;\n }> | null;\n setVisibleHeaders?.(\n groups?.[0]?.headers?.map((header) => header?.Header as string) ?? []\n );\n }\n }, [headerKeys, setVisibleHeaders]);\n\n const { checkboxConfig } = useCheckbox({\n rows: rows as never,\n checkedIds: checkboxUtilities?.checkedIds as string[],\n isCheckAllDisabled: checkboxUtilities?.isCheckAllDisabled,\n selectionDisabledRowIds: checkboxUtilities?.selectionDisabledRowIds,\n rawData,\n onAllChecked: setIsAllChecked,\n setCheckedIds: checkboxUtilities?.setCheckedIds as (\n ids: string[]\n ) => void,\n checkboxMetadata: checkboxUtilities?.checkboxMetadata as {\n checkedIds: string[];\n tooltip: string;\n highlight: string;\n },\n });\n\n const sensors = useSensors(\n useSensor(MouseSensor, {\n activationConstraint: { distance: DND_ACTIVATION_DISTANCE },\n }),\n useSensor(TouchSensor, {\n activationConstraint: { distance: DND_ACTIVATION_DISTANCE },\n })\n );\n\n const dropAnimation: DropAnimation = {\n easing: DROP_ANIMATION_EASING,\n duration: DROP_ANIMATION_DURATION,\n };\n\n function computeList() {\n if (!multipleContexts?.length || !withSortable) return rows;\n return multipleContexts.reduce(\n (acc: Record<string, unknown>, contextKey: string) => {\n acc[contextKey] = rows.filter(\n (e) => (e.original as Record<string, unknown>)?.type === contextKey\n );\n return acc;\n },\n {}\n );\n }\n computeListRef.current = computeList;\n\n const handleDragStart = (event: DragStartEvent) => {\n const { active } = event;\n setActiveItem(\n rows.find(\n (item) =>\n (item.original as Record<string, unknown>)?.id === active?.id\n ) ?? null\n );\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over) return;\n if (dndSortableUtils?.checkDndDragEnd) {\n dndSortableUtils.checkDndDragEnd(\n active,\n over,\n sortableListByContext,\n (newState: Record<string, unknown>) => {\n setSortableListByContext(newState as Record<string, unknown>);\n setDndLoading(true);\n dndSortableUtils.onDragSuccess?.({\n draggedId: active.id as string,\n droppedId: over.id as string,\n draggedType: (active.data.current as Record<string, unknown>)\n ?.type,\n droppedType: (over.data.current as Record<string, unknown>)?.type,\n updatedList: newState,\n cb: () => setDndLoading(false),\n });\n }\n );\n }\n setActiveItem(null);\n };\n\n const handleDragCancel = () => setActiveItem(null);\n\n const toggleHeaderOption = (key: string) => {\n if (!sortConfig?.onSort && !filterConfig?.onFilter) return;\n if (showHeaderOptions === key) setShowHeaderOptions(null);\n else setShowHeaderOptions(key);\n };\n\n const toggleDataFilterModal = (col: unknown) => {\n setDataFilterColumn(col);\n setShowDataFilterModal(!showDataFilterModal);\n setShowHeaderOptions(null);\n };\n\n const handleRemoveSort = useCallback(() => {\n if (sortConfig?.onRemoveSort) sortConfig.onRemoveSort();\n else if (sortConfig?.onSort) sortConfig.onSort(\"\", \"\");\n }, [sortConfig]);\n\n const toggleShowFilters = useCallback((col: unknown = null) => {\n setNewFilterColumn(col);\n setShowFilters((prev) => (col ? true : !prev));\n }, []);\n const toggleShowSorts = useCallback(\n () => setShowSorts((prev) => !prev),\n []\n );\n\n const lastNonStickyColumnIndex = () => {\n const reverseHeaders = (\n headerGroups[0]?.headers as unknown as Array<Record<string, unknown>>\n )?.filter((header) => header?.visible !== false);\n for (let i = 0; i < reverseHeaders.length; i++) {\n if (reverseHeaders[i].sticky) return i - 1;\n }\n return reverseHeaders.length - 1;\n };\n\n const getSumOfNextVisibleColumnWidth = useCallback(\n (currentIndex: number) => {\n let sum = 0;\n for (let i = currentIndex + 1; i < visibleColumns.length; i++) {\n if (visibleColumns[i].visible !== false)\n sum += visibleColumns[i].width ?? 0;\n }\n if (rowAdditionalActions)\n sum +=\n rowAdditionalActionsWidth || ROW_ADDITIONAL_ACTIONS_DEFAULT_WIDTH;\n if (rowOptions)\n sum += hideRowOptionWidth ? 0 : ROW_OPTIONS_COLUMN_WIDTH;\n return sum;\n },\n [\n visibleColumns,\n rowAdditionalActionsWidth,\n hideRowOptionWidth,\n rowAdditionalActions,\n rowOptions,\n ]\n );\n\n const resolveTableView = (): ITableView => {\n const userId = tableConfig?.getUserId?.();\n return {\n ...(selectedTableView || {}),\n name: selectedTableView?.name || \"Untitled View\",\n created_by: selectedTableView?.created_by || userId,\n filters: selectedTableView?.filters || filterConfig?.columnFilters,\n id: selectedTableView?.id || \"untitled-view\",\n table_key: selectedTableView?.table_key || tableKey,\n columns:\n selectedTableView?.columns ||\n columns?.map((column, index) => ({\n name: column.Header,\n width: column.width,\n visible: column.visible,\n sticky: column.sticky,\n order: index + 1,\n display_name: column.Header,\n sequence: index + 1,\n Header: column.Header,\n })),\n };\n };\n resolveTableViewRef.current = resolveTableView;\n\n const handleUpdateColumnWidth = (columnName: string, width: number) => {\n const updatedTableView = resolveTableView();\n setSelectedTableView({\n ...updatedTableView,\n columns: updatedTableView?.columns?.map((column) =>\n column.name === columnName ? { ...column, width } : column\n ),\n unsaved: isReadOnlyView ? updatedTableView?.unsaved : true,\n });\n };\n\n useEffect(() => {\n if (filterConfig?.columnFilters?.length > 0) setShowFilters(true);\n if (isReadOnlyView) return;\n const currentView = selectedTableViewRef.current;\n if (\n JSON.stringify(currentView?.filters || []) !==\n JSON.stringify(filterConfig?.columnFilters || [])\n ) {\n const hasViewFilters = (currentView?.filters?.length ?? 0) > 0;\n const hasConfigFilters = filterConfig?.columnFilters?.length > 0;\n // Skip sync only during the initial load window where the view already has filters\n // but they haven't propagated to columnFilters yet. If the user explicitly cleared\n // filters from ActiveFilters (X button or Clear), we must propagate the empty state.\n const isClearingFilters =\n hasViewFilters && !hasConfigFilters && !userClearedFiltersRef.current;\n if (!isClearingFilters) {\n const updatedTableView = resolveTableViewRef.current();\n setSelectedTableView({\n ...updatedTableView,\n filters: JSON.parse(\n JSON.stringify(filterConfig?.columnFilters || [])\n ),\n unsaved: true,\n });\n }\n userClearedFiltersRef.current = false;\n }\n }, [filterConfig?.columnFilters, isReadOnlyView]);\n\n const handleActiveRemoveFilter = useCallback(\n (key: string) => {\n userClearedFiltersRef.current = true;\n filterConfig?.onRemoveFilter?.(key);\n },\n [filterConfig?.onRemoveFilter]\n );\n\n const handleActiveClearFilter = useCallback(() => {\n userClearedFiltersRef.current = true;\n filterConfig?.onClearFilter?.();\n }, [filterConfig?.onClearFilter]);\n\n useEffect(() => {\n if (sortConfig?.columnSort?.field) {\n setShowSorts(true);\n if (sortConfig.columnSort.order === \"asc\") {\n setIsShowSortArrowAsc(sortConfig.columnSort.field);\n setIsShowSortArrowDesc(null);\n } else if (sortConfig.columnSort.order === \"desc\") {\n setIsShowSortArrowDesc(sortConfig.columnSort.field);\n setIsShowSortArrowAsc(null);\n }\n } else {\n setIsShowSortArrowAsc(null);\n setIsShowSortArrowDesc(null);\n }\n }, [sortConfig?.columnSort?.field, sortConfig?.columnSort?.order]);\n\n useEffect(() => {\n setTableHeaders(\n mergeViewColumnsWithTableColumns(\n selectedTableViewRef.current?.columns || [],\n columns\n )\n );\n }, [columns]);\n\n useEffect(() => {\n if (selectedTableView?.unsaved)\n tableConfigRef.current?.persistTableView?.(selectedTableView);\n }, [selectedTableView]);\n\n useEffect(() => {\n setSortableListByContext(\n computeListRef.current() as Record<string, unknown>\n );\n }, [rows.length]);\n\n useEffect(() => {\n setSelectedTableView(defaultTableView || null);\n if (defaultTableView?.columns) {\n setTableHeaders(\n mergeViewColumnsWithTableColumns(\n defaultTableView?.columns || [],\n columnsRef.current\n )\n );\n }\n if (\n defaultTableView?.filters &&\n defaultTableView.filters.length > 0 &&\n !hasAppliedInitialFilters.current\n ) {\n requestAnimationFrame(() => {\n filterConfigRef.current?.onFilter?.(defaultTableView.filters);\n });\n hasAppliedInitialFilters.current = true;\n } else if (\n defaultTableView?.filters &&\n hasAppliedInitialFilters.current\n ) {\n const filtersAreDifferent =\n JSON.stringify(defaultTableView.filters) !==\n JSON.stringify(filterConfigRef.current?.columnFilters);\n if (filtersAreDifferent)\n filterConfigRef.current?.onFilter?.(defaultTableView.filters);\n }\n }, [defaultTableView]);\n\n useEffect(() => {\n if (headerDivRef.current) {\n const resizeObserver = new ResizeObserver((entries) =>\n setHeaderDivWidth(entries[0].contentRect.width)\n );\n resizeObserver.observe(headerDivRef.current);\n return () => resizeObserver.disconnect();\n }\n }, []);\n\n useEffect(() => {\n if (!tableContainerRef.current) return;\n const resizeObserver = new ResizeObserver((entries) => {\n const { width, height } = entries[0].contentRect;\n setTableContainerSize({ width, height });\n });\n resizeObserver.observe(tableContainerRef.current);\n return () => resizeObserver.disconnect();\n }, []);\n\n const tableHeader = (\n <Head\n isResizable={isResizable}\n headerGroups={headerGroups as never}\n isCheckbox={isCheckbox}\n checkboxConfig={checkboxConfig}\n isAllChecked={isAllChecked}\n showHeaderOptions={showHeaderOptions ?? \"\"}\n setShowHeaderOptions={setShowHeaderOptions}\n isShowSortArrowAsc={isShowSortArrowAsc}\n isShowSortArrowDesc={isShowSortArrowDesc}\n onSort={\n sortConfig?.onSort as\n | ((field: string, order?: string) => void)\n | undefined\n }\n onFilter={filterConfig?.onFilter}\n toggleHeaderOption={toggleHeaderOption}\n setIsShowSortArrowAsc={setIsShowSortArrowAsc}\n setIsShowSortArrowDesc={setIsShowSortArrowDesc}\n toggleDataFilterModal={toggleShowFilters}\n rowOptions={(Array.isArray(rowOptions) ? rowOptions : []) as unknown[]}\n isColumnConfigurable={isColumnConfigurable ?? false}\n onAddColumnClick={\n onAddColumnClick as (column: {\n id: string;\n key: string;\n [k: string]: unknown;\n }) => void\n }\n onEditColumnClick={\n onEditColumnClick as (column: {\n id: string;\n key: string;\n [k: string]: unknown;\n }) => void\n }\n onDeleteColumnClick={\n onDeleteColumnClick as (column: {\n id: string;\n key: string;\n [k: string]: unknown;\n }) => void\n }\n tableActions={tableActions || null}\n isLoading={isLoading}\n rowAdditionalActions={\n (rowAdditionalActions ?? null) as (() => React.ReactNode) | null\n }\n showPendingEditsColumn={pendingEditsCount > 0}\n />\n );\n\n const tableView = (\n <>\n {dndLoading || isOverlayLoading ? (\n <div className=\"absolute left-0 top-0 w-full h-full z-40 flex items-center justify-center bg-neutral-100 dark:bg-black-700\" />\n ) : null}\n <div\n {...getTableProps()}\n className=\"w-full text-sm text-left text-neutral-500 dark:text-neutral-200 h-full bg-white dark:bg-black-800\"\n >\n {isEmpty ? (\n <div className=\"z-10\">\n {tableHeader}\n <div className=\"absolute w-full\">\n {tableConfig?.renderEmpty ? (\n tableConfig.renderEmpty(emptySwitchProps)\n ) : (\n <div className=\"flex flex-col items-center justify-center w-full h-[12rem] text-neutral-900 dark:text-neutral-200 mt-8\">\n {noDataWidget && !isAnyFilters ? (\n <NoDataFoundWidgets widgetType=\"TABLE\" />\n ) : (\n <NoDataFound text={resolvedEmptyText} />\n )}\n {isColumnConfigurable && !isAnyFilters ? (\n <div className=\"my-4\">\n <Button\n id=\"btn-table-shell-create-column\"\n status=\"primary\"\n appearance=\"ghost\"\n onClick={\n onAddColumnClick as\n | ((\n event: React.MouseEvent<HTMLButtonElement>\n ) => void)\n | undefined\n }\n >\n <Add2Icon className=\"text-white dark:text-white\" />{\" \"}\n {translatedCreateColumnLabel}\n </Button>\n </div>\n ) : null}\n {!isAnyFilters &&\n buttons?.map((button, index) => (\n <Button\n key={`${button.label}-${index}`}\n status=\"secondary\"\n id={getEmptyButtonId(button.label, index)}\n onClick={button.onClick}\n >\n {tableConfig?.t?.(button.label) ?? button.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n </div>\n ) : (\n <AutoSizer\n style={{ width: \"100%\", height: \"100%\" }}\n renderProp={({ width, height }) => {\n const effectiveWidth =\n width > 0 ? width : tableContainerSize.width;\n const effectiveHeight =\n height > 0 ? height : tableContainerSize.height;\n return effectiveWidth > 0 && effectiveHeight > 0 ? (\n <Body\n {...{\n getTableBodyProps:\n getTableBodyProps as unknown as () => Record<\n string,\n unknown\n >,\n rows: rows as never,\n prepareRow: prepareRow as never,\n isLoading,\n onScroll,\n onScrolling,\n columns,\n width: effectiveWidth,\n height: effectiveHeight,\n withSortable,\n allowAstarSearch: searchConfig?.allowAStarSearch || false,\n }}\n />\n ) : null;\n }}\n />\n )}\n </div>\n </>\n );\n\n const tableWrapper = forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n >((props, ref) => (\n <div className=\"h-full w-full\" {...props} ref={ref}>\n {tableHeader}\n <div className=\"relative w-full h-full\">{props?.children}</div>\n </div>\n ));\n\n const tableBodyWrapper = forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n >((props, ref) => (\n <div className=\"h-full w-full\" {...props} ref={ref}>\n <div className=\"relative w-full h-full\">{props?.children}</div>\n </div>\n ));\n\n const TableHeaderComponent = useMemo(() => {\n if (tableConfig?.renderTableHeader) {\n return tableConfig.renderTableHeader({\n tableKey,\n search: searchConfig?.search,\n handleSearch: searchConfig?.handleSearch,\n toggleShowFilters,\n toggleShowSorts,\n filterCounts: filterConfig?.columnFilters?.length,\n columns,\n columnFilters: filterConfig?.columnFilters,\n setSelectedTableView,\n selectedTableView,\n enableTableView: headerConfig?.showTableView,\n modelName: modelName as string,\n enableMasterDataEnumSuggestions,\n onRemoveFilter: filterConfig?.onRemoveFilter,\n onClearFilter: filterConfig?.onClearFilter,\n onFilter: filterConfig?.onFilter,\n data: enumSuggestionsData ?? data,\n tableHeaders,\n showTableViewAsModal: headerConfig?.showTableViewAsModal,\n additionalOptions: headerConfig?.additionalOptions,\n inlineActions: headerConfig?.inlineActions,\n showFilters: headerConfig?.showFilters,\n showSorts: headerConfig?.showSorts,\n showSearch: headerConfig?.showSearch,\n isLoading: Boolean(headerConfig?.isLoading),\n setTableHeaders,\n allowAStarSearch: Boolean(searchConfig?.allowAStarSearch),\n withContent: !!headerConfig?.content,\n setShowFilters,\n sort: sortConfig?.columnSort,\n onSort: sortConfig?.onSort,\n onRemoveSort: handleRemoveSort,\n showExportButton: headerConfig?.showExportButton,\n onExportClick: headerConfig?.onExportClick,\n agreementId,\n enumSuggestionsExtraParams,\n });\n }\n return null;\n }, [\n tableKey,\n searchConfig?.search,\n searchConfig?.handleSearch,\n toggleShowFilters,\n toggleShowSorts,\n filterConfig?.columnFilters,\n columns,\n setSelectedTableView,\n selectedTableView,\n headerConfig,\n modelName,\n filterConfig?.onRemoveFilter,\n filterConfig?.onClearFilter,\n filterConfig?.onFilter,\n data,\n enumSuggestionsData,\n tableHeaders,\n sortConfig?.columnSort,\n sortConfig?.onSort,\n handleRemoveSort,\n tableConfig,\n searchConfig?.allowAStarSearch,\n enableMasterDataEnumSuggestions,\n agreementId,\n enumSuggestionsExtraParams,\n ]);\n\n useEffect(() => {\n if (setHeaderOnParent) setHeaderOnParent(TableHeaderComponent);\n }, [TableHeaderComponent, setHeaderOnParent]);\n\n return (\n <TableContext.Provider\n value={{\n tableWrapper,\n tableBodyWrapper,\n lastNonStickyColumnIndex,\n search: searchConfig?.search,\n columnFilters: filterConfig?.columnFilters,\n onRowClick,\n onSort: sortConfig?.onSort,\n onFilter: filterConfig?.onFilter,\n toggleShowFilters,\n toggleShowSorts,\n onRemoveFilter: filterConfig?.onRemoveFilter,\n onClearFilter: filterConfig?.onClearFilter,\n rowOptions,\n checkboxConfig,\n onResetFilter: filterConfig?.onResetFilter,\n isColumnConfigurable,\n onAddColumnClick,\n onEditColumnClick,\n onDeleteColumnClick,\n onRowTooltipClick,\n tooltiptext,\n cascadingTableConfig,\n activeInlineEdit,\n setActiveInlineEdit,\n originalsOnly,\n disableOptionsForRowIndex,\n getFullRowDataOnClick,\n selectedRowId,\n getSumOfNextVisibleColumnWidth,\n onRowEdit,\n inlineEditColumns,\n tableActions,\n dndSortableUtils,\n withSortable,\n withDraggable,\n onCascadingRowExpand,\n getInnerRowData,\n tableHeaders,\n maxLevel,\n expandedRows,\n setExpandedRows,\n showNewItem,\n rawData,\n dragConfig,\n rowWrapper,\n rowLinkConfig,\n isCellClickDisabled,\n asyncRowOptionsFilter: filterConfig?.asyncRowOptionsFilter,\n handleUpdateColumnWidth,\n isTableViewReadOnly: isReadOnlyView,\n multiSelectConfig,\n cellContextMenuConfig,\n openCellContextMenu,\n closeCellContextMenu,\n headerContextOptions,\n showHeaderContextOptions,\n setShowHeaderContextOptions: setShowHeaderContextOptions as\n | ((value: string | null) => void)\n | undefined,\n headerDivWidth,\n showDataTypeIcon,\n rowAdditionalActions,\n hoverConfig,\n rowAdditionalActionsWidth,\n cellEditing,\n cellEditingValue,\n openMasterDataModal,\n closeMasterDataModal,\n selectedMasterData,\n clearSelectedMasterData,\n allowInlineEdit,\n openCurrencyDropdown,\n closeCurrencyDropdown,\n currencyDropdownConfig,\n selectedCurrenciesMap,\n setCurrencyForCell,\n getCurrencyForCell,\n pendingEdits,\n addPendingEdit,\n removePendingEdit,\n getPendingEdit,\n hasPendingEdit,\n clearAllPendingEdits,\n saveAllPendingEdits,\n clearRowPendingEdits,\n saveRowPendingEdits,\n pendingEditsCount,\n scrollToCell,\n onFieldOperationFlow,\n fieldOperationLoading,\n validateAllPendingEdits,\n }}\n >\n {showHeader ? (\n <div\n ref={headerDivRef}\n className={`mb-2 flex w-full min-w-0 gap-2 justify-end dark:bg-black-800 ${\n headerDivWidth < TOOLBAR_FIRST_BREAKPOINT\n ? \"flex-col items-stretch\"\n : \"flex-row flex-wrap items-center\"\n }`}\n >\n <div\n className={`flex items-center gap-x-2 gap-y-1 ${\n headerDivWidth < TOOLBAR_FIRST_BREAKPOINT\n ? \"w-full flex-wrap\"\n : \"\"\n } ${headerConfig?.content ? \"min-w-0 flex-1\" : \"shrink-0\"}`}\n >\n {headerConfig?.content ? (\n <div\n className={`min-w-0 ${headerDivWidth < TOOLBAR_FIRST_BREAKPOINT ? \"w-full\" : \"flex-1\"}`}\n >\n {headerConfig.content}\n </div>\n ) : null}\n {showRecordCount ? (\n <div className=\"flex items-center gap-1.5 shrink-0\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-neutral-500 dark:text-neutral-400 flex-shrink-0\"\n aria-hidden\n >\n <ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\" />\n <path d=\"M3 5v4c0 1.66 4.03 3 9 3s9-1.34 9-3V5\" />\n <path d=\"M3 9v4c0 1.66 4.03 3 9 3s9-1.34 9-3V9\" />\n <path d=\"M3 13v4c0 1.66 4.03 3 9 3s9-1.34 9-3v-4\" />\n </svg>\n <Typography\n size=\"small\"\n variant=\"semibold\"\n appearance=\"title\"\n >\n {(totalItems ?? data.length).toLocaleString()}\n </Typography>\n <Typography\n size=\"small\"\n variant=\"regular\"\n appearance=\"subtitle\"\n >\n total records\n </Typography>\n </div>\n ) : headerConfig?.preContent ? (\n <div className=\"flex min-w-0 shrink-0 justify-start items-center\">\n {headerConfig.preContent}\n </div>\n ) : null}\n </div>\n <div\n className={`flex min-w-0 items-center justify-end ${\n headerDivWidth < TOOLBAR_FIRST_BREAKPOINT\n ? \"w-full\"\n : headerConfig?.content\n ? \"shrink-0\"\n : \"flex-1\"\n } ${headerDivWidth < TOOLBAR_SECOND_BREAKPOINT ? \"flex-col\" : \"flex-row flex-wrap\"} ${\n headerConfig?.postContent ? \"gap-2\" : \"\"\n }`}\n >\n {showRecordCount && headerConfig?.preContent ? (\n <div className=\"flex w-full justify-start items-center\">\n {headerConfig.preContent}\n </div>\n ) : null}\n <div\n className={`flex justify-end items-center min-w-0 ${\n headerDivWidth < TOOLBAR_SECOND_BREAKPOINT\n ? \"w-full\"\n : headerDivWidth < TOOLBAR_FIRST_BREAKPOINT\n ? \"w-full\"\n : \"\"\n }`}\n >\n {TableHeaderComponent}\n </div>\n {headerConfig?.postContent ? (\n <div\n className={`flex justify-end items-center ${headerDivWidth < TOOLBAR_SECOND_BREAKPOINT ? \"w-full\" : \"\"}`}\n >\n {headerConfig.postContent}\n </div>\n ) : null}\n </div>\n </div>\n ) : null}\n {headerConfig?.showDivider ? (\n <div className=\"border-b pb-2 w-full dark:bg-black-800\" />\n ) : null}\n {showSubHeader && (showFilters || showSorts) ? (\n <div className=\"flex justify-between items-center pb-4 dark:bg-black-800\">\n <div className=\"flex gap-2 items-center\">\n {showSorts && tableConfig?.renderSortItem\n ? tableConfig.renderSortItem({\n sort: sortConfig?.columnSort,\n onRemoveSort: handleRemoveSort,\n onSort: sortConfig?.onSort,\n tableHeaders,\n data,\n disabled: isReadOnlyView,\n })\n : null}\n {showFilters &&\n showSorts &&\n sortConfig?.columnSort?.field !== \"\" ? (\n <div className=\"h-8 w-[1px] flex-shrink-0 bg-neutral-200\" />\n ) : null}\n {showFilters ? (\n <div className=\"flex gap-2 items-center\">\n {(isFilters || filterConfig?.onResetFilter) &&\n tableConfig?.renderActiveFilters &&\n tableConfig.renderActiveFilters({\n filters: filterConfig?.columnFilters,\n onRemoveFilter: handleActiveRemoveFilter,\n onClearFilter: handleActiveClearFilter,\n onResetFilter: filterConfig?.onResetFilter,\n onFilter: filterConfig?.onFilter,\n tableHeaders,\n columnFilters: filterConfig?.columnFilters,\n modelName,\n enableMasterDataEnumSuggestions,\n noSpacing: true,\n notionStyle: filterConfig?.notionStyle,\n context: filterConfig?.context,\n data: enumSuggestionsData ?? data,\n agreementId,\n enumSuggestionsExtraParams,\n disabled: isReadOnlyView,\n })}\n {tableConfig?.renderFilterButtons &&\n tableConfig.renderFilterButtons({\n onClearFilter: filterConfig?.onClearFilter,\n onClose: toggleDataFilterModal,\n modelName,\n enableMasterDataEnumSuggestions,\n defaultFilterColumn: newFilterColumn,\n resetDefaultFilterColumn: () => setNewFilterColumn(null),\n column: dataFilterColumn,\n onFilter: filterConfig?.onFilter,\n tableHeaders,\n columnFilters: filterConfig?.columnFilters,\n data: enumSuggestionsData ?? data,\n notionStyle: filterConfig?.notionStyle,\n context: filterConfig?.context,\n agreementId,\n enumSuggestionsExtraParams,\n disabled: isReadOnlyView,\n })}\n </div>\n ) : null}\n </div>\n </div>\n ) : null}\n {floatingBarConfig && Object.keys(floatingBarConfig).length ? (\n <FloatingBar {...floatingBarConfig} />\n ) : null}\n {!showHeader && showRecordCount ? (\n <div className=\"flex items-center gap-1.5 mb-2\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-neutral-500 dark:text-neutral-400 flex-shrink-0\"\n aria-hidden\n >\n <ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\" />\n <path d=\"M3 5v4c0 1.66 4.03 3 9 3s9-1.34 9-3V5\" />\n <path d=\"M3 9v4c0 1.66 4.03 3 9 3s9-1.34 9-3V9\" />\n <path d=\"M3 13v4c0 1.66 4.03 3 9 3s9-1.34 9-3v-4\" />\n </svg>\n <Typography size=\"small\" variant=\"semibold\" appearance=\"title\">\n {(totalItems ?? data.length).toLocaleString()}\n </Typography>\n <Typography size=\"small\" variant=\"regular\" appearance=\"subtitle\">\n total records\n </Typography>\n </div>\n ) : !showHeader && headerConfig?.preContent ? (\n <div className=\"flex items-center mb-2\">\n {headerConfig.preContent}\n </div>\n ) : null}\n <div\n ref={tableContainerRef}\n className={`w-full ${paginationConfig ? `h-auto` : tableHeightClass} rounded-lg relative border overflow-x-hidden`}\n style={{\n ...(paginationConfig\n ? {\n height:\n data?.length > 0\n ? `${(data?.length + 1) * rowSlotHeight + 4}px`\n : \"350px\",\n }\n : { height: fallbackHeight }),\n ...style,\n }}\n >\n {enableRootDrag ? (\n tableView\n ) : (\n <DndContext\n sensors={sensors}\n onDragEnd={handleDragEnd}\n onDragStart={handleDragStart}\n onDragCancel={handleDragCancel}\n collisionDetection={closestCorners}\n >\n {tableView}\n {activeItem\n ? createPortal(\n <DragOverlay\n adjustScale={true}\n dropAnimation={dropAnimation}\n >\n <table\n {...getTableProps()}\n className=\"w-full text-sm text-left text-neutral-500 dark:text-neutral-200 bg-white dark:bg-black-700 table-auto border-collapse\"\n >\n <tbody\n {...getTableBodyProps()}\n className=\"bg-transparent divide-y divide-neutral-200\"\n >\n {void prepareRow(activeItem)}\n <Row\n key={\n (activeItem.original as Record<string, unknown>)\n .id as string\n }\n row={activeItem as never}\n index={rows?.findIndex(\n (item) =>\n item.id ===\n (activeItem.original as Record<string, unknown>)\n .id\n )}\n />\n </tbody>\n </table>\n </DragOverlay>,\n document.getElementById(\"full-screen-container\") ||\n document.body\n )\n : null}\n </DndContext>\n )}\n </div>\n {paginationConfig && tableConfig?.renderPagination\n ? tableConfig.renderPagination(paginationConfig)\n : null}\n\n {tableConfig?.renderMasterDataModal &&\n tableConfig.renderMasterDataModal({\n isVisible: !!masterDataModalConfig,\n onSelected: handleMasterDataSelected,\n onClose: closeMasterDataModal,\n masterDataColumnName: masterDataModalConfig?.masterDataColumnName,\n masterDataFormula: masterDataModalConfig?.masterDataFormula,\n masterDataFilters: masterDataModalConfig?.masterDataFilters,\n masterDataName: masterDataModalConfig?.masterDataName,\n masterDataId: masterDataModalConfig?.masterDataName,\n showFilters: true,\n })}\n\n <CurrencyDropdownPortal\n config={currencyDropdownConfig}\n onClose={closeCurrencyDropdown}\n />\n\n <CellContextMenuPortal\n state={cellContextMenu}\n config={cellContextMenuConfig}\n rowOptions={rowOptions}\n asyncRowOptionsFilter={filterConfig?.asyncRowOptionsFilter}\n checkedIds={checkboxConfig?.checkedIds}\n rows={data}\n columns={tableHeaders}\n onClose={closeCellContextMenu}\n />\n\n <PendingEditsFloatingBar\n pendingEditsCount={pendingEditsCount}\n pendingEditsList={pendingEditsList}\n rowsWithPendingEdits={rowsWithPendingEdits}\n fieldOperationLoading={fieldOperationLoading}\n onClearAll={clearAllPendingEdits}\n onSaveAll={saveAllPendingEdits}\n onScrollToCell={scrollToCell}\n />\n </TableContext.Provider>\n );\n }\n);\n"],"names":["AutoSizer","_AutoSizer","CREATE_COLUMN_LABEL","getEmptyButtonId","label","index","InfiniteTable","React","tableKey","searchConfig","filterConfig","sortConfig","headerConfig","hoverConfig","columns","modelName","enableMasterDataEnumSuggestions","agreementId","enumSuggestionsExtraParams","enumSuggestionsData","data","onRowClick","showHeader","showSubHeader","tableActions","rowOptions","hideRowOptionWidth","checkboxUtilities","isLoading","onScroll","onScrolling","isColumnConfigurable","onAddColumnClick","emptyMessage","noDataWidget","buttons","onEditColumnClick","onDeleteColumnClick","onRowTooltipClick","tooltiptext","cascadingTableConfig","originalsOnly","disableOptionsForRowIndex","tableHeightClass","getFullRowDataOnClick","selectedRowId","onRowEdit","onBulkRowEdit","inlineEditColumns","isResizable","paginationConfig","dndSortableUtils","multipleContexts","withSortable","withDraggable","enableRootDrag","pageSize","DEFAULT_PAGE_SIZE","onCascadingRowExpand","totalItems","showRecordCount","getInnerRowData","maxLevel","expandedRows","setExpandedRows","showNewItem","rawData","dragConfig","isOverlayLoading","style","floatingBarConfig","rowWrapper","rowLinkConfig","isCellClickDisabled","setHeaderOnParent","optimizeTable","multiSelectConfig","cellContextMenuConfig","headerContextOptions","showHeaderContextOptions","setShowHeaderContextOptions","showDataTypeIcon","rowAdditionalActions","rowAdditionalActionsWidth","setVisibleHeaders","cellEditing","cellEditingValue","allowInlineEdit","onFieldOperationFlow","fieldOperationLoading","onTableActionsReady","onPendingEditsChange","onCancelPendingEdits","tableConfig","useTableConfig","rowSlotHeight","getRowSlotHeight","useRowHeight","isSearch","isFilters","isAnyFilters","isCheckbox","defaultTableView","selectedTableView","setSelectedTableView","useState","isReadOnlyView","canEditTableView","showFilters","setShowFilters","showSorts","setShowSorts","newFilterColumn","setNewFilterColumn","tableHeaders","setTableHeaders","isEmpty","showHeaderOptions","setShowHeaderOptions","showDataFilterModal","setShowDataFilterModal","dataFilterColumn","setDataFilterColumn","isAllChecked","setIsAllChecked","isShowSortArrowAsc","setIsShowSortArrowAsc","isShowSortArrowDesc","setIsShowSortArrowDesc","sortableListByContext","setSortableListByContext","activeItem","setActiveItem","dndLoading","setDndLoading","headerDivWidth","setHeaderDivWidth","headerDivRef","useRef","tableContainerRef","tableContainerSize","setTableContainerSize","activeInlineEdit","setActiveInlineEdit","masterDataModalConfig","setMasterDataModalConfig","selectedMasterData","setSelectedMasterData","currencyDropdownConfig","setCurrencyDropdownConfig","cellContextMenu","setCellContextMenu","selectedCurrenciesMap","setSelectedCurrenciesMap","hasAppliedInitialFilters","userClearedFiltersRef","selectedTableViewRef","tableConfigRef","columnsRef","filterConfigRef","headerGroupsRef","resolveTableViewRef","computeListRef","pendingEdits","setPendingEdits","addPendingEdit","useCallback","rowId","columnKey","edit","prev","existingEdit","resolvedValidationError","column","col","result","validateCellValue","hasPendingEdits","rowEdits","useEffect","removePendingEdit","newEdits","_removed","rest","getPendingEdit","hasPendingEdit","clearAllPendingEdits","scrollToCell","rowIndex","colIndex","cellElement","DATA_ROW_ID_ATTR","DATA_COLUMN_KEY_ATTR","scrollContainer","OS_VIEWPORT_SELECTOR","scrollLeft","i","SCROLL_TO_CELL_COLUMN_WIDTH_FALLBACK","SCROLL_TO_CELL_LEFT_OFFSET","validateAllPendingEdits","editsToValidate","hasErrors","firstError","updatedEdits","errorTypes","getValidationToastMessage","hasRequired","hasFormat","saveAllPendingEdits","row","editedRows","originalRow","updatedRow","editedFields","clearRowPendingEdits","k","saveRowPendingEdits","editedRowData","n","pendingEditsCount","useMemo","total","pendingEditsList","list","rowsWithPendingEdits","rowsMap","a","b","openMasterDataModal","config","closeMasterDataModal","handleMasterDataSelected","value","clearSelectedMasterData","openCurrencyDropdown","closeCurrencyDropdown","openCellContextMenu","state","closeCellContextMenu","setCurrencyForCell","cellKey","currency","getCurrencyForCell","fallbackHeight","pxMatch","calcMatch","emptySwitchProps","translatedCreateColumnLabel","defaultEmptyText","resolvedEmptyText","loaderData","cellLoaders","tableLoaders","visibleColumns","header","table","useTable","DEFAULT_COLUMN_MIN_WIDTH","DEFAULT_COLUMN_WIDTH","DEFAULT_COLUMN_MAX_WIDTH","useResizeColumns","getTableProps","getTableBodyProps","headerGroups","prepareRow","rows","headerKeys","groups","checkboxConfig","useCheckbox","sensors","useSensors","useSensor","MouseSensor","DND_ACTIVATION_DISTANCE","TouchSensor","dropAnimation","DROP_ANIMATION_EASING","DROP_ANIMATION_DURATION","computeList","acc","contextKey","e","handleDragStart","event","active","item","handleDragEnd","over","newState","handleDragCancel","toggleHeaderOption","key","toggleDataFilterModal","handleRemoveSort","toggleShowFilters","toggleShowSorts","lastNonStickyColumnIndex","reverseHeaders","getSumOfNextVisibleColumnWidth","currentIndex","sum","ROW_ADDITIONAL_ACTIONS_DEFAULT_WIDTH","ROW_OPTIONS_COLUMN_WIDTH","resolveTableView","userId","handleUpdateColumnWidth","columnName","width","updatedTableView","currentView","hasViewFilters","hasConfigFilters","handleActiveRemoveFilter","handleActiveClearFilter","mergeViewColumnsWithTableColumns","resizeObserver","entries","height","tableHeader","jsx","Head","tableView","jsxs","Fragment","NoDataFoundWidgets","NoDataFound","Button","Add2Icon","button","effectiveWidth","effectiveHeight","Body","tableWrapper","forwardRef","props","ref","tableBodyWrapper","TableHeaderComponent","TableContext","TOOLBAR_FIRST_BREAKPOINT","Typography","TOOLBAR_SECOND_BREAKPOINT","FloatingBar","DndContext","closestCorners","createPortal","DragOverlay","Row","CurrencyDropdownPortal","CellContextMenuPortal","PendingEditsFloatingBar"],"mappings":"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"}
|