Refactor onboarding user vars to be absent when user is fully onboarded (#6531)
In this PR: - take feedbacks from: https://github.com/twentyhq/twenty/pull/6530 / https://github.com/twentyhq/twenty/pull/6529 / https://github.com/twentyhq/twenty/pull/6526 / https://github.com/twentyhq/twenty/pull/6512 - refactor onboarding uservars to be absent when the user is fully onboarded: isStepComplete ==> isStepIncomplete - introduce a new workspace.activationStatus: CREATION_ONGOING I'm retesting the whole flow: - with/without BILLING - sign in with/without SSO - sign up with/without SSO - another workspaceMembers join the team - subscriptionCanceled - access to billingPortal
This commit is contained in:
@ -3,10 +3,10 @@ import { useRecoilValue } from 'recoil';
|
||||
|
||||
import { currentUserState } from '@/auth/states/currentUserState';
|
||||
import { Favorite } from '@/favorites/types/Favorite';
|
||||
import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems';
|
||||
import { useCombinedFindManyRecords } from '@/object-record/multiple-objects/hooks/useCombinedFindManyRecords';
|
||||
import { PREFETCH_CONFIG } from '@/prefetch/constants/PrefetchConfig';
|
||||
import { usePrefetchRunQuery } from '@/prefetch/hooks/internal/usePrefetchRunQuery';
|
||||
import { FIND_ALL_FAVORITES_OPERATION_SIGNATURE } from '@/prefetch/query-keys/FindAllFavoritesOperationSignature';
|
||||
import { FIND_ALL_VIEWS_OPERATION_SIGNATURE } from '@/prefetch/query-keys/FindAllViewsOperationSignature';
|
||||
import { PrefetchKey } from '@/prefetch/types/PrefetchKey';
|
||||
import { View } from '@/views/types/View';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
@ -24,11 +24,20 @@ export const PrefetchRunQueriesEffect = () => {
|
||||
prefetchKey: PrefetchKey.AllFavorites,
|
||||
});
|
||||
|
||||
const { objectMetadataItems } = useObjectMetadataItems();
|
||||
|
||||
const operationSignatures = Object.values(PREFETCH_CONFIG).map(
|
||||
({ objectNameSingular, operationSignatureFactory }) => {
|
||||
const objectMetadataItem = objectMetadataItems.find(
|
||||
(item) => item.nameSingular === objectNameSingular,
|
||||
);
|
||||
|
||||
return operationSignatureFactory({ objectMetadataItem });
|
||||
},
|
||||
);
|
||||
|
||||
const { result } = useCombinedFindManyRecords({
|
||||
operationSignatures: [
|
||||
FIND_ALL_VIEWS_OPERATION_SIGNATURE,
|
||||
FIND_ALL_FAVORITES_OPERATION_SIGNATURE,
|
||||
],
|
||||
operationSignatures,
|
||||
skip: !currentUser,
|
||||
});
|
||||
|
||||
|
||||
@ -1,10 +1,22 @@
|
||||
import { RecordGqlOperationSignature } from '@/object-record/graphql/types/RecordGqlOperationSignature';
|
||||
import { FIND_ALL_FAVORITES_OPERATION_SIGNATURE } from '@/prefetch/query-keys/FindAllFavoritesOperationSignature';
|
||||
import { FIND_ALL_VIEWS_OPERATION_SIGNATURE } from '@/prefetch/query-keys/FindAllViewsOperationSignature';
|
||||
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
||||
import { RecordGqlOperationSignatureFactory } from '@/object-record/graphql/types/RecordGqlOperationSignatureFactory';
|
||||
import { findAllFavoritesOperationSignatureFactory } from '@/prefetch/operation-signatures/factories/findAllFavoritesOperationSignatureFactory';
|
||||
import { findAllViewsOperationSignatureFactory } from '@/prefetch/operation-signatures/factories/findAllViewsOperationSignatureFactory';
|
||||
import { PrefetchKey } from '@/prefetch/types/PrefetchKey';
|
||||
|
||||
export const PREFETCH_CONFIG: Record<PrefetchKey, RecordGqlOperationSignature> =
|
||||
export const PREFETCH_CONFIG: Record<
|
||||
PrefetchKey,
|
||||
{
|
||||
ALL_VIEWS: FIND_ALL_VIEWS_OPERATION_SIGNATURE,
|
||||
ALL_FAVORITES: FIND_ALL_FAVORITES_OPERATION_SIGNATURE,
|
||||
};
|
||||
objectNameSingular: CoreObjectNameSingular;
|
||||
operationSignatureFactory: RecordGqlOperationSignatureFactory;
|
||||
}
|
||||
> = {
|
||||
ALL_VIEWS: {
|
||||
objectNameSingular: CoreObjectNameSingular.View,
|
||||
operationSignatureFactory: findAllViewsOperationSignatureFactory,
|
||||
},
|
||||
ALL_FAVORITES: {
|
||||
objectNameSingular: CoreObjectNameSingular.Favorite,
|
||||
operationSignatureFactory: findAllFavoritesOperationSignatureFactory,
|
||||
},
|
||||
};
|
||||
|
||||
@ -2,7 +2,6 @@ import { useSetRecoilState } from 'recoil';
|
||||
|
||||
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
|
||||
import { useUpsertFindManyRecordsQueryInCache } from '@/object-record/cache/hooks/useUpsertFindManyRecordsQueryInCache';
|
||||
import { generateDepthOneRecordGqlFields } from '@/object-record/graphql/utils/generateDepthOneRecordGqlFields';
|
||||
import { ObjectRecord } from '@/object-record/types/ObjectRecord';
|
||||
import { PREFETCH_CONFIG } from '@/prefetch/constants/PrefetchConfig';
|
||||
import { prefetchIsLoadedFamilyState } from '@/prefetch/states/prefetchIsLoadedFamilyState';
|
||||
@ -18,10 +17,16 @@ export const usePrefetchRunQuery = <T extends ObjectRecord>({
|
||||
const setPrefetchDataIsLoaded = useSetRecoilState(
|
||||
prefetchIsLoadedFamilyState(prefetchKey),
|
||||
);
|
||||
|
||||
const { operationSignatureFactory, objectNameSingular } =
|
||||
PREFETCH_CONFIG[prefetchKey];
|
||||
|
||||
const { objectMetadataItem } = useObjectMetadataItem({
|
||||
objectNameSingular: PREFETCH_CONFIG[prefetchKey].objectNameSingular,
|
||||
objectNameSingular,
|
||||
});
|
||||
|
||||
const operationSignature = operationSignatureFactory({ objectMetadataItem });
|
||||
|
||||
const { upsertFindManyRecordsQueryInCache } =
|
||||
useUpsertFindManyRecordsQueryInCache({
|
||||
objectMetadataItem: objectMetadataItem,
|
||||
@ -30,10 +35,8 @@ export const usePrefetchRunQuery = <T extends ObjectRecord>({
|
||||
const upsertRecordsInCache = (records: T[]) => {
|
||||
setPrefetchDataIsLoaded(false);
|
||||
upsertFindManyRecordsQueryInCache({
|
||||
queryVariables: PREFETCH_CONFIG[prefetchKey].variables,
|
||||
recordGqlFields:
|
||||
PREFETCH_CONFIG[prefetchKey].fields ??
|
||||
generateDepthOneRecordGqlFields({ objectMetadataItem }),
|
||||
queryVariables: operationSignature.variables,
|
||||
recordGqlFields: operationSignature.fields,
|
||||
objectRecordsToOverwrite: records,
|
||||
computeReferences: false,
|
||||
});
|
||||
|
||||
@ -2,7 +2,6 @@ import { useRecoilValue } from 'recoil';
|
||||
|
||||
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
|
||||
import { RecordGqlOperationFilter } from '@/object-record/graphql/types/RecordGqlOperationFilter';
|
||||
import { generateDepthOneRecordGqlFields } from '@/object-record/graphql/utils/generateDepthOneRecordGqlFields';
|
||||
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
|
||||
import { ObjectRecord } from '@/object-record/types/ObjectRecord';
|
||||
import { PREFETCH_CONFIG } from '@/prefetch/constants/PrefetchConfig';
|
||||
@ -17,21 +16,18 @@ export const usePrefetchedData = <T extends ObjectRecord>(
|
||||
prefetchIsLoadedFamilyState(prefetchKey),
|
||||
);
|
||||
|
||||
const prefetchQueryKey = PREFETCH_CONFIG[prefetchKey];
|
||||
const { operationSignatureFactory, objectNameSingular } =
|
||||
PREFETCH_CONFIG[prefetchKey];
|
||||
|
||||
const { objectMetadataItem } = useObjectMetadataItem({
|
||||
objectNameSingular: prefetchQueryKey.objectNameSingular,
|
||||
objectNameSingular,
|
||||
});
|
||||
|
||||
const { records } = useFindManyRecords<T>({
|
||||
skip: !isDataPrefetched,
|
||||
objectNameSingular: prefetchQueryKey.objectNameSingular,
|
||||
objectNameSingular: objectNameSingular,
|
||||
recordGqlFields:
|
||||
prefetchQueryKey.fields ??
|
||||
generateDepthOneRecordGqlFields({
|
||||
objectMetadataItem,
|
||||
}),
|
||||
filter,
|
||||
operationSignatureFactory({ objectMetadataItem }).fields ?? filter,
|
||||
});
|
||||
|
||||
return {
|
||||
|
||||
@ -0,0 +1,15 @@
|
||||
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
||||
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { RecordGqlOperationSignatureFactory } from '@/object-record/graphql/types/RecordGqlOperationSignatureFactory';
|
||||
import { generateDepthOneRecordGqlFields } from '@/object-record/graphql/utils/generateDepthOneRecordGqlFields';
|
||||
|
||||
export const findAllFavoritesOperationSignatureFactory: RecordGqlOperationSignatureFactory =
|
||||
({ objectMetadataItem }: { objectMetadataItem: ObjectMetadataItem }) => ({
|
||||
objectNameSingular: CoreObjectNameSingular.Favorite,
|
||||
variables: {},
|
||||
fields: {
|
||||
...generateDepthOneRecordGqlFields({
|
||||
objectMetadataItem,
|
||||
}),
|
||||
},
|
||||
});
|
||||
@ -0,0 +1,24 @@
|
||||
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
||||
import { RecordGqlOperationSignatureFactory } from '@/object-record/graphql/types/RecordGqlOperationSignatureFactory';
|
||||
|
||||
export const findAllViewsOperationSignatureFactory: RecordGqlOperationSignatureFactory =
|
||||
() => ({
|
||||
objectNameSingular: CoreObjectNameSingular.View,
|
||||
variables: {},
|
||||
fields: {
|
||||
id: true,
|
||||
createdAt: true,
|
||||
updatedAt: true,
|
||||
isCompact: true,
|
||||
objectMetadataId: true,
|
||||
position: true,
|
||||
type: true,
|
||||
kanbanFieldMetadataId: true,
|
||||
name: true,
|
||||
icon: true,
|
||||
key: true,
|
||||
viewFilters: true,
|
||||
viewSorts: true,
|
||||
viewFields: true,
|
||||
},
|
||||
});
|
||||
@ -1,8 +0,0 @@
|
||||
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
||||
import { RecordGqlOperationSignature } from '@/object-record/graphql/types/RecordGqlOperationSignature';
|
||||
|
||||
export const FIND_ALL_FAVORITES_OPERATION_SIGNATURE: RecordGqlOperationSignature =
|
||||
{
|
||||
objectNameSingular: CoreObjectNameSingular.Favorite,
|
||||
variables: {},
|
||||
};
|
||||
@ -1,23 +0,0 @@
|
||||
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
||||
import { RecordGqlOperationSignature } from '@/object-record/graphql/types/RecordGqlOperationSignature';
|
||||
|
||||
export const FIND_ALL_VIEWS_OPERATION_SIGNATURE: RecordGqlOperationSignature = {
|
||||
objectNameSingular: CoreObjectNameSingular.View,
|
||||
variables: {},
|
||||
fields: {
|
||||
id: true,
|
||||
createdAt: true,
|
||||
updatedAt: true,
|
||||
isCompact: true,
|
||||
objectMetadataId: true,
|
||||
position: true,
|
||||
type: true,
|
||||
kanbanFieldMetadataId: true,
|
||||
name: true,
|
||||
icon: true,
|
||||
key: true,
|
||||
viewFilters: true,
|
||||
viewSorts: true,
|
||||
viewFields: true,
|
||||
},
|
||||
};
|
||||
@ -6,5 +6,5 @@ export const prefetchIsLoadedFamilyState = createFamilyState<
|
||||
PrefetchKey
|
||||
>({
|
||||
key: 'prefetchIsLoadedFamilyState',
|
||||
defaultValue: true,
|
||||
defaultValue: false,
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user