Improve performance on TableBody but disable shadow on first column freeze

This commit is contained in:
Charles Bochet
2024-04-18 14:45:30 +02:00
parent c402631067
commit c42fcf435a
2 changed files with 19 additions and 27 deletions

View File

@ -1,6 +1,5 @@
import { css } from '@emotion/react'; import { css } from '@emotion/react';
import styled from '@emotion/styled'; import styled from '@emotion/styled';
import { useRecoilValue } from 'recoil';
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { RecordTableBody } from '@/object-record/record-table/components/RecordTableBody'; import { RecordTableBody } from '@/object-record/record-table/components/RecordTableBody';
@ -23,12 +22,9 @@ import { MoveFocusDirection } from '@/object-record/record-table/types/MoveFocus
import { TableCellPosition } from '@/object-record/record-table/types/TableCellPosition'; import { TableCellPosition } from '@/object-record/record-table/types/TableCellPosition';
import { MOBILE_VIEWPORT } from '@/ui/theme/constants/MobileViewport'; import { MOBILE_VIEWPORT } from '@/ui/theme/constants/MobileViewport';
import { RGBA } from '@/ui/theme/constants/Rgba'; import { RGBA } from '@/ui/theme/constants/Rgba';
import { scrollLeftState } from '@/ui/utilities/scroll/states/scrollLeftState';
import { scrollTopState } from '@/ui/utilities/scroll/states/scrollTopState';
const StyledTable = styled.table<{ const StyledTable = styled.table<{
freezeFirstColumns?: boolean; freezeFirstColumns?: boolean;
freezeHeaders?: boolean;
}>` }>`
border-radius: ${({ theme }) => theme.border.radius.sm}; border-radius: ${({ theme }) => theme.border.radius.sm};
border-spacing: 0; border-spacing: 0;
@ -150,8 +146,6 @@ export const RecordTable = ({
createRecord, createRecord,
}: RecordTableProps) => { }: RecordTableProps) => {
const { scopeId } = useRecordTableStates(recordTableId); const { scopeId } = useRecordTableStates(recordTableId);
const scrollLeft = useRecoilValue(scrollLeftState);
const scrollTop = useRecoilValue(scrollTopState);
const { objectMetadataItem } = useObjectMetadataItem({ const { objectMetadataItem } = useObjectMetadataItem({
objectNameSingular, objectNameSingular,
@ -228,11 +222,7 @@ export const RecordTable = ({
onCellMouseEnter: handleContainerMouseEnter, onCellMouseEnter: handleContainerMouseEnter,
}} }}
> >
<StyledTable <StyledTable className="entity-table-cell">
freezeFirstColumns={scrollLeft > 0}
freezeHeaders={scrollTop > 0}
className="entity-table-cell"
>
<RecordTableHeader createRecord={createRecord} /> <RecordTableHeader createRecord={createRecord} />
<RecordTableBodyEffect objectNameSingular={objectNameSingular} /> <RecordTableBodyEffect objectNameSingular={objectNameSingular} />
<RecordTableBody objectNameSingular={objectNameSingular} /> <RecordTableBody objectNameSingular={objectNameSingular} />

View File

@ -33,7 +33,9 @@ export const RecordTableRow = ({ recordId, rowIndex }: RecordTableRowProps) => {
const scrollWrapperRef = useContext(ScrollWrapperContext); const scrollWrapperRef = useContext(ScrollWrapperContext);
const { ref: elementRef, inView } = useInView({ const { ref: elementRef, inView } = useInView({
root: scrollWrapperRef.current, root: scrollWrapperRef.current?.querySelector(
'[data-overlayscrollbars-viewport="scrollbarHidden"]',
),
rootMargin: '1000px', rootMargin: '1000px',
}); });
@ -58,21 +60,21 @@ export const RecordTableRow = ({ recordId, rowIndex }: RecordTableRowProps) => {
<StyledTd> <StyledTd>
<CheckboxCell /> <CheckboxCell />
</StyledTd> </StyledTd>
{visibleTableColumns.map((column, columnIndex) => {inView
inView ? ( ? visibleTableColumns.map((column, columnIndex) => (
<RecordTableCellContext.Provider <RecordTableCellContext.Provider
value={{ value={{
columnDefinition: column, columnDefinition: column,
columnIndex, columnIndex,
}} }}
key={column.fieldMetadataId} key={column.fieldMetadataId}
> >
<RecordTableCellFieldContextWrapper /> <RecordTableCellFieldContextWrapper />
</RecordTableCellContext.Provider> </RecordTableCellContext.Provider>
) : ( ))
<td key={column.fieldMetadataId}></td> : visibleTableColumns.map((column, columnIndex) => (
), <td key={column.fieldMetadataId}></td>
)} ))}
<td></td> <td></td>
</tr> </tr>
</RecordTableRowContext.Provider> </RecordTableRowContext.Provider>