@lax-wp/design-system 0.13.28 → 0.13.32
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/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 +135 -133
- package/dist/components/data-display/infinite-table/body/cell/DataCell.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/body/rows/row.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/body/rows/row.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/body/rows/row.es.js +286 -281
- package/dist/components/data-display/infinite-table/body/rows/row.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/context.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/context.d.ts +1 -0
- package/dist/components/data-display/infinite-table/context.es.js.map +1 -1
- 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.d.ts +1 -1
- package/dist/components/data-display/infinite-table/index.es.js +211 -208
- package/dist/components/data-display/infinite-table/index.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/types.d.ts +22 -0
- package/dist/index.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.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 { mergeViewColumnsWithTableColumns } 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 { DndContext, DragOverlay, type DragEndEvent, type DragStartEvent, type DropAnimation, MouseSensor, TouchSensor, closestCorners, useSensor, useSensors } from '@dnd-kit/core';\nimport React, { forwardRef, useCallback, useEffect, useMemo, useRef, useState } 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 { CurrencyDropdownPortal } from './CurrencyDropdownPortal';\nimport { Head } from './head';\nimport { PendingEditsFloatingBar } from './PendingEditsFloatingBar';\nimport type { ICurrencyDropdownConfig, IColumn, IMasterDataModalConfig, ITableProps, ITableView, PendingEditsMap, IPendingEdit } from './types';\nimport { Add2Icon } from '../../icon';\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 FIRST_BREAKPOINT = 700;\nconst SECOND_BREAKPOINT = 430;\nconst CREATE_COLUMN_LABEL = 'Create Column';\n\nconst getEmptyButtonId = (label: string, index: number): string => {\n const slug = label.toLowerCase().trim().replace(/\\s+/g, '-').replace(/[^a-z0-9-_]/g, '');\n return `button-admin-${slug || index}`;\n};\n\nexport const InfiniteTable = React.memo(\n ({\n tableKey,\n searchConfig = { search: '', handleSearch: () => null, allowAStarSearch: false },\n filterConfig = {\n columnFilters: [],\n onFilter: () => null,\n onRemoveFilter: () => null,\n onClearFilter: () => null,\n onResetFilter: () => Promise.resolve({}),\n asyncRowOptionsFilter: () => Promise.resolve({}),\n },\n sortConfig = { onSort: () => null, columnSort: { field: '', order: '' }, onRemoveSort: () => null },\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 agreementCategoryId,\n agreementDomainId,\n agreementId,\n modificationId,\n lineItemRowId,\n enumSuggestionsData,\n data = [],\n onRowClick,\n showHeader,\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 onRowEdit,\n onBulkRowEdit,\n inlineEditColumns,\n isResizable = true,\n paginationConfig,\n dndSortableUtils,\n multipleContexts,\n withSortable,\n withDraggable,\n enableRootDrag,\n pageSize = 10,\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 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 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 = tableConfig?.getTableView?.(tableKey as string) ?? null;\n const [selectedTableView, setSelectedTableView] = useState<ITableView | null>(defaultTableView || null);\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>(null);\n const [showDataFilterModal, setShowDataFilterModal] = useState<boolean>(false);\n const [dataFilterColumn, setDataFilterColumn] = useState<unknown>(null);\n const [isAllChecked, setIsAllChecked] = useState(false);\n const [isShowSortArrowAsc, setIsShowSortArrowAsc] = useState<string | null>(null);\n const [isShowSortArrowDesc, setIsShowSortArrowDesc] = useState<string | null>(null);\n const [sortableListByContext, setSortableListByContext] = useState<Record<string, unknown>>({});\n const [activeItem, setActiveItem] = useState<ReactTableRow<object> | null>(null);\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({ width: 0, height: 0 });\n const [activeInlineEdit, setActiveInlineEdit] = useState<{ rowId: string; columnKey: string } | null>(null);\n const [masterDataModalConfig, setMasterDataModalConfig] = useState<IMasterDataModalConfig | null>(null);\n const [selectedMasterData, setSelectedMasterData] = useState<{ value: unknown; reference: unknown } | null>(null);\n const [currencyDropdownConfig, setCurrencyDropdownConfig] = useState<ICurrencyDropdownConfig | null>(null);\n const [selectedCurrenciesMap, setSelectedCurrenciesMap] = useState<Record<string, string>>({});\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>(() => ({}) as ITableView);\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 = edit.validationError;\n if (resolvedValidationError === undefined) {\n const column = tableHeaders.find((col) => col.key === columnKey);\n if (column) {\n const result = validateCellValue(edit.value, column as { type?: string; is_required?: boolean });\n resolvedValidationError = !result.isValid ? (result.error || 'Invalid') : null;\n } else {\n resolvedValidationError = existingEdit?.validationError ?? null;\n }\n }\n return { ...prev, [rowId]: { ...(prev[rowId] || {}), [columnKey]: { ...edit, validationError: resolvedValidationError ?? null } } };\n });\n },\n [tableHeaders],\n );\n\n const hasPendingEdits = useCallback(() => {\n return Object.values(pendingEdits).some((rowEdits) => Object.keys(rowEdits).length > 0);\n }, [pendingEdits]);\n\n useEffect(() => {\n if (onTableActionsReady) onTableActionsReady({ addPendingEdit: addPendingEdit as (rowId: string, columnKey: string, edit: { value: unknown; originalValue?: unknown; meta?: unknown }) => void, hasPendingEdits });\n }, [onTableActionsReady, addPendingEdit, hasPendingEdits]);\n\n const removePendingEdit = useCallback((rowId: string, columnKey: string) => {\n setPendingEdits((prev) => {\n const newEdits = { ...prev };\n if (newEdits[rowId]) {\n const { [columnKey]: _removed, ...rest } = newEdits[rowId]; 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 const getPendingEdit = useCallback(\n (rowId: string, columnKey: string): IPendingEdit | undefined => pendingEdits[rowId]?.[columnKey],\n [pendingEdits],\n );\n\n const hasPendingEdit = useCallback(\n (rowId: string, columnKey: string): boolean => Boolean(pendingEdits[rowId]?.[columnKey]),\n [pendingEdits],\n );\n\n const clearAllPendingEdits = useCallback(() => {\n if (fieldOperationLoading) return;\n if (onCancelPendingEdits && Object.keys(pendingEdits).length > 0) 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((col) => col.key === columnKey);\n setTimeout(() => {\n const cellElement = document.querySelector(`[data-row-id=\"${rowId}\"] [data-column-key=\"${columnKey}\"]`);\n if (cellElement) {\n cellElement.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'center' });\n } else if (colIndex > 0) {\n const scrollContainer = document.querySelector('.os-viewport');\n if (scrollContainer) {\n let scrollLeft = 0;\n for (let i = 0; i < colIndex; i++) {\n const col = tableHeaders[i];\n if (!col?.sticky) scrollLeft += col?.width || 200;\n }\n scrollLeft = Math.max(0, scrollLeft - 200);\n scrollContainer.scrollTo({ left: scrollLeft, behavior: 'smooth' });\n }\n }\n setActiveInlineEdit({ rowId, columnKey });\n }, 350);\n }, 100);\n },\n [tableHeaders, tableConfig],\n );\n\n const validateAllPendingEdits = useCallback(\n (editsToValidate: PendingEditsMap): { hasErrors: boolean; updatedEdits: PendingEditsMap; firstError: { rowId: string; columnKey: string } | null; errorTypes: Set<string> } => {\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(edit.value, column as { type?: string; is_required?: boolean });\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] = { ...edit, validationError: result.error };\n } else {\n updatedEdits[rowId][columnKey] = { ...edit, validationError: null };\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) return 'Missing required field(s) and invalid format detected. Please review highlighted field(s).';\n if (hasRequired) 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 } = validateAllPendingEdits(pendingEdits);\n if (hasErrors) {\n setPendingEdits(updatedEdits);\n tableConfig?.showNotification?.('error', getValidationToastMessage(errorTypes));\n if (firstError) {\n const rowIndex = data.findIndex((row: Record<string, unknown>) => row.id === firstError!.rowId);\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((row: Record<string, unknown>) => row.id === rowId);\n if (originalRow) {\n const updatedRow = { ...originalRow };\n const editedFields: Record<string, { value: unknown; meta?: unknown }> = {};\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) onRowEdit(null, null, null, null, null, { isBulk: true, rows: editedRows });\n }\n\n setPendingEdits({});\n setSelectedCurrenciesMap({});\n setActiveInlineEdit(null);\n }, [pendingEdits, data, onRowEdit, onBulkRowEdit, validateAllPendingEdits, getValidationToastMessage, scrollToCell, tableConfig]);\n\n const clearRowPendingEdits = useCallback(\n (rowId: string) => {\n if (fieldOperationLoading) return;\n const rowEdits = pendingEdits[rowId];\n if (rowEdits && onCancelPendingEdits) onCancelPendingEdits({ [rowId]: rowEdits });\n setPendingEdits((prev) => { const n = { ...prev }; delete n[rowId]; return n; });\n setSelectedCurrenciesMap((prev) => { const n = { ...prev }; Object.keys(n).forEach((k) => { if (k.startsWith(`${rowId}-`)) delete n[k]; }); return 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 } = validateAllPendingEdits({ [rowId]: rowEdits });\n if (hasErrors) {\n setPendingEdits((prev) => ({ ...prev, [rowId]: updatedEdits[rowId] }));\n tableConfig?.showNotification?.('error', getValidationToastMessage(errorTypes));\n if (firstError) {\n const rowIndex = data.findIndex((row: Record<string, unknown>) => row.id === firstError!.rowId);\n scrollToCell(firstError!.rowId, firstError!.columnKey, rowIndex);\n }\n return;\n }\n\n const originalRow = data.find((row: Record<string, unknown>) => row.id === rowId);\n if (!originalRow) return;\n const updatedRow = { ...originalRow };\n const editedFields: Record<string, { value: unknown; meta?: unknown }> = {};\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) onRowEdit(null, null, null, null, null, { isBulk: true, rows: [editedRowData] });\n\n setPendingEdits((prev) => { const n = { ...prev }; delete n[rowId]; return n; });\n setSelectedCurrenciesMap((prev) => { const n = { ...prev }; Object.keys(n).forEach((k) => { if (k.startsWith(`${rowId}-`)) delete n[k]; }); return n; });\n setActiveInlineEdit(null);\n },\n [pendingEdits, data, onRowEdit, onBulkRowEdit, validateAllPendingEdits, getValidationToastMessage, scrollToCell, tableConfig],\n );\n\n const pendingEditsCount = useMemo(() => {\n return Object.values(pendingEdits).reduce((total, rowEdits) => total + Object.keys(rowEdits).length, 0);\n }, [pendingEdits]);\n\n useEffect(() => {\n onPendingEditsChange?.(pendingEditsCount > 0, pendingEditsCount);\n }, [pendingEditsCount, onPendingEditsChange]);\n\n const pendingEditsList = useMemo(() => {\n const list: Array<{ rowId: string; columnKey: string; fieldName: string; value: unknown; originalValue: unknown; meta?: IPendingEdit['meta']; originalMeta?: IPendingEdit['originalMeta']; rowIndex: number }> = [];\n Object.entries(pendingEdits).forEach(([rowId, rowEdits]) => {\n const rowIndex = data.findIndex((row: Record<string, unknown>) => row.id === rowId);\n Object.entries(rowEdits).forEach(([columnKey, edit]) => {\n const column = tableHeaders.find((col) => col.key === columnKey);\n list.push({ rowId, columnKey, fieldName: column?.Header || column?.display_name || columnKey, value: edit.value, originalValue: edit.originalValue, meta: edit.meta, originalMeta: edit.originalMeta, rowIndex });\n });\n });\n return list;\n }, [pendingEdits, tableHeaders, data]);\n\n const rowsWithPendingEdits = useMemo(() => {\n const rowsMap = new Map<string, { rowId: string; rowIndex: number; editCount: number }>();\n Object.entries(pendingEdits).forEach(([rowId, rowEdits]) => {\n const rowIndex = data.findIndex((row: Record<string, unknown>) => row.id === rowId);\n rowsMap.set(rowId, { rowId, rowIndex, editCount: Object.keys(rowEdits).length });\n });\n return Array.from(rowsMap.values()).sort((a, b) => a.rowIndex - b.rowIndex);\n }, [pendingEdits, data]);\n\n const openMasterDataModal = useCallback((config: IMasterDataModalConfig) => setMasterDataModalConfig(config), []);\n const closeMasterDataModal = useCallback(() => setMasterDataModalConfig(null), []);\n\n const handleMasterDataSelected = useCallback(\n (value: unknown, row?: unknown) => {\n setSelectedMasterData({ value, reference: row });\n if (masterDataModalConfig?.onSelected) masterDataModalConfig.onSelected(value, row);\n closeMasterDataModal();\n },\n [masterDataModalConfig, closeMasterDataModal],\n );\n\n const clearSelectedMasterData = useCallback(() => setSelectedMasterData(null), []);\n\n const openCurrencyDropdown = useCallback((config: ICurrencyDropdownConfig) => setCurrencyDropdownConfig(config), []);\n const closeCurrencyDropdown = useCallback(() => setCurrencyDropdownConfig(null), []);\n\n const setCurrencyForCell = useCallback((cellKey: string, currency: string) => {\n setSelectedCurrenciesMap((prev) => ({ ...prev, [cellKey]: currency }));\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) 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 = tableConfig?.t?.(CREATE_COLUMN_LABEL) ?? CREATE_COLUMN_LABEL;\n const defaultEmptyText = isAnyFilters ? 'No Results Found' : emptyMessage || 'No Data Found';\n const resolvedEmptyText = typeof defaultEmptyText === 'string' ? (tableConfig?.t?.(defaultEmptyText) ?? defaultEmptyText) : 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(() => tableHeaders.filter((header) => Boolean(header?.visible)), [tableHeaders]);\n\n const table = useTable(\n {\n columns: optimizeTable ? visibleColumns : tableHeaders,\n data: [...data, ...(isLoading ? (data?.length ? cellLoaders : tableLoaders) : [])],\n defaultColumn: { minWidth: 100, width: 200, maxWidth: 999999 },\n },\n useResizeColumns,\n );\n\n const { getTableProps, getTableBodyProps, headerGroups, prepareRow, rows } = table;\n headerGroupsRef.current = headerGroups;\n\n const headerKeys = JSON.stringify(headerGroups[0]?.headers?.map((header) => (header as unknown as Record<string, unknown>)?.Header));\n useEffect(() => {\n if (setVisibleHeaders) {\n const groups = headerGroupsRef.current as Array<{ headers?: Array<Record<string, unknown>> }> | null;\n setVisibleHeaders?.(groups?.[0]?.headers?.map((header) => header?.Header as string) ?? []);\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 (ids: string[]) => void,\n checkboxMetadata: checkboxUtilities?.checkboxMetadata as { checkedIds: string[]; tooltip: string; highlight: string },\n });\n\n const sensors = useSensors(\n useSensor(MouseSensor, { activationConstraint: { distance: 5 } }),\n useSensor(TouchSensor, { activationConstraint: { distance: 5 } }),\n );\n\n const dropAnimation: DropAnimation = { easing: 'cubic-bezier(0.18, 0.67, 0.6, 1.22)', duration: 20 };\n\n function computeList() {\n if (!multipleContexts?.length || !withSortable) return rows;\n return multipleContexts.reduce((acc: Record<string, unknown>, contextKey: string) => {\n acc[contextKey] = rows.filter((e) => (e.original as Record<string, unknown>)?.type === contextKey);\n return acc;\n }, {});\n }\n computeListRef.current = computeList;\n\n const handleDragStart = (event: DragStartEvent) => {\n const { active } = event;\n setActiveItem(rows.find((item) => (item.original as Record<string, unknown>)?.id === active?.id) ?? null);\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over) return;\n if (dndSortableUtils?.checkDndDragEnd) {\n dndSortableUtils.checkDndDragEnd(active, over, sortableListByContext, (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>)?.type,\n droppedType: (over.data.current as Record<string, unknown>)?.type,\n updatedList: newState,\n cb: () => setDndLoading(false),\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(() => setShowSorts(prev => !prev), []);\n\n const lastNonStickyColumnIndex = () => {\n const reverseHeaders = (headerGroups[0]?.headers as unknown as Array<Record<string, unknown>>)?.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) sum += visibleColumns[i].width ?? 0;\n }\n if (rowAdditionalActions) sum += rowAdditionalActionsWidth || 40;\n if (rowOptions) sum += hideRowOptionWidth ? 0 : 28;\n return sum;\n },\n [visibleColumns, rowAdditionalActionsWidth, hideRowOptionWidth, rowAdditionalActions, rowOptions],\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: selectedTableView?.columns || 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) => (column.name === columnName ? { ...column, width } : column)),\n unsaved: true,\n });\n };\n\n useEffect(() => {\n if (filterConfig?.columnFilters?.length > 0) setShowFilters(true);\n const currentView = selectedTableViewRef.current;\n if (JSON.stringify(currentView?.filters || []) !== JSON.stringify(filterConfig?.columnFilters || [])) {\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 = hasViewFilters && !hasConfigFilters && !userClearedFiltersRef.current;\n if (!isClearingFilters) {\n const updatedTableView = resolveTableViewRef.current();\n setSelectedTableView({ ...updatedTableView, filters: JSON.parse(JSON.stringify(filterConfig?.columnFilters || [])), unsaved: true });\n }\n userClearedFiltersRef.current = false;\n }\n }, [filterConfig?.columnFilters]);\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') { setIsShowSortArrowAsc(sortConfig.columnSort.field); setIsShowSortArrowDesc(null); }\n else if (sortConfig.columnSort.order === 'desc') { setIsShowSortArrowDesc(sortConfig.columnSort.field); setIsShowSortArrowAsc(null); }\n } else { setIsShowSortArrowAsc(null); setIsShowSortArrowDesc(null); }\n }, [sortConfig?.columnSort?.field, sortConfig?.columnSort?.order]);\n\n useEffect(() => {\n setTableHeaders(mergeViewColumnsWithTableColumns(selectedTableViewRef.current?.columns || [], columns));\n }, [columns]);\n\n useEffect(() => {\n if (selectedTableView?.unsaved) tableConfigRef.current?.persistTableView?.(selectedTableView);\n }, [selectedTableView]);\n\n useEffect(() => { setSortableListByContext(computeListRef.current() as Record<string, unknown>); }, [rows.length]);\n\n useEffect(() => {\n setSelectedTableView(defaultTableView || null);\n if (defaultTableView?.columns) {\n setTableHeaders(mergeViewColumnsWithTableColumns(defaultTableView?.columns || [], columnsRef.current));\n }\n if (defaultTableView?.filters && defaultTableView.filters.length > 0 && !hasAppliedInitialFilters.current) {\n requestAnimationFrame(() => { filterConfigRef.current?.onFilter?.(defaultTableView.filters); });\n hasAppliedInitialFilters.current = true;\n } else if (defaultTableView?.filters && hasAppliedInitialFilters.current) {\n const filtersAreDifferent = JSON.stringify(defaultTableView.filters) !== JSON.stringify(filterConfigRef.current?.columnFilters);\n if (filtersAreDifferent) filterConfigRef.current?.onFilter?.(defaultTableView.filters);\n }\n }, [defaultTableView]);\n\n useEffect(() => {\n if (headerDivRef.current) {\n const resizeObserver = new ResizeObserver((entries) => setHeaderDivWidth(entries[0].contentRect.width));\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={sortConfig?.onSort as ((field: string, order?: string) => void) | undefined}\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={onAddColumnClick as (column: { id: string; key: string; [k: string]: unknown }) => void}\n onEditColumnClick={onEditColumnClick as (column: { id: string; key: string; [k: string]: unknown }) => void}\n onDeleteColumnClick={onDeleteColumnClick as (column: { id: string; key: string; [k: string]: unknown }) => void}\n tableActions={(tableActions || null)}\n isLoading={isLoading}\n rowAdditionalActions={(rowAdditionalActions ?? null) as (() => React.ReactNode) | null}\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 ? tableConfig.renderEmpty(emptySwitchProps) : (\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 ? <NoDataFoundWidgets widgetType='TABLE' /> : <NoDataFound text={resolvedEmptyText} />}\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={onAddColumnClick as ((event: React.MouseEvent<HTMLButtonElement>) => void) | undefined}\n >\n <Add2Icon className='text-white dark:text-white' /> {translatedCreateColumnLabel}\n </Button>\n </div>\n ) : null}\n {!isAnyFilters &&\n buttons?.map((button, index) => (\n <Button key={`${button.label}-${index}`} status='secondary' id={getEmptyButtonId(button.label, index)} onClick={button.onClick}>\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 = width > 0 ? width : tableContainerSize.width;\n const effectiveHeight = height > 0 ? height : tableContainerSize.height;\n return effectiveWidth > 0 && effectiveHeight > 0 ? (\n <Body\n {...{\n getTableBodyProps: getTableBodyProps as unknown as () => Record<string, unknown>, rows: rows as never, prepareRow: prepareRow as never, isLoading, onScroll, onScrolling, columns, width: effectiveWidth, height: effectiveHeight, withSortable,\n allowAstarSearch: searchConfig?.allowAStarSearch || false,\n }}\n />\n ) : null;\n }}\n />\n )}\n </div>\n </>\n );\n\n const tableWrapper = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>((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<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>((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, search: searchConfig?.search, handleSearch: searchConfig?.handleSearch,\n toggleShowFilters, toggleShowSorts, filterCounts: filterConfig?.columnFilters?.length,\n columns, columnFilters: filterConfig?.columnFilters, setSelectedTableView, selectedTableView,\n enableTableView: headerConfig?.showTableView, modelName: modelName as string,\n enableMasterDataEnumSuggestions,\n onRemoveFilter: filterConfig?.onRemoveFilter, onClearFilter: filterConfig?.onClearFilter,\n onFilter: filterConfig?.onFilter, data: enumSuggestionsData ?? data, tableHeaders, showTableViewAsModal: headerConfig?.showTableViewAsModal,\n additionalOptions: headerConfig?.additionalOptions, showFilters: headerConfig?.showFilters,\n showSorts: headerConfig?.showSorts, showSearch: headerConfig?.showSearch,\n isLoading: Boolean(headerConfig?.isLoading), setTableHeaders,\n allowAStarSearch: Boolean(searchConfig?.allowAStarSearch), withContent: !!headerConfig?.content,\n setShowFilters, sort: sortConfig?.columnSort, onSort: sortConfig?.onSort, onRemoveSort: handleRemoveSort,\n showExportButton: headerConfig?.showExportButton,\n agreementCategoryId,\n agreementDomainId,\n agreementId,\n modificationId,\n lineItemRowId\n });\n }\n return null;\n }, [\n tableKey, searchConfig?.search, searchConfig?.handleSearch, toggleShowFilters, toggleShowSorts,\n filterConfig?.columnFilters, columns, setSelectedTableView, selectedTableView, headerConfig,\n modelName, filterConfig?.onRemoveFilter, filterConfig?.onClearFilter, filterConfig?.onFilter,\n data, enumSuggestionsData, tableHeaders, sortConfig?.columnSort, sortConfig?.onSort, handleRemoveSort, tableConfig,\n searchConfig?.allowAStarSearch, enableMasterDataEnumSuggestions,agreementCategoryId, agreementDomainId, agreementId,modificationId,lineItemRowId,\n ]);\n\n useEffect(() => {\n if (setHeaderOnParent) setHeaderOnParent(TableHeaderComponent);\n }, [TableHeaderComponent, setHeaderOnParent]);\n\n return (\n <TableContext.Provider\n value={{\n tableWrapper, tableBodyWrapper, lastNonStickyColumnIndex, search: searchConfig?.search,\n columnFilters: filterConfig?.columnFilters, onRowClick, onSort: sortConfig?.onSort,\n onFilter: filterConfig?.onFilter, toggleShowFilters, toggleShowSorts,\n onRemoveFilter: filterConfig?.onRemoveFilter, onClearFilter: filterConfig?.onClearFilter,\n rowOptions, checkboxConfig, onResetFilter: filterConfig?.onResetFilter, isColumnConfigurable,\n onAddColumnClick, onEditColumnClick, onDeleteColumnClick, onRowTooltipClick, tooltiptext,\n cascadingTableConfig, activeInlineEdit, setActiveInlineEdit, originalsOnly,\n disableOptionsForRowIndex, getFullRowDataOnClick, getSumOfNextVisibleColumnWidth,\n onRowEdit, inlineEditColumns, tableActions, dndSortableUtils, withSortable, withDraggable,\n onCascadingRowExpand, getInnerRowData, tableHeaders, maxLevel, expandedRows, setExpandedRows,\n showNewItem, rawData, dragConfig, rowWrapper, rowLinkConfig, isCellClickDisabled,\n asyncRowOptionsFilter: filterConfig?.asyncRowOptionsFilter, handleUpdateColumnWidth,\n multiSelectConfig, headerContextOptions, showHeaderContextOptions, setShowHeaderContextOptions: setShowHeaderContextOptions as ((value: string | null) => void) | undefined,\n headerDivWidth, showDataTypeIcon, rowAdditionalActions, hoverConfig, rowAdditionalActionsWidth,\n cellEditing, cellEditingValue, openMasterDataModal, closeMasterDataModal, selectedMasterData,\n clearSelectedMasterData, allowInlineEdit, openCurrencyDropdown, closeCurrencyDropdown,\n currencyDropdownConfig, selectedCurrenciesMap, setCurrencyForCell, getCurrencyForCell,\n pendingEdits, addPendingEdit, removePendingEdit, getPendingEdit, hasPendingEdit,\n clearAllPendingEdits, saveAllPendingEdits, clearRowPendingEdits, saveRowPendingEdits,\n pendingEditsCount, scrollToCell, onFieldOperationFlow, fieldOperationLoading, validateAllPendingEdits,\n }}\n >\n {showHeader ? (\n <div\n ref={headerDivRef}\n className={`mb-2 flex w-full min-w-0 gap-2 dark:bg-black-800 ${\n headerDivWidth < FIRST_BREAKPOINT ? 'flex-col items-stretch' : 'flex-row items-center'\n }`}\n >\n <div\n className={`flex items-center gap-x-2 gap-y-1 ${\n headerDivWidth < FIRST_BREAKPOINT ? 'w-full flex-wrap' : ''\n } ${headerConfig?.content ? 'min-w-0 flex-1' : 'shrink-0'}`}\n >\n {headerConfig?.content ? (\n <div className={`min-w-0 ${headerDivWidth < FIRST_BREAKPOINT ? 'w-full' : 'flex-1'}`}>\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 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 ) : headerConfig?.preContent ? (\n <div className='flex min-w-0 shrink-0 justify-start items-center'>{headerConfig.preContent}</div>\n ) : null}\n </div>\n <div\n className={`flex min-w-0 items-center justify-end ${\n headerDivWidth < FIRST_BREAKPOINT ? 'w-full' : headerConfig?.content ? 'shrink-0' : 'flex-1'\n } ${headerDivWidth < SECOND_BREAKPOINT ? 'flex-col' : 'flex-row'} ${\n headerConfig?.postContent ? 'gap-2' : ''\n }`}\n >\n {showRecordCount && headerConfig?.preContent ? (\n <div className='flex w-full justify-start items-center'>{headerConfig.preContent}</div>\n ) : null}\n <div\n className={`flex justify-end items-center min-w-0 ${\n headerDivWidth < SECOND_BREAKPOINT ? 'w-full' : headerDivWidth < FIRST_BREAKPOINT ? 'w-full' : ''\n }`}\n >\n {TableHeaderComponent}\n </div>\n {headerConfig?.postContent ? (\n <div className={`flex justify-end items-center ${headerDivWidth < SECOND_BREAKPOINT ? 'w-full' : ''}`}>\n {headerConfig.postContent}\n </div>\n ) : null}\n </div>\n </div>\n ) : null}\n {headerConfig?.showDivider ? <div className='border-b pb-2 w-full dark:bg-black-800' /> : null}\n {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({ sort: sortConfig?.columnSort, onRemoveSort: handleRemoveSort, onSort: sortConfig?.onSort, tableHeaders, data })\n ) : null}\n {showFilters && showSorts && 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) && tableConfig?.renderActiveFilters && (\n tableConfig.renderActiveFilters({\n filters: filterConfig?.columnFilters, onRemoveFilter: handleActiveRemoveFilter,\n onClearFilter: handleActiveClearFilter, onResetFilter: filterConfig?.onResetFilter,\n onFilter: filterConfig?.onFilter, tableHeaders, columnFilters: filterConfig?.columnFilters,\n modelName, enableMasterDataEnumSuggestions, noSpacing: true, notionStyle: filterConfig?.notionStyle, context: filterConfig?.context, data: enumSuggestionsData ?? data,\n agreementCategoryId,\n agreementDomainId,\n agreementId,\n modificationId,\n lineItemRowId\n })\n )}\n {tableConfig?.renderFilterButtons && (\n tableConfig.renderFilterButtons({\n onClearFilter: filterConfig?.onClearFilter, onClose: toggleDataFilterModal,\n modelName, enableMasterDataEnumSuggestions, defaultFilterColumn: newFilterColumn, resetDefaultFilterColumn: () => setNewFilterColumn(null),\n column: dataFilterColumn, onFilter: filterConfig?.onFilter, tableHeaders,\n columnFilters: filterConfig?.columnFilters, data: enumSuggestionsData ?? data, notionStyle: filterConfig?.notionStyle,\n context: filterConfig?.context,\n agreementCategoryId,\n agreementDomainId,\n agreementId,\n modificationId,\n lineItemRowId,\n })\n )}\n </div>\n ) : null}\n </div>\n </div>\n ) : null}\n {floatingBarConfig && Object.keys(floatingBarConfig).length ? <FloatingBar {...floatingBarConfig} /> : 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'>{headerConfig.preContent}</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 ? { height: data?.length > 0 ? `${(data?.length + 1) * 41 + 4}px` : '350px' }\n : { height: fallbackHeight }),\n ...style,\n }}\n >\n {enableRootDrag ? (\n tableView\n ) : (\n <DndContext sensors={sensors} onDragEnd={handleDragEnd} onDragStart={handleDragStart} onDragCancel={handleDragCancel} collisionDetection={closestCorners}>\n {tableView}\n {activeItem\n ? createPortal(\n <DragOverlay adjustScale={true} dropAnimation={dropAnimation}>\n <table {...getTableProps()} 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 <tbody {...getTableBodyProps()} className='bg-transparent divide-y divide-neutral-200'>\n {void prepareRow(activeItem)}\n <Row key={(activeItem.original as Record<string, unknown>).id as string} row={activeItem as never} index={rows?.findIndex((item) => item.id === (activeItem.original as Record<string, unknown>).id)} />\n </tbody>\n </table>\n </DragOverlay>,\n document.getElementById('full-screen-container') || document.body,\n )\n : null}\n </DndContext>\n )}\n </div>\n {paginationConfig && tableConfig?.renderPagination ? tableConfig.renderPagination(paginationConfig) : null}\n\n {tableConfig?.renderMasterDataModal && tableConfig.renderMasterDataModal({\n isVisible: !!masterDataModalConfig, onSelected: handleMasterDataSelected, onClose: closeMasterDataModal,\n masterDataColumnName: masterDataModalConfig?.masterDataColumnName, masterDataFilters: masterDataModalConfig?.masterDataFilters,\n masterDataName: masterDataModalConfig?.masterDataName, masterDataId: masterDataModalConfig?.masterDataName, showFilters: true,\n })}\n\n <CurrencyDropdownPortal config={currencyDropdownConfig} onClose={closeCurrencyDropdown} />\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","FIRST_BREAKPOINT","SECOND_BREAKPOINT","CREATE_COLUMN_LABEL","getEmptyButtonId","label","index","InfiniteTable","React","tableKey","searchConfig","filterConfig","sortConfig","headerConfig","hoverConfig","columns","modelName","enableMasterDataEnumSuggestions","agreementCategoryId","agreementDomainId","agreementId","modificationId","lineItemRowId","enumSuggestionsData","data","onRowClick","showHeader","tableActions","rowOptions","hideRowOptionWidth","checkboxUtilities","isLoading","onScroll","onScrolling","isColumnConfigurable","onAddColumnClick","emptyMessage","noDataWidget","buttons","onEditColumnClick","onDeleteColumnClick","onRowTooltipClick","tooltiptext","cascadingTableConfig","originalsOnly","disableOptionsForRowIndex","tableHeightClass","getFullRowDataOnClick","onRowEdit","onBulkRowEdit","inlineEditColumns","isResizable","paginationConfig","dndSortableUtils","multipleContexts","withSortable","withDraggable","enableRootDrag","pageSize","onCascadingRowExpand","totalItems","showRecordCount","getInnerRowData","maxLevel","expandedRows","setExpandedRows","showNewItem","rawData","dragConfig","isOverlayLoading","style","floatingBarConfig","rowWrapper","rowLinkConfig","isCellClickDisabled","setHeaderOnParent","optimizeTable","multiSelectConfig","headerContextOptions","showHeaderContextOptions","setShowHeaderContextOptions","showDataTypeIcon","rowAdditionalActions","rowAdditionalActionsWidth","setVisibleHeaders","cellEditing","cellEditingValue","allowInlineEdit","onFieldOperationFlow","fieldOperationLoading","onTableActionsReady","onPendingEditsChange","onCancelPendingEdits","tableConfig","useTableConfig","isSearch","isFilters","isAnyFilters","isCheckbox","defaultTableView","selectedTableView","setSelectedTableView","useState","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","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","scrollContainer","scrollLeft","i","validateAllPendingEdits","editsToValidate","hasErrors","firstError","updatedEdits","errorTypes","getValidationToastMessage","hasRequired","hasFormat","saveAllPendingEdits","row","editedRows","originalRow","updatedRow","editedFields","clearRowPendingEdits","n","k","saveRowPendingEdits","editedRowData","pendingEditsCount","useMemo","total","pendingEditsList","list","rowsWithPendingEdits","rowsMap","a","b","openMasterDataModal","config","closeMasterDataModal","handleMasterDataSelected","value","clearSelectedMasterData","openCurrencyDropdown","closeCurrencyDropdown","setCurrencyForCell","cellKey","currency","getCurrencyForCell","fallbackHeight","pxMatch","calcMatch","emptySwitchProps","translatedCreateColumnLabel","defaultEmptyText","resolvedEmptyText","loaderData","cellLoaders","tableLoaders","visibleColumns","header","table","useTable","useResizeColumns","getTableProps","getTableBodyProps","headerGroups","prepareRow","rows","headerKeys","groups","checkboxConfig","useCheckbox","sensors","useSensors","useSensor","MouseSensor","TouchSensor","dropAnimation","computeList","acc","contextKey","e","handleDragStart","event","active","item","handleDragEnd","over","newState","handleDragCancel","toggleHeaderOption","key","toggleDataFilterModal","handleRemoveSort","toggleShowFilters","toggleShowSorts","lastNonStickyColumnIndex","reverseHeaders","getSumOfNextVisibleColumnWidth","currentIndex","sum","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","Typography","FloatingBar","DndContext","closestCorners","createPortal","DragOverlay","Row","CurrencyDropdownPortal","PendingEditsFloatingBar"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.es.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 { mergeViewColumnsWithTableColumns } 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 { DndContext, DragOverlay, type DragEndEvent, type DragStartEvent, type DropAnimation, MouseSensor, TouchSensor, closestCorners, useSensor, useSensors } from '@dnd-kit/core';\nimport React, { forwardRef, useCallback, useEffect, useMemo, useRef, useState } 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 { CurrencyDropdownPortal } from './CurrencyDropdownPortal';\nimport { Head } from './head';\nimport { PendingEditsFloatingBar } from './PendingEditsFloatingBar';\nimport type { ICurrencyDropdownConfig, IColumn, IMasterDataModalConfig, ITableProps, ITableView, PendingEditsMap, IPendingEdit } from './types';\nimport { Add2Icon } from '../../icon';\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 FIRST_BREAKPOINT = 700;\nconst SECOND_BREAKPOINT = 430;\nconst CREATE_COLUMN_LABEL = 'Create Column';\n\nconst getEmptyButtonId = (label: string, index: number): string => {\n const slug = label.toLowerCase().trim().replace(/\\s+/g, '-').replace(/[^a-z0-9-_]/g, '');\n return `button-admin-${slug || index}`;\n};\n\nexport const InfiniteTable = React.memo(\n ({\n tableKey,\n searchConfig = { search: '', handleSearch: () => null, allowAStarSearch: false },\n filterConfig = {\n columnFilters: [],\n onFilter: () => null,\n onRemoveFilter: () => null,\n onClearFilter: () => null,\n onResetFilter: () => Promise.resolve({}),\n asyncRowOptionsFilter: () => Promise.resolve({}),\n },\n sortConfig = { onSort: () => null, columnSort: { field: '', order: '' }, onRemoveSort: () => null },\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 agreementCategoryId,\n agreementDomainId,\n agreementId,\n modificationId,\n lineItemRowId,\n enumSuggestionsData,\n data = [],\n onRowClick,\n showHeader,\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 = 10,\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 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 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 = tableConfig?.getTableView?.(tableKey as string) ?? null;\n const [selectedTableView, setSelectedTableView] = useState<ITableView | null>(defaultTableView || null);\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>(null);\n const [showDataFilterModal, setShowDataFilterModal] = useState<boolean>(false);\n const [dataFilterColumn, setDataFilterColumn] = useState<unknown>(null);\n const [isAllChecked, setIsAllChecked] = useState(false);\n const [isShowSortArrowAsc, setIsShowSortArrowAsc] = useState<string | null>(null);\n const [isShowSortArrowDesc, setIsShowSortArrowDesc] = useState<string | null>(null);\n const [sortableListByContext, setSortableListByContext] = useState<Record<string, unknown>>({});\n const [activeItem, setActiveItem] = useState<ReactTableRow<object> | null>(null);\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({ width: 0, height: 0 });\n const [activeInlineEdit, setActiveInlineEdit] = useState<{ rowId: string; columnKey: string } | null>(null);\n const [masterDataModalConfig, setMasterDataModalConfig] = useState<IMasterDataModalConfig | null>(null);\n const [selectedMasterData, setSelectedMasterData] = useState<{ value: unknown; reference: unknown } | null>(null);\n const [currencyDropdownConfig, setCurrencyDropdownConfig] = useState<ICurrencyDropdownConfig | null>(null);\n const [selectedCurrenciesMap, setSelectedCurrenciesMap] = useState<Record<string, string>>({});\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>(() => ({}) as ITableView);\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 = edit.validationError;\n if (resolvedValidationError === undefined) {\n const column = tableHeaders.find((col) => col.key === columnKey);\n if (column) {\n const result = validateCellValue(edit.value, column as { type?: string; is_required?: boolean });\n resolvedValidationError = !result.isValid ? (result.error || 'Invalid') : null;\n } else {\n resolvedValidationError = existingEdit?.validationError ?? null;\n }\n }\n return { ...prev, [rowId]: { ...(prev[rowId] || {}), [columnKey]: { ...edit, validationError: resolvedValidationError ?? null } } };\n });\n },\n [tableHeaders],\n );\n\n const hasPendingEdits = useCallback(() => {\n return Object.values(pendingEdits).some((rowEdits) => Object.keys(rowEdits).length > 0);\n }, [pendingEdits]);\n\n useEffect(() => {\n if (onTableActionsReady) onTableActionsReady({ addPendingEdit: addPendingEdit as (rowId: string, columnKey: string, edit: { value: unknown; originalValue?: unknown; meta?: unknown }) => void, hasPendingEdits });\n }, [onTableActionsReady, addPendingEdit, hasPendingEdits]);\n\n const removePendingEdit = useCallback((rowId: string, columnKey: string) => {\n setPendingEdits((prev) => {\n const newEdits = { ...prev };\n if (newEdits[rowId]) {\n const { [columnKey]: _removed, ...rest } = newEdits[rowId]; 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 const getPendingEdit = useCallback(\n (rowId: string, columnKey: string): IPendingEdit | undefined => pendingEdits[rowId]?.[columnKey],\n [pendingEdits],\n );\n\n const hasPendingEdit = useCallback(\n (rowId: string, columnKey: string): boolean => Boolean(pendingEdits[rowId]?.[columnKey]),\n [pendingEdits],\n );\n\n const clearAllPendingEdits = useCallback(() => {\n if (fieldOperationLoading) return;\n if (onCancelPendingEdits && Object.keys(pendingEdits).length > 0) 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((col) => col.key === columnKey);\n setTimeout(() => {\n const cellElement = document.querySelector(`[data-row-id=\"${rowId}\"] [data-column-key=\"${columnKey}\"]`);\n if (cellElement) {\n cellElement.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'center' });\n } else if (colIndex > 0) {\n const scrollContainer = document.querySelector('.os-viewport');\n if (scrollContainer) {\n let scrollLeft = 0;\n for (let i = 0; i < colIndex; i++) {\n const col = tableHeaders[i];\n if (!col?.sticky) scrollLeft += col?.width || 200;\n }\n scrollLeft = Math.max(0, scrollLeft - 200);\n scrollContainer.scrollTo({ left: scrollLeft, behavior: 'smooth' });\n }\n }\n setActiveInlineEdit({ rowId, columnKey });\n }, 350);\n }, 100);\n },\n [tableHeaders, tableConfig],\n );\n\n const validateAllPendingEdits = useCallback(\n (editsToValidate: PendingEditsMap): { hasErrors: boolean; updatedEdits: PendingEditsMap; firstError: { rowId: string; columnKey: string } | null; errorTypes: Set<string> } => {\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(edit.value, column as { type?: string; is_required?: boolean });\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] = { ...edit, validationError: result.error };\n } else {\n updatedEdits[rowId][columnKey] = { ...edit, validationError: null };\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) return 'Missing required field(s) and invalid format detected. Please review highlighted field(s).';\n if (hasRequired) 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 } = validateAllPendingEdits(pendingEdits);\n if (hasErrors) {\n setPendingEdits(updatedEdits);\n tableConfig?.showNotification?.('error', getValidationToastMessage(errorTypes));\n if (firstError) {\n const rowIndex = data.findIndex((row: Record<string, unknown>) => row.id === firstError!.rowId);\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((row: Record<string, unknown>) => row.id === rowId);\n if (originalRow) {\n const updatedRow = { ...originalRow };\n const editedFields: Record<string, { value: unknown; meta?: unknown }> = {};\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) onRowEdit(null, null, null, null, null, { isBulk: true, rows: editedRows });\n }\n\n setPendingEdits({});\n setSelectedCurrenciesMap({});\n setActiveInlineEdit(null);\n }, [pendingEdits, data, onRowEdit, onBulkRowEdit, validateAllPendingEdits, getValidationToastMessage, scrollToCell, tableConfig]);\n\n const clearRowPendingEdits = useCallback(\n (rowId: string) => {\n if (fieldOperationLoading) return;\n const rowEdits = pendingEdits[rowId];\n if (rowEdits && onCancelPendingEdits) onCancelPendingEdits({ [rowId]: rowEdits });\n setPendingEdits((prev) => { const n = { ...prev }; delete n[rowId]; return n; });\n setSelectedCurrenciesMap((prev) => { const n = { ...prev }; Object.keys(n).forEach((k) => { if (k.startsWith(`${rowId}-`)) delete n[k]; }); return 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 } = validateAllPendingEdits({ [rowId]: rowEdits });\n if (hasErrors) {\n setPendingEdits((prev) => ({ ...prev, [rowId]: updatedEdits[rowId] }));\n tableConfig?.showNotification?.('error', getValidationToastMessage(errorTypes));\n if (firstError) {\n const rowIndex = data.findIndex((row: Record<string, unknown>) => row.id === firstError!.rowId);\n scrollToCell(firstError!.rowId, firstError!.columnKey, rowIndex);\n }\n return;\n }\n\n const originalRow = data.find((row: Record<string, unknown>) => row.id === rowId);\n if (!originalRow) return;\n const updatedRow = { ...originalRow };\n const editedFields: Record<string, { value: unknown; meta?: unknown }> = {};\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) onRowEdit(null, null, null, null, null, { isBulk: true, rows: [editedRowData] });\n\n setPendingEdits((prev) => { const n = { ...prev }; delete n[rowId]; return n; });\n setSelectedCurrenciesMap((prev) => { const n = { ...prev }; Object.keys(n).forEach((k) => { if (k.startsWith(`${rowId}-`)) delete n[k]; }); return n; });\n setActiveInlineEdit(null);\n },\n [pendingEdits, data, onRowEdit, onBulkRowEdit, validateAllPendingEdits, getValidationToastMessage, scrollToCell, tableConfig],\n );\n\n const pendingEditsCount = useMemo(() => {\n return Object.values(pendingEdits).reduce((total, rowEdits) => total + Object.keys(rowEdits).length, 0);\n }, [pendingEdits]);\n\n useEffect(() => {\n onPendingEditsChange?.(pendingEditsCount > 0, pendingEditsCount);\n }, [pendingEditsCount, onPendingEditsChange]);\n\n const pendingEditsList = useMemo(() => {\n const list: Array<{ rowId: string; columnKey: string; fieldName: string; value: unknown; originalValue: unknown; meta?: IPendingEdit['meta']; originalMeta?: IPendingEdit['originalMeta']; rowIndex: number }> = [];\n Object.entries(pendingEdits).forEach(([rowId, rowEdits]) => {\n const rowIndex = data.findIndex((row: Record<string, unknown>) => row.id === rowId);\n Object.entries(rowEdits).forEach(([columnKey, edit]) => {\n const column = tableHeaders.find((col) => col.key === columnKey);\n list.push({ rowId, columnKey, fieldName: column?.Header || column?.display_name || columnKey, value: edit.value, originalValue: edit.originalValue, meta: edit.meta, originalMeta: edit.originalMeta, rowIndex });\n });\n });\n return list;\n }, [pendingEdits, tableHeaders, data]);\n\n const rowsWithPendingEdits = useMemo(() => {\n const rowsMap = new Map<string, { rowId: string; rowIndex: number; editCount: number }>();\n Object.entries(pendingEdits).forEach(([rowId, rowEdits]) => {\n const rowIndex = data.findIndex((row: Record<string, unknown>) => row.id === rowId);\n rowsMap.set(rowId, { rowId, rowIndex, editCount: Object.keys(rowEdits).length });\n });\n return Array.from(rowsMap.values()).sort((a, b) => a.rowIndex - b.rowIndex);\n }, [pendingEdits, data]);\n\n const openMasterDataModal = useCallback((config: IMasterDataModalConfig) => setMasterDataModalConfig(config), []);\n const closeMasterDataModal = useCallback(() => setMasterDataModalConfig(null), []);\n\n const handleMasterDataSelected = useCallback(\n (value: unknown, row?: unknown) => {\n setSelectedMasterData({ value, reference: row });\n if (masterDataModalConfig?.onSelected) masterDataModalConfig.onSelected(value, row);\n closeMasterDataModal();\n },\n [masterDataModalConfig, closeMasterDataModal],\n );\n\n const clearSelectedMasterData = useCallback(() => setSelectedMasterData(null), []);\n\n const openCurrencyDropdown = useCallback((config: ICurrencyDropdownConfig) => setCurrencyDropdownConfig(config), []);\n const closeCurrencyDropdown = useCallback(() => setCurrencyDropdownConfig(null), []);\n\n const setCurrencyForCell = useCallback((cellKey: string, currency: string) => {\n setSelectedCurrenciesMap((prev) => ({ ...prev, [cellKey]: currency }));\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) 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 = tableConfig?.t?.(CREATE_COLUMN_LABEL) ?? CREATE_COLUMN_LABEL;\n const defaultEmptyText = isAnyFilters ? 'No Results Found' : emptyMessage || 'No Data Found';\n const resolvedEmptyText = typeof defaultEmptyText === 'string' ? (tableConfig?.t?.(defaultEmptyText) ?? defaultEmptyText) : 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(() => tableHeaders.filter((header) => Boolean(header?.visible)), [tableHeaders]);\n\n const table = useTable(\n {\n columns: optimizeTable ? visibleColumns : tableHeaders,\n data: [...data, ...(isLoading ? (data?.length ? cellLoaders : tableLoaders) : [])],\n defaultColumn: { minWidth: 100, width: 200, maxWidth: 999999 },\n },\n useResizeColumns,\n );\n\n const { getTableProps, getTableBodyProps, headerGroups, prepareRow, rows } = table;\n headerGroupsRef.current = headerGroups;\n\n const headerKeys = JSON.stringify(headerGroups[0]?.headers?.map((header) => (header as unknown as Record<string, unknown>)?.Header));\n useEffect(() => {\n if (setVisibleHeaders) {\n const groups = headerGroupsRef.current as Array<{ headers?: Array<Record<string, unknown>> }> | null;\n setVisibleHeaders?.(groups?.[0]?.headers?.map((header) => header?.Header as string) ?? []);\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 (ids: string[]) => void,\n checkboxMetadata: checkboxUtilities?.checkboxMetadata as { checkedIds: string[]; tooltip: string; highlight: string },\n });\n\n const sensors = useSensors(\n useSensor(MouseSensor, { activationConstraint: { distance: 5 } }),\n useSensor(TouchSensor, { activationConstraint: { distance: 5 } }),\n );\n\n const dropAnimation: DropAnimation = { easing: 'cubic-bezier(0.18, 0.67, 0.6, 1.22)', duration: 20 };\n\n function computeList() {\n if (!multipleContexts?.length || !withSortable) return rows;\n return multipleContexts.reduce((acc: Record<string, unknown>, contextKey: string) => {\n acc[contextKey] = rows.filter((e) => (e.original as Record<string, unknown>)?.type === contextKey);\n return acc;\n }, {});\n }\n computeListRef.current = computeList;\n\n const handleDragStart = (event: DragStartEvent) => {\n const { active } = event;\n setActiveItem(rows.find((item) => (item.original as Record<string, unknown>)?.id === active?.id) ?? null);\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over) return;\n if (dndSortableUtils?.checkDndDragEnd) {\n dndSortableUtils.checkDndDragEnd(active, over, sortableListByContext, (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>)?.type,\n droppedType: (over.data.current as Record<string, unknown>)?.type,\n updatedList: newState,\n cb: () => setDndLoading(false),\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(() => setShowSorts(prev => !prev), []);\n\n const lastNonStickyColumnIndex = () => {\n const reverseHeaders = (headerGroups[0]?.headers as unknown as Array<Record<string, unknown>>)?.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) sum += visibleColumns[i].width ?? 0;\n }\n if (rowAdditionalActions) sum += rowAdditionalActionsWidth || 40;\n if (rowOptions) sum += hideRowOptionWidth ? 0 : 28;\n return sum;\n },\n [visibleColumns, rowAdditionalActionsWidth, hideRowOptionWidth, rowAdditionalActions, rowOptions],\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: selectedTableView?.columns || 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) => (column.name === columnName ? { ...column, width } : column)),\n unsaved: true,\n });\n };\n\n useEffect(() => {\n if (filterConfig?.columnFilters?.length > 0) setShowFilters(true);\n const currentView = selectedTableViewRef.current;\n if (JSON.stringify(currentView?.filters || []) !== JSON.stringify(filterConfig?.columnFilters || [])) {\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 = hasViewFilters && !hasConfigFilters && !userClearedFiltersRef.current;\n if (!isClearingFilters) {\n const updatedTableView = resolveTableViewRef.current();\n setSelectedTableView({ ...updatedTableView, filters: JSON.parse(JSON.stringify(filterConfig?.columnFilters || [])), unsaved: true });\n }\n userClearedFiltersRef.current = false;\n }\n }, [filterConfig?.columnFilters]);\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') { setIsShowSortArrowAsc(sortConfig.columnSort.field); setIsShowSortArrowDesc(null); }\n else if (sortConfig.columnSort.order === 'desc') { setIsShowSortArrowDesc(sortConfig.columnSort.field); setIsShowSortArrowAsc(null); }\n } else { setIsShowSortArrowAsc(null); setIsShowSortArrowDesc(null); }\n }, [sortConfig?.columnSort?.field, sortConfig?.columnSort?.order]);\n\n useEffect(() => {\n setTableHeaders(mergeViewColumnsWithTableColumns(selectedTableViewRef.current?.columns || [], columns));\n }, [columns]);\n\n useEffect(() => {\n if (selectedTableView?.unsaved) tableConfigRef.current?.persistTableView?.(selectedTableView);\n }, [selectedTableView]);\n\n useEffect(() => { setSortableListByContext(computeListRef.current() as Record<string, unknown>); }, [rows.length]);\n\n useEffect(() => {\n setSelectedTableView(defaultTableView || null);\n if (defaultTableView?.columns) {\n setTableHeaders(mergeViewColumnsWithTableColumns(defaultTableView?.columns || [], columnsRef.current));\n }\n if (defaultTableView?.filters && defaultTableView.filters.length > 0 && !hasAppliedInitialFilters.current) {\n requestAnimationFrame(() => { filterConfigRef.current?.onFilter?.(defaultTableView.filters); });\n hasAppliedInitialFilters.current = true;\n } else if (defaultTableView?.filters && hasAppliedInitialFilters.current) {\n const filtersAreDifferent = JSON.stringify(defaultTableView.filters) !== JSON.stringify(filterConfigRef.current?.columnFilters);\n if (filtersAreDifferent) filterConfigRef.current?.onFilter?.(defaultTableView.filters);\n }\n }, [defaultTableView]);\n\n useEffect(() => {\n if (headerDivRef.current) {\n const resizeObserver = new ResizeObserver((entries) => setHeaderDivWidth(entries[0].contentRect.width));\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={sortConfig?.onSort as ((field: string, order?: string) => void) | undefined}\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={onAddColumnClick as (column: { id: string; key: string; [k: string]: unknown }) => void}\n onEditColumnClick={onEditColumnClick as (column: { id: string; key: string; [k: string]: unknown }) => void}\n onDeleteColumnClick={onDeleteColumnClick as (column: { id: string; key: string; [k: string]: unknown }) => void}\n tableActions={(tableActions || null)}\n isLoading={isLoading}\n rowAdditionalActions={(rowAdditionalActions ?? null) as (() => React.ReactNode) | null}\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 ? tableConfig.renderEmpty(emptySwitchProps) : (\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 ? <NoDataFoundWidgets widgetType='TABLE' /> : <NoDataFound text={resolvedEmptyText} />}\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={onAddColumnClick as ((event: React.MouseEvent<HTMLButtonElement>) => void) | undefined}\n >\n <Add2Icon className='text-white dark:text-white' /> {translatedCreateColumnLabel}\n </Button>\n </div>\n ) : null}\n {!isAnyFilters &&\n buttons?.map((button, index) => (\n <Button key={`${button.label}-${index}`} status='secondary' id={getEmptyButtonId(button.label, index)} onClick={button.onClick}>\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 = width > 0 ? width : tableContainerSize.width;\n const effectiveHeight = height > 0 ? height : tableContainerSize.height;\n return effectiveWidth > 0 && effectiveHeight > 0 ? (\n <Body\n {...{\n getTableBodyProps: getTableBodyProps as unknown as () => Record<string, unknown>, rows: rows as never, prepareRow: prepareRow as never, isLoading, onScroll, onScrolling, columns, width: effectiveWidth, height: effectiveHeight, withSortable,\n allowAstarSearch: searchConfig?.allowAStarSearch || false,\n }}\n />\n ) : null;\n }}\n />\n )}\n </div>\n </>\n );\n\n const tableWrapper = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>((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<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>((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, search: searchConfig?.search, handleSearch: searchConfig?.handleSearch,\n toggleShowFilters, toggleShowSorts, filterCounts: filterConfig?.columnFilters?.length,\n columns, columnFilters: filterConfig?.columnFilters, setSelectedTableView, selectedTableView,\n enableTableView: headerConfig?.showTableView, modelName: modelName as string,\n enableMasterDataEnumSuggestions,\n onRemoveFilter: filterConfig?.onRemoveFilter, onClearFilter: filterConfig?.onClearFilter,\n onFilter: filterConfig?.onFilter, data: enumSuggestionsData ?? data, tableHeaders, showTableViewAsModal: headerConfig?.showTableViewAsModal,\n additionalOptions: headerConfig?.additionalOptions, inlineActions: headerConfig?.inlineActions, showFilters: headerConfig?.showFilters,\n showSorts: headerConfig?.showSorts, showSearch: headerConfig?.showSearch,\n isLoading: Boolean(headerConfig?.isLoading), setTableHeaders,\n allowAStarSearch: Boolean(searchConfig?.allowAStarSearch), withContent: !!headerConfig?.content,\n setShowFilters, sort: sortConfig?.columnSort, onSort: sortConfig?.onSort, onRemoveSort: handleRemoveSort,\n showExportButton: headerConfig?.showExportButton,\n agreementCategoryId,\n agreementDomainId,\n agreementId,\n modificationId,\n lineItemRowId\n });\n }\n return null;\n }, [\n tableKey, searchConfig?.search, searchConfig?.handleSearch, toggleShowFilters, toggleShowSorts,\n filterConfig?.columnFilters, columns, setSelectedTableView, selectedTableView, headerConfig,\n modelName, filterConfig?.onRemoveFilter, filterConfig?.onClearFilter, filterConfig?.onFilter,\n data, enumSuggestionsData, tableHeaders, sortConfig?.columnSort, sortConfig?.onSort, handleRemoveSort, tableConfig,\n searchConfig?.allowAStarSearch, enableMasterDataEnumSuggestions,agreementCategoryId, agreementDomainId, agreementId,modificationId,lineItemRowId,\n ]);\n\n useEffect(() => {\n if (setHeaderOnParent) setHeaderOnParent(TableHeaderComponent);\n }, [TableHeaderComponent, setHeaderOnParent]);\n\n return (\n <TableContext.Provider\n value={{\n tableWrapper, tableBodyWrapper, lastNonStickyColumnIndex, search: searchConfig?.search,\n columnFilters: filterConfig?.columnFilters, onRowClick, onSort: sortConfig?.onSort,\n onFilter: filterConfig?.onFilter, toggleShowFilters, toggleShowSorts,\n onRemoveFilter: filterConfig?.onRemoveFilter, onClearFilter: filterConfig?.onClearFilter,\n rowOptions, checkboxConfig, onResetFilter: filterConfig?.onResetFilter, isColumnConfigurable,\n onAddColumnClick, onEditColumnClick, onDeleteColumnClick, onRowTooltipClick, tooltiptext,\n cascadingTableConfig, activeInlineEdit, setActiveInlineEdit, originalsOnly,\n disableOptionsForRowIndex, getFullRowDataOnClick, selectedRowId, getSumOfNextVisibleColumnWidth,\n onRowEdit, inlineEditColumns, tableActions, dndSortableUtils, withSortable, withDraggable,\n onCascadingRowExpand, getInnerRowData, tableHeaders, maxLevel, expandedRows, setExpandedRows,\n showNewItem, rawData, dragConfig, rowWrapper, rowLinkConfig, isCellClickDisabled,\n asyncRowOptionsFilter: filterConfig?.asyncRowOptionsFilter, handleUpdateColumnWidth,\n multiSelectConfig, headerContextOptions, showHeaderContextOptions, setShowHeaderContextOptions: setShowHeaderContextOptions as ((value: string | null) => void) | undefined,\n headerDivWidth, showDataTypeIcon, rowAdditionalActions, hoverConfig, rowAdditionalActionsWidth,\n cellEditing, cellEditingValue, openMasterDataModal, closeMasterDataModal, selectedMasterData,\n clearSelectedMasterData, allowInlineEdit, openCurrencyDropdown, closeCurrencyDropdown,\n currencyDropdownConfig, selectedCurrenciesMap, setCurrencyForCell, getCurrencyForCell,\n pendingEdits, addPendingEdit, removePendingEdit, getPendingEdit, hasPendingEdit,\n clearAllPendingEdits, saveAllPendingEdits, clearRowPendingEdits, saveRowPendingEdits,\n pendingEditsCount, scrollToCell, onFieldOperationFlow, fieldOperationLoading, validateAllPendingEdits,\n }}\n >\n {showHeader ? (\n <div\n ref={headerDivRef}\n className={`mb-2 flex w-full min-w-0 gap-2 dark:bg-black-800 ${\n headerDivWidth < FIRST_BREAKPOINT ? 'flex-col items-stretch' : 'flex-row items-center'\n }`}\n >\n <div\n className={`flex items-center gap-x-2 gap-y-1 ${\n headerDivWidth < FIRST_BREAKPOINT ? 'w-full flex-wrap' : ''\n } ${headerConfig?.content ? 'min-w-0 flex-1' : 'shrink-0'}`}\n >\n {headerConfig?.content ? (\n <div className={`min-w-0 ${headerDivWidth < FIRST_BREAKPOINT ? 'w-full' : 'flex-1'}`}>\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 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 ) : headerConfig?.preContent ? (\n <div className='flex min-w-0 shrink-0 justify-start items-center'>{headerConfig.preContent}</div>\n ) : null}\n </div>\n <div\n className={`flex min-w-0 items-center justify-end ${\n headerDivWidth < FIRST_BREAKPOINT ? 'w-full' : headerConfig?.content ? 'shrink-0' : 'flex-1'\n } ${headerDivWidth < SECOND_BREAKPOINT ? 'flex-col' : 'flex-row'} ${\n headerConfig?.postContent ? 'gap-2' : ''\n }`}\n >\n {showRecordCount && headerConfig?.preContent ? (\n <div className='flex w-full justify-start items-center'>{headerConfig.preContent}</div>\n ) : null}\n <div\n className={`flex justify-end items-center min-w-0 ${\n headerDivWidth < SECOND_BREAKPOINT ? 'w-full' : headerDivWidth < FIRST_BREAKPOINT ? 'w-full' : ''\n }`}\n >\n {TableHeaderComponent}\n </div>\n {headerConfig?.postContent ? (\n <div className={`flex justify-end items-center ${headerDivWidth < SECOND_BREAKPOINT ? 'w-full' : ''}`}>\n {headerConfig.postContent}\n </div>\n ) : null}\n </div>\n </div>\n ) : null}\n {headerConfig?.showDivider ? <div className='border-b pb-2 w-full dark:bg-black-800' /> : null}\n {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({ sort: sortConfig?.columnSort, onRemoveSort: handleRemoveSort, onSort: sortConfig?.onSort, tableHeaders, data })\n ) : null}\n {showFilters && showSorts && 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) && tableConfig?.renderActiveFilters && (\n tableConfig.renderActiveFilters({\n filters: filterConfig?.columnFilters, onRemoveFilter: handleActiveRemoveFilter,\n onClearFilter: handleActiveClearFilter, onResetFilter: filterConfig?.onResetFilter,\n onFilter: filterConfig?.onFilter, tableHeaders, columnFilters: filterConfig?.columnFilters,\n modelName, enableMasterDataEnumSuggestions, noSpacing: true, notionStyle: filterConfig?.notionStyle, context: filterConfig?.context, data: enumSuggestionsData ?? data,\n agreementCategoryId,\n agreementDomainId,\n agreementId,\n modificationId,\n lineItemRowId\n })\n )}\n {tableConfig?.renderFilterButtons && (\n tableConfig.renderFilterButtons({\n onClearFilter: filterConfig?.onClearFilter, onClose: toggleDataFilterModal,\n modelName, enableMasterDataEnumSuggestions, defaultFilterColumn: newFilterColumn, resetDefaultFilterColumn: () => setNewFilterColumn(null),\n column: dataFilterColumn, onFilter: filterConfig?.onFilter, tableHeaders,\n columnFilters: filterConfig?.columnFilters, data: enumSuggestionsData ?? data, notionStyle: filterConfig?.notionStyle,\n context: filterConfig?.context,\n agreementCategoryId,\n agreementDomainId,\n agreementId,\n modificationId,\n lineItemRowId,\n })\n )}\n </div>\n ) : null}\n </div>\n </div>\n ) : null}\n {floatingBarConfig && Object.keys(floatingBarConfig).length ? <FloatingBar {...floatingBarConfig} /> : 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'>{headerConfig.preContent}</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 ? { height: data?.length > 0 ? `${(data?.length + 1) * 41 + 4}px` : '350px' }\n : { height: fallbackHeight }),\n ...style,\n }}\n >\n {enableRootDrag ? (\n tableView\n ) : (\n <DndContext sensors={sensors} onDragEnd={handleDragEnd} onDragStart={handleDragStart} onDragCancel={handleDragCancel} collisionDetection={closestCorners}>\n {tableView}\n {activeItem\n ? createPortal(\n <DragOverlay adjustScale={true} dropAnimation={dropAnimation}>\n <table {...getTableProps()} 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 <tbody {...getTableBodyProps()} className='bg-transparent divide-y divide-neutral-200'>\n {void prepareRow(activeItem)}\n <Row key={(activeItem.original as Record<string, unknown>).id as string} row={activeItem as never} index={rows?.findIndex((item) => item.id === (activeItem.original as Record<string, unknown>).id)} />\n </tbody>\n </table>\n </DragOverlay>,\n document.getElementById('full-screen-container') || document.body,\n )\n : null}\n </DndContext>\n )}\n </div>\n {paginationConfig && tableConfig?.renderPagination ? tableConfig.renderPagination(paginationConfig) : null}\n\n {tableConfig?.renderMasterDataModal && tableConfig.renderMasterDataModal({\n isVisible: !!masterDataModalConfig, onSelected: handleMasterDataSelected, onClose: closeMasterDataModal,\n masterDataColumnName: masterDataModalConfig?.masterDataColumnName, masterDataFilters: masterDataModalConfig?.masterDataFilters,\n masterDataName: masterDataModalConfig?.masterDataName, masterDataId: masterDataModalConfig?.masterDataName, showFilters: true,\n })}\n\n <CurrencyDropdownPortal config={currencyDropdownConfig} onClose={closeCurrencyDropdown} />\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","FIRST_BREAKPOINT","SECOND_BREAKPOINT","CREATE_COLUMN_LABEL","getEmptyButtonId","label","index","InfiniteTable","React","tableKey","searchConfig","filterConfig","sortConfig","headerConfig","hoverConfig","columns","modelName","enableMasterDataEnumSuggestions","agreementCategoryId","agreementDomainId","agreementId","modificationId","lineItemRowId","enumSuggestionsData","data","onRowClick","showHeader","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","onCascadingRowExpand","totalItems","showRecordCount","getInnerRowData","maxLevel","expandedRows","setExpandedRows","showNewItem","rawData","dragConfig","isOverlayLoading","style","floatingBarConfig","rowWrapper","rowLinkConfig","isCellClickDisabled","setHeaderOnParent","optimizeTable","multiSelectConfig","headerContextOptions","showHeaderContextOptions","setShowHeaderContextOptions","showDataTypeIcon","rowAdditionalActions","rowAdditionalActionsWidth","setVisibleHeaders","cellEditing","cellEditingValue","allowInlineEdit","onFieldOperationFlow","fieldOperationLoading","onTableActionsReady","onPendingEditsChange","onCancelPendingEdits","tableConfig","useTableConfig","isSearch","isFilters","isAnyFilters","isCheckbox","defaultTableView","selectedTableView","setSelectedTableView","useState","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","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","scrollContainer","scrollLeft","i","validateAllPendingEdits","editsToValidate","hasErrors","firstError","updatedEdits","errorTypes","getValidationToastMessage","hasRequired","hasFormat","saveAllPendingEdits","row","editedRows","originalRow","updatedRow","editedFields","clearRowPendingEdits","n","k","saveRowPendingEdits","editedRowData","pendingEditsCount","useMemo","total","pendingEditsList","list","rowsWithPendingEdits","rowsMap","a","b","openMasterDataModal","config","closeMasterDataModal","handleMasterDataSelected","value","clearSelectedMasterData","openCurrencyDropdown","closeCurrencyDropdown","setCurrencyForCell","cellKey","currency","getCurrencyForCell","fallbackHeight","pxMatch","calcMatch","emptySwitchProps","translatedCreateColumnLabel","defaultEmptyText","resolvedEmptyText","loaderData","cellLoaders","tableLoaders","visibleColumns","header","table","useTable","useResizeColumns","getTableProps","getTableBodyProps","headerGroups","prepareRow","rows","headerKeys","groups","checkboxConfig","useCheckbox","sensors","useSensors","useSensor","MouseSensor","TouchSensor","dropAnimation","computeList","acc","contextKey","e","handleDragStart","event","active","item","handleDragEnd","over","newState","handleDragCancel","toggleHeaderOption","key","toggleDataFilterModal","handleRemoveSort","toggleShowFilters","toggleShowSorts","lastNonStickyColumnIndex","reverseHeaders","getSumOfNextVisibleColumnWidth","currentIndex","sum","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","Typography","FloatingBar","DndContext","closestCorners","createPortal","DragOverlay","Row","CurrencyDropdownPortal","PendingEditsFloatingBar"],"mappings":"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"}
|
|
@@ -1,6 +1,24 @@
|
|
|
1
|
+
import type React from 'react';
|
|
1
2
|
import type { ReactNode } from 'react';
|
|
2
3
|
import type { TFloatingBar } from '../../../components/floating-bar/FloatingBar';
|
|
3
4
|
export type TId = string | number;
|
|
5
|
+
/**
|
|
6
|
+
* A compact icon button rendered inline in the table header toolbar.
|
|
7
|
+
*/
|
|
8
|
+
export type THeaderInlineAction = {
|
|
9
|
+
/** Unique key for the action */
|
|
10
|
+
key: string;
|
|
11
|
+
/** Icon node rendered inside the button */
|
|
12
|
+
icon: ReactNode;
|
|
13
|
+
/** Click handler */
|
|
14
|
+
onClick?: (event?: React.MouseEvent<HTMLElement>) => void;
|
|
15
|
+
/** Tooltip / accessible label for the button */
|
|
16
|
+
tooltip?: string;
|
|
17
|
+
/** Whether the button is disabled */
|
|
18
|
+
isDisabled?: boolean;
|
|
19
|
+
/** Whether the button shows a loading spinner instead of the icon */
|
|
20
|
+
isLoading?: boolean;
|
|
21
|
+
};
|
|
4
22
|
export type TSortEndHandler = (prevIndex: number, nextIndex: number) => void;
|
|
5
23
|
export type TPassedHeadProps = {
|
|
6
24
|
onSortEnd?: TSortEndHandler;
|
|
@@ -128,6 +146,8 @@ export interface ITableProps {
|
|
|
128
146
|
onBulkRowEdit?: (rows: any[]) => void;
|
|
129
147
|
onRowTooltipClick?: (...args: any[]) => void;
|
|
130
148
|
getFullRowDataOnClick?: boolean;
|
|
149
|
+
/** Id of the row to highlight as selected (light theme color background) */
|
|
150
|
+
selectedRowId?: TId | null;
|
|
131
151
|
disableOptionsForRowIndex?: number | null;
|
|
132
152
|
isCellClickDisabled?: boolean;
|
|
133
153
|
rowOptions?: any[] | ((...args: any[]) => any[] | null) | null;
|
|
@@ -167,6 +187,8 @@ export interface ITableProps {
|
|
|
167
187
|
}>;
|
|
168
188
|
headerConfig?: {
|
|
169
189
|
additionalOptions?: Record<string, unknown>[];
|
|
190
|
+
/** Compact icon buttons rendered inline in the toolbar, before the additionalOptions three-dot menu */
|
|
191
|
+
inlineActions?: THeaderInlineAction[];
|
|
170
192
|
showFilters: boolean;
|
|
171
193
|
showSorts?: boolean;
|
|
172
194
|
showSearch: boolean;
|
package/dist/index.d.ts
CHANGED
|
@@ -253,7 +253,7 @@ export type { DesignSystemConfig, TabConfig, TableConfig, TableViewApi, MasterDa
|
|
|
253
253
|
export { InfiniteTable } from "./components/data-display/infinite-table";
|
|
254
254
|
export { TableContext } from "./components/data-display/infinite-table/context";
|
|
255
255
|
export type { ITableContext } from "./components/data-display/infinite-table/context";
|
|
256
|
-
export type { ITableProps, ICell, IColumn, ITableView, IMultiSelectConfig, TTableKey, TTableRow, TCheckboxUtilities, IMasterDataModalConfig, ICurrencyDropdownConfig, IPendingEdit, PendingEditsMap, ValidateAndSaveResult, } from "./components/data-display/infinite-table/types";
|
|
256
|
+
export type { ITableProps, ICell, IColumn, ITableView, IMultiSelectConfig, TTableKey, TTableRow, TCheckboxUtilities, IMasterDataModalConfig, ICurrencyDropdownConfig, IPendingEdit, PendingEditsMap, ValidateAndSaveResult, THeaderInlineAction, } from "./components/data-display/infinite-table/types";
|
|
257
257
|
export { useCheckbox } from "./hooks/useCheckbox";
|
|
258
258
|
export { default as UserCell } from "./components/data-display/infinite-table/body/cell/UserCell";
|
|
259
259
|
export { Dropdown } from "./components/dropdown/Dropdown";
|