diff --git a/packages/twenty-front/src/modules/object-record/multiple-objects/hooks/useGenerateCombinedFindManyRecordsQuery.ts b/packages/twenty-front/src/modules/object-record/multiple-objects/hooks/useGenerateCombinedFindManyRecordsQuery.ts index 0dba4ce04..076e89ed5 100644 --- a/packages/twenty-front/src/modules/object-record/multiple-objects/hooks/useGenerateCombinedFindManyRecordsQuery.ts +++ b/packages/twenty-front/src/modules/object-record/multiple-objects/hooks/useGenerateCombinedFindManyRecordsQuery.ts @@ -3,6 +3,7 @@ import { isUndefined } from '@sniptt/guards'; import { useRecoilValue } from 'recoil'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; +import { getObjectPermissionsForObject } from '@/object-metadata/utils/getObjectPermissionsForObject'; import { mapObjectMetadataToGraphQLQuery } from '@/object-metadata/utils/mapObjectMetadataToGraphQLQuery'; import { RecordGqlOperationSignature } from '@/object-record/graphql/types/RecordGqlOperationSignature'; import { generateDepthOneRecordGqlFields } from '@/object-record/graphql/utils/generateDepthOneRecordGqlFields'; @@ -23,40 +24,8 @@ export const useGenerateCombinedFindManyRecordsQuery = ({ return null; } - const filterPerMetadataItemArray = operationSignatures - .map( - ({ objectNameSingular }) => - `$filter${capitalize(objectNameSingular)}: ${capitalize( - objectNameSingular, - )}FilterInput`, - ) - .join(', '); - - const orderByPerMetadataItemArray = operationSignatures - .map( - ({ objectNameSingular }) => - `$orderBy${capitalize(objectNameSingular)}: [${capitalize( - objectNameSingular, - )}OrderByInput]`, - ) - .join(', '); - - const cursorFilteringPerMetadataItemArray = operationSignatures - .map( - ({ objectNameSingular }) => - `$after${capitalize(objectNameSingular)}: String, $before${capitalize(objectNameSingular)}: String, $first${capitalize(objectNameSingular)}: Int, $last${capitalize(objectNameSingular)}: Int`, - ) - .join(', '); - - const limitPerMetadataItemArray = operationSignatures - .map( - ({ objectNameSingular }) => - `$limit${capitalize(objectNameSingular)}: Int`, - ) - .join(', '); - - const queryOperationSignatureWithObjectMetadataItemArray = - operationSignatures.map((operationSignature) => { + const queryOperationSignatureWithObjectMetadataItemArray = operationSignatures + .map((operationSignature) => { const objectMetadataItem = objectMetadataItems.find( (objectMetadataItem) => objectMetadataItem.nameSingular === @@ -70,7 +39,50 @@ export const useGenerateCombinedFindManyRecordsQuery = ({ } return { operationSignature, objectMetadataItem }; - }); + }) + .filter( + ({ objectMetadataItem }) => + getObjectPermissionsForObject( + objectPermissionsByObjectMetadataId, + objectMetadataItem.id, + )?.canReadObjectRecords, + ); + + const filterPerMetadataItemArray = + queryOperationSignatureWithObjectMetadataItemArray + .map( + ({ objectMetadataItem }) => + `$filter${capitalize(objectMetadataItem.nameSingular)}: ${capitalize( + objectMetadataItem.nameSingular, + )}FilterInput`, + ) + .join(', '); + + const orderByPerMetadataItemArray = + queryOperationSignatureWithObjectMetadataItemArray + .map( + ({ objectMetadataItem }) => + `$orderBy${capitalize(objectMetadataItem.nameSingular)}: [${capitalize( + objectMetadataItem.nameSingular, + )}OrderByInput]`, + ) + .join(', '); + + const cursorFilteringPerMetadataItemArray = + queryOperationSignatureWithObjectMetadataItemArray + .map( + ({ objectMetadataItem }) => + `$after${capitalize(objectMetadataItem.nameSingular)}: String, $before${capitalize(objectMetadataItem.nameSingular)}: String, $first${capitalize(objectMetadataItem.nameSingular)}: Int, $last${capitalize(objectMetadataItem.nameSingular)}: Int`, + ) + .join(', '); + + const limitPerMetadataItemArray = + queryOperationSignatureWithObjectMetadataItemArray + .map( + ({ objectMetadataItem }) => + `$limit${capitalize(objectMetadataItem.nameSingular)}: Int`, + ) + .join(', '); return gql` query CombinedFindManyRecords(