Skip to content

Commit 951cf88

Browse files
authored
4087 refactor object metadata item hooks and utils (twentyhq#4861)
- Extracted each exported element from useObjectMetadataItem into its own hook.
1 parent 6387358 commit 951cf88

File tree

89 files changed

+699
-622
lines changed

Some content is hidden

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

89 files changed

+699
-622
lines changed

packages/twenty-front/src/modules/activities/calendar/components/CalendarEventDetails.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import styled from '@emotion/styled';
33
import { IconCalendarEvent } from 'twenty-ui';
44

55
import { CalendarEvent } from '@/activities/calendar/types/CalendarEvent';
6-
import { useObjectMetadataItemOnly } from '@/object-metadata/hooks/useObjectMetadataItemOnly';
6+
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
77
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
88
import { formatFieldMetadataItemAsFieldDefinition } from '@/object-metadata/utils/formatFieldMetadataItemAsFieldDefinition';
99
import { FieldContext } from '@/object-record/record-field/contexts/FieldContext';
@@ -71,7 +71,7 @@ export const CalendarEventDetails = ({
7171
calendarEvent,
7272
}: CalendarEventDetailsProps) => {
7373
const theme = useTheme();
74-
const { objectMetadataItem } = useObjectMetadataItemOnly({
74+
const { objectMetadataItem } = useObjectMetadataItem({
7575
objectNameSingular: CoreObjectNameSingular.CalendarEvent,
7676
});
7777

packages/twenty-front/src/modules/activities/components/ActivityBodyEditor.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { activityTitleHasBeenSetFamilyState } from '@/activities/states/activity
1414
import { canCreateActivityState } from '@/activities/states/canCreateActivityState';
1515
import { Activity } from '@/activities/types/Activity';
1616
import { ActivityEditorHotkeyScope } from '@/activities/types/ActivityEditorHotkeyScope';
17-
import { useObjectMetadataItemOnly } from '@/object-metadata/hooks/useObjectMetadataItemOnly';
17+
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
1818
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
1919
import { modifyRecordFromCache } from '@/object-record/cache/utils/modifyRecordFromCache';
2020
import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState';
@@ -58,7 +58,7 @@ export const ActivityBodyEditor = ({
5858
);
5959

6060
const { objectMetadataItem: objectMetadataItemActivity } =
61-
useObjectMetadataItemOnly({
61+
useObjectMetadataItem({
6262
objectNameSingular: CoreObjectNameSingular.Activity,
6363
});
6464

packages/twenty-front/src/modules/activities/components/ActivityEditorFields.tsx

+1-6
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { useRecoilValue } from 'recoil';
44
import { useUpsertActivity } from '@/activities/hooks/useUpsertActivity';
55
import { ActivityTargetsInlineCell } from '@/activities/inline-cell/components/ActivityTargetsInlineCell';
66
import { Activity } from '@/activities/types/Activity';
7-
import { useObjectMetadataItemOnly } from '@/object-metadata/hooks/useObjectMetadataItemOnly';
87
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
98
import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordFromCache';
109
import { useFieldContext } from '@/object-record/hooks/useFieldContext';
@@ -28,12 +27,8 @@ export const ActivityEditorFields = ({
2827
}) => {
2928
const { upsertActivity } = useUpsertActivity();
3029

31-
const { objectMetadataItem } = useObjectMetadataItemOnly({
32-
objectNameSingular: CoreObjectNameSingular.Activity,
33-
});
34-
3530
const getRecordFromCache = useGetRecordFromCache({
36-
objectMetadataItem,
31+
objectNameSingular: CoreObjectNameSingular.Activity,
3732
});
3833

3934
const activityFromCache = getRecordFromCache<Activity>(activityId);

packages/twenty-front/src/modules/activities/components/ActivityTitle.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { activityTitleHasBeenSetFamilyState } from '@/activities/states/activity
1212
import { canCreateActivityState } from '@/activities/states/canCreateActivityState';
1313
import { Activity } from '@/activities/types/Activity';
1414
import { ActivityEditorHotkeyScope } from '@/activities/types/ActivityEditorHotkeyScope';
15-
import { useObjectMetadataItemOnly } from '@/object-metadata/hooks/useObjectMetadataItemOnly';
15+
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
1616
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
1717
import { modifyRecordFromCache } from '@/object-record/cache/utils/modifyRecordFromCache';
1818
import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState';
@@ -111,7 +111,7 @@ export const ActivityTitle = ({ activityId }: ActivityTitleProps) => {
111111
);
112112

113113
const { objectMetadataItem: objectMetadataItemActivity } =
114-
useObjectMetadataItemOnly({
114+
useObjectMetadataItem({
115115
objectNameSingular: CoreObjectNameSingular.Activity,
116116
});
117117

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

+1-7
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { useRecoilValue } from 'recoil';
44
import { Activity } from '@/activities/types/Activity';
55
import { ActivityTarget } from '@/activities/types/ActivityTarget';
66
import { ActivityTargetWithTargetRecord } from '@/activities/types/ActivityTargetObject';
7-
import { useObjectMetadataItemOnly } from '@/object-metadata/hooks/useObjectMetadataItemOnly';
87
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
98
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
109
import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordFromCache';
@@ -16,13 +15,8 @@ export const useActivityTargetObjectRecords = (activity: Activity) => {
1615

1716
const activityTargets = activity.activityTargets ?? [];
1817

19-
const { objectMetadataItem: objectMetadataItemActivityTarget } =
20-
useObjectMetadataItemOnly({
21-
objectNameSingular: CoreObjectNameSingular.ActivityTarget,
22-
});
23-
2418
const getRecordFromCache = useGetRecordFromCache({
25-
objectMetadataItem: objectMetadataItemActivityTarget,
19+
objectNameSingular: CoreObjectNameSingular.ActivityTarget,
2620
});
2721

2822
const apolloClient = useApolloClient();

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { ActivityTarget } from '@/activities/types/ActivityTarget';
77
import { ActivityTargetableObject } from '@/activities/types/ActivityTargetableEntity';
88
import { makeActivityTargetsToCreateFromTargetableObjects } from '@/activities/utils/getActivityTargetsToCreateFromTargetableObjects';
99
import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState';
10-
import { useObjectMetadataItemOnly } from '@/object-metadata/hooks/useObjectMetadataItemOnly';
10+
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
1111
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
1212
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
1313
import { useCreateManyRecordsInCache } from '@/object-record/cache/hooks/useCreateManyRecordsInCache';
@@ -38,12 +38,12 @@ export const useCreateActivityInCache = () => {
3838
});
3939

4040
const { objectMetadataItem: objectMetadataItemActivity } =
41-
useObjectMetadataItemOnly({
41+
useObjectMetadataItem({
4242
objectNameSingular: CoreObjectNameSingular.Activity,
4343
});
4444

4545
const { objectMetadataItem: objectMetadataItemActivityTarget } =
46-
useObjectMetadataItemOnly({
46+
useObjectMetadataItem({
4747
objectNameSingular: CoreObjectNameSingular.ActivityTarget,
4848
});
4949

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { FIND_MANY_ACTIVITIES_QUERY_KEY } from '@/activities/query-keys/FindMany
44
import { Activity } from '@/activities/types/Activity';
55
import { ActivityTarget } from '@/activities/types/ActivityTarget';
66
import { ActivityTargetableObject } from '@/activities/types/ActivityTargetableEntity';
7-
import { useObjectMetadataItemOnly } from '@/object-metadata/hooks/useObjectMetadataItemOnly';
7+
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
88
import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems';
99
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
1010
import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordFromCache';
@@ -16,12 +16,12 @@ import { isDefined } from '~/utils/isDefined';
1616

1717
export const usePrepareFindManyActivitiesQuery = () => {
1818
const { objectMetadataItem: objectMetadataItemActivity } =
19-
useObjectMetadataItemOnly({
19+
useObjectMetadataItem({
2020
objectNameSingular: CoreObjectNameSingular.Activity,
2121
});
2222

2323
const getActivityFromCache = useGetRecordFromCache({
24-
objectMetadataItem: objectMetadataItemActivity,
24+
objectNameSingular: CoreObjectNameSingular.Activity,
2525
});
2626

2727
const cache = useApolloClient().cache;

packages/twenty-front/src/modules/activities/inline-cell/components/ActivityTargetInlineCellEditMode.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { ActivityTarget } from '@/activities/types/ActivityTarget';
1010
import { ActivityTargetWithTargetRecord } from '@/activities/types/ActivityTargetObject';
1111
import { getActivityTargetObjectFieldIdName } from '@/activities/utils/getActivityTargetObjectFieldIdName';
1212
import { getActivityTargetObjectFieldName } from '@/activities/utils/getActivityTargetObjectFieldName';
13-
import { useObjectMetadataItemOnly } from '@/object-metadata/hooks/useObjectMetadataItemOnly';
13+
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
1414
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
1515
import { useCreateManyRecordsInCache } from '@/object-record/cache/hooks/useCreateManyRecordsInCache';
1616
import { useCreateManyRecords } from '@/object-record/hooks/useCreateManyRecords';
@@ -61,7 +61,7 @@ export const ActivityTargetInlineCellEditMode = ({
6161
const { upsertActivity } = useUpsertActivity();
6262

6363
const { objectMetadataItem: objectMetadataItemActivityTarget } =
64-
useObjectMetadataItemOnly({
64+
useObjectMetadataItem({
6565
objectNameSingular: CoreObjectNameSingular.ActivityTarget,
6666
});
6767

packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useGetObjectOrderByField.test.ts

-21
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { ReactNode } from 'react';
2+
import { MockedProvider } from '@apollo/client/testing';
3+
import { renderHook } from '@testing-library/react';
4+
import { RecoilRoot } from 'recoil';
5+
6+
import { useGetObjectOrderByField } from '@/object-metadata/hooks/useGetObjectOrderByField';
7+
8+
const Wrapper = ({ children }: { children: ReactNode }) => (
9+
<RecoilRoot>
10+
<MockedProvider addTypename={false}>{children}</MockedProvider>
11+
</RecoilRoot>
12+
);
13+
14+
describe('useGetObjectOrderByField', () => {
15+
it('should work as expected', () => {
16+
const { result } = renderHook(
17+
() => {
18+
const { getObjectOrderByField } = useGetObjectOrderByField({
19+
objectNameSingular: 'person',
20+
});
21+
22+
return getObjectOrderByField('AscNullsLast');
23+
},
24+
{
25+
wrapper: Wrapper,
26+
},
27+
);
28+
29+
expect(result.current).toEqual({
30+
name: { firstName: 'AscNullsLast', lastName: 'AscNullsLast' },
31+
});
32+
});
33+
});

packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useMapToObjectRecordIdentifier.test.tsx

+7-9
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,19 @@ import { renderHook } from '@testing-library/react';
22
import { RecoilRoot } from 'recoil';
33

44
import { useMapToObjectRecordIdentifier } from '@/object-metadata/hooks/useMapToObjectRecordIdentifier';
5-
import { getObjectMetadataItemsMock } from '@/object-metadata/utils/getObjectMetadataItemsMock';
6-
7-
const mockObjectMetadataItems = getObjectMetadataItemsMock();
85

96
describe('useMapToObjectRecordIdentifier', () => {
107
it('should work as expected', async () => {
118
const { result } = renderHook(
129
() => {
13-
const objectMetadataItem = mockObjectMetadataItems.find(
14-
(item) => item.nameSingular === 'person',
15-
)!;
10+
const { mapToObjectRecordIdentifier } = useMapToObjectRecordIdentifier({
11+
objectNameSingular: 'person',
12+
});
1613

17-
return useMapToObjectRecordIdentifier({
18-
objectMetadataItem,
19-
})({ id: 'id', name: { firstName: 'Sheldon', lastName: 'Cooper' } });
14+
return mapToObjectRecordIdentifier({
15+
id: 'id',
16+
name: { firstName: 'Sheldon', lastName: 'Cooper' },
17+
});
2018
},
2119
{
2220
wrapper: RecoilRoot,

packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useObjectMetadataItem.test.tsx

+2-32
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ const Wrapper = ({ children }: { children: ReactNode }) => (
1111
</RecoilRoot>
1212
);
1313

14+
// Split into tests for each new hook
1415
describe('useObjectMetadataItem', () => {
1516
it('should return correct properties', async () => {
1617
const { result } = renderHook(
@@ -20,39 +21,8 @@ describe('useObjectMetadataItem', () => {
2021
},
2122
);
2223

23-
const {
24-
basePathToShowPage,
25-
objectMetadataItem,
26-
labelIdentifierFieldMetadata,
27-
getRecordFromCache,
28-
findManyRecordsQuery,
29-
findOneRecordQuery,
30-
createOneRecordMutation,
31-
updateOneRecordMutation,
32-
deleteOneRecordMutation,
33-
executeQuickActionOnOneRecordMutation,
34-
createManyRecordsMutation,
35-
deleteManyRecordsMutation,
36-
mapToObjectRecordIdentifier,
37-
getObjectOrderByField,
38-
} = result.current;
24+
const { objectMetadataItem } = result.current;
3925

40-
expect(labelIdentifierFieldMetadata).toBeUndefined();
41-
expect(basePathToShowPage).toBe('/object/opportunity/');
4226
expect(objectMetadataItem.id).toBe('20202020-cae9-4ff4-9579-f7d9fe44c937');
43-
expect(typeof getRecordFromCache).toBe('function');
44-
expect(typeof mapToObjectRecordIdentifier).toBe('function');
45-
expect(typeof getObjectOrderByField).toBe('function');
46-
expect(findManyRecordsQuery).toHaveProperty('kind', 'Document');
47-
expect(findOneRecordQuery).toHaveProperty('kind', 'Document');
48-
expect(createOneRecordMutation).toHaveProperty('kind', 'Document');
49-
expect(updateOneRecordMutation).toHaveProperty('kind', 'Document');
50-
expect(deleteOneRecordMutation).toHaveProperty('kind', 'Document');
51-
expect(executeQuickActionOnOneRecordMutation).toHaveProperty(
52-
'kind',
53-
'Document',
54-
);
55-
expect(createManyRecordsMutation).toHaveProperty('kind', 'Document');
56-
expect(deleteManyRecordsMutation).toHaveProperty('kind', 'Document');
5727
});
5828
});

packages/twenty-front/src/modules/object-metadata/hooks/useCreateOneObjectMetadataItem.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { ApolloClient, useApolloClient, useMutation } from '@apollo/client';
22
import { getOperationName } from '@apollo/client/utilities';
33

4-
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
54
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
5+
import { useFindManyRecordsQuery } from '@/object-record/hooks/useFindManyRecordsQuery';
66
import {
77
CreateObjectInput,
88
CreateOneObjectMetadataItemMutation,
@@ -17,7 +17,8 @@ import { useApolloMetadataClient } from './useApolloMetadataClient';
1717
export const useCreateOneObjectMetadataItem = () => {
1818
const apolloMetadataClient = useApolloMetadataClient();
1919
const apolloClient = useApolloClient();
20-
const { findManyRecordsQuery } = useObjectMetadataItem({
20+
21+
const { findManyRecordsQuery } = useFindManyRecordsQuery({
2122
objectNameSingular: CoreObjectNameSingular.View,
2223
});
2324

Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
1-
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
1+
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
22
import { OrderBy } from '@/object-metadata/types/OrderBy';
33
import { OrderByField } from '@/object-metadata/types/OrderByField';
4-
import { getObjectOrderByField } from '@/object-metadata/utils/getObjectOrderByField';
4+
import { getOrderByFieldForObjectMetadataItem } from '@/object-metadata/utils/getObjectOrderByField';
55

66
export const useGetObjectOrderByField = ({
7-
objectMetadataItem,
7+
objectNameSingular,
88
}: {
9-
objectMetadataItem: ObjectMetadataItem;
9+
objectNameSingular: string;
1010
}) => {
11-
return (orderBy: OrderBy): OrderByField => {
12-
return getObjectOrderByField(objectMetadataItem, orderBy);
11+
const { objectMetadataItem } = useObjectMetadataItem({
12+
objectNameSingular,
13+
});
14+
15+
const getObjectOrderByField = (orderBy: OrderBy): OrderByField => {
16+
return getOrderByFieldForObjectMetadataItem(objectMetadataItem, orderBy);
1317
};
18+
19+
return { getObjectOrderByField };
1420
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
2+
import { getLabelIdentifierFieldMetadataItem } from '@/object-metadata/utils/getLabelIdentifierFieldMetadataItem';
3+
4+
export const useLabelIdentifierFieldMetadataItem = ({
5+
objectNameSingular,
6+
}: {
7+
objectNameSingular: string;
8+
}) => {
9+
const { objectMetadataItem } = useObjectMetadataItem({
10+
objectNameSingular,
11+
});
12+
13+
const labelIdentifierFieldMetadataItem =
14+
getLabelIdentifierFieldMetadataItem(objectMetadataItem);
15+
16+
return { labelIdentifierFieldMetadataItem };
17+
};
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,19 @@
1-
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
1+
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
22
import { getObjectRecordIdentifier } from '@/object-metadata/utils/getObjectRecordIdentifier';
33
import { ObjectRecord } from '@/object-record/types/ObjectRecord';
44

5-
export const useMapToObjectRecordIdentifier =
6-
({ objectMetadataItem }: { objectMetadataItem: ObjectMetadataItem }) =>
7-
(record: ObjectRecord) =>
8-
getObjectRecordIdentifier({ objectMetadataItem, record });
5+
export const useMapToObjectRecordIdentifier = ({
6+
objectNameSingular,
7+
}: {
8+
objectNameSingular: string;
9+
}) => {
10+
const { objectMetadataItem } = useObjectMetadataItem({
11+
objectNameSingular,
12+
});
13+
14+
const mapToObjectRecordIdentifier = (record: ObjectRecord) => {
15+
return getObjectRecordIdentifier({ objectMetadataItem, record });
16+
};
17+
18+
return { mapToObjectRecordIdentifier };
19+
};

0 commit comments

Comments
 (0)