Files
twenty/packages/twenty-front/src/modules/object-metadata/hooks/useFindManyObjectMetadataItems.ts
T
Marie ee19ee5119 [permissions] QA fixes (#13698)
In this PR

- Introduction of readableFields and updatableFields in
objectMetadataItem selector to ease filtering from a developer
experience perspective ( + to help developers think to do it). In
discussion @lucasbordeau @charlesBochet
- Remove non-updatable field from CSV import process (@etiennejouan)
- QA fix / Non-readable fields should not show on show page
- QA fix / It should not be offered to create a kanban view on a
non-readable field
- QA fix / It should not be offered to create view groups on a
non-readable field
- QA fix / Rating field should have a readonly mode

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
2025-08-07 18:21:59 +02:00

57 lines
1.7 KiB
TypeScript

import { useQuery } from '@apollo/client';
import { useMemo } from 'react';
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
import {
ObjectMetadataItemsQuery,
ObjectMetadataItemsQueryVariables,
} from '~/generated-metadata/graphql';
import { logError } from '~/utils/logError';
import { enrichObjectMetadataItemsWithPermissions } from '@/object-metadata/utils/enrichObjectMetadataItemsWithPermissions';
import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions';
import { FIND_MANY_OBJECT_METADATA_ITEMS } from '../graphql/queries';
import { mapPaginatedObjectMetadataItemsToObjectMetadataItems } from '../utils/mapPaginatedObjectMetadataItemsToObjectMetadataItems';
export const useFindManyObjectMetadataItems = ({
skip,
}: {
skip?: boolean;
} = {}) => {
const { enqueueErrorSnackBar } = useSnackBar();
const { objectPermissionsByObjectMetadataId } = useObjectPermissions();
const { data, loading, error, refetch } = useQuery<
ObjectMetadataItemsQuery,
ObjectMetadataItemsQueryVariables
>(FIND_MANY_OBJECT_METADATA_ITEMS, {
skip,
onError: (error) => {
logError('useFindManyObjectMetadataItems error : ' + error);
enqueueErrorSnackBar({
apolloError: error,
});
},
});
const objectMetadataItems = useMemo(() => {
const objectMetadataItemsArray =
mapPaginatedObjectMetadataItemsToObjectMetadataItems({
pagedObjectMetadataItems: data,
});
return enrichObjectMetadataItemsWithPermissions({
objectMetadataItems: objectMetadataItemsArray,
objectPermissionsByObjectMetadataId,
});
}, [data, objectPermissionsByObjectMetadataId]);
return {
objectMetadataItems,
loading,
error,
refetch,
};
};