Skip to content

Commit a1c0971

Browse files
committed
Ok
1 parent 660cd38 commit a1c0971

File tree

139 files changed

+3470
-1126
lines changed

Some content is hidden

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

139 files changed

+3470
-1126
lines changed

packages/twenty-front/src/hooks/useHTMLElementByIdWhenAvailable.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export const useHTMLElementByIdWhenAvailable = (id: string) => {
1414

1515
if (isDefined(elementFoundBeforeObservingMutation)) {
1616
setElement(elementFoundBeforeObservingMutation);
17+
1718
return;
1819
}
1920

packages/twenty-front/src/modules/activities/hooks/useActivityTargetObjectRecords.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,20 @@ import { type TaskTarget } from '@/activities/types/TaskTarget';
77
import { getActivityTargetObjectRecords } from '@/activities/utils/getActivityTargetObjectRecords';
88
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
99
import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState';
10+
import { type Nullable } from 'twenty-shared/types';
1011
import { isDefined } from 'twenty-shared/utils';
1112

1213
export const useActivityTargetObjectRecords = (
1314
activityRecordId?: string,
14-
activityTargets?: NoteTarget[] | TaskTarget[],
15+
activityTargets?: Nullable<NoteTarget[] | TaskTarget[]>,
1516
) => {
1617
const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
1718

1819
const activity = useRecoilValue(
1920
recordStoreFamilyState(activityRecordId ?? ''),
2021
) as Note | Task | null;
2122

22-
if (!isDefined(activity) && !isDefined(activityTargets)) {
23+
if (!isDefined(activity) || !isDefined(activityTargets)) {
2324
return { activityTargetObjectRecords: [] };
2425
}
2526

packages/twenty-front/src/modules/object-record/hooks/useBatchCreateManyRecords.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
type useCreateManyRecordsProps,
77
} from '@/object-record/hooks/useCreateManyRecords';
88
import { useRefetchAggregateQueries } from '@/object-record/hooks/useRefetchAggregateQueries';
9+
import { useRegisterObjectOperation } from '@/object-record/hooks/useRegisterObjectOperation';
910
import { type ObjectRecord } from '@/object-record/types/ObjectRecord';
1011
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
1112
import { ApolloError } from '@apollo/client';
@@ -26,6 +27,8 @@ export const useBatchCreateManyRecords = <
2627
setBatchedRecordsCount?: (count: number) => void;
2728
abortController?: AbortController;
2829
}) => {
30+
const { registerObjectOperation } = useRegisterObjectOperation();
31+
2932
const { createManyRecords } = useCreateManyRecords({
3033
objectNameSingular,
3134
recordGqlFields,
@@ -97,6 +100,8 @@ export const useBatchCreateManyRecords = <
97100

98101
await refetchAggregateQueries();
99102

103+
registerObjectOperation(objectNameSingular, { type: 'create-many' });
104+
100105
return allCreatedRecords;
101106
};
102107

packages/twenty-front/src/modules/object-record/hooks/useCreateManyRecords.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { generateDepthOneRecordGqlFields } from '@/object-record/graphql/utils/g
1616
import { useCreateManyRecordsMutation } from '@/object-record/hooks/useCreateManyRecordsMutation';
1717
import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions';
1818
import { useRefetchAggregateQueries } from '@/object-record/hooks/useRefetchAggregateQueries';
19+
import { useRegisterObjectOperation } from '@/object-record/hooks/useRegisterObjectOperation';
1920
import { type FieldActorForInputValue } from '@/object-record/record-field/ui/types/FieldMetadata';
2021
import { type ObjectRecord } from '@/object-record/types/ObjectRecord';
2122
import { computeOptimisticRecordFromInput } from '@/object-record/utils/computeOptimisticRecordFromInput';
@@ -49,6 +50,8 @@ export const useCreateManyRecords = <
4950
shouldMatchRootQueryFilter,
5051
shouldRefetchAggregateQueries = true,
5152
}: useCreateManyRecordsProps) => {
53+
const { registerObjectOperation } = useRegisterObjectOperation();
54+
5255
const apolloCoreClient = useApolloCoreClient();
5356

5457
const { objectMetadataItem } = useObjectMetadataItem({
@@ -224,7 +227,11 @@ export const useCreateManyRecords = <
224227
throw error;
225228
});
226229

227-
if (shouldRefetchAggregateQueries) await refetchAggregateQueries();
230+
if (shouldRefetchAggregateQueries) {
231+
await refetchAggregateQueries();
232+
}
233+
234+
registerObjectOperation(objectNameSingular, { type: 'create-many' });
228235

229236
return createdObjects.data?.[mutationResponseField] ?? [];
230237
};

