Core views frontend (#13932)

Parallel code path to read and write core views when
IS_CORE_VIEW_ENABLED.

Migrated view key to an enum.

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>
This commit is contained in:
Raphaël Bosi
2025-08-20 19:04:58 +02:00
committed by GitHub
parent deec9c96da
commit 30c42345f0
114 changed files with 5019 additions and 254 deletions
@@ -14,6 +14,8 @@ import { SettingsPath } from '@/types/SettingsPath';
import { TableCell } from '@/ui/layout/table/components/TableCell';
import { TableRow } from '@/ui/layout/table/components/TableRow';
import { navigationMemorizedUrlState } from '@/ui/navigation/states/navigationMemorizedUrlState';
import { type View } from '@/views/types/View';
import { useFeatureFlagsMap } from '@/workspace/hooks/useFeatureFlagsMap';
import { useTheme } from '@emotion/react';
import styled from '@emotion/styled';
import { useMemo } from 'react';
@@ -25,7 +27,7 @@ import {
import { IconMinus, IconPlus, useIcons } from 'twenty-ui/display';
import { LightIconButton } from 'twenty-ui/input';
import { UndecoratedLink } from 'twenty-ui/navigation';
import { RelationType } from '~/generated-metadata/graphql';
import { FeatureFlagKey, RelationType } from '~/generated-metadata/graphql';
import { useNavigateSettings } from '~/hooks/useNavigateSettings';
import { type SettingsObjectDetailTableItem } from '~/pages/settings/data-model/types/SettingsObjectDetailTableItem';
import { getSettingsPath } from '~/utils/navigation/getSettingsPath';
@@ -122,6 +124,9 @@ export const SettingsObjectFieldItemTableRow = ({
objectNameSingular: CoreObjectNameSingular.View,
});
const featureFlagMap = useFeatureFlagsMap();
const isCoreViewEnabled = featureFlagMap[FeatureFlagKey.IS_CORE_VIEW_ENABLED];
const handleDisableField = async (
activeFieldMetadatItem: FieldMetadataItem,
) => {
@@ -130,17 +135,20 @@ export const SettingsObjectFieldItemTableRow = ({
objectMetadataItem.id,
);
const deletedViewIds = prefetchViews
.map((view) => {
// TODO: replace with viewGroups.fieldMetadataId
if (view.kanbanFieldMetadataId === activeFieldMetadatItem.id) {
deleteViewFromCache(view);
return view.id;
}
// TODO: Add optimistic rendering for core views
const deletedViewIds = isCoreViewEnabled
? []
: (prefetchViews as View[])
.map((view) => {
// TODO: replace with viewGroups.fieldMetadataId
if (view.kanbanFieldMetadataId === activeFieldMetadatItem.id) {
deleteViewFromCache(view);
return view.id;
}
return null;
})
.filter(isDefined);
return null;
})
.filter(isDefined);
const [baseUrl, queryParams] = navigationMemorizedUrl.includes('?')
? navigationMemorizedUrl.split('?')