Skip to content

Commit b1c821b

Browse files
Implement hide empty groups for grouped table view (#16494)
Co-authored-by: Félix Malfait <felix.malfait@gmail.com> Co-authored-by: Félix Malfait <felix@twenty.com>
1 parent 308973d commit b1c821b

File tree

5 files changed

+37
-24
lines changed

5 files changed

+37
-24
lines changed

packages/twenty-front/src/modules/object-record/record-board/record-board-column/components/RecordBoardColumn.tsx

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,11 @@ import { Droppable } from '@hello-pangea/dnd';
33

44
import { RecordBoardColumnCardsContainer } from '@/object-record/record-board/record-board-column/components/RecordBoardColumnCardsContainer';
55
import { RecordBoardColumnContext } from '@/object-record/record-board/record-board-column/contexts/RecordBoardColumnContext';
6-
import { emptyRecordGroupByIdComponentFamilyState } from '@/object-record/record-group/states/emptyRecordGroupByIdComponentFamilyState';
6+
import { useShouldHideRecordGroup } from '@/object-record/record-group/hooks/useShouldHideRecordGroup';
77
import { recordGroupDefinitionFamilyState } from '@/object-record/record-group/states/recordGroupDefinitionFamilyState';
88
import { recordIndexRecordIdsByGroupComponentFamilyState } from '@/object-record/record-index/states/recordIndexRecordIdsByGroupComponentFamilyState';
9-
import { recordIndexShouldHideEmptyRecordGroupsComponentState } from '@/object-record/record-index/states/recordIndexShouldHideEmptyRecordGroupsComponentState';
109
import { DragAndDropLibraryLegacyReRenderBreaker } from '@/ui/drag-and-drop/components/DragAndDropReRenderBreaker';
1110
import { useRecoilComponentFamilyValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentFamilyValue';
12-
import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue';
1311
import { useRecoilValue } from 'recoil';
1412
import { isDefined } from 'twenty-shared/utils';
1513

@@ -44,16 +42,9 @@ export const RecordBoardColumn = ({
4442
recordBoardColumnId,
4543
);
4644

47-
const shouldHideEmptyRecordGroups = useRecoilComponentValue(
48-
recordIndexShouldHideEmptyRecordGroupsComponentState,
49-
);
50-
51-
const isRecordGroupEmpty = useRecoilComponentFamilyValue(
52-
emptyRecordGroupByIdComponentFamilyState,
53-
recordBoardColumnId,
54-
);
45+
const shouldHide = useShouldHideRecordGroup(recordBoardColumnId);
5546

56-
if (shouldHideEmptyRecordGroups && isRecordGroupEmpty) {
47+
if (shouldHide) {
5748
return null;
5849
}
5950

packages/twenty-front/src/modules/object-record/record-board/record-board-column/components/RecordBoardColumnHeaderWrapper.tsx

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
import { RecordBoardColumnHeader } from '@/object-record/record-board/record-board-column/components/RecordBoardColumnHeader';
22
import { RecordBoardColumnContext } from '@/object-record/record-board/record-board-column/contexts/RecordBoardColumnContext';
3-
import { emptyRecordGroupByIdComponentFamilyState } from '@/object-record/record-group/states/emptyRecordGroupByIdComponentFamilyState';
3+
import { useShouldHideRecordGroup } from '@/object-record/record-group/hooks/useShouldHideRecordGroup';
44
import { recordGroupDefinitionFamilyState } from '@/object-record/record-group/states/recordGroupDefinitionFamilyState';
55
import { recordIndexRecordIdsByGroupComponentFamilyState } from '@/object-record/record-index/states/recordIndexRecordIdsByGroupComponentFamilyState';
6-
import { recordIndexShouldHideEmptyRecordGroupsComponentState } from '@/object-record/record-index/states/recordIndexShouldHideEmptyRecordGroupsComponentState';
76
import { useRecoilComponentFamilyValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentFamilyValue';
8-
import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue';
97
import { useRecoilValue } from 'recoil';
108
import { isDefined } from 'twenty-shared/utils';
119

@@ -27,16 +25,9 @@ export const RecordBoardColumnHeaderWrapper = ({
2725
columnId,
2826
);
2927

30-
const shouldHideEmptyRecordGroups = useRecoilComponentValue(
31-
recordIndexShouldHideEmptyRecordGroupsComponentState,
32-
);
33-
34-
const isRecordGroupEmpty = useRecoilComponentFamilyValue(
35-
emptyRecordGroupByIdComponentFamilyState,
36-
columnId,
37-
);
28+
const shouldHide = useShouldHideRecordGroup(columnId);
3829

39-
if (shouldHideEmptyRecordGroups && isRecordGroupEmpty) {
30+
if (shouldHide) {
4031
return null;
4132
}
4233

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { emptyRecordGroupByIdComponentFamilyState } from '@/object-record/record-group/states/emptyRecordGroupByIdComponentFamilyState';
2+
import { recordIndexShouldHideEmptyRecordGroupsComponentState } from '@/object-record/record-index/states/recordIndexShouldHideEmptyRecordGroupsComponentState';
3+
import { useRecoilComponentFamilyValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentFamilyValue';
4+
import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue';
5+
6+
export const useShouldHideRecordGroup = (recordGroupId: string): boolean => {
7+
const shouldHideEmptyRecordGroups = useRecoilComponentValue(
8+
recordIndexShouldHideEmptyRecordGroupsComponentState,
9+
);
10+
11+
const isRecordGroupEmpty = useRecoilComponentFamilyValue(
12+
emptyRecordGroupByIdComponentFamilyState,
13+
recordGroupId,
14+
);
15+
16+
return shouldHideEmptyRecordGroups && isRecordGroupEmpty;
17+
};

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { useCurrentRecordGroupId } from '@/object-record/record-group/hooks/useCurrentRecordGroupId';
2+
import { useShouldHideRecordGroup } from '@/object-record/record-group/hooks/useShouldHideRecordGroup';
23
import { recordIndexRecordIdsByGroupComponentFamilyState } from '@/object-record/record-index/states/recordIndexRecordIdsByGroupComponentFamilyState';
34
import { recordIndexAllRecordIdsComponentSelector } from '@/object-record/record-index/states/selectors/recordIndexAllRecordIdsComponentSelector';
45
import { RecordTableBodyDroppablePlaceholder } from '@/object-record/record-table/record-table-body/components/RecordTableBodyDroppablePlaceholder';
@@ -15,6 +16,8 @@ import { isDefined } from 'twenty-shared/utils';
1516
export const RecordTableRecordGroupRows = () => {
1617
const currentRecordGroupId = useCurrentRecordGroupId();
1718

19+
const shouldHide = useShouldHideRecordGroup(currentRecordGroupId);
20+
1821
const allRecordIds = useRecoilComponentValue(
1922
recordIndexAllRecordIdsComponentSelector,
2023
);
@@ -34,6 +37,10 @@ export const RecordTableRecordGroupRows = () => {
3437
[allRecordIds],
3538
);
3639

40+
if (shouldHide) {
41+
return null;
42+
}
43+
3744
if (!isRecordGroupTableSectionToggled) {
3845
return null;
3946
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { useCallback } from 'react';
55
import { RecordBoardColumnHeaderAggregateDropdown } from '@/object-record/record-board/record-board-column/components/RecordBoardColumnHeaderAggregateDropdown';
66
import { visibleRecordFieldsComponentSelector } from '@/object-record/record-field/states/visibleRecordFieldsComponentSelector';
77
import { useCurrentRecordGroupId } from '@/object-record/record-group/hooks/useCurrentRecordGroupId';
8+
import { useShouldHideRecordGroup } from '@/object-record/record-group/hooks/useShouldHideRecordGroup';
89
import { recordGroupDefinitionFamilyState } from '@/object-record/record-group/states/recordGroupDefinitionFamilyState';
910
import { RecordGroupDefinitionType } from '@/object-record/record-group/types/RecordGroupDefinition';
1011
import { useRecordIndexContextOrThrow } from '@/object-record/record-index/contexts/RecordIndexContext';
@@ -117,6 +118,8 @@ export const RecordTableRecordGroupSection = () => {
117118

118119
const currentRecordGroupId = useCurrentRecordGroupId();
119120

121+
const shouldHide = useShouldHideRecordGroup(currentRecordGroupId);
122+
120123
const { objectMetadataItem } = useRecordTableContextOrThrow();
121124

122125
const recordGroup = useRecoilValue(
@@ -178,6 +181,10 @@ export const RecordTableRecordGroupSection = () => {
178181
sumOfWidthOfVisibleRecordFieldsAfterLabelIdentifierField +
179182
sumOfBorderWidthForFields;
180183

184+
if (shouldHide) {
185+
return null;
186+
}
187+
181188
if (!isDefined(recordGroup)) {
182189
return null;
183190
}

0 commit comments

Comments
 (0)