Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[EuiDataGrid] Memoization & perf improvements #7556

Merged
merged 20 commits into from
Mar 12, 2024
Merged
Changes from 1 commit
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
7b8bd12
[docs] Pull out all inline `renderCellValue` functions/components to …
kqualters-elastic Mar 7, 2024
871ff63
[tests] Pull out inline `renderCellValue` fns/components to static de…
kqualters-elastic Mar 7, 2024
293bf9c
Fix `useMemo` dependency arrays calling `Object.values(props)`
kqualters-elastic Mar 7, 2024
e6888c5
Add basic `useMemo` usages
kqualters-elastic Mar 7, 2024
eea719d
Add more complex `useMemo` usages
kqualters-elastic Mar 7, 2024
4ed410a
Add basic `useCallback` usages
kqualters-elastic Mar 7, 2024
e1bdcb2
Basic `memo()` wrapper around data grid subcomponents
kqualters-elastic Mar 7, 2024
48d0220
Memoize `CellWrapper` + rename it to match filename
kqualters-elastic Mar 7, 2024
30efd08
Cells - replace inline JSX with static component instead
kqualters-elastic Mar 7, 2024
aeb74d6
Merge branch 'main' into datagrid/perf
cee-chen Mar 8, 2024
9c7d2d6
Memoize focusContext
kqualters-elastic Mar 8, 2024
1f00528
Memoize `useCellPopover` further
kqualters-elastic Mar 8, 2024
7c18fe6
Memoize column width hook utilities
kqualters-elastic Mar 8, 2024
3696a75
Add new `useDeepEqual` hook service + update style overrides from `re…
kqualters-elastic Mar 8, 2024
0dbd5bb
Further memoize sorting utils
kqualters-elastic Mar 8, 2024
b1ea642
EuiDataGrid cell memoizations/cleanup
kqualters-elastic Mar 8, 2024
6982d58
Fix `cellContext` no longer triggering rerenders
cee-chen Mar 8, 2024
2527be6
Remove unnecessary anonymous function
cee-chen Mar 11, 2024
cd2dfb8
[PR feedback] Remove `sorting` prop from context
cee-chen Mar 11, 2024
8f01367
Memoize `useDataGridColumnSorting`
kqualters-elastic Mar 12, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 11 additions & 7 deletions src/components/datagrid/utils/col_widths.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,27 +83,31 @@ export const useColumnWidths = ({
return columns
.filter(doesColumnHaveAnInitialWidth)
.reduce<EuiDataGridColumnWidths>((initialWidths, column) => {
initialWidths[column.id] = column.initialWidth!;
return initialWidths;
return { ...initialWidths, [column.id]: column.initialWidth! };
}, {});
}, [columns]);

const [columnWidths, setColumnWidths] =
useState<EuiDataGridColumnWidths>(computeColumnWidths);
const [columnWidths, setColumnWidths] = useState<EuiDataGridColumnWidths>(
// Passing an anonymous initializer function for performance, so it only runs once on init
// @see https://react.dev/reference/react/useState#examples-initializer
() => computeColumnWidths()
cee-chen marked this conversation as resolved.
Show resolved Hide resolved
);

useUpdateEffect(() => {
setColumnWidths(computeColumnWidths());
}, [computeColumnWidths]);

const setColumnWidth = useCallback(
(columnId: string, width: number) => {
setColumnWidths({ ...columnWidths, [columnId]: width });

setColumnWidths((prevColumnWidths) => ({
...prevColumnWidths,
[columnId]: width,
}));
if (onColumnResize) {
onColumnResize({ columnId, width });
}
},
[columnWidths, onColumnResize]
[onColumnResize]
);

// Used by react-window to determine actual column widths
Expand Down