diff --git a/packages/twenty-front/src/modules/views/components/ViewBarRecordSortEffect.tsx b/packages/twenty-front/src/modules/views/components/ViewBarRecordSortEffect.tsx index b83a057fc5c..d0d135712e4 100644 --- a/packages/twenty-front/src/modules/views/components/ViewBarRecordSortEffect.tsx +++ b/packages/twenty-front/src/modules/views/components/ViewBarRecordSortEffect.tsx @@ -46,7 +46,12 @@ export const ViewBarRecordSortEffect = () => { } if (isDefined(currentView)) { - setCurrentRecordSorts(currentView.viewSorts); + const validViewSorts = currentView.viewSorts.filter((viewSort) => + objectMetadataItem.fields.some( + (field) => field.id === viewSort.fieldMetadataId, + ), + ); + setCurrentRecordSorts(validViewSorts); setHasInitializedCurrentRecordSorts(true); } } diff --git a/packages/twenty-server/src/engine/metadata-modules/field-metadata/services/field-metadata.service.ts b/packages/twenty-server/src/engine/metadata-modules/field-metadata/services/field-metadata.service.ts index 2ed425d1d2b..c24116873e6 100644 --- a/packages/twenty-server/src/engine/metadata-modules/field-metadata/services/field-metadata.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/field-metadata/services/field-metadata.service.ts @@ -181,6 +181,7 @@ export class FieldMetadataService extends TypeOrmQueryService; type FlatFieldMetadataAndIndexToUpdate = { @@ -51,6 +52,7 @@ export const fromUpdateFieldInputToFlatFieldMetadata = ({ flatViewGroupMaps, flatViewMaps, flatViewFieldMaps, + flatViewSortMaps, isSystemBuild, }: FromUpdateFieldInputToFlatFieldMetadataArgs): FieldInputTranspilationResult => { const updateFieldInputInformalProperties = @@ -150,6 +152,7 @@ export const fromUpdateFieldInputToFlatFieldMetadata = ({ toFlatFieldMetadata, flatViewMaps, flatViewFieldMaps, + flatViewSortMaps, flatApplication, }); @@ -171,6 +174,7 @@ export const fromUpdateFieldInputToFlatFieldMetadata = ({ flatIndexMetadatasToDelete, flatViewsToDelete, flatViewFieldsToDelete, + flatViewSortsToDelete, flatViewsToUpdate, flatFieldMetadatasToUpdate: flatFieldMetadatasToUpdateFromSideEffect, } = sideEffectResult.result; @@ -222,6 +226,10 @@ export const fromUpdateFieldInputToFlatFieldMetadata = ({ ...accumulator.flatViewFieldsToDelete, ...flatViewFieldsToDelete, ], + flatViewSortsToDelete: [ + ...accumulator.flatViewSortsToDelete, + ...flatViewSortsToDelete, + ], flatViewsToUpdate: [ ...accumulator.flatViewsToUpdate, ...flatViewsToUpdate, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/handle-field-metadata-deactivation-side-effects.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/handle-field-metadata-deactivation-side-effects.util.ts index 3b3222702ca..4ace18c4bbe 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/handle-field-metadata-deactivation-side-effects.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/handle-field-metadata-deactivation-side-effects.util.ts @@ -6,6 +6,7 @@ import { findManyFlatEntityByUniversalIdentifierInUniversalFlatEntityMapsOrThrow import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { type FlatViewField } from 'src/engine/metadata-modules/flat-view-field/types/flat-view-field.type'; import { type FlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type'; +import { type FlatViewSort } from 'src/engine/metadata-modules/flat-view-sort/types/flat-view-sort.type'; import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; type HandleFlatFieldMetadataDeactivationSideEffectsArgs = FromTo< @@ -18,6 +19,7 @@ type HandleFlatFieldMetadataDeactivationSideEffectsArgs = FromTo< | 'flatViewFilterMaps' | 'flatViewFieldMaps' | 'flatViewGroupMaps' + | 'flatViewSortMaps' >; export type FieldMetadataDeactivationSideEffect = { @@ -25,6 +27,7 @@ export type FieldMetadataDeactivationSideEffect = { flatViewsToUpdate: FlatView[]; flatViewFieldsToDelete: FlatViewField[]; flatViewFiltersToDelete: FlatViewFilter[]; + flatViewSortsToDelete: FlatViewSort[]; }; export const handleFieldMetadataDeactivationSideEffects = ({ @@ -33,6 +36,7 @@ export const handleFieldMetadataDeactivationSideEffects = ({ flatViewFieldMaps, flatViewFilterMaps, flatViewGroupMaps, + flatViewSortMaps, }: HandleFlatFieldMetadataDeactivationSideEffectsArgs): FieldMetadataDeactivationSideEffect => { const flatViewFiltersToDelete = findManyFlatEntityByIdInFlatEntityMapsOrThrow( { @@ -46,6 +50,11 @@ export const handleFieldMetadataDeactivationSideEffects = ({ flatEntityMaps: flatViewFieldMaps, }); + const flatViewSortsToDelete = findManyFlatEntityByIdInFlatEntityMapsOrThrow({ + flatEntityIds: fromFlatFieldMetadata.viewSortIds, + flatEntityMaps: flatViewSortMaps, + }); + const flatViewsAffected: FlatView[] = findManyFlatEntityByIdInFlatEntityMapsOrThrow({ flatEntityIds: fromFlatFieldMetadata.mainGroupByFieldMetadataViewIds, @@ -104,5 +113,6 @@ export const handleFieldMetadataDeactivationSideEffects = ({ flatViewsToDelete, flatViewFieldsToDelete, flatViewFiltersToDelete, + flatViewSortsToDelete, }; }; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/handle-flat-field-metadata-update-side-effect.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/handle-flat-field-metadata-update-side-effect.util.ts index 6fde0d0618e..8c2b059c4da 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/handle-flat-field-metadata-update-side-effect.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/handle-flat-field-metadata-update-side-effect.util.ts @@ -41,6 +41,7 @@ type HandleFlatFieldMetadataUpdateSideEffectArgs = FromTo< | 'flatViewGroupMaps' | 'flatViewMaps' | 'flatViewFieldMaps' + | 'flatViewSortMaps' > & { flatApplication: FlatApplication; }; @@ -57,6 +58,7 @@ export const FLAT_FIELD_METADATA_UPDATE_EMPTY_SIDE_EFFECTS: FlatFieldMetadataUpd flatViewGroupsToUpdate: [], flatViewsToDelete: [], flatViewFieldsToDelete: [], + flatViewSortsToDelete: [], flatViewsToUpdate: [], flatFieldMetadatasToUpdate: [], }; @@ -71,6 +73,7 @@ export const handleFlatFieldMetadataUpdateSideEffect = ({ flatViewGroupMaps, flatViewMaps, flatViewFieldMaps, + flatViewSortMaps, flatApplication, }: HandleFlatFieldMetadataUpdateSideEffectArgs): FieldInputTranspilationResult => { const sideEffectResult = structuredClone( @@ -86,6 +89,7 @@ export const handleFlatFieldMetadataUpdateSideEffect = ({ flatViewsToDelete, flatViewFieldsToDelete, flatViewFiltersToDelete, + flatViewSortsToDelete, flatViewsToUpdate, } = handleFieldMetadataDeactivationSideEffects({ flatViewMaps, @@ -94,12 +98,14 @@ export const handleFlatFieldMetadataUpdateSideEffect = ({ flatViewFieldMaps, flatViewFilterMaps, flatViewGroupMaps, + flatViewSortMaps, }); sideEffectResult.flatViewsToUpdate.push(...flatViewsToUpdate); sideEffectResult.flatViewsToDelete.push(...flatViewsToDelete); sideEffectResult.flatViewFieldsToDelete.push(...flatViewFieldsToDelete); sideEffectResult.flatViewFiltersToDelete.push(...flatViewFiltersToDelete); + sideEffectResult.flatViewSortsToDelete.push(...flatViewSortsToDelete); } else if ( isEnumFlatFieldMetadata(toFlatFieldMetadata) && isEnumFlatFieldMetadata(fromFlatFieldMetadata)