5095 move onboardingstatus computation from frontend to backend (#5954)

- move front `onboardingStatus` computing to server side
- add logic to `useSetNextOnboardingStatus`
- update some missing redirections in
`usePageChangeEffectNavigateLocation`
- separate subscriptionStatus from onboardingStatus
This commit is contained in:
martmull
2024-06-28 17:32:02 +02:00
committed by GitHub
parent 1a66db5bff
commit b8f33f6f59
78 changed files with 1767 additions and 1763 deletions

View File

@ -8,7 +8,7 @@ import { ObjectMetadataItemsLoadEffect } from '@/object-metadata/components/Obje
import { PreComputedChipGeneratorsContext } from '@/object-metadata/context/PreComputedChipGeneratorsContext';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
import { getRecordChipGeneratorPerObjectPerField } from '@/object-record/utils/getRecordChipGeneratorPerObjectPerField';
import { mockedUsersData } from '~/testing/mock-data/users';
import { mockedUserData } from '~/testing/mock-data/users';
import { mockWorkspaceMembers } from '~/testing/mock-data/workspace-members';
export const ObjectMetadataItemsDecorator: Decorator = (Story) => {
@ -20,7 +20,7 @@ export const ObjectMetadataItemsDecorator: Decorator = (Story) => {
useEffect(() => {
setCurrentWorkspaceMember(mockWorkspaceMembers[0]);
setCurrentUser(mockedUsersData[0]);
setCurrentUser(mockedUserData);
}, [setCurrentUser, setCurrentWorkspaceMember]);
const chipGeneratorPerObjectPerField = useMemo(() => {

View File

@ -15,7 +15,7 @@ import { mockedClientConfig } from '~/testing/mock-data/config';
import { mockedObjectMetadataItemsQueryResult } from '~/testing/mock-data/metadata';
import { getPeopleMock } from '~/testing/mock-data/people';
import { mockedRemoteTables } from '~/testing/mock-data/remote-tables';
import { mockedUsersData } from '~/testing/mock-data/users';
import { mockedUserData } from '~/testing/mock-data/users';
import { mockedViewsData } from '~/testing/mock-data/views';
import { mockWorkspaceMembers } from '~/testing/mock-data/workspace-members';
@ -35,7 +35,7 @@ export const graphqlMocks = {
graphql.query(getOperationName(GET_CURRENT_USER) ?? '', () => {
return HttpResponse.json({
data: {
currentUser: mockedUsersData[0],
currentUser: mockedUserData,
},
});
}),

View File

@ -38,4 +38,5 @@ export const mockedClientConfig: ClientConfig = {
siteKey: 'MOCKED_SITE_KEY',
__typename: 'Captcha',
},
api: { mutationMaximumAffectedRecords: 100 },
};

View File

@ -1,5 +1,11 @@
import { WorkspaceMember } from '@/workspace-member/types/WorkspaceMember';
import { User, Workspace } from '~/generated/graphql';
import {
OnboardingStatus,
SubscriptionInterval,
SubscriptionStatus,
User,
Workspace,
} from '~/generated/graphql';
type MockedUser = Pick<
User,
@ -10,7 +16,7 @@ type MockedUser = Pick<
| 'canImpersonate'
| '__typename'
| 'supportUserHash'
| 'onboardingStep'
| 'onboardingStatus'
> & {
workspaceMember: WorkspaceMember | null;
locale: string;
@ -30,7 +36,6 @@ export const mockDefaultWorkspace: Workspace = {
inviteHash: 'twenty.com-invite-hash',
logo: workspaceLogoUrl,
allowImpersonation: true,
subscriptionStatus: 'active',
activationStatus: 'active',
featureFlags: [
{
@ -58,8 +63,8 @@ export const mockDefaultWorkspace: Workspace = {
currentBillingSubscription: {
__typename: 'BillingSubscription',
id: '7efbc3f7-6e5e-4128-957e-8d86808cdf6a',
interval: 'month',
status: 'active',
interval: SubscriptionInterval.Month,
status: SubscriptionStatus.Active,
},
};
@ -79,49 +84,26 @@ export const mockedWorkspaceMemberData: WorkspaceMember = {
userEmail: 'charles@test.com',
};
export const mockedUsersData: Array<MockedUser> = [
{
id: '7dfbc3f7-6e5e-4128-957e-8d86808cdf6d',
__typename: 'User',
email: 'charles@test.com',
firstName: 'Charles',
lastName: 'Test',
canImpersonate: false,
supportUserHash:
'a95afad9ff6f0b364e2a3fd3e246a1a852c22b6e55a3ca33745a86c201f9c10d',
workspaceMember: mockedWorkspaceMemberData,
defaultWorkspace: mockDefaultWorkspace,
locale: 'en',
workspaces: [{ workspace: mockDefaultWorkspace }],
onboardingStep: null,
},
{
id: '7dfbc3f7-6e5e-4128-957e-8d86808cdf6c',
__typename: 'User',
email: 'felix@test.com',
firstName: 'Felix',
lastName: 'Test',
canImpersonate: false,
supportUserHash:
'54ac3986035961724cdb9a7a30c70e6463a4b68f0ecd2014c727171a82144b74',
workspaceMember: {
...mockedWorkspaceMemberData,
id: '7dfbc3f7-6e5e-4128-957e-8d86808cdf6c',
name: {
firstName: 'Felix',
lastName: 'Test',
},
userId: '81aeb270-d689-4515-bd5d-35dbe956da3b',
},
defaultWorkspace: mockDefaultWorkspace,
locale: 'en',
workspaces: [{ workspace: mockDefaultWorkspace }],
onboardingStep: null,
},
];
export const mockedUserData: MockedUser = {
id: '7dfbc3f7-6e5e-4128-957e-8d86808cdf6d',
__typename: 'User',
email: 'charles@test.com',
firstName: 'Charles',
lastName: 'Test',
canImpersonate: false,
supportUserHash:
'a95afad9ff6f0b364e2a3fd3e246a1a852c22b6e55a3ca33745a86c201f9c10d',
workspaceMember: mockedWorkspaceMemberData,
defaultWorkspace: mockDefaultWorkspace,
locale: 'en',
workspaces: [{ workspace: mockDefaultWorkspace }],
onboardingStatus: OnboardingStatus.Completed,
};
export const mockedOnboardingUsersData: Array<MockedUser> = [
{
export const mockedOnboardingUserData = (
onboardingStatus?: OnboardingStatus,
) => {
return {
id: '7dfbc3f7-6e5e-4128-957e-8d86808cdf6d',
__typename: 'User',
email: 'workspace-onboarding@test.com',
@ -130,35 +112,10 @@ export const mockedOnboardingUsersData: Array<MockedUser> = [
canImpersonate: false,
supportUserHash:
'4fb61d34ed3a4aeda2476d4b308b5162db9e1809b2b8277e6fdc6efc4a609254',
workspaceMember: {
...mockedWorkspaceMemberData,
id: 'd454f075-c72f-4ebe-bac7-d28e75e74a23',
name: {
firstName: '',
lastName: '',
},
userId: '7f793378-b939-43b7-8642-292c9510754c',
},
workspaceMember: null,
defaultWorkspace: mockDefaultWorkspace,
locale: 'en',
workspaces: [{ workspace: mockDefaultWorkspace }],
onboardingStep: null,
},
{
id: '7dfbc3f7-6e5e-4128-957e-8d86808cdf6d',
__typename: 'User',
email: 'profile-onboarding@test.com',
firstName: '',
lastName: '',
canImpersonate: false,
workspaceMember: null,
defaultWorkspace: {
...mockDefaultWorkspace,
activationStatus: 'inactive',
},
locale: 'en',
workspaces: [{ workspace: mockDefaultWorkspace }],
onboardingStep: null,
},
];
onboardingStatus: onboardingStatus || null,
};
};