In this PR: - adding logs to track workspace creation performance - refactor useIsWorkspaceSuspended to be more generic - only fetch favorites and views if workspace is Active to avoid error messages on sign up (workspace is not created yet)
113 lines
4.4 KiB
TypeScript
113 lines
4.4 KiB
TypeScript
import { useEffect } from 'react';
|
|
import { useRecoilCallback, useRecoilValue, useSetRecoilState } from 'recoil';
|
|
|
|
import { currentUserState } from '@/auth/states/currentUserState';
|
|
import { Favorite } from '@/favorites/types/Favorite';
|
|
import { FavoriteFolder } from '@/favorites/types/FavoriteFolder';
|
|
import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems';
|
|
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
|
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
|
|
import { findAllFavoritesFolderOperationSignatureFactory } from '@/prefetch/graphql/operation-signatures/factories/findAllFavoritesFolderOperationSignatureFactory';
|
|
import { findAllFavoritesOperationSignatureFactory } from '@/prefetch/graphql/operation-signatures/factories/findAllFavoritesOperationSignatureFactory';
|
|
import { prefetchFavoriteFoldersState } from '@/prefetch/states/prefetchFavoriteFoldersState';
|
|
import { prefetchFavoritesState } from '@/prefetch/states/prefetchFavoritesState';
|
|
import { prefetchIsLoadedFamilyState } from '@/prefetch/states/prefetchIsLoadedFamilyState';
|
|
import { PrefetchKey } from '@/prefetch/types/PrefetchKey';
|
|
import { useIsWorkspaceActivationStatusEqualsTo } from '@/workspace/hooks/useIsWorkspaceActivationStatusEqualsTo';
|
|
import { WorkspaceActivationStatus, isDefined } from 'twenty-shared';
|
|
import { isDeeplyEqual } from '~/utils/isDeeplyEqual';
|
|
|
|
export const PrefetchRunFavoriteQueriesEffect = () => {
|
|
const currentUser = useRecoilValue(currentUserState);
|
|
|
|
const isWorkspaceActive = useIsWorkspaceActivationStatusEqualsTo(
|
|
WorkspaceActivationStatus.ACTIVE,
|
|
);
|
|
|
|
const { objectMetadataItems } = useObjectMetadataItems();
|
|
|
|
const setIsPrefetchFavoritesLoaded = useSetRecoilState(
|
|
prefetchIsLoadedFamilyState(PrefetchKey.AllFavorites),
|
|
);
|
|
|
|
const setIsPrefetchFavoritesFoldersLoaded = useSetRecoilState(
|
|
prefetchIsLoadedFamilyState(PrefetchKey.AllFavoritesFolders),
|
|
);
|
|
|
|
const findAllFavoritesOperationSignature =
|
|
findAllFavoritesOperationSignatureFactory({
|
|
objectMetadataItem: objectMetadataItems.find(
|
|
(item) => item.nameSingular === CoreObjectNameSingular.Favorite,
|
|
),
|
|
});
|
|
|
|
const findAllFavoriteFoldersOperationSignature =
|
|
findAllFavoritesFolderOperationSignatureFactory({
|
|
objectMetadataItem: objectMetadataItems.find(
|
|
(item) => item.nameSingular === CoreObjectNameSingular.FavoriteFolder,
|
|
),
|
|
});
|
|
|
|
const { records: favorites } = useFindManyRecords({
|
|
objectNameSingular: CoreObjectNameSingular.Favorite,
|
|
filter: findAllFavoritesOperationSignature.variables.filter,
|
|
recordGqlFields: findAllFavoritesOperationSignature.fields,
|
|
skip: !currentUser || !isWorkspaceActive,
|
|
});
|
|
|
|
const { records: favoriteFolders } = useFindManyRecords({
|
|
objectNameSingular: CoreObjectNameSingular.FavoriteFolder,
|
|
filter: findAllFavoriteFoldersOperationSignature.variables.filter,
|
|
recordGqlFields: findAllFavoriteFoldersOperationSignature.fields,
|
|
skip: !currentUser || !isWorkspaceActive,
|
|
});
|
|
|
|
const setPrefetchFavoritesState = useRecoilCallback(
|
|
({ set, snapshot }) =>
|
|
(favorites: Favorite[]) => {
|
|
const existingFavorites = snapshot
|
|
.getLoadable(prefetchFavoritesState)
|
|
.getValue();
|
|
|
|
if (!isDeeplyEqual(existingFavorites, favorites)) {
|
|
set(prefetchFavoritesState, favorites);
|
|
}
|
|
},
|
|
[],
|
|
);
|
|
|
|
const setPrefetchFavoriteFoldersState = useRecoilCallback(
|
|
({ set, snapshot }) =>
|
|
(favoriteFolders: FavoriteFolder[]) => {
|
|
const existingFavoriteFolders = snapshot
|
|
.getLoadable(prefetchFavoriteFoldersState)
|
|
.getValue();
|
|
|
|
if (!isDeeplyEqual(existingFavoriteFolders, favoriteFolders)) {
|
|
set(prefetchFavoriteFoldersState, favoriteFolders);
|
|
}
|
|
},
|
|
[],
|
|
);
|
|
|
|
useEffect(() => {
|
|
if (isDefined(favorites)) {
|
|
setPrefetchFavoritesState(favorites as Favorite[]);
|
|
setIsPrefetchFavoritesLoaded(true);
|
|
}
|
|
}, [favorites, setPrefetchFavoritesState, setIsPrefetchFavoritesLoaded]);
|
|
|
|
useEffect(() => {
|
|
if (isDefined(favoriteFolders)) {
|
|
setPrefetchFavoriteFoldersState(favoriteFolders as FavoriteFolder[]);
|
|
setIsPrefetchFavoritesFoldersLoaded(true);
|
|
}
|
|
}, [
|
|
favoriteFolders,
|
|
setPrefetchFavoriteFoldersState,
|
|
setIsPrefetchFavoritesFoldersLoaded,
|
|
]);
|
|
|
|
return <></>;
|
|
};
|