[BREAKING_CHANGE_VIEW_SORT] Refactor view sort to v2 (#17609)

Fixes https://github.com/twentyhq/core-team-issues/issues/2187

---------

Co-authored-by: prastoin <paul@twenty.com>
Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>
This commit is contained in:
BOHEUS
2026-03-04 12:48:58 +00:00
committed by GitHub
parent 906a0aed38
commit c97d872b9f
135 changed files with 3262 additions and 815 deletions
@@ -11,6 +11,7 @@ import { ViewFilterGroupEntity } from 'src/engine/metadata-modules/view-filter-g
import { ViewFilterEntity } from 'src/engine/metadata-modules/view-filter/entities/view-filter.entity';
import { ViewGroupEntity } from 'src/engine/metadata-modules/view-group/entities/view-group.entity';
import { ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity';
import { ViewSortEntity } from 'src/engine/metadata-modules/view-sort/entities/view-sort.entity';
@Module({
imports: [
@@ -23,6 +24,7 @@ import { ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entit
ViewFieldGroupEntity,
ViewFilterEntity,
ViewGroupEntity,
ViewSortEntity,
ViewFilterGroupEntity,
]),
],
@@ -16,6 +16,7 @@ import { ViewFieldEntity } from 'src/engine/metadata-modules/view-field/entities
import { ViewFilterGroupEntity } from 'src/engine/metadata-modules/view-filter-group/entities/view-filter-group.entity';
import { ViewFilterEntity } from 'src/engine/metadata-modules/view-filter/entities/view-filter.entity';
import { ViewGroupEntity } from 'src/engine/metadata-modules/view-group/entities/view-group.entity';
import { ViewSortEntity } from 'src/engine/metadata-modules/view-sort/entities/view-sort.entity';
import { ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity';
import { WorkspaceCache } from 'src/engine/workspace-cache/decorators/workspace-cache.decorator';
import { createIdToUniversalIdentifierMap } from 'src/engine/workspace-cache/utils/create-id-to-universal-identifier-map.util';
@@ -42,6 +43,8 @@ export class WorkspaceFlatViewMapCacheService extends WorkspaceCacheProvider<Fla
private readonly viewGroupRepository: Repository<ViewGroupEntity>,
@InjectRepository(ViewFilterGroupEntity)
private readonly viewFilterGroupRepository: Repository<ViewFilterGroupEntity>,
@InjectRepository(ViewSortEntity)
private readonly viewSortRepository: Repository<ViewSortEntity>,
@InjectRepository(ViewFieldGroupEntity)
private readonly viewFieldGroupRepository: Repository<ViewFieldGroupEntity>,
) {
@@ -58,6 +61,7 @@ export class WorkspaceFlatViewMapCacheService extends WorkspaceCacheProvider<Fla
viewFilters,
viewGroups,
viewFilterGroups,
viewSorts,
viewFieldGroups,
] = await Promise.all([
this.viewRepository.find({
@@ -99,6 +103,11 @@ export class WorkspaceFlatViewMapCacheService extends WorkspaceCacheProvider<Fla
select: ['id', 'universalIdentifier', 'viewId'],
withDeleted: true,
}),
this.viewSortRepository.find({
where: { workspaceId },
select: ['id', 'universalIdentifier', 'viewId'],
withDeleted: true,
}),
this.viewFieldGroupRepository.find({
where: { workspaceId },
select: ['id', 'universalIdentifier', 'viewId'],
@@ -111,6 +120,7 @@ export class WorkspaceFlatViewMapCacheService extends WorkspaceCacheProvider<Fla
viewFiltersByViewId,
viewGroupsByViewId,
viewFilterGroupsByViewId,
viewSortsByViewId,
viewFieldGroupsByViewId,
] = (
[
@@ -130,6 +140,10 @@ export class WorkspaceFlatViewMapCacheService extends WorkspaceCacheProvider<Fla
entities: viewFilterGroups,
foreignKey: 'viewId',
},
{
entities: viewSorts,
foreignKey: 'viewId',
},
{
entities: viewFieldGroups,
foreignKey: 'viewId',
@@ -154,6 +168,7 @@ export class WorkspaceFlatViewMapCacheService extends WorkspaceCacheProvider<Fla
viewFilters: viewFiltersByViewId.get(viewEntity.id) || [],
viewGroups: viewGroupsByViewId.get(viewEntity.id) || [],
viewFilterGroups: viewFilterGroupsByViewId.get(viewEntity.id) || [],
viewSorts: viewSortsByViewId.get(viewEntity.id) || [],
viewFieldGroups: viewFieldGroupsByViewId.get(viewEntity.id) || [],
},
applicationIdToUniversalIdentifierMap,
@@ -1,7 +1,4 @@
import { type FlatEntityFrom } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-from.type';
import { type ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity';
export type FlatView = FlatEntityFrom<
// TODO remove once viewSorts has been migrated to v2
Omit<ViewEntity, 'viewSorts'>
>;
export type FlatView = FlatEntityFrom<ViewEntity>;
@@ -91,6 +91,7 @@ export const fromCreateViewInputToFlatViewToCreate = ({
viewGroupUniversalIdentifiers: [],
viewFieldGroupUniversalIdentifiers: [],
viewFilterGroupUniversalIdentifiers: [],
viewSortUniversalIdentifiers: [],
applicationUniversalIdentifier: flatApplication.universalIdentifier,
};
@@ -121,5 +121,10 @@ export const fromViewEntityToFlatView = ({
viewEntity.viewFilterGroups?.map(
({ universalIdentifier }) => universalIdentifier,
) ?? [],
viewSortIds: viewEntity.viewSorts?.map(({ id }) => id) ?? [],
viewSortUniversalIdentifiers:
viewEntity.viewSorts?.map(
({ universalIdentifier }) => universalIdentifier,
) ?? [],
};
};