Skip to content

Commit bbb5d12

Browse files
committed
Ok
1 parent 4eaf873 commit bbb5d12

File tree

79 files changed

+2249
-367
lines changed

Some content is hidden

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

79 files changed

+2249
-367
lines changed

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/debug/components/RecoilDebugObserver.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ const formatTitle = (stateName: string) => {
1414
};
1515

1616
export const RecoilDebugObserverEffect = () => {
17-
const isDebugMode = process.env.IS_DEBUG_MODE === 'true';
17+
const isDebugMode = false;
1818

1919
useRecoilTransactionObserver_UNSTABLE(({ snapshot }) => {
2020
if (!isDebugMode) {
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/useRecordTableRecordGqlFields';
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+
};

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import { type OnFindManyRecordsCompleted } from '@/object-record/types/OnFindMan
2424
import { filterUniqueRecordEdgesByCursor } from '@/object-record/utils/filterUniqueRecordEdgesByCursor';
2525
import { getQueryIdentifier } from '@/object-record/utils/getQueryIdentifier';
2626

27+
import { DEFAULT_SEARCH_REQUEST_LIMIT } from '@/object-record/constants/DefaultSearchRequestLimit';
2728
import { capitalize, isDefined } from 'twenty-shared/utils';
2829
import { cursorFamilyState } from '../states/cursorFamilyState';
2930
import { hasNextPageFamilyState } from '../states/hasNextPageFamilyState';
@@ -88,7 +89,7 @@ export const useLazyFetchMoreRecordsWithPagination = <
8889
// This function is equivalent to merge function + read function in field policy
8990
const fetchMoreRecordsLazy = useRecoilCallback(
9091
({ snapshot, set }) =>
91-
async () => {
92+
async (limit = DEFAULT_SEARCH_REQUEST_LIMIT) => {
9293
const hasNextPageLocal = snapshot
9394
.getLoadable(hasNextPageFamilyState(queryIdentifier))
9495
.getValue();
@@ -105,6 +106,7 @@ export const useLazyFetchMoreRecordsWithPagination = <
105106
try {
106107
const { data: fetchMoreDataResult } = await fetchMore({
107108
variables: {
109+
limit,
108110
filter,
109111
orderBy,
110112
lastCursor: isNonEmptyString(lastCursorLocal)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ export const useLazyFindManyRecords = <T extends ObjectRecord = ObjectRecord>({
9696

9797
return {
9898
data: null,
99-
records: [],
99+
records: null,
100100
totalCount: 0,
101101
hasNextPage: false,
102102
error: undefined,

packages/twenty-front/src/modules/object-record/hooks/useLoadSelectedRecordsInContextStore.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,9 @@ export const useLoadSelectedRecordsInContextStore = ({
5555
objectRecordIds.length,
5656
);
5757

58-
const records = await findManyRecordsLazy();
59-
upsertRecords(records.records);
58+
const { records } = await findManyRecordsLazy();
59+
60+
upsertRecords(records ?? []);
6061
};
6162
},
6263
[objectRecordIds, objectMetadataItemId, findManyRecordsLazy, upsertRecords],

packages/twenty-front/src/modules/object-record/record-drag/table/hooks/useRecordTableDragOperations.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ import { isDefined } from 'twenty-shared/utils';
1414

1515
import { useRecordDragState } from '@/object-record/record-drag/shared/hooks/useRecordDragState';
1616
import { extractRecordPositions } from '@/object-record/record-drag/shared/utils/extractRecordPositions';
17-
import { processSingleDrag } from '@/object-record/record-drag/shared/utils/processSingleDrag';
1817
import { processMultiDrag } from '@/object-record/record-drag/shared/utils/processMultiDrag';
18+
import { processSingleDrag } from '@/object-record/record-drag/shared/utils/processSingleDrag';
1919
import { selectedRowIdsComponentSelector } from '@/object-record/record-table/states/selectors/selectedRowIdsComponentSelector';
2020
import { useRecoilCallback } from 'recoil';
2121

packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/display/components/RelationFromManyFieldDisplay.tsx

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { useRelationFromManyFieldDisplay } from '@/object-record/record-field/ui
99

1010
import { ExpandableList } from '@/ui/layout/expandable-list/components/ExpandableList';
1111
import styled from '@emotion/styled';
12+
import { isArray } from '@sniptt/guards';
1213
import { useContext } from 'react';
1314
import { isDefined } from 'twenty-shared/utils';
1415

@@ -38,7 +39,15 @@ export const RelationFromManyFieldDisplay = () => {
3839
fieldValue as NoteTarget[] | TaskTarget[],
3940
);
4041

41-
if (!fieldValue || !relationObjectNameSingular) {
42+
if (!isDefined(fieldValue)) {
43+
return null;
44+
}
45+
46+
if (!isArray(fieldValue)) {
47+
return null;
48+
}
49+
50+
if (!isDefined(!relationObjectNameSingular)) {
4251
return null;
4352
}
4453

@@ -65,7 +74,7 @@ export const RelationFromManyFieldDisplay = () => {
6574
return isFocused ? (
6675
<ExpandableList isChipCountDisplayed={isFocused}>
6776
{fieldValue
68-
.map((record) => {
77+
?.map((record) => {
6978
if (!isDefined(record) || !isDefined(record[relationFieldName])) {
7079
return undefined;
7180
}
@@ -83,7 +92,7 @@ export const RelationFromManyFieldDisplay = () => {
8392
) : (
8493
<StyledContainer>
8594
{fieldValue
86-
.map((record) => {
95+
?.map((record) => {
8796
if (!isDefined(record) || !isDefined(record[relationFieldName])) {
8897
return undefined;
8998
}
@@ -115,7 +124,7 @@ export const RelationFromManyFieldDisplay = () => {
115124
} else {
116125
return (
117126
<ExpandableList isChipCountDisplayed={isFocused}>
118-
{fieldValue.filter(isDefined).map((record) => {
127+
{fieldValue?.filter(isDefined).map((record) => {
119128
const recordChipData = generateRecordChipData(record);
120129
return (
121130
<RecordChip

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,14 @@ export const useRecordIndexTableFetchMore = (objectNameSingular: string) => {
1212

1313
const recordGqlFields = useRecordFieldGqlFields({ objectMetadataItem });
1414

15-
const { fetchMoreRecordsLazy, queryIdentifier } = useLazyFindManyRecords({
16-
...params,
17-
recordGqlFields,
18-
});
15+
const { fetchMoreRecordsLazy, queryIdentifier, findManyRecordsLazy } =
16+
useLazyFindManyRecords({
17+
...params,
18+
recordGqlFields,
19+
});
1920

2021
return {
22+
findManyRecordsLazy,
2123
fetchMoreRecordsLazy,
2224
queryIdentifier,
2325
};

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,18 @@ export const useRecordIndexTableQuery = (objectNameSingular: string) => {
1616

1717
const recordGqlFields = useRecordFieldGqlFields({ objectMetadataItem });
1818

19-
const { records, hasNextPage, queryIdentifier, loading } = useFindManyRecords(
20-
{
19+
const { records, hasNextPage, queryIdentifier, loading, totalCount } =
20+
useFindManyRecords({
2121
...params,
2222
recordGqlFields,
2323
skip: showAuthModal,
24-
},
25-
);
24+
});
2625

2726
return {
2827
records: showAuthModal ? SIGN_IN_BACKGROUND_MOCK_COMPANIES : records,
2928
loading: showAuthModal ? false : loading,
3029
hasNextPage,
3130
queryIdentifier,
31+
totalCount,
3232
};
3333
};

0 commit comments

Comments
 (0)