diff --git a/packages/raystack/components/data-table/components/virtualized-content.tsx b/packages/raystack/components/data-table/components/virtualized-content.tsx index 6128b177..9aba7bf5 100644 --- a/packages/raystack/components/data-table/components/virtualized-content.tsx +++ b/packages/raystack/components/data-table/components/virtualized-content.tsx @@ -155,45 +155,50 @@ function VirtualRows({ }); } -function VirtualLoaderRows({ - rowCount, +function VirtualLoaderRows({ columns, rowHeight, - startTop + count }: { - rowCount: number; - columns: DataTableColumnDef[]; + columns: ReturnType< + ReturnType['table']['getVisibleLeafColumns'] + >; rowHeight: number; - startTop: number; + count: number; }) { - const rows = Array.from({ length: rowCount }); - - return rows.map((_, rowIndex) => ( -
- {columns.map((col, colIndex) => ( + return ( +
+ {Array.from({ length: count }).map((_, rowIndex) => (
- + {columns.map((col, colIndex) => { + const columnDef = col.columnDef as DataTableColumnDef< + unknown, + unknown + >; + return ( +
+ +
+ ); + })}
))}
- )); + ); } const DefaultEmptyComponent = () => ( @@ -224,6 +229,8 @@ export function VirtualizedContent({ const scrollContainerRef = useRef(null); + const showLoaderRows = isLoading && rows.length > 0; + const virtualizer = useVirtualizer({ count: rows.length, getScrollElement: () => scrollContainerRef.current, @@ -244,6 +251,8 @@ export function VirtualizedContent({ } }, [isLoading, loadMoreData, loadMoreOffset]); + const totalHeight = virtualizer.getTotalSize(); + const hasData = rows?.length > 0 || isLoading; const hasFiltersOrSearch = @@ -263,10 +272,6 @@ export function VirtualizedContent({ return
{stateToShow}
; } - const showLoaderRows = isLoading && rows.length > 0; - const loaderRowsHeight = showLoaderRows ? loadingRowCount * rowHeight : 0; - const virtualTotalSize = virtualizer.getTotalSize(); - const totalHeight = virtualTotalSize + loaderRowsHeight; const visibleColumns = table.getVisibleLeafColumns(); return ( @@ -293,18 +298,15 @@ export function VirtualizedContent({ row: classNames.row }} /> - {showLoaderRows && ( - col.columnDef as DataTableColumnDef - )} - rowHeight={rowHeight} - startTop={virtualTotalSize} - /> - )}
+ {showLoaderRows && ( + + )} ); } diff --git a/packages/raystack/components/data-table/data-table.module.css b/packages/raystack/components/data-table/data-table.module.css index b57c5b20..2b722bd6 100644 --- a/packages/raystack/components/data-table/data-table.module.css +++ b/packages/raystack/components/data-table/data-table.module.css @@ -144,3 +144,14 @@ font-weight: 500; padding: var(--rs-space-3) var(--rs-space-4); } + +.stickyLoaderContainer { + position: sticky; + bottom: 0; + z-index: 1; + background: var(--rs-color-background-base-primary); +} + +.loaderRow { + position: relative; +}