Skip to content

Commit d85c45a

Browse files
authored
Fix last row disappearing when dragging a row in the table (#12297)
# Fix last row disappearing when dragging a row in the table Fixes twentyhq/core-team-issues#836 The issue came from the fact that the provided placeholder was not mounted at the right place (after the footer when it should be mounted before it). I created a context to which we can pass the placeholder. We can use this placeholder anywhere inside the table by using `RecordTableBodyDroppablePlaceholder`. ## Before https://github.com/user-attachments/assets/39a2e45b-6d97-4450-bfee-12135a873a1d ## After https://github.com/user-attachments/assets/ca126819-67f2-4358-b644-85172fef3b8f
1 parent c7b3ebc commit d85c45a

File tree

5 files changed

+30
-2
lines changed

5 files changed

+30
-2
lines changed

packages/twenty-front/src/modules/object-record/record-table/components/RecordTableNoRecordGroupRows.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { recordIndexAllRecordIdsComponentSelector } from '@/object-record/record-index/states/selectors/recordIndexAllRecordIdsComponentSelector';
2+
import { RecordTableBodyDroppablePlaceholder } from '@/object-record/record-table/record-table-body/components/RecordTableBodyDroppablePlaceholder';
23
import { RecordTableBodyFetchMoreLoader } from '@/object-record/record-table/record-table-body/components/RecordTableBodyFetchMoreLoader';
34
import { RecordTableAggregateFooter } from '@/object-record/record-table/record-table-footer/components/RecordTableAggregateFooter';
45
import { RecordTableRow } from '@/object-record/record-table/record-table-row/components/RecordTableRow';
@@ -27,6 +28,7 @@ export const RecordTableNoRecordGroupRows = () => {
2728
);
2829
})}
2930
<RecordTableBodyFetchMoreLoader />
31+
<RecordTableBodyDroppablePlaceholder />
3032
{!isRecordTableInitialLoading && allRecordIds.length > 0 && (
3133
<RecordTableAggregateFooter />
3234
)}

packages/twenty-front/src/modules/object-record/record-table/components/RecordTableRecordGroupRows.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { useCurrentRecordGroupId } from '@/object-record/record-group/hooks/useCurrentRecordGroupId';
22
import { recordIndexRecordIdsByGroupComponentFamilyState } from '@/object-record/record-index/states/recordIndexRecordIdsByGroupComponentFamilyState';
33
import { recordIndexAllRecordIdsComponentSelector } from '@/object-record/record-index/states/selectors/recordIndexAllRecordIdsComponentSelector';
4+
import { RecordTableBodyDroppablePlaceholder } from '@/object-record/record-table/record-table-body/components/RecordTableBodyDroppablePlaceholder';
45
import { RecordTableAggregateFooter } from '@/object-record/record-table/record-table-footer/components/RecordTableAggregateFooter';
56
import { RecordTableRow } from '@/object-record/record-table/record-table-row/components/RecordTableRow';
67
import { RecordTableRecordGroupSectionAddNew } from '@/object-record/record-table/record-table-section/components/RecordTableRecordGroupSectionAddNew';
@@ -57,6 +58,7 @@ export const RecordTableRecordGroupRows = () => {
5758
})}
5859
<RecordTableRecordGroupSectionLoadMore />
5960
<RecordTableRecordGroupSectionAddNew />
61+
<RecordTableBodyDroppablePlaceholder />
6062
<RecordTableAggregateFooter
6163
key={currentRecordGroupId}
6264
currentRecordGroupId={currentRecordGroupId}

packages/twenty-front/src/modules/object-record/record-table/record-table-body/components/RecordTableBodyDroppable.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { RecordTableBody } from '@/object-record/record-table/record-table-body/components/RecordTableBody';
2+
import { RecordTableBodyDroppableContextProvider } from '@/object-record/record-table/record-table-body/contexts/RecordTableBodyDroppableContext';
23
import { recordTableHoverPositionComponentState } from '@/object-record/record-table/states/recordTableHoverPositionComponentState';
34
import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2';
45
import { Droppable } from '@hello-pangea/dnd';
@@ -36,8 +37,11 @@ export const RecordTableBodyDroppable = ({
3637
{...provided.droppableProps}
3738
onMouseLeave={() => setRecordTableHoverPosition(null)}
3839
>
39-
{children}
40-
{provided.placeholder}
40+
<RecordTableBodyDroppableContextProvider
41+
value={{ droppablePlaceholder: provided.placeholder }}
42+
>
43+
{children}
44+
</RecordTableBodyDroppableContextProvider>
4145
</RecordTableBody>
4246
)}
4347
</Droppable>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { useRecordTableBodyDroppableContextOrThrow } from '@/object-record/record-table/record-table-body/contexts/RecordTableBodyDroppableContext';
2+
3+
export const RecordTableBodyDroppablePlaceholder = () => {
4+
const { droppablePlaceholder } = useRecordTableBodyDroppableContextOrThrow();
5+
6+
return droppablePlaceholder;
7+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { ReactNode } from 'react';
2+
import { createRequiredContext } from '~/utils/createRequiredContext';
3+
4+
export type RecordTableBodyDroppableContextValue = {
5+
droppablePlaceholder: ReactNode;
6+
};
7+
8+
export const [
9+
RecordTableBodyDroppableContextProvider,
10+
useRecordTableBodyDroppableContextOrThrow,
11+
] = createRequiredContext<RecordTableBodyDroppableContextValue>(
12+
'RecordTableBodyDroppableContext',
13+
);

0 commit comments

Comments
 (0)