[fix] Some fixes (#17674)
- fixes [sentry](https://twenty-v7.sentry.io/issues/7239112455/?environment=prod&environment=prod-eu&project=4507072563183616&query=anything%20else&referrer=issue-stream&sort=date) - adapt useClearField logic to morph relations - adapt useClearField logic to one-to-many relations (early return) - fix creation of objects without "name" field from specific parts of the product (which involved a "name" field)
This commit is contained in:
+32
-1
@@ -6,6 +6,8 @@ import { recordStoreFamilySelector } from '@/object-record/record-store/states/s
|
||||
import { generateEmptyFieldValue } from '@/object-record/utils/generateEmptyFieldValue';
|
||||
|
||||
import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext';
|
||||
import { getForeignKeyNameFromRelationFieldName } from '@/object-record/utils/getForeignKeyNameFromRelationFieldName';
|
||||
import { FieldMetadataType, RelationType } from 'twenty-shared/types';
|
||||
|
||||
export const useClearField = () => {
|
||||
const {
|
||||
@@ -37,6 +39,19 @@ export const useClearField = () => {
|
||||
throw new Error('Field metadata item cannot be found');
|
||||
}
|
||||
|
||||
const isRelation =
|
||||
foundFieldMetadataItem.type === FieldMetadataType.RELATION ||
|
||||
foundFieldMetadataItem.type === FieldMetadataType.MORPH_RELATION;
|
||||
|
||||
const shouldSkipClearingBecauseInvolvesMultipleRecords =
|
||||
isRelation &&
|
||||
foundFieldMetadataItem.settings?.relationType ===
|
||||
RelationType.ONE_TO_MANY;
|
||||
|
||||
if (shouldSkipClearingBecauseInvolvesMultipleRecords) {
|
||||
return;
|
||||
}
|
||||
|
||||
const fieldName = fieldDefinition.metadata.fieldName;
|
||||
|
||||
const emptyFieldValue = generateEmptyFieldValue({
|
||||
@@ -48,11 +63,27 @@ export const useClearField = () => {
|
||||
emptyFieldValue,
|
||||
);
|
||||
|
||||
const isManyToOneRelation =
|
||||
isRelation &&
|
||||
foundFieldMetadataItem.settings?.relationType ===
|
||||
RelationType.MANY_TO_ONE;
|
||||
|
||||
const updateFieldName = isManyToOneRelation
|
||||
? getForeignKeyNameFromRelationFieldName(fieldName)
|
||||
: fieldName;
|
||||
|
||||
if (isManyToOneRelation) {
|
||||
set(
|
||||
recordStoreFamilySelector({ recordId, fieldName: updateFieldName }),
|
||||
emptyFieldValue,
|
||||
);
|
||||
}
|
||||
|
||||
updateRecord?.({
|
||||
variables: {
|
||||
where: { id: recordId },
|
||||
updateOneRecordInput: {
|
||||
[fieldName]: emptyFieldValue,
|
||||
[updateFieldName]: emptyFieldValue,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { getLabelIdentifierFieldMetadataItem } from '@/object-metadata/utils/getLabelIdentifierFieldMetadataItem';
|
||||
import { FieldMetadataType } from 'twenty-shared/types';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
type BuildRecordLabelPayloadArgs = {
|
||||
id: string;
|
||||
@@ -16,17 +17,27 @@ export const buildRecordLabelPayload = ({
|
||||
const labelIdentifierField =
|
||||
getLabelIdentifierFieldMetadataItem(objectMetadataItem);
|
||||
|
||||
if (labelIdentifierField?.type === FieldMetadataType.FULL_NAME) {
|
||||
if (
|
||||
!isDefined(labelIdentifierField) ||
|
||||
(labelIdentifierField.type !== FieldMetadataType.TEXT &&
|
||||
labelIdentifierField.type !== FieldMetadataType.FULL_NAME)
|
||||
) {
|
||||
return { id };
|
||||
}
|
||||
|
||||
const fieldName = labelIdentifierField.name;
|
||||
|
||||
if (labelIdentifierField.type === FieldMetadataType.FULL_NAME) {
|
||||
const words = searchInput?.split(' ') ?? [];
|
||||
const hasMultipleWords = words.length > 1;
|
||||
|
||||
return {
|
||||
id,
|
||||
name: hasMultipleWords
|
||||
[fieldName]: hasMultipleWords
|
||||
? { firstName: words[0], lastName: words.slice(1).join(' ') }
|
||||
: { firstName: searchInput ?? '', lastName: '' },
|
||||
};
|
||||
}
|
||||
|
||||
return { id, name: searchInput ?? '' };
|
||||
return { id, [fieldName]: searchInput ?? '' };
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user