Closed lucasbordeau closed 2 weeks ago
Disclaimer: This comment was automatically generated with AI. It can give some useful hints as to where to look for, but sometimes it can also give very inaccurate answers so takes this with a pinch of salt :).
To refactor getRecordIdentifier
memoization at the object metadata items fetching level, follow these steps:
Locate Initialization Code: Identify where object metadata items are initialized. This is likely in a central initialization or configuration file.
Memoize getRecordIdentifier: Modify the initialization to memoize getRecordIdentifier
for each relation field type.
Update Usage: Ensure all usages of getRecordIdentifier
across the app utilize the memoized version.
Check objectMetadataItemsState
or similar state management files where object metadata items are fetched and initialized.
In the initialization file, add memoization logic:
import memoize from 'lodash/memoize';
import { getObjectRecordIdentifier } from '@/object-metadata/utils/getObjectRecordIdentifier';
const memoizedGetRecordIdentifier = memoize(getObjectRecordIdentifier);
// Initialize object metadata items with memoized function
const initializeObjectMetadataItems = (items) => {
return items.map(item => {
item.getRecordIdentifier = memoizedGetRecordIdentifier;
return item;
});
};
Ensure all components and hooks use the memoized version:
// Example in a component or hook
const recordIdentifier = objectMetadataItem.getRecordIdentifier(record);
This ensures getRecordIdentifier
is memoized and pre-computed for each relation field type at the initialization level.
/packages/twenty-front/src/modules/object-record/cache/utils/getRecordNodeFromRecord.ts /packages/twenty-front/src/modules/object-record/record-store/states/selectors/recordStoreIdentifierSelector.ts /packages/twenty-front/src/modules/object-metadata/components/ObjectMetadataItemsRelationPickerEffect.tsx /packages/twenty-front/src/modules/object-metadata/utils/mapObjectMetadataToGraphQLQuery.ts /packages/twenty-front/src/modules/apollo/optimistic-effect/utils/getRelationDefinition.ts /packages/twenty-front/src/modules/object-metadata/utils/getObjectRecordIdentifier.ts /packages/twenty-front/src/modules/object-record/cache/utils/getRecordFromCache.ts /packages/twenty-front/src/modules/object-record/cache/hooks/useGetRecordFromCache.ts /packages/twenty-front/src/modules/object-metadata/hooks/useMapToObjectRecordIdentifier.ts /packages/twenty-front/src/modules/object-record/record-index/hooks/useRecordBoardRecordGqlFields.ts
Scope & Context
We had to revert a refactor on getRecordIdentifier for each relation field type, because it didn't work everywhere.
Technical inputs
We should get the refactor done not a RecordTable level but for the whole app at the object metadata items initialization level.
That way we'll have a memoized and pre-computed function for each relation field.