Add prop to force transparent grid header

This commit is contained in:
jeffvli 2023-01-08 20:47:05 -08:00
parent d58ba92cbd
commit b4e9f48667
2 changed files with 25 additions and 7 deletions

View file

@ -328,6 +328,7 @@ interface VirtualTableProps extends AgGridReactProps {
autoFitColumns?: boolean; autoFitColumns?: boolean;
autoHeight?: boolean; autoHeight?: boolean;
deselectOnClickOutside?: boolean; deselectOnClickOutside?: boolean;
transparentHeader?: boolean;
} }
export const VirtualTable = forwardRef( export const VirtualTable = forwardRef(
@ -336,6 +337,7 @@ export const VirtualTable = forwardRef(
autoFitColumns, autoFitColumns,
deselectOnClickOutside, deselectOnClickOutside,
autoHeight, autoHeight,
transparentHeader,
onColumnMoved, onColumnMoved,
onNewColumnsLoaded, onNewColumnsLoaded,
onGridReady, onGridReady,
@ -349,7 +351,9 @@ export const VirtualTable = forwardRef(
const mergedRef = useMergedRef(ref, tableRef); const mergedRef = useMergedRef(ref, tableRef);
const deselectRef = useClickOutside(() => { const deselectRef = useClickOutside(() => {
return deselectOnClickOutside ? tableRef?.current?.api?.deselectAll() : undefined; if (tableRef?.current?.api && deselectOnClickOutside) {
tableRef?.current?.api?.deselectAll();
}
}); });
const defaultColumnDefs: ColDef = useMemo(() => { const defaultColumnDefs: ColDef = useMemo(() => {
@ -362,44 +366,52 @@ export const VirtualTable = forwardRef(
// Auto fit columns on column change // Auto fit columns on column change
useEffect(() => { useEffect(() => {
if (autoFitColumns) tableRef?.current?.api?.sizeColumnsToFit(); if (!tableRef?.current?.api) return;
if (autoFitColumns && tableRef?.current?.api) {
tableRef?.current?.api?.sizeColumnsToFit?.();
}
}, [autoFitColumns]); }, [autoFitColumns]);
// Reset row heights on row height change // Reset row heights on row height change
useEffect(() => { useEffect(() => {
if (!tableRef?.current?.api) return;
tableRef?.current?.api?.resetRowHeights(); tableRef?.current?.api?.resetRowHeights();
tableRef?.current?.api?.redrawRows(); tableRef?.current?.api?.redrawRows();
}, [rest.rowHeight]); }, [rest.rowHeight]);
const handleColumnMoved = useCallback( const handleColumnMoved = useCallback(
(e: ColumnMovedEvent) => { (e: ColumnMovedEvent) => {
if (!e?.api) return;
onColumnMoved?.(e); onColumnMoved?.(e);
if (autoFitColumns) e.api.sizeColumnsToFit(); if (autoFitColumns) e.api?.sizeColumnsToFit?.();
}, },
[autoFitColumns, onColumnMoved], [autoFitColumns, onColumnMoved],
); );
const handleNewColumnsLoaded = useCallback( const handleNewColumnsLoaded = useCallback(
(e: NewColumnsLoadedEvent) => { (e: NewColumnsLoadedEvent) => {
if (!e?.api) return;
onNewColumnsLoaded?.(e); onNewColumnsLoaded?.(e);
if (autoFitColumns) e.api?.sizeColumnsToFit(); if (autoFitColumns) e.api?.sizeColumnsToFit?.();
}, },
[autoFitColumns, onNewColumnsLoaded], [autoFitColumns, onNewColumnsLoaded],
); );
const handleGridReady = useCallback( const handleGridReady = useCallback(
(e: GridReadyEvent) => { (e: GridReadyEvent) => {
if (!e?.api) return;
onGridReady?.(e); onGridReady?.(e);
if (autoHeight) e.api.setDomLayout('autoHeight'); if (autoHeight) e.api.setDomLayout('autoHeight');
if (autoFitColumns) e.api.sizeColumnsToFit(); if (autoFitColumns) e.api?.sizeColumnsToFit?.();
}, },
[autoHeight, autoFitColumns, onGridReady], [autoHeight, autoFitColumns, onGridReady],
); );
const handleGridSizeChanged = useCallback( const handleGridSizeChanged = useCallback(
(e: GridSizeChangedEvent) => { (e: GridSizeChangedEvent) => {
if (!e?.api) return;
onGridSizeChanged?.(e); onGridSizeChanged?.(e);
if (autoFitColumns) e.api.sizeColumnsToFit(); if (autoFitColumns) e.api?.sizeColumnsToFit?.();
}, },
[autoFitColumns, onGridSizeChanged], [autoFitColumns, onGridSizeChanged],
); );
@ -407,7 +419,9 @@ export const VirtualTable = forwardRef(
return ( return (
<TableWrapper <TableWrapper
ref={deselectRef} ref={deselectRef}
className="ag-theme-alpine-dark" className={
transparentHeader ? 'ag-header-transparent ag-theme-alpine-dark' : 'ag-theme-alpine-dark'
}
> >
<AgGridReact <AgGridReact
ref={mergedRef} ref={mergedRef}

View file

@ -10,6 +10,10 @@
transition: position 0.2s ease-in-out; transition: position 0.2s ease-in-out;
} }
.ag-header-transparent {
--ag-header-background-color: rgba(0, 0, 0, 0%) !important;
}
.ag-header-fixed-margin { .ag-header-fixed-margin {
margin-top: 43px !important; margin-top: 43px !important;
} }