packages/twenty-front/src/modules/object-record/hooks/useCreateOneRecord.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { generateDepthOneRecordGqlFields } from '@/object-record/graphql/utils/g
1616
import { useCreateOneRecordMutation } from '@/object-record/hooks/useCreateOneRecordMutation';
1717
import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions';
1818
import { useRefetchAggregateQueries } from '@/object-record/hooks/useRefetchAggregateQueries';
19+
import { useRegisterObjectOperation } from '@/object-record/hooks/useRegisterObjectOperation';
1920
import { type ObjectRecord } from '@/object-record/types/ObjectRecord';
2021
import { computeOptimisticCreateRecordBaseRecordInput } from '@/object-record/utils/computeOptimisticCreateRecordBaseRecordInput';
2122
import { computeOptimisticRecordFromInput } from '@/object-record/utils/computeOptimisticRecordFromInput';
@@ -39,6 +40,7 @@ export const useCreateOneRecord = <
3940
skipPostOptimisticEffect = false,
4041
shouldMatchRootQueryFilter,
4142
}: useCreateOneRecordProps) => {
43+
const { registerObjectOperation } = useRegisterObjectOperation();
4244
const apolloCoreClient = useApolloCoreClient();
4345
const [loading, setLoading] = useState(false);
4446

@@ -170,6 +172,9 @@ export const useCreateOneRecord = <
170172
});
171173

172174
await refetchAggregateQueries();
175+
176+
registerObjectOperation(objectNameSingular, { type: 'create-one' });
177+
173178
return createdObject.data?.[mutationResponseField] ?? null;
174179
};
175180

