Fix re render view groups (#9098)

Co-authored-by: Jérémy Magrin <jeremy.magrin@gmail.com>
Co-authored-by: Marie Stoppa <marie.stoppa@essec.edu>
This commit is contained in:
Charles Bochet
2024-12-17 12:29:10 +01:00
committed by GitHub
parent c63842925f
commit 4fe3250e81
3 changed files with 11 additions and 14 deletions

View File

@ -24,7 +24,7 @@ export const useSetRecordGroup = (viewId?: string) => {
return useRecoilCallback( return useRecoilCallback(
({ snapshot, set }) => ({ snapshot, set }) =>
(recordGroups: RecordGroupDefinition[]) => { (recordGroups: RecordGroupDefinition[]) => {
const currentRecordGroupId = getSnapshotValue( const currentRecordGroupIds = getSnapshotValue(
snapshot, snapshot,
recordIndexRecordGroupIdsState, recordIndexRecordGroupIdsState,
); );
@ -61,7 +61,7 @@ export const useSetRecordGroup = (viewId?: string) => {
const recordGroupIds = recordGroups.map(({ id }) => id); const recordGroupIds = recordGroups.map(({ id }) => id);
// Get ids that has been removed between the current and new record groups // Get ids that has been removed between the current and new record groups
const removedRecordGroupIds = currentRecordGroupId.filter( const removedRecordGroupIds = currentRecordGroupIds.filter(
(id) => !recordGroupIds.includes(id), (id) => !recordGroupIds.includes(id),
); );
@ -70,7 +70,7 @@ export const useSetRecordGroup = (viewId?: string) => {
set(recordGroupDefinitionFamilyState(id), undefined); set(recordGroupDefinitionFamilyState(id), undefined);
}); });
if (isDeeplyEqual(currentRecordGroupId, recordGroupIds)) { if (isDeeplyEqual(currentRecordGroupIds, recordGroupIds)) {
return; return;
} }

View File

@ -6,12 +6,12 @@ import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord';
import { getDraggedRecordPosition } from '@/object-record/record-board/utils/getDraggedRecordPosition'; import { getDraggedRecordPosition } from '@/object-record/record-board/utils/getDraggedRecordPosition';
import { recordGroupDefinitionFamilyState } from '@/object-record/record-group/states/recordGroupDefinitionFamilyState'; import { recordGroupDefinitionFamilyState } from '@/object-record/record-group/states/recordGroupDefinitionFamilyState';
import { recordIndexRecordIdsByGroupComponentFamilyState } from '@/object-record/record-index/states/recordIndexRecordIdsByGroupComponentFamilyState'; import { recordIndexRecordIdsByGroupComponentFamilyState } from '@/object-record/record-index/states/recordIndexRecordIdsByGroupComponentFamilyState';
import { recordIndexSortsState } from '@/object-record/record-index/states/recordIndexSortsState';
import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState';
import { useRecordTableContextOrThrow } from '@/object-record/record-table/contexts/RecordTableContext'; import { useRecordTableContextOrThrow } from '@/object-record/record-table/contexts/RecordTableContext';
import { isRemoveSortingModalOpenState } from '@/object-record/record-table/states/isRemoveSortingModalOpenState'; import { isRemoveSortingModalOpenState } from '@/object-record/record-table/states/isRemoveSortingModalOpenState';
import { useRecoilComponentCallbackStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentCallbackStateV2'; import { useRecoilComponentCallbackStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentCallbackStateV2';
import { getSnapshotValue } from '@/ui/utilities/state/utils/getSnapshotValue'; import { getSnapshotValue } from '@/ui/utilities/state/utils/getSnapshotValue';
import { useGetCurrentView } from '@/views/hooks/useGetCurrentView';
import { isDefined } from '~/utils/isDefined'; import { isDefined } from '~/utils/isDefined';
export const RecordTableBodyRecordGroupDragDropContextProvider = ({ export const RecordTableBodyRecordGroupDragDropContextProvider = ({
@ -19,18 +19,13 @@ export const RecordTableBodyRecordGroupDragDropContextProvider = ({
}: { }: {
children: ReactNode; children: ReactNode;
}) => { }) => {
const { objectNameSingular, recordTableId, objectMetadataItem } = const { objectNameSingular, objectMetadataItem } =
useRecordTableContextOrThrow(); useRecordTableContextOrThrow();
const { updateOneRecord: updateOneRow } = useUpdateOneRecord({ const { updateOneRecord: updateOneRow } = useUpdateOneRecord({
objectNameSingular, objectNameSingular,
}); });
const { currentViewWithCombinedFiltersAndSorts } =
useGetCurrentView(recordTableId);
const viewSorts = currentViewWithCombinedFiltersAndSorts?.viewSorts || [];
const setIsRemoveSortingModalOpenState = useSetRecoilState( const setIsRemoveSortingModalOpenState = useSetRecoilState(
isRemoveSortingModalOpenState, isRemoveSortingModalOpenState,
); );
@ -57,6 +52,10 @@ export const RecordTableBodyRecordGroupDragDropContextProvider = ({
recordGroupDefinitionFamilyState(destinationRecordGroupId), recordGroupDefinitionFamilyState(destinationRecordGroupId),
); );
const indexSorts = snapshot
.getLoadable(recordIndexSortsState)
.getValue();
if (!isDefined(destinationRecordGroup)) { if (!isDefined(destinationRecordGroup)) {
throw new Error('Record group is not defined'); throw new Error('Record group is not defined');
} }
@ -69,7 +68,7 @@ export const RecordTableBodyRecordGroupDragDropContextProvider = ({
throw new Error('Field metadata is not defined'); throw new Error('Field metadata is not defined');
} }
if (viewSorts.length > 0) { if (indexSorts.length > 0) {
setIsRemoveSortingModalOpenState(true); setIsRemoveSortingModalOpenState(true);
return; return;
} }
@ -128,7 +127,6 @@ export const RecordTableBodyRecordGroupDragDropContextProvider = ({
}, },
[ [
objectMetadataItem.fields, objectMetadataItem.fields,
viewSorts.length,
recordIdsByGroupFamilyState, recordIdsByGroupFamilyState,
updateOneRow, updateOneRow,
setIsRemoveSortingModalOpenState, setIsRemoveSortingModalOpenState,

View File

@ -1,4 +1,3 @@
import { v4 } from 'uuid';
import { isDefined } from '~/utils/isDefined'; import { isDefined } from '~/utils/isDefined';
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
@ -65,7 +64,7 @@ export const mapViewGroupsToRecordGroupDefinitions = ({
); );
const noValueColumn = { const noValueColumn = {
id: viewGroup?.id ?? v4(), id: viewGroup?.id ?? '20202020-c05f-46c9-ae1e-2b3c5c702049',
title: 'No Value', title: 'No Value',
type: RecordGroupDefinitionType.NoValue, type: RecordGroupDefinitionType.NoValue,
value: null, value: null,