// // filepath: /home/hoangdanh2000/Desktop/Projects/react-table-power/src/components/table/VirtualizedTableBody.tsx // import React, { useRef, useEffect } from 'react'; // import { useVirtual } from 'react-virtual'; // import { TableBodyProps, Row, Cell } from '@tanstack/react-table'; // import { BaseTableData } from '../../types'; // export interface VirtualizedTableBodyProps // extends TableBodyProps { // /** // * Row data for the table // */ // rows: Row[]; // /** // * Total number of rows // */ // totalRows: number; // /** // * Height of each row in pixels // */ // rowHeight?: number; // /** // * Height of the container in pixels // */ // containerHeight?: number | string; // /** // * Whether to enable row virtualization // * @default true // */ // virtualization?: boolean; // /** // * Whether to enable row hover effect // * @default true // */ // hover?: boolean; // /** // * Whether to use striped rows // * @default false // */ // striped?: boolean; // /** // * Whether rows have borders // * @default true // */ // bordered?: boolean; // /** // * Custom renderer for row (allowing to customize row appearance) // */ // rowRenderer?: (row: Row, index: number, virtualRow: any) => React.ReactNode; // /** // * Custom renderer for cell (allowing to customize cell appearance) // */ // cellRenderer?: (cell: Cell, rowIndex: number) => React.ReactNode; // /** // * Callback triggered when hovering over a row // */ // onRowMouseEnter?: (row: Row, e: React.MouseEvent) => void; // /** // * Callback triggered when mouse leaves a row // */ // onRowMouseLeave?: (row: Row, e: React.MouseEvent) => void; // /** // * Callback triggered when clicking a row // */ // onRowClick?: (row: Row, e: React.MouseEvent) => void; // /** // * Class name for the table body // */ // className?: string; // } // /** // * VirtualizedTableBody component for efficiently rendering large tables with virtualization // */ // export function VirtualizedTableBody({ // rows, // totalRows, // rowHeight = 48, // containerHeight = 400, // virtualization = true, // hover = true, // striped = false, // bordered = true, // rowRenderer, // cellRenderer, // onRowMouseEnter, // onRowMouseLeave, // onRowClick, // className, // ...tableBodyProps // }: VirtualizedTableBodyProps) { // const parentRef = useRef(null); // const rowVirtualizer = useVirtual({ // size: virtualization ? totalRows : rows.length, // parentRef, // estimateSize: React.useCallback(() => rowHeight, [rowHeight]), // overscan: 10, // }); // useEffect(() => { // // Reset virtualization when rows change significantly // rowVirtualizer.measure(); // }, [rows.length, rowVirtualizer]); // if (!virtualization) { // return ( // // {rows.map((row, index) => { // row.getVisibleCells(); // return rowRenderer ? ( // rowRenderer(row, index, null) // ) : ( // onRowMouseEnter(row, e) : undefined} // onMouseLeave={onRowMouseLeave ? (e) => onRowMouseLeave(row, e) : undefined} // onClick={onRowClick ? (e) => onRowClick(row, e) : undefined} // data-state={row.getIsSelected() ? 'selected' : ''} // > // {row.getVisibleCells().map((cell) => // cellRenderer ? ( // cellRenderer(cell, index) // ) : ( // // {cell.getValue() as React.ReactNode} // // ) // )} // // ); // })} // // ); // } // return ( //
//
// // // {rowVirtualizer.virtualItems.map((virtualRow) => { // const row = rows[virtualRow.index]; // if (!row) return null; // return rowRenderer ? ( // rowRenderer(row, virtualRow.index, virtualRow) // ) : ( // onRowMouseEnter(row, e) : undefined} // onMouseLeave={onRowMouseLeave ? (e) => onRowMouseLeave(row, e) : undefined} // onClick={onRowClick ? (e) => onRowClick(row, e) : undefined} // data-state={row.getIsSelected() ? 'selected' : ''} // style={{ // position: 'absolute', // top: 0, // left: 0, // width: '100%', // height: `${rowHeight}px`, // transform: `translateY(${virtualRow.start}px)`, // }} // > // {row.getVisibleCells().map((cell) => // cellRenderer ? ( // cellRenderer(cell, virtualRow.index) // ) : ( // // ) // )} // // ); // })} // //
// {cell.getValue() as React.ReactNode} //
//
//
// ); // } // export default VirtualizedTableBody;