solve header table colorize

This commit is contained in:
2024-05-04 13:44:26 +03:30
parent 0606463eda
commit b40c19fb34
3 changed files with 111 additions and 122 deletions

View File

@@ -1,12 +1,12 @@
import { parseFromValuesOrFunc } from "@/core/utils/utils"; import {parseFromValuesOrFunc} from "@/core/utils/utils";
import { TableHead } from "@mui/material"; import {TableHead} from "@mui/material";
import DataTable_TableHeadRow from "./TableHeadRow"; import DataTable_TableHeadRow from "./TableHeadRow";
const DataTable_TableHead = ({ const DataTable_TableHead = ({
columnVirtualizer, columnVirtualizer,
table, table,
...rest ...rest
}) => { }) => {
const { const {
getState, getState,
options: { options: {
@@ -15,12 +15,12 @@ const DataTable_TableHead = ({
muiTableHeadProps, muiTableHeadProps,
positionToolbarAlertBanner, positionToolbarAlertBanner,
}, },
refs: { tableHeadRef }, refs: {tableHeadRef},
} = table; } = table;
const { isFullScreen, showAlertBanner } = getState(); const {isFullScreen, showAlertBanner} = getState();
const tableHeadProps = { const tableHeadProps = {
...parseFromValuesOrFunc(muiTableHeadProps, { table }), ...parseFromValuesOrFunc(muiTableHeadProps, {table}),
...rest, ...rest,
}; };
@@ -47,12 +47,13 @@ const DataTable_TableHead = ({
> >
{table {table
.getHeaderGroups() .getHeaderGroups()
.map((headerGroup) => ( .map((headerGroup, index) => (
<DataTable_TableHeadRow <DataTable_TableHeadRow
columnVirtualizer={columnVirtualizer} columnVirtualizer={columnVirtualizer}
headerGroup={headerGroup} headerGroup={headerGroup}
key={headerGroup.id} key={headerGroup.id}
table={table} table={table}
index={index}
/> />
)) ))
} }

View File

@@ -1,8 +1,8 @@
import { getCommonMRTCellStyles, parseFromValuesOrFunc } from "@/core/utils/utils"; import {getCommonMRTCellStyles, parseFromValuesOrFunc} from "@/core/utils/utils";
import { useTheme } from "@emotion/react"; import {useTheme} from "@emotion/react";
import { Box, TableCell } from "@mui/material"; import {Box, TableCell} from "@mui/material";
import { MRT_TableHeadCellSortLabel } from "material-react-table"; import {MRT_TableHeadCellSortLabel} from "material-react-table";
import { useMemo } from "react"; import {useMemo} from "react";
const DataTable_TableHeadCell = ({ const DataTable_TableHeadCell = ({
columnVirtualizer, columnVirtualizer,
@@ -10,7 +10,7 @@ const DataTable_TableHeadCell = ({
staticColumnIndex, staticColumnIndex,
table, table,
...rest ...rest
}) => { }) => {
const theme = useTheme(); const theme = useTheme();
const { const {
getState, getState,
@@ -24,10 +24,10 @@ const DataTable_TableHeadCell = ({
enableGrouping, enableGrouping,
enableMultiSort, enableMultiSort,
layoutMode, layoutMode,
mrtTheme: { draggingBorderColor }, mrtTheme: {draggingBorderColor},
muiTableHeadCellProps, muiTableHeadCellProps,
}, },
refs: { tableHeadCellRefs }, refs: {tableHeadCellRefs},
setHoveredColumn, setHoveredColumn,
} = table; } = table;
const { const {
@@ -38,12 +38,12 @@ const DataTable_TableHeadCell = ({
hoveredColumn, hoveredColumn,
showColumnFilters, showColumnFilters,
} = getState(); } = getState();
const { column } = header; const {column} = header;
const { columnDef } = column; const {columnDef} = column;
const { columnDefType } = columnDef; const {columnDefType} = columnDef;
const tableCellProps = { const tableCellProps = {
...parseFromValuesOrFunc(muiTableHeadCellProps, { column, table }), ...parseFromValuesOrFunc(muiTableHeadCellProps, {column, table}),
...parseFromValuesOrFunc(columnDef.muiTableHeadCellProps, { ...parseFromValuesOrFunc(columnDef.muiTableHeadCellProps, {
column, column,
table, table,
@@ -93,8 +93,8 @@ const DataTable_TableHeadCell = ({
if (showResizeBorder) { if (showResizeBorder) {
return columnResizeDirection === 'ltr' return columnResizeDirection === 'ltr'
? { borderRight: borderStyle } ? {borderRight: borderStyle}
: { borderLeft: borderStyle }; : {borderLeft: borderStyle};
} }
const draggingBorders = borderStyle const draggingBorders = borderStyle
? { ? {
@@ -262,6 +262,9 @@ const DataTable_TableHeadCell = ({
minWidth: `${Math.min(columnDef.header?.length ?? 0, 4)}ch`, minWidth: `${Math.min(columnDef.header?.length ?? 0, 4)}ch`,
overflow: columnDefType === 'data' ? 'hidden' : undefined, overflow: columnDefType === 'data' ? 'hidden' : undefined,
textOverflow: 'ellipsis', textOverflow: 'ellipsis',
color: "#fff",
fontSize: "14px",
fontWeight: "500",
whiteSpace: whiteSpace:
(columnDef.header?.length ?? 0) < 20 (columnDef.header?.length ?? 0) < 20
? 'nowrap' ? 'nowrap'
@@ -271,7 +274,8 @@ const DataTable_TableHeadCell = ({
{HeaderElement} {HeaderElement}
</Box> </Box>
{(column.getCanSort() && columnDefType !== 'group') && ( {(column.getCanSort() && columnDefType !== 'group') && (
<MRT_TableHeadCellSortLabel sx={{ width: 20 }} header={header} table={table} /> <MRT_TableHeadCellSortLabel sx={{width: 20, color: "#fff"}} header={header}
table={table}/>
)} )}
</Box> </Box>
</Box> </Box>

View File

@@ -1,59 +1,46 @@
import { parseFromValuesOrFunc } from "@/core/utils/utils"; import {parseFromValuesOrFunc} from "@/core/utils/utils";
import { TableRow } from "@mui/material"; import {TableRow} from "@mui/material";
import DataTable_TableHeadCell from "./TableHeadCell"; import DataTable_TableHeadCell from "./TableHeadCell";
const DataTable_TableHeadRow = ({ const DataTable_TableHeadRow = ({
columnVirtualizer, columnVirtualizer,
headerGroup, headerGroup,
table, table,
index, // Add index prop
...rest ...rest
}) => { }) => {
const { const {
options: { options: {
enableStickyHeader, enableStickyHeader,
layoutMode, layoutMode,
mrtTheme: { baseBackgroundColor },
muiTableHeadRowProps, muiTableHeadRowProps,
}, },
} = table; } = table;
const {virtualColumns, virtualPaddingLeft, virtualPaddingRight} =
const { virtualColumns, virtualPaddingLeft, virtualPaddingRight } =
columnVirtualizer ?? {}; columnVirtualizer ?? {};
const backgroundColor = index % 2 === 0 ? '#2070af' : '#ff5c0f';
const tableRowProps = { const tableRowProps = {
...parseFromValuesOrFunc(muiTableHeadRowProps, { ...parseFromValuesOrFunc(muiTableHeadRowProps, {
headerGroup, headerGroup,
table, table,
}), }),
...rest, ...rest,
sx: (theme) => ({ // Access theme from the sx function
...(parseFromValuesOrFunc(muiTableHeadRowProps?.sx, theme) || {}),
backgroundColor, // Apply background color
display: layoutMode?.startsWith('grid') ? 'flex' : undefined,
position: enableStickyHeader && layoutMode === 'semantic' ? 'sticky' : 'relative',
top: 0,
}),
}; };
return ( return (
<TableRow <TableRow {...tableRowProps}>
{...tableRowProps} {virtualPaddingLeft && <th style={{display: 'flex', width: virtualPaddingLeft}}/>}
sx={(theme) => ({ {(virtualColumns ?? headerGroup.headers).map((headerOrVirtualHeader, staticColumnIndex) => {
backgroundColor: baseBackgroundColor, const header = columnVirtualizer ? headerGroup.headers[headerOrVirtualHeader.index] : headerOrVirtualHeader;
display: layoutMode?.startsWith('grid') ? 'flex' : undefined,
position:
enableStickyHeader && layoutMode === 'semantic'
? 'sticky'
: 'relative',
top: 0,
...(parseFromValuesOrFunc(tableRowProps?.sx, theme)),
})}
>
{virtualPaddingLeft ? (
<th style={{ display: 'flex', width: virtualPaddingLeft }} />
) : null}
{(virtualColumns ?? headerGroup.headers).map(
(headerOrVirtualHeader, staticColumnIndex) => {
let header = headerOrVirtualHeader;
if (columnVirtualizer) {
staticColumnIndex = (headerOrVirtualHeader)
.index;
header = headerGroup.headers[staticColumnIndex];
}
return header ? ( return header ? (
<DataTable_TableHeadCell <DataTable_TableHeadCell
@@ -64,13 +51,10 @@ const DataTable_TableHeadRow = ({
table={table} table={table}
/> />
) : null; ) : null;
}, })}
)} {virtualPaddingRight && <th style={{display: 'flex', width: virtualPaddingRight}}/>}
{virtualPaddingRight ? (
<th style={{ display: 'flex', width: virtualPaddingRight }} />
) : null}
</TableRow> </TableRow>
); );
};
} export default DataTable_TableHeadRow;
export default DataTable_TableHeadRow