add WorkspaceDuplicateCriteria decorator + update duplicate resolver logic (#10128)
## Context All objects have '...duplicates' resolver but only companies and people have duplicate criteria (hard coded constant). Gql schema and resolver should be created only if duplicate criteria exist. ## Solution - Add a new @WorkspaceDuplicateCriteria decorator at object level, defining duplicate criteria for given object. - Add a new duplicate criteria field in ObjectMetadata table - Update schema and resolver building logic - Update front requests for duplicate check (only for object with criteria defined) closes https://github.com/twentyhq/twenty/issues/9828
This commit is contained in:
@ -23,6 +23,7 @@ export const FIND_MANY_OBJECT_METADATA_ITEMS = gql`
|
||||
imageIdentifierFieldMetadataId
|
||||
shortcut
|
||||
isLabelSyncedWithName
|
||||
duplicateCriteria
|
||||
indexMetadatas(paging: { first: 100 }) {
|
||||
edges {
|
||||
node {
|
||||
|
||||
@ -17,6 +17,7 @@ export const useFindDuplicateRecords = <T extends ObjectRecord = ObjectRecord>({
|
||||
objectRecordIds = [],
|
||||
objectNameSingular,
|
||||
onCompleted,
|
||||
skip,
|
||||
}: ObjectMetadataItemIdentifier & {
|
||||
objectRecordIds: string[] | undefined;
|
||||
onCompleted?: (data: RecordGqlConnection[]) => void;
|
||||
@ -42,6 +43,7 @@ export const useFindDuplicateRecords = <T extends ObjectRecord = ObjectRecord>({
|
||||
useQuery<RecordGqlOperationFindDuplicatesResult>(
|
||||
findDuplicateRecordsQuery,
|
||||
{
|
||||
skip: !!skip,
|
||||
variables: {
|
||||
ids: objectRecordIds,
|
||||
},
|
||||
|
||||
@ -1,9 +1,11 @@
|
||||
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
|
||||
import { RecordChip } from '@/object-record/components/RecordChip';
|
||||
import { useFindDuplicateRecords } from '@/object-record/hooks/useFindDuplicateRecords';
|
||||
import { RecordDetailRecordsList } from '@/object-record/record-show/record-detail-section/components/RecordDetailRecordsList';
|
||||
import { RecordDetailRecordsListItem } from '@/object-record/record-show/record-detail-section/components/RecordDetailRecordsListItem';
|
||||
import { RecordDetailSection } from '@/object-record/record-show/record-detail-section/components/RecordDetailSection';
|
||||
import { RecordDetailSectionHeader } from '@/object-record/record-show/record-detail-section/components/RecordDetailSectionHeader';
|
||||
import { isDefined } from 'twenty-shared';
|
||||
|
||||
export const RecordDetailDuplicatesSection = ({
|
||||
objectRecordId,
|
||||
@ -12,9 +14,14 @@ export const RecordDetailDuplicatesSection = ({
|
||||
objectRecordId: string;
|
||||
objectNameSingular: string;
|
||||
}) => {
|
||||
const { objectMetadataItem } = useObjectMetadataItem({
|
||||
objectNameSingular,
|
||||
});
|
||||
|
||||
const { results: queryResults } = useFindDuplicateRecords({
|
||||
objectRecordIds: [objectRecordId],
|
||||
objectNameSingular,
|
||||
skip: !isDefined(objectMetadataItem.duplicateCriteria),
|
||||
});
|
||||
|
||||
if (!queryResults || !queryResults[0] || queryResults[0].length === 0)
|
||||
|
||||
Reference in New Issue
Block a user