packages/twenty-front/src/modules/object-record/hooks/useDeleteManyRecords.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { type RecordGqlNode } from '@/object-record/graphql/types/RecordGqlNode'
1212
import { useDeleteManyRecordsMutation } from '@/object-record/hooks/useDeleteManyRecordsMutation';
1313
import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions';
1414
import { useRefetchAggregateQueries } from '@/object-record/hooks/useRefetchAggregateQueries';
15+
import { useRegisterObjectOperation } from '@/object-record/hooks/useRegisterObjectOperation';
1516
import { type ObjectRecord } from '@/object-record/types/ObjectRecord';
1617
import { getDeleteManyRecordsMutationResponseField } from '@/object-record/utils/getDeleteManyRecordsMutationResponseField';
1718
import { useRecoilValue } from 'recoil';
@@ -32,6 +33,7 @@ export type DeleteManyRecordsProps = {
3233
export const useDeleteManyRecords = ({
3334
objectNameSingular,
3435
}: useDeleteManyRecordProps) => {
36+
const { registerObjectOperation } = useRegisterObjectOperation();
3537
const apiConfig = useRecoilValue(apiConfigState);
3638

3739
const mutationPageSize =
@@ -215,6 +217,11 @@ export const useDeleteManyRecords = ({
215217
}
216218
}
217219
await refetchAggregateQueries();
220+
221+
registerObjectOperation(objectNameSingular, {
222+
type: 'delete-many',
223+
});
224+
218225
return deletedRecords;
219226
};
220227

packages/twenty-front/src/modules/object-record/hooks/useDeleteOneRecord.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { updateRecordFromCache } from '@/object-record/cache/utils/updateRecordF
1212
import { useDeleteOneRecordMutation } from '@/object-record/hooks/useDeleteOneRecordMutation';
1313
import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions';
1414
import { useRefetchAggregateQueries } from '@/object-record/hooks/useRefetchAggregateQueries';
15+
import { useRegisterObjectOperation } from '@/object-record/hooks/useRegisterObjectOperation';
1516
import { type ObjectRecord } from '@/object-record/types/ObjectRecord';
1617
import { getDeleteOneRecordMutationResponseField } from '@/object-record/utils/getDeleteOneRecordMutationResponseField';
1718
import { isNull } from '@sniptt/guards';
@@ -24,6 +25,7 @@ type useDeleteOneRecordProps = {
2425
export const useDeleteOneRecord = ({
2526
objectNameSingular,
2627
}: useDeleteOneRecordProps) => {
28+
const { registerObjectOperation } = useRegisterObjectOperation();
2729
const apolloCoreClient = useApolloCoreClient();
2830

2931
const { objectMetadataItem } = useObjectMetadataItem({
@@ -154,6 +156,11 @@ export const useDeleteOneRecord = ({
154156
});
155157

156158
await refetchAggregateQueries();
159+
160+
registerObjectOperation(objectNameSingular, {
161+
type: 'delete-one',
162+
});
163+
157164
return deletedRecord.data?.[mutationResponseField] ?? null;
158165
},
159166
[
@@ -165,6 +172,8 @@ export const useDeleteOneRecord = ({
165172
objectMetadataItems,
166173
objectPermissionsByObjectMetadataId,
167174
refetchAggregateQueries,
175+
objectNameSingular,
176+
registerObjectOperation,
168177
],
169178
);
170179

packages/twenty-front/src/modules/object-record/hooks/useDestroyManyRecords.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { DEFAULT_MUTATION_BATCH_SIZE } from '@/object-record/constants/DefaultMu
99
import { useDestroyManyRecordsMutation } from '@/object-record/hooks/useDestroyManyRecordsMutation';
1010
import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions';
1111
import { useRefetchAggregateQueries } from '@/object-record/hooks/useRefetchAggregateQueries';
12+
import { useRegisterObjectOperation } from '@/object-record/hooks/useRegisterObjectOperation';
1213
import { type ObjectRecord } from '@/object-record/types/ObjectRecord';
1314
import { getDestroyManyRecordsMutationResponseField } from '@/object-record/utils/getDestroyManyRecordsMutationResponseField';
1415
import { useRecoilValue } from 'recoil';
@@ -29,6 +30,7 @@ export type DestroyManyRecordsProps = {
2930
export const useDestroyManyRecords = ({
3031
objectNameSingular,
3132
}: useDestroyManyRecordProps) => {
33+
const { registerObjectOperation } = useRegisterObjectOperation();
3234
const apiConfig = useRecoilValue(apiConfigState);
3335

3436
const mutationPageSize =
@@ -137,6 +139,11 @@ export const useDestroyManyRecords = ({
137139
}
138140

139141
await refetchAggregateQueries();
142+
143+
registerObjectOperation(objectNameSingular, {
144+
type: 'destroy-many',
145+
});
146+
140147
return destroyedRecords;
141148
};
142149

packages/twenty-front/src/modules/object-record/hooks/useDestroyOneRecord.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadat
88
import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordFromCache';
99
import { useDestroyOneRecordMutation } from '@/object-record/hooks/useDestroyOneRecordMutation';
1010
import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions';
11+
import { useRegisterObjectOperation } from '@/object-record/hooks/useRegisterObjectOperation';
1112
import { getDestroyOneRecordMutationResponseField } from '@/object-record/utils/getDestroyOneRecordMutationResponseField';
1213
import { capitalize, isDefined } from 'twenty-shared/utils';
1314

@@ -19,6 +20,8 @@ type useDestroyOneRecordProps = {
1920
export const useDestroyOneRecord = ({
2021
objectNameSingular,
2122
}: useDestroyOneRecordProps) => {
23+
const { registerObjectOperation } = useRegisterObjectOperation();
24+
2225
const apolloCoreClient = useApolloCoreClient();
2326

2427
const { objectMetadataItem } = useObjectMetadataItem({
@@ -81,6 +84,10 @@ export const useDestroyOneRecord = ({
8184
throw error;
8285
});
8386

87+
registerObjectOperation(objectMetadataItem.nameSingular, {
88+
type: 'destroy-one',
89+
});
90+
8491
return deletedRecord.data?.[mutationResponseField] ?? null;
8592
},
8693
[
@@ -92,6 +99,7 @@ export const useDestroyOneRecord = ({
9299
objectNameSingular,
93100
objectMetadataItems,
94101
objectPermissionsByObjectMetadataId,
102+
registerObjectOperation,
95103
],
96104
);
97105

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
import { useLazyQuery } from '@apollo/client';
2+
import { useRecoilCallback } from 'recoil';
3+
4+
import { useApolloCoreClient } from '@/object-metadata/hooks/useApolloCoreClient';
5+
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
6+
import { getRecordsFromRecordConnection } from '@/object-record/cache/utils/getRecordsFromRecordConnection';
7+
import { type RecordGqlOperationFindManyResult } from '@/object-record/graphql/types/RecordGqlOperationFindManyResult';
8+
import { type UseFindManyRecordsParams } from '@/object-record/hooks/useFindManyRecords';
9+
import { useFindManyRecordsQuery } from '@/object-record/hooks/useFindManyRecordsQuery';
10+
import { useHandleFindManyRecordsError } from '@/object-record/hooks/useHandleFindManyRecordsError';
11+
import { useObjectPermissionsForObject } from '@/object-record/hooks/useObjectPermissionsForObject';
12+
import { useRecordFieldGqlFields } from '@/object-record/record-field/hooks/useRecordFieldGqlFields';
13+
import { useFindManyRecordIndexTableParams } from '@/object-record/record-index/hooks/useFindManyRecordIndexTableParams';
14+
import { type ObjectRecord } from '@/object-record/types/ObjectRecord';
15+
16+
type UseLazyFindManyRecordsWithOffsetParams = Pick<
17+
UseFindManyRecordsParams<ObjectRecord>,
18+
'objectNameSingular'
19+
>;
20+
21+
export const useLazyFindManyRecordsWithOffset = ({
22+
objectNameSingular,
23+
}: UseLazyFindManyRecordsWithOffsetParams) => {
24+
const { objectMetadataItem } = useObjectMetadataItem({
25+
objectNameSingular,
26+
});
27+
28+
const params = useFindManyRecordIndexTableParams(objectNameSingular);
29+
30+
const recordGqlFields = useRecordFieldGqlFields({ objectMetadataItem });
31+
32+
const apolloCoreClient = useApolloCoreClient();
33+
34+
const { findManyRecordsQuery } = useFindManyRecordsQuery({
35+
objectNameSingular,
36+
recordGqlFields,
37+
});
38+
39+
const { handleFindManyRecordsError } = useHandleFindManyRecordsError({
40+
objectMetadataItem,
41+
});
42+
43+
const objectPermissions = useObjectPermissionsForObject(
44+
objectMetadataItem.id,
45+
);
46+
47+
const hasReadPermission = objectPermissions.canReadObjectRecords;
48+
49+
const [findManyRecords] = useLazyQuery<RecordGqlOperationFindManyResult>(
50+
findManyRecordsQuery,
51+
{
52+
variables: {
53+
...params,
54+
},
55+
onError: handleFindManyRecordsError,
56+
client: apolloCoreClient,
57+
},
58+
);
59+
60+
const findManyRecordsLazyWithOffset = useRecoilCallback(
61+
() => async (limit: number, offset: number) => {
62+
if (!hasReadPermission) {
63+
return {
64+
data: null,
65+
records: null,
66+
totalCount: 0,
67+
error: undefined,
68+
};
69+
}
70+
71+
const result = await findManyRecords({
72+
variables: {
73+
limit,
74+
offset,
75+
},
76+
});
77+
78+
const records = getRecordsFromRecordConnection({
79+
recordConnection: {
80+
edges: result?.data?.[objectMetadataItem.namePlural]?.edges ?? [],
81+
pageInfo: {
82+
hasNextPage: false,
83+
hasPreviousPage: false,
84+
startCursor: '',
85+
endCursor: '',
86+
},
87+
},
88+
});
89+
90+
return {
91+
data: result?.data,
92+
records,
93+
error: result?.error,
94+
};
95+
},
96+
[hasReadPermission, findManyRecords, objectMetadataItem.namePlural],
97+
);
98+
99+
return {
100+
findManyRecordsLazyWithOffset,
101+
};
102+
};

0 commit comments

Comments
 (0)