diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/useUpdateOneFieldMetadataItem.ts b/packages/twenty-front/src/modules/object-metadata/hooks/useUpdateOneFieldMetadataItem.ts index 8d61920df428..cc4ff32b1e74 100644 --- a/packages/twenty-front/src/modules/object-metadata/hooks/useUpdateOneFieldMetadataItem.ts +++ b/packages/twenty-front/src/modules/object-metadata/hooks/useUpdateOneFieldMetadataItem.ts @@ -13,6 +13,11 @@ import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSi import { useFindManyRecordsQuery } from '@/object-record/hooks/useFindManyRecordsQuery'; import { GET_CURRENT_USER } from '@/users/graphql/queries/getCurrentUser'; import { useSetRecoilState } from 'recoil'; + +import { getRecordsFromRecordConnection } from '@/object-record/cache/utils/getRecordsFromRecordConnection'; +import { RecordGqlConnection } from '@/object-record/graphql/types/RecordGqlConnection'; +import { useSetRecordGroups } from '@/object-record/record-group/hooks/useSetRecordGroups'; +import { isDefined } from 'twenty-shared'; import { useApolloMetadataClient } from './useApolloMetadataClient'; export const useUpdateOneFieldMetadataItem = () => { @@ -21,6 +26,8 @@ export const useUpdateOneFieldMetadataItem = () => { const { refreshObjectMetadataItems } = useRefreshObjectMetadataItems('network-only'); + const { setRecordGroupsFromViewGroups } = useSetRecordGroups(); + const setCurrentWorkspace = useSetRecoilState(currentWorkspaceState); const { findManyRecordsQuery: findManyViewsQuery } = useFindManyRecordsQuery({ @@ -70,12 +77,14 @@ export const useUpdateOneFieldMetadataItem = () => { }, }); - await refreshObjectMetadataItems(); + const objectMetadataItemsRefreshed = await refreshObjectMetadataItems(); const { data } = await apolloClient.query({ query: GET_CURRENT_USER }); setCurrentWorkspace(data?.currentUser?.currentWorkspace); - await apolloClient.query({ + const { data: viewConnection } = await apolloClient.query<{ + views: RecordGqlConnection; + }>({ query: findManyViewsQuery, variables: { filter: { @@ -87,6 +96,25 @@ export const useUpdateOneFieldMetadataItem = () => { fetchPolicy: 'network-only', }); + const viewRecords = getRecordsFromRecordConnection({ + recordConnection: viewConnection?.views, + }); + + for (const view of viewRecords) { + const correspondingObjectMetadataItemRefreshed = + objectMetadataItemsRefreshed?.find( + (item) => item.id === objectMetadataId, + ); + + if (isDefined(correspondingObjectMetadataItemRefreshed)) { + setRecordGroupsFromViewGroups( + view.id, + view.viewGroups, + correspondingObjectMetadataItemRefreshed, + ); + } + } + return result; }; diff --git a/packages/twenty-front/src/modules/object-record/record-group/hooks/useRecordGroupReorder.ts b/packages/twenty-front/src/modules/object-record/record-group/hooks/useRecordGroupReorder.ts index 20092c5b6d0a..ba98c1b2be52 100644 --- a/packages/twenty-front/src/modules/object-record/record-group/hooks/useRecordGroupReorder.ts +++ b/packages/twenty-front/src/modules/object-record/record-group/hooks/useRecordGroupReorder.ts @@ -1,5 +1,6 @@ import { OnDragEndResponder } from '@hello-pangea/dnd'; +import { useContextStoreObjectMetadataItemOrThrow } from '@/context-store/hooks/useContextStoreObjectMetadataItemOrThrow'; import { useSetRecordGroups } from '@/object-record/record-group/hooks/useSetRecordGroups'; import { recordGroupDefinitionFamilyState } from '@/object-record/record-group/states/recordGroupDefinitionFamilyState'; import { visibleRecordGroupIdsComponentFamilySelector } from '@/object-record/record-group/states/selectors/visibleRecordGroupIdsComponentFamilySelector'; @@ -24,6 +25,7 @@ export const useRecordGroupReorder = ({ viewType, }: UseRecordGroupHandlersParams) => { const { setRecordGroups } = useSetRecordGroups(); + const { objectMetadataItem } = useContextStoreObjectMetadataItemOrThrow(); const visibleRecordGroupIdsFamilySelector = useRecoilComponentCallbackStateV2( visibleRecordGroupIdsComponentFamilySelector, @@ -78,12 +80,13 @@ export const useRecordGroupReorder = ({ ]; }, []); - setRecordGroups(updatedRecordGroups, viewBarId); + setRecordGroups(updatedRecordGroups, viewBarId, objectMetadataItem.id); saveViewGroups( mapRecordGroupDefinitionsToViewGroups(updatedRecordGroups), ); }, [ + objectMetadataItem, saveViewGroups, setRecordGroups, viewBarId, diff --git a/packages/twenty-front/src/modules/object-record/record-group/hooks/useSetRecordGroups.ts b/packages/twenty-front/src/modules/object-record/record-group/hooks/useSetRecordGroups.ts index 1d7e87970c5f..cc2a7430063c 100644 --- a/packages/twenty-front/src/modules/object-record/record-group/hooks/useSetRecordGroups.ts +++ b/packages/twenty-front/src/modules/object-record/record-group/hooks/useSetRecordGroups.ts @@ -1,7 +1,5 @@ -import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId'; -import { useContextStoreObjectMetadataItemOrThrow } from '@/context-store/hooks/useContextStoreObjectMetadataItemOrThrow'; -import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; +import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { recordGroupDefinitionFamilyState } from '@/object-record/record-group/states/recordGroupDefinitionFamilyState'; import { recordGroupFieldMetadataComponentState } from '@/object-record/record-group/states/recordGroupFieldMetadataComponentState'; import { recordGroupIdsComponentState } from '@/object-record/record-group/states/recordGroupIdsComponentState'; @@ -16,19 +14,13 @@ import { isDefined } from 'twenty-shared'; import { isDeeplyEqual } from '~/utils/isDeeplyEqual'; export const useSetRecordGroups = () => { - const { objectMetadataItem } = useContextStoreObjectMetadataItemOrThrow(); - const setRecordGroups = useRecoilCallback( ({ snapshot, set }) => - (recordGroups: RecordGroupDefinition[], recordIndexId: string) => { - const objectMetadataItemId = snapshot - .getLoadable( - contextStoreCurrentObjectMetadataItemIdComponentState.atomFamily({ - instanceId: MAIN_CONTEXT_STORE_INSTANCE_ID, - }), - ) - .getValue(); - + ( + recordGroups: RecordGroupDefinition[], + recordIndexId: string, + objectMetadataItemId: string, + ) => { const objectMetadataItems = snapshot .getLoadable(objectMetadataItemsState) .getValue(); @@ -113,7 +105,11 @@ export const useSetRecordGroups = () => { ); const setRecordGroupsFromViewGroups = useCallback( - (viewId: string, viewGroups: ViewGroup[]) => { + ( + viewId: string, + viewGroups: ViewGroup[], + objectMetadataItem: ObjectMetadataItem, + ) => { const recordIndexId = getRecordIndexIdFromObjectNamePluralAndViewId( objectMetadataItem.namePlural, viewId, @@ -124,9 +120,13 @@ export const useSetRecordGroups = () => { viewGroups, }); - setRecordGroups(newGroupDefinitions, recordIndexId); + setRecordGroups( + newGroupDefinitions, + recordIndexId, + objectMetadataItem.id, + ); }, - [objectMetadataItem, setRecordGroups], + [setRecordGroups], ); return { diff --git a/packages/twenty-front/src/modules/object-record/record-index/hooks/useHandleRecordGroupField.ts b/packages/twenty-front/src/modules/object-record/record-index/hooks/useHandleRecordGroupField.ts index fedc1b13c595..990be0a6f013 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/hooks/useHandleRecordGroupField.ts +++ b/packages/twenty-front/src/modules/object-record/record-index/hooks/useHandleRecordGroupField.ts @@ -1,3 +1,4 @@ +import { useContextStoreObjectMetadataItemOrThrow } from '@/context-store/hooks/useContextStoreObjectMetadataItemOrThrow'; import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState'; import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { useSetRecordGroups } from '@/object-record/record-group/hooks/useSetRecordGroups'; @@ -17,6 +18,8 @@ export const useHandleRecordGroupField = () => { contextStoreCurrentViewIdComponentState, ); + const { objectMetadataItem } = useContextStoreObjectMetadataItemOrThrow(); + const { getViewFromPrefetchState } = useGetViewFromPrefetchState(); const { setRecordGroupsFromViewGroups } = useSetRecordGroups(); @@ -96,7 +99,11 @@ export const useHandleRecordGroupField = () => { ...viewGroupsToCreate, ]; - setRecordGroupsFromViewGroups(view.id, newViewGroupsList); + setRecordGroupsFromViewGroups( + view.id, + newViewGroupsList, + objectMetadataItem, + ); if (viewGroupsToCreate.length > 0) { await createViewGroupRecords({ viewGroupsToCreate, viewId: view.id }); @@ -107,6 +114,7 @@ export const useHandleRecordGroupField = () => { } }, [ + objectMetadataItem, currentViewIdCallbackState, getViewFromPrefetchState, setRecordGroupsFromViewGroups, diff --git a/packages/twenty-front/src/modules/object-record/record-index/hooks/useLoadRecordIndexStates.ts b/packages/twenty-front/src/modules/object-record/record-index/hooks/useLoadRecordIndexStates.ts index d270bb78e110..df8b3118f4d7 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/hooks/useLoadRecordIndexStates.ts +++ b/packages/twenty-front/src/modules/object-record/record-index/hooks/useLoadRecordIndexStates.ts @@ -176,7 +176,12 @@ export const useLoadRecordIndexStates = () => { .getValue(); onViewFieldsChange(view.viewFields, objectMetadataItem, recordIndexId); - setRecordGroupsFromViewGroups(view.id, view.viewGroups); + + setRecordGroupsFromViewGroups( + view.id, + view.viewGroups, + objectMetadataItem, + ); setContextStoreTargetedRecordsRuleComponentState((prev) => ({ ...prev,