refactor: remove "core" naming from views and eliminate converter layer (#18667)

## Summary

- **Remove all "core" prefixes** from the views system — the
metadata-based storage migration is complete, so `CoreView`,
`coreViewsSelector`, `getCoreViews`, etc. are now just `View`,
`viewsSelector`, `getViews`
- **Eliminate the entire converter layer** (15 files, ~850 lines
deleted) — `convertCoreViewToView` and all sub-converters were either
no-ops or trivially adding `__typename` / mapping identical enum values.
Local enums now re-export from generated GraphQL types directly (single
source of truth)
- **Unify `View` and `ViewWithRelations`** into one type —
`ViewWithRelations` is now a type alias for `View`, selectors return
data directly without conversion

### Backend
- Rename `@ObjectType('CoreView')` → `@ObjectType('View')` (and all
sub-entities)
- Rename resolver methods: `getCoreViews` → `getViews`, `createCoreView`
→ `createView`, etc.
- Rename `FIND_ALL_CORE_VIEWS_GRAPHQL_OPERATION` →
`FIND_ALL_VIEWS_GRAPHQL_OPERATION`

### Frontend
- Delete 15 converter files (`convertGqlView*ToView*`,
`convertView*ToGql`, `convertViewWithRelationsToView`)
- Re-export `ViewType`, `ViewKey`, `ViewFilterGroupLogicalOperator` from
generated enums (no more duplicate enum definitions with different
casing)
- Replace `ViewOpenRecordInType` with `ViewOpenRecordIn` from generated
- Remove `__typename` from all local view sub-types
- Remove unused `variant` from `ViewFilter`, make `displayValue` and
`definition` optional
- Rename ~45 GraphQL query/mutation files and all selectors to drop
"core" prefix
- Delete unused `viewsWithRelationsSelector`
This commit is contained in:
Charles Bochet
2026-03-16 09:57:18 +01:00
committed by GitHub
parent 6340b9e2f7
commit 5c745059ad
440 changed files with 2934 additions and 3856 deletions
@@ -82,7 +82,7 @@ export const NavigationDrawerItemForObjectMetadataItem = ({
const isViewWithCustomName =
isView &&
navigationMenuItem?.viewKey !== ViewKey.Index &&
navigationMenuItem?.viewKey !== ViewKey.INDEX &&
isDefined(navigationMenuItem?.labelIdentifier);
const label = isRecord
@@ -4,8 +4,7 @@ import { NavigationDrawerItemForObjectMetadataItem } from '@/object-metadata/com
import type { WorkspaceSectionItemContentProps } from '@/object-metadata/components/WorkspaceSectionItemContentProps';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
import { coreViewsSelector } from '@/views/states/selectors/coreViewsSelector';
import { convertCoreViewToView } from '@/views/utils/convertCoreViewToView';
import { viewsSelector } from '@/views/states/selectors/viewsSelector';
type NavigationDrawerSectionForWorkspaceItemObjectContentProps =
WorkspaceSectionItemContentProps;
@@ -17,8 +16,7 @@ export const NavigationDrawerSectionForWorkspaceItemObjectContent = ({
onActiveObjectMetadataItemClick,
}: NavigationDrawerSectionForWorkspaceItemObjectContentProps) => {
const objectMetadataItems = useAtomStateValue(objectMetadataItemsState);
const coreViews = useAtomStateValue(coreViewsSelector);
const views = coreViews.map(convertCoreViewToView);
const views = useAtomStateValue(viewsSelector);
const objectMetadataItem = getObjectMetadataForNavigationMenuItem(
item as ProcessedNavigationMenuItem,
objectMetadataItems,
@@ -24,8 +24,7 @@ import { NavigationDrawerSection } from '@/ui/navigation/navigation-drawer/compo
import { NavigationDrawerSectionTitle } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerSectionTitle';
import { useNavigationSection } from '@/ui/navigation/navigation-drawer/hooks/useNavigationSection';
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
import { coreViewsSelector } from '@/views/states/selectors/coreViewsSelector';
import { convertCoreViewToView } from '@/views/utils/convertCoreViewToView';
import { viewsSelector } from '@/views/states/selectors/viewsSelector';
import { styled } from '@linaria/react';
import { themeCssVariables } from 'twenty-ui/theme-constants';
@@ -64,8 +63,7 @@ export const NavigationDrawerSectionForWorkspaceItems = ({
);
const { toggleNavigationSection, isNavigationSectionOpen } =
useNavigationSection('Workspace');
const coreViews = useAtomStateValue(coreViewsSelector);
const views = coreViews.map(convertCoreViewToView);
const views = useAtomStateValue(viewsSelector);
const { objectPermissionsByObjectMetadataId } = useObjectPermissions();
const objectMetadataItems = useAtomStateValue(objectMetadataItemsState);
@@ -1,11 +1,11 @@
import {
CreateOneObjectMetadataItemDocument,
FindManyCoreViewsDocument,
FindManyViewsDocument,
} from '~/generated-metadata/graphql';
export const query = CreateOneObjectMetadataItemDocument;
export const findManyCoreViewsQuery = FindManyCoreViewsDocument;
export const findManyViewsQuery = FindManyViewsDocument;
export const variables = {
input: {
@@ -4,7 +4,7 @@ import { useCreateOneObjectMetadataItem } from '@/object-metadata/hooks/useCreat
import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
import {
findManyCoreViewsQuery,
findManyViewsQuery,
query,
responseData,
variables,
@@ -52,14 +52,14 @@ const mocks = [
},
{
request: {
query: findManyCoreViewsQuery,
query: findManyViewsQuery,
variables: {
objectMetadataId: responseData.id,
},
},
result: jest.fn(() => ({
data: {
getCoreViews: [],
getViews: [],
},
})),
},
@@ -10,10 +10,10 @@ import {
import { jestExpectSuccessfulMetadataRequestResult } from '@/object-metadata/hooks/__tests__/utils/jest-expect-metadata-request-status.util';
import { GET_CURRENT_USER } from '@/users/graphql/queries/getCurrentUser';
import { FIND_ALL_CORE_VIEWS } from '@/views/graphql/queries/findAllCoreViews';
import { FIND_ALL_VIEWS } from '@/views/graphql/queries/findAllViews';
import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
import { mockedUserData } from '~/testing/mock-data/users';
import { mockedCoreViews } from '~/testing/mock-data/generated/metadata/views/mock-views-data';
import { mockedViews } from '~/testing/mock-data/generated/metadata/views/mock-views-data';
import {
query as findManyObjectMetadataItemsQuery,
responseData as findManyObjectMetadataItemsResponseData,
@@ -44,12 +44,12 @@ const mocks = [
},
{
request: {
query: FIND_ALL_CORE_VIEWS,
query: FIND_ALL_VIEWS,
variables: {},
},
result: jest.fn(() => ({
data: {
getCoreViews: mockedCoreViews,
getViews: mockedViews,
},
})),
},