Remove old view implementation step 1 (#14189)
Let's move forward and get rid of the past... ! Removing prefetchViewState and the prefetch view query. Next steps: - renaming Selectors to remove prefetch keywork - remove old view type and coreViewToView util - rework optimistic rendering for coreViews
This commit is contained in:
@@ -1,12 +1,10 @@
|
||||
import { PrefetchRunFavoriteQueriesEffect } from '@/prefetch/components/PrefetchRunFavoriteQueriesEffect';
|
||||
import { PrefetchRunViewQueryEffect } from '@/prefetch/components/PrefetchRunViewQueryEffect';
|
||||
import React from 'react';
|
||||
|
||||
export const PrefetchDataProvider = ({ children }: React.PropsWithChildren) => {
|
||||
return (
|
||||
<>
|
||||
<PrefetchRunFavoriteQueriesEffect />
|
||||
<PrefetchRunViewQueryEffect />
|
||||
{children}
|
||||
</>
|
||||
);
|
||||
|
||||
@@ -1,64 +0,0 @@
|
||||
import { useEffect } from 'react';
|
||||
import { useRecoilCallback, useRecoilValue } from 'recoil';
|
||||
|
||||
import { currentUserState } from '@/auth/states/currentUserState';
|
||||
import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems';
|
||||
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
||||
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
|
||||
import { findAllViewsOperationSignatureFactory } from '@/prefetch/graphql/operation-signatures/factories/findAllViewsOperationSignatureFactory';
|
||||
import { arePrefetchViewsLoadedState } from '@/prefetch/states/arePrefetchViewsLoaded';
|
||||
import { prefetchViewsState } from '@/prefetch/states/prefetchViewsState';
|
||||
import { isPersistingViewFieldsState } from '@/views/states/isPersistingViewFieldsState';
|
||||
import { type View } from '@/views/types/View';
|
||||
import { useIsWorkspaceActivationStatusEqualsTo } from '@/workspace/hooks/useIsWorkspaceActivationStatusEqualsTo';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
import { WorkspaceActivationStatus } from 'twenty-shared/workspace';
|
||||
import { isDeeplyEqual } from '~/utils/isDeeplyEqual';
|
||||
|
||||
export const PrefetchRunViewQueryEffect = () => {
|
||||
const currentUser = useRecoilValue(currentUserState);
|
||||
|
||||
const isWorkspaceActive = useIsWorkspaceActivationStatusEqualsTo(
|
||||
WorkspaceActivationStatus.ACTIVE,
|
||||
);
|
||||
|
||||
const { objectMetadataItems } = useObjectMetadataItems();
|
||||
|
||||
const findAllViewsOperationSignature = findAllViewsOperationSignatureFactory({
|
||||
objectMetadataItem: objectMetadataItems.find(
|
||||
(item) => item.nameSingular === CoreObjectNameSingular.View,
|
||||
),
|
||||
});
|
||||
|
||||
const { records } = useFindManyRecords({
|
||||
objectNameSingular: CoreObjectNameSingular.View,
|
||||
filter: findAllViewsOperationSignature.variables.filter,
|
||||
recordGqlFields: findAllViewsOperationSignature.fields,
|
||||
skip: !currentUser || !isWorkspaceActive,
|
||||
});
|
||||
|
||||
const setPrefetchViewsState = useRecoilCallback(
|
||||
({ set, snapshot }) =>
|
||||
(views: View[]) => {
|
||||
const existingViews = snapshot
|
||||
.getLoadable(prefetchViewsState)
|
||||
.getValue();
|
||||
|
||||
if (!isDeeplyEqual(existingViews, views)) {
|
||||
set(prefetchViewsState, views);
|
||||
set(arePrefetchViewsLoadedState, true);
|
||||
}
|
||||
},
|
||||
[],
|
||||
);
|
||||
|
||||
const isPersistingViewFields = useRecoilValue(isPersistingViewFieldsState);
|
||||
|
||||
useEffect(() => {
|
||||
if (isDefined(records) && !isPersistingViewFields) {
|
||||
setPrefetchViewsState(records as View[]);
|
||||
}
|
||||
}, [isPersistingViewFields, records, setPrefetchViewsState]);
|
||||
|
||||
return <></>;
|
||||
};
|
||||
@@ -1,6 +0,0 @@
|
||||
import { createState } from 'twenty-ui/utilities';
|
||||
|
||||
export const arePrefetchViewsLoadedState = createState<boolean>({
|
||||
key: 'arePrefetchViewsLoadedState',
|
||||
defaultValue: false,
|
||||
});
|
||||
@@ -1,7 +0,0 @@
|
||||
import { type View } from '@/views/types/View';
|
||||
import { createState } from 'twenty-ui/utilities';
|
||||
|
||||
export const prefetchViewsState = createState<View[]>({
|
||||
key: 'prefetchViewsState',
|
||||
defaultValue: [],
|
||||
});
|
||||
+1
-15
@@ -1,11 +1,7 @@
|
||||
import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState';
|
||||
import { prefetchViewsState } from '@/prefetch/states/prefetchViewsState';
|
||||
import { coreViewsState } from '@/views/states/coreViewState';
|
||||
import { ViewKey } from '@/views/types/ViewKey';
|
||||
import { convertCoreViewToView } from '@/views/utils/convertCoreViewToView';
|
||||
import { extractFeatureFlagMapFromWorkspace } from '@/workspace/utils/extractFeatureFlagMapFromWorkspace';
|
||||
import { selectorFamily } from 'recoil';
|
||||
import { FeatureFlagKey } from '~/generated/graphql';
|
||||
|
||||
export const prefetchIndexViewIdFromObjectMetadataItemFamilySelector =
|
||||
selectorFamily<string | undefined, { objectMetadataItemId: string }>({
|
||||
@@ -13,19 +9,9 @@ export const prefetchIndexViewIdFromObjectMetadataItemFamilySelector =
|
||||
get:
|
||||
({ objectMetadataItemId }) =>
|
||||
({ get }) => {
|
||||
const prefetchedViews = get(prefetchViewsState);
|
||||
const coreViews = get(coreViewsState);
|
||||
|
||||
const currentWorkspace = get(currentWorkspaceState);
|
||||
const featureFlags =
|
||||
extractFeatureFlagMapFromWorkspace(currentWorkspace);
|
||||
|
||||
const isCoreViewEnabled =
|
||||
featureFlags[FeatureFlagKey.IS_CORE_VIEW_ENABLED];
|
||||
|
||||
const views = isCoreViewEnabled
|
||||
? coreViews.map(convertCoreViewToView)
|
||||
: prefetchedViews;
|
||||
const views = coreViews.map(convertCoreViewToView);
|
||||
|
||||
return views?.find(
|
||||
(view) =>
|
||||
|
||||
+1
-15
@@ -1,11 +1,7 @@
|
||||
import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState';
|
||||
import { prefetchViewsState } from '@/prefetch/states/prefetchViewsState';
|
||||
import { coreViewsState } from '@/views/states/coreViewState';
|
||||
import { type View } from '@/views/types/View';
|
||||
import { convertCoreViewToView } from '@/views/utils/convertCoreViewToView';
|
||||
import { extractFeatureFlagMapFromWorkspace } from '@/workspace/utils/extractFeatureFlagMapFromWorkspace';
|
||||
import { selectorFamily } from 'recoil';
|
||||
import { FeatureFlagKey } from '~/generated/graphql';
|
||||
|
||||
export const prefetchViewFromViewIdFamilySelector = selectorFamily<
|
||||
View | undefined,
|
||||
@@ -15,19 +11,9 @@ export const prefetchViewFromViewIdFamilySelector = selectorFamily<
|
||||
get:
|
||||
({ viewId }) =>
|
||||
({ get }) => {
|
||||
const prefetchedViews = get(prefetchViewsState);
|
||||
const coreViews = get(coreViewsState);
|
||||
|
||||
const currentWorkspace = get(currentWorkspaceState);
|
||||
const featureFlags = extractFeatureFlagMapFromWorkspace(currentWorkspace);
|
||||
|
||||
const isCoreViewEnabled =
|
||||
featureFlags[FeatureFlagKey.IS_CORE_VIEW_ENABLED];
|
||||
|
||||
const views = isCoreViewEnabled
|
||||
? coreViews.map(convertCoreViewToView)
|
||||
: prefetchedViews;
|
||||
|
||||
const views = coreViews.map(convertCoreViewToView);
|
||||
return views?.find((view) => view.id === viewId);
|
||||
},
|
||||
});
|
||||
|
||||
+1
-15
@@ -1,10 +1,6 @@
|
||||
import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState';
|
||||
import { prefetchViewsState } from '@/prefetch/states/prefetchViewsState';
|
||||
import { coreViewsState } from '@/views/states/coreViewState';
|
||||
import { convertCoreViewToView } from '@/views/utils/convertCoreViewToView';
|
||||
import { extractFeatureFlagMapFromWorkspace } from '@/workspace/utils/extractFeatureFlagMapFromWorkspace';
|
||||
import { selectorFamily } from 'recoil';
|
||||
import { FeatureFlagKey } from '~/generated/graphql';
|
||||
|
||||
export const prefetchViewIdsFromObjectMetadataItemFamilySelector =
|
||||
selectorFamily<string[], { objectMetadataItemId: string }>({
|
||||
@@ -12,19 +8,9 @@ export const prefetchViewIdsFromObjectMetadataItemFamilySelector =
|
||||
get:
|
||||
({ objectMetadataItemId }) =>
|
||||
({ get }) => {
|
||||
const prefetchedViews = get(prefetchViewsState);
|
||||
const coreViews = get(coreViewsState);
|
||||
|
||||
const currentWorkspace = get(currentWorkspaceState);
|
||||
const featureFlags =
|
||||
extractFeatureFlagMapFromWorkspace(currentWorkspace);
|
||||
|
||||
const isCoreViewEnabled =
|
||||
featureFlags[FeatureFlagKey.IS_CORE_VIEW_ENABLED];
|
||||
|
||||
const views = isCoreViewEnabled
|
||||
? coreViews.map(convertCoreViewToView)
|
||||
: prefetchedViews;
|
||||
const views = coreViews.map(convertCoreViewToView);
|
||||
|
||||
return views
|
||||
.filter((view) => view.objectMetadataId === objectMetadataItemId)
|
||||
|
||||
+1
-16
@@ -1,26 +1,11 @@
|
||||
import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState';
|
||||
import { prefetchViewsState } from '@/prefetch/states/prefetchViewsState';
|
||||
import { coreViewsState } from '@/views/states/coreViewState';
|
||||
import { convertCoreViewToView } from '@/views/utils/convertCoreViewToView';
|
||||
import { extractFeatureFlagMapFromWorkspace } from '@/workspace/utils/extractFeatureFlagMapFromWorkspace';
|
||||
import { selector } from 'recoil';
|
||||
import { FeatureFlagKey } from '~/generated/graphql';
|
||||
|
||||
export const prefetchViewLengthSelector = selector<number>({
|
||||
key: 'prefetchViewLengthSelector',
|
||||
get: ({ get }) => {
|
||||
const prefetchedViews = get(prefetchViewsState);
|
||||
const coreViews = get(coreViewsState);
|
||||
|
||||
const currentWorkspace = get(currentWorkspaceState);
|
||||
const featureFlags = extractFeatureFlagMapFromWorkspace(currentWorkspace);
|
||||
|
||||
const isCoreViewEnabled = featureFlags[FeatureFlagKey.IS_CORE_VIEW_ENABLED];
|
||||
|
||||
const views = isCoreViewEnabled
|
||||
? coreViews.map(convertCoreViewToView)
|
||||
: prefetchedViews;
|
||||
|
||||
return views?.length ?? 0;
|
||||
return coreViews?.length ?? 0;
|
||||
},
|
||||
});
|
||||
|
||||
+1
-14
@@ -1,11 +1,7 @@
|
||||
import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState';
|
||||
import { prefetchViewsState } from '@/prefetch/states/prefetchViewsState';
|
||||
import { coreViewsState } from '@/views/states/coreViewState';
|
||||
import { type View } from '@/views/types/View';
|
||||
import { convertCoreViewToView } from '@/views/utils/convertCoreViewToView';
|
||||
import { extractFeatureFlagMapFromWorkspace } from '@/workspace/utils/extractFeatureFlagMapFromWorkspace';
|
||||
import { selectorFamily } from 'recoil';
|
||||
import { FeatureFlagKey } from '~/generated/graphql';
|
||||
|
||||
export const prefetchViewsFromObjectMetadataItemFamilySelector = selectorFamily<
|
||||
View[],
|
||||
@@ -15,18 +11,9 @@ export const prefetchViewsFromObjectMetadataItemFamilySelector = selectorFamily<
|
||||
get:
|
||||
({ objectMetadataItemId }) =>
|
||||
({ get }) => {
|
||||
const prefetchedViews = get(prefetchViewsState);
|
||||
const coreViews = get(coreViewsState);
|
||||
|
||||
const currentWorkspace = get(currentWorkspaceState);
|
||||
const featureFlags = extractFeatureFlagMapFromWorkspace(currentWorkspace);
|
||||
|
||||
const isCoreViewEnabled =
|
||||
featureFlags[FeatureFlagKey.IS_CORE_VIEW_ENABLED];
|
||||
|
||||
const views = isCoreViewEnabled
|
||||
? coreViews.map(convertCoreViewToView)
|
||||
: prefetchedViews;
|
||||
const views = coreViews.map(convertCoreViewToView);
|
||||
|
||||
const filteredViews = views.filter(
|
||||
(view) => view.objectMetadataId === objectMetadataItemId,
|
||||
|
||||
Reference in New Issue
Block a user