Skip to content

Commit e533510

Browse files
authored
Optimize classnames and renderValue (#3992)
1 parent bd32184 commit e533510

5 files changed

Lines changed: 17 additions & 41 deletions

File tree

src/Cell.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,7 @@ function Cell<R, SR>({
3939
const { cellClass } = column;
4040
className = getCellClassname(
4141
column,
42-
{
43-
[cellDraggedOverClassname]: isDraggedOver
44-
},
42+
isDraggedOver && cellDraggedOverClassname,
4543
typeof cellClass === 'function' ? cellClass(row) : cellClass,
4644
className
4745
);

src/DataGrid.tsx

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1170,13 +1170,7 @@ export function DataGrid<R, SR = unknown, K extends Key = Key>(props: DataGridPr
11701170
// Scrollable containers without tabIndex are keyboard focusable in Chrome only if there is no focusable element inside
11711171
// whereas they are always focusable in Firefox. We need to set tabIndex to have a consistent behavior across browsers.
11721172
tabIndex={-1}
1173-
className={classnames(
1174-
rootClassname,
1175-
{
1176-
[viewportDraggingClassname]: isDragging
1177-
},
1178-
className
1179-
)}
1173+
className={classnames(rootClassname, isDragging && viewportDraggingClassname, className)}
11801174
style={{
11811175
...style,
11821176
// set scrollPadding to correctly scroll to non-sticky cells/rows

src/HeaderCell.tsx

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -116,13 +116,15 @@ export default function HeaderCell<R, SR>({
116116
sortDirection && !priority ? (sortDirection === 'ASC' ? 'ascending' : 'descending') : undefined;
117117
const { sortable, resizable, draggable } = column;
118118

119-
const className = getCellClassname(column, column.headerCellClass, {
120-
[cellSortableClassname]: sortable,
121-
[cellResizableClassname]: resizable,
122-
[cellDraggableClassname]: draggable,
123-
[cellDraggingClassname]: isDragging,
124-
[cellOverClassname]: isOver
125-
});
119+
const className = getCellClassname(
120+
column,
121+
column.headerCellClass,
122+
sortable && cellSortableClassname,
123+
resizable && cellResizableClassname,
124+
draggable && cellDraggableClassname,
125+
isDragging && cellDraggingClassname,
126+
isOver && cellOverClassname
127+
);
126128

127129
function onSort(ctrlClick: boolean) {
128130
if (onSortColumnsChange == null) return;

src/cellRenderers/renderValue.tsx

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
import type { RenderCellProps } from '../types';
22

33
export function renderValue<R, SR>(props: RenderCellProps<R, SR>) {
4-
try {
5-
return props.row[props.column.key as keyof R] as React.ReactNode;
6-
} catch {
7-
return null;
8-
}
4+
return props.row?.[props.column.key as keyof R] as React.ReactNode;
95
}

src/utils/styleUtils.ts

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -38,37 +38,23 @@ export function getCellStyle<R, SR>(
3838
};
3939
}
4040

41-
type ClassValue = Maybe<string> | Record<string, boolean> | false;
41+
type ClassValue = Maybe<string | false>;
4242

4343
export function classnames(...args: readonly ClassValue[]) {
4444
let classname = '';
4545

4646
for (const arg of args) {
47-
if (arg) {
48-
if (typeof arg === 'string') {
49-
classname += ` ${arg}`;
50-
} else if (typeof arg === 'object') {
51-
for (const key in arg) {
52-
if (arg[key]) {
53-
classname += ` ${key}`;
54-
}
55-
}
56-
}
47+
if (typeof arg === 'string') {
48+
classname += ` ${arg}`;
5749
}
5850
}
5951

60-
return classname.trimStart();
52+
return classname.slice(1);
6153
}
6254

6355
export function getCellClassname<R, SR>(
6456
column: CalculatedColumn<R, SR>,
6557
...extraClasses: readonly ClassValue[]
6658
): string {
67-
return classnames(
68-
cellClassname,
69-
{
70-
[cellFrozenClassname]: column.frozen
71-
},
72-
...extraClasses
73-
);
59+
return classnames(cellClassname, column.frozen && cellFrozenClassname, ...extraClasses);
7460
}

0 commit comments

Comments
 (0)