Skip to content

Commit 6fefeae

Browse files
move implementation to a private method
1 parent a028c22 commit 6fefeae

File tree

142 files changed

+1772
-1298
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

142 files changed

+1772
-1298
lines changed

nx.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
},
3333
"start": {
3434
"cache": true,
35-
"dependsOn": ["^build"]
35+
"dependsOn": ["^typecheck","^build"]
3636
},
3737
"lint": {
3838
"executor": "@nx/eslint:lint",

packages/twenty-chrome-extension/src/generated/graphql.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -7455,7 +7455,7 @@ export type Workspace = {
74557455
billingSubscriptions?: Maybe<Array<BillingSubscription>>;
74567456
createdAt: Scalars['DateTime'];
74577457
currentBillingSubscription?: Maybe<BillingSubscription>;
7458-
currentCacheVersion?: Maybe<Scalars['String']>;
7458+
metadataVersion?: Maybe<Scalars['String']>;
74597459
deletedAt?: Maybe<Scalars['DateTime']>;
74607460
displayName?: Maybe<Scalars['String']>;
74617461
domainName?: Maybe<Scalars['String']>;

packages/twenty-front/project.json

+6
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@
1010
"outputPath": "{projectRoot}/build"
1111
}
1212
},
13+
"serve": {
14+
"executor": "nx:run-commands",
15+
"options": {
16+
"command": "npx serve -s {projectRoot}/build"
17+
}
18+
},
1319
"start": {
1420
"executor": "@nx/vite:dev-server",
1521
"options": {

packages/twenty-front/src/generated-metadata/graphql.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -1380,14 +1380,17 @@ export type Workspace = {
13801380
billingSubscriptions?: Maybe<Array<BillingSubscription>>;
13811381
createdAt: Scalars['DateTime']['output'];
13821382
currentBillingSubscription?: Maybe<BillingSubscription>;
1383-
currentCacheVersion?: Maybe<Scalars['String']['output']>;
1383+
currentMetadataVersion: Scalars['Float']['output'];
1384+
databaseSchema: Scalars['String']['output'];
1385+
databaseUrl: Scalars['String']['output'];
13841386
deletedAt?: Maybe<Scalars['DateTime']['output']>;
13851387
displayName?: Maybe<Scalars['String']['output']>;
13861388
domainName?: Maybe<Scalars['String']['output']>;
13871389
featureFlags?: Maybe<Array<FeatureFlag>>;
13881390
id: Scalars['UUID']['output'];
13891391
inviteHash?: Maybe<Scalars['String']['output']>;
13901392
logo?: Maybe<Scalars['String']['output']>;
1393+
metadataVersion: Scalars['Float']['output'];
13911394
updatedAt: Scalars['DateTime']['output'];
13921395
workspaceMembersCount?: Maybe<Scalars['Float']['output']>;
13931396
};

packages/twenty-front/src/generated/graphql.tsx

+8-6
Large diffs are not rendered by default.

packages/twenty-front/src/modules/apollo/hooks/useApolloFactory.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1+
import { InMemoryCache, NormalizedCacheObject } from '@apollo/client';
12
import { useMemo, useRef } from 'react';
23
import { useLocation, useNavigate } from 'react-router-dom';
3-
import { InMemoryCache, NormalizedCacheObject } from '@apollo/client';
44
import { useRecoilState, useSetRecoilState } from 'recoil';
55

66
import { currentUserState } from '@/auth/states/currentUserState';
@@ -49,8 +49,8 @@ export const useApolloFactory = (options: Partial<Options<any>> = {}) => {
4949
},
5050
}),
5151
headers: {
52-
...(currentWorkspace?.currentCacheVersion && {
53-
'X-Schema-Version': currentWorkspace.currentCacheVersion,
52+
...(currentWorkspace?.metadataVersion && {
53+
'X-Schema-Version': `${currentWorkspace.metadataVersion}`,
5454
}),
5555
},
5656
defaultOptions: {
@@ -95,7 +95,7 @@ export const useApolloFactory = (options: Partial<Options<any>> = {}) => {
9595
setCurrentWorkspace,
9696
setWorkspaces,
9797
isDebugMode,
98-
currentWorkspace?.currentCacheVersion,
98+
currentWorkspace?.metadataVersion,
9999
setPreviousUrl,
100100
]);
101101

packages/twenty-front/src/modules/auth/states/currentWorkspaceState.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export type CurrentWorkspace = Pick<
1313
| 'activationStatus'
1414
| 'currentBillingSubscription'
1515
| 'workspaceMembersCount'
16-
| 'currentCacheVersion'
16+
| 'metadataVersion'
1717
>;
1818

1919
export const currentWorkspaceState = createState<CurrentWorkspace | null>({

packages/twenty-front/src/modules/object-record/relation-picker/components/MultiRecordSelect.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ export const StyledSelectableItem = styled(SelectableItem)`
2727
height: 100%;
2828
width: 100%;
2929
`;
30+
3031
export const MultiRecordSelect = ({
3132
onChange,
3233
onSubmit,

packages/twenty-front/src/modules/settings/data-model/fields/preview/components/SettingsDataModelFieldPreview.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { FieldContext } from '@/object-record/record-field/contexts/FieldContext
1010
import { BooleanFieldInput } from '@/object-record/record-field/meta-types/input/components/BooleanFieldInput';
1111
import { RatingFieldInput } from '@/object-record/record-field/meta-types/input/components/RatingFieldInput';
1212
import { SettingsDataModelSetFieldValueEffect } from '@/settings/data-model/fields/preview/components/SettingsDataModelSetFieldValueEffect';
13-
import { SettingsDataModelSetRecordEffect } from '@/settings/data-model/fields/preview/components/SettingsDataModelSetRecordEffect';
13+
import { SettingsDataModelSetPreviewRecordEffect } from '@/settings/data-model/fields/preview/components/SettingsDataModelSetRecordEffect';
1414
import { useFieldPreviewValue } from '@/settings/data-model/fields/preview/hooks/useFieldPreviewValue';
1515
import { usePreviewRecord } from '@/settings/data-model/fields/preview/hooks/usePreviewRecord';
1616
import { FieldMetadataType } from '~/generated-metadata/graphql';
@@ -96,7 +96,7 @@ export const SettingsDataModelFieldPreview = ({
9696
return (
9797
<>
9898
{previewRecord ? (
99-
<SettingsDataModelSetRecordEffect
99+
<SettingsDataModelSetPreviewRecordEffect
100100
fieldName={fieldName}
101101
record={previewRecord}
102102
/>

packages/twenty-front/src/modules/settings/data-model/fields/preview/components/SettingsDataModelSetFieldValueEffect.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { useSetRecordFieldValue } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext';
22
import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState';
33
import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector';
4-
import { previewRecordIdState } from '@/settings/data-model/fields/preview/states/previewRecordIdState';
4+
import { settingsPreviewRecordIdState } from '@/settings/data-model/fields/preview/states/settingsPreviewRecordIdState';
55
import { useEffect } from 'react';
66
import { useRecoilValue, useSetRecoilState } from 'recoil';
77
import { isDefined } from '~/utils/isDefined';
@@ -17,10 +17,10 @@ export const SettingsDataModelSetFieldValueEffect = ({
1717
fieldName,
1818
value,
1919
}: SettingsDataModelSetFieldValueEffectProps) => {
20-
const previewRecordId = useRecoilValue(previewRecordIdState);
20+
const settingsPreviewRecordId = useRecoilValue(settingsPreviewRecordIdState);
2121

2222
const upsertedPreviewRecord = useRecoilValue(
23-
recordStoreFamilyState(previewRecordId ?? ''),
23+
recordStoreFamilyState(settingsPreviewRecordId ?? ''),
2424
);
2525

2626
const setFieldValue = useSetRecoilState(

packages/twenty-front/src/modules/settings/data-model/fields/preview/components/SettingsDataModelSetRecordEffect.tsx

+9-7
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,36 @@
11
import { useSetRecordFieldValue } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext';
22
import { useUpsertRecordsInStore } from '@/object-record/record-store/hooks/useUpsertRecordsInStore';
33
import { ObjectRecord } from '@/object-record/types/ObjectRecord';
4-
import { previewRecordIdState } from '@/settings/data-model/fields/preview/states/previewRecordIdState';
4+
import { settingsPreviewRecordIdState } from '@/settings/data-model/fields/preview/states/settingsPreviewRecordIdState';
55
import { useEffect } from 'react';
66
import { useSetRecoilState } from 'recoil';
77

8-
type SettingsDataModelSetRecordEffectProps = {
8+
type SettingsDataModelSetPreviewRecordEffectProps = {
99
record: ObjectRecord;
1010
fieldName: string;
1111
};
1212

13-
export const SettingsDataModelSetRecordEffect = ({
13+
export const SettingsDataModelSetPreviewRecordEffect = ({
1414
record,
1515
fieldName,
16-
}: SettingsDataModelSetRecordEffectProps) => {
16+
}: SettingsDataModelSetPreviewRecordEffectProps) => {
1717
const { upsertRecords: upsertRecordsInStore } = useUpsertRecordsInStore();
1818
const setRecordFieldValue = useSetRecordFieldValue();
1919

20-
const setPreviewRecordId = useSetRecoilState(previewRecordIdState);
20+
const setSettingsPreviewRecordId = useSetRecoilState(
21+
settingsPreviewRecordIdState,
22+
);
2123

2224
useEffect(() => {
2325
upsertRecordsInStore([record]);
2426
setRecordFieldValue(record.id, fieldName, record[fieldName]);
25-
setPreviewRecordId(record.id);
27+
setSettingsPreviewRecordId(record.id);
2628
}, [
2729
record,
2830
upsertRecordsInStore,
2931
setRecordFieldValue,
3032
fieldName,
31-
setPreviewRecordId,
33+
setSettingsPreviewRecordId,
3234
]);
3335

3436
return null;

packages/twenty-front/src/modules/settings/data-model/fields/preview/states/previewRecordIdState.ts

-6
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { createState } from 'twenty-ui';
2+
3+
export const settingsPreviewRecordIdState = createState<string | null>({
4+
key: 'settingsPreviewRecordIdState',
5+
defaultValue: null,
6+
});

packages/twenty-front/src/modules/ui/display/status/components/__stories__/Status.stories.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ const meta: Meta<typeof Status> = {
1515
component: Status,
1616
args: {
1717
text: 'Urgent',
18+
weight: 'medium',
1819
},
1920
};
2021

packages/twenty-front/src/modules/users/graphql/fragments/userQueryFragment.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export const USER_QUERY_FRAGMENT = gql`
2929
value
3030
workspaceId
3131
}
32-
currentCacheVersion
32+
metadataVersion
3333
currentBillingSubscription {
3434
id
3535
status

packages/twenty-front/src/testing/mock-data/users.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,16 @@ export const mockDefaultWorkspace: Workspace = {
6363
],
6464
createdAt: '2023-04-26T10:23:42.33625+00:00',
6565
updatedAt: '2023-04-26T10:23:42.33625+00:00',
66-
currentCacheVersion: '1',
66+
metadataVersion: 1,
6767
currentBillingSubscription: {
6868
__typename: 'BillingSubscription',
6969
id: '7efbc3f7-6e5e-4128-957e-8d86808cdf6a',
7070
interval: SubscriptionInterval.Month,
7171
status: SubscriptionStatus.Active,
7272
},
7373
workspaceMembersCount: 1,
74+
databaseSchema: '',
75+
databaseUrl: '',
7476
};
7577

7678
export const mockedWorkspaceMemberData: WorkspaceMember = {

packages/twenty-front/src/utils/__tests__/title-utils.test.ts

-4
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,6 @@ describe('title-utils', () => {
99
expect(getPageTitleFromPath('/invite/:workspaceInviteHash')).toBe('Invite');
1010
expect(getPageTitleFromPath('/create/workspace')).toBe('Create Workspace');
1111
expect(getPageTitleFromPath('/create/profile')).toBe('Create Profile');
12-
expect(getPageTitleFromPath('/tasks')).toBe('Tasks');
13-
expect(getPageTitleFromPath('/objects/opportunities')).toBe(
14-
'Opportunities',
15-
);
1612
expect(getPageTitleFromPath('/settings/objects/opportunities')).toBe(
1713
SettingsPageTitles.Objects,
1814
);
+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"extends": "./tsconfig.json",
3+
"compilerOptions": {
4+
"types": ["node"]
5+
},
6+
"include": [
7+
"src/**/*.js",
8+
"src/**/*.jsx",
9+
"src/**/*.d.ts",
10+
"src/**/*.ts",
11+
"src/**/*.tsx"
12+
]
13+
}

packages/twenty-front/tsconfig.json

+5-2
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,10 @@
3232
"include": [],
3333
"references": [
3434
{
35-
"path": "./tsconfig.app.json"
35+
"path": "./tsconfig.dev.json"
36+
},
37+
{
38+
"path": "./tsconfig.build.json"
3639
},
3740
{
3841
"path": "./tsconfig.spec.json"
@@ -42,4 +45,4 @@
4245
}
4346
],
4447
"extends": "../../tsconfig.base.json"
45-
}
48+
}

packages/twenty-front/vite.config.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,13 @@ export default defineConfig(({ command, mode }) => {
1919

2020
const isBuildCommand = command === 'build';
2121

22+
const tsConfigPath = isBuildCommand
23+
? path.resolve(__dirname, './tsconfig.build.json')
24+
: path.resolve(__dirname, './tsconfig.dev.json');
25+
2226
const checkers: Checkers = {
2327
typescript: {
24-
tsconfigPath: path.resolve(__dirname, './tsconfig.app.json'),
28+
tsconfigPath: tsConfigPath,
2529
},
2630
overlay: false,
2731
};

packages/twenty-server/@types/express.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ declare module 'express-serve-static-core' {
88
apiKey?: ApiKeyWorkspaceEntity | null;
99
workspace?: Workspace;
1010
workspaceId?: string;
11-
cacheVersion?: string | null;
11+
workspaceMetadataVersion?: number;
1212
}
1313
}

packages/twenty-server/patches/@graphql-yoga-nestjs-npm-2.1.0-cb509e6047.patch

+6-6
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ index 16843949d8589a299d8195b0a349ac4dac0bacbf..21e7fe2bbcba36b04a274be9d2219fd3
3232
...options,
3333
+ schema: async (request) => {
3434
+ const workspaceId = request.req.workspace?.id ?? 'anonymous'
35-
+ const workspaceCacheVersion = request.req.cacheVersion ?? '0'
35+
+ const workspaceCacheVersion = request.req.workspaceMetadataVersion ?? '0'
3636
+ const workspaceUserId = request.req.user?.id ?? 'anonymous'
3737
+ const url = request.req.baseUrl
3838
+
@@ -79,7 +79,7 @@ index 16843949d8589a299d8195b0a349ac4dac0bacbf..21e7fe2bbcba36b04a274be9d2219fd3
7979
...options,
8080
+ schema: async (request) => {
8181
+ const workspaceId = request.req.workspace?.id ?? 'anonymous'
82-
+ const workspaceCacheVersion = request.req.cacheVersion ?? '0'
82+
+ const workspaceCacheVersion = request.req.workspaceMetadataVersion ?? '0'
8383
+ const workspaceUserId = request.req.user?.id ?? 'anonymous'
8484
+ const url = request.req.baseUrl
8585
+
@@ -146,7 +146,7 @@ index 7068c519320b379917c46763cd280b1cdd3e48f0..418e1030373fc1e0fb85a932ac8da9b3
146146
...options,
147147
+ schema: async (request) => {
148148
+ const workspaceId = request.req.workspace?.id ?? 'anonymous'
149-
+ const workspaceCacheVersion = request.req.cacheVersion ?? '0'
149+
+ const workspaceCacheVersion = request.req.workspaceMetadataVersion ?? '0'
150150
+ const workspaceUserId = request.req.user?.id ?? 'anonymous'
151151
+ const url = request.req.baseUrl
152152
+
@@ -193,7 +193,7 @@ index 7068c519320b379917c46763cd280b1cdd3e48f0..418e1030373fc1e0fb85a932ac8da9b3
193193
...options,
194194
+ schema: async (request) => {
195195
+ const workspaceId = request.req.workspace?.id ?? 'anonymous'
196-
+ const workspaceCacheVersion = request.req.cacheVersion ?? '0'
196+
+ const workspaceCacheVersion = request.req.workspaceMetadataVersion ?? '0'
197197
+ const workspaceUserId = request.req.user?.id ?? 'anonymous'
198198
+ const url = request.req.baseUrl
199199
+
@@ -387,7 +387,7 @@ index ce142f61ede52499485b19d8af057f4cb828d0f7..5888d31cae1b7aca57ed0819209812ac
387387
...options,
388388
+ schema: async request => {
389389
+ const workspaceId = request.req.workspace.id
390-
+ const workspaceCacheVersion = request.req.cacheVersion
390+
+ const workspaceCacheVersion = request.req.workspaceMetadataVersion
391391
+ const workspaceUserId = request.req.user?.id ?? 'anonymous'
392392
+ const url = request.req.baseUrl
393393
+
@@ -448,7 +448,7 @@ index ce142f61ede52499485b19d8af057f4cb828d0f7..5888d31cae1b7aca57ed0819209812ac
448448
...options,
449449
+ schema: async request => {
450450
+ const workspaceId = request.req.workspace.id
451-
+ const workspaceCacheVersion = request.req.cacheVersion
451+
+ const workspaceCacheVersion = request.req.workspaceMetadataVersion
452452
+ const workspaceUserId = request.req.user?.id ?? 'anonymous'
453453
+ const url = request.req.baseUrl
454454
+

packages/twenty-server/src/app.module.ts

+10-10
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,27 @@ import {
55
RequestMethod,
66
} from '@nestjs/common';
77
import { ConfigModule } from '@nestjs/config';
8-
import { ServeStaticModule } from '@nestjs/serve-static';
98
import { GraphQLModule } from '@nestjs/graphql';
9+
import { ServeStaticModule } from '@nestjs/serve-static';
1010

1111
import { existsSync } from 'fs';
1212
import { join } from 'path';
1313

14-
import { YogaDriverConfig, YogaDriver } from '@graphql-yoga/nestjs';
14+
import { YogaDriver, YogaDriverConfig } from '@graphql-yoga/nestjs';
1515

16-
import { RestApiModule } from 'src/engine/api/rest/rest-api.module';
17-
import { ModulesModule } from 'src/modules/modules.module';
1816
import { CoreGraphQLApiModule } from 'src/engine/api/graphql/core-graphql-api.module';
19-
import { MetadataGraphQLApiModule } from 'src/engine/api/graphql/metadata-graphql-api.module';
2017
import { GraphQLConfigModule } from 'src/engine/api/graphql/graphql-config/graphql-config.module';
2118
import { GraphQLConfigService } from 'src/engine/api/graphql/graphql-config/graphql-config.service';
22-
import { WorkspaceCacheVersionModule } from 'src/engine/metadata-modules/workspace-cache-version/workspace-cache-version.module';
23-
import { GraphQLHydrateRequestFromTokenMiddleware } from 'src/engine/middlewares/graphql-hydrate-request-from-token.middleware';
24-
import { MessageQueueModule } from 'src/engine/integrations/message-queue/message-queue.module';
19+
import { MetadataGraphQLApiModule } from 'src/engine/api/graphql/metadata-graphql-api.module';
20+
import { RestApiModule } from 'src/engine/api/rest/rest-api.module';
2521
import { MessageQueueDriverType } from 'src/engine/integrations/message-queue/interfaces';
22+
import { MessageQueueModule } from 'src/engine/integrations/message-queue/message-queue.module';
23+
import { WorkspaceMetadataVersionModule } from 'src/engine/metadata-modules/workspace-metadata-version/workspace-metadata-version.module';
24+
import { GraphQLHydrateRequestFromTokenMiddleware } from 'src/engine/middlewares/graphql-hydrate-request-from-token.middleware';
25+
import { ModulesModule } from 'src/modules/modules.module';
2626

27-
import { IntegrationsModule } from './engine/integrations/integrations.module';
2827
import { CoreEngineModule } from './engine/core-modules/core-engine.module';
28+
import { IntegrationsModule } from './engine/integrations/integrations.module';
2929

3030
@Module({
3131
imports: [
@@ -52,7 +52,7 @@ import { CoreEngineModule } from './engine/core-modules/core-engine.module';
5252
// Modules module, contains all business logic modules
5353
ModulesModule,
5454
// Needed for the user workspace middleware
55-
WorkspaceCacheVersionModule,
55+
WorkspaceMetadataVersionModule,
5656
// Api modules
5757
CoreGraphQLApiModule,
5858
MetadataGraphQLApiModule,

0 commit comments

Comments
 (0)