Files
twenty/packages/twenty-server/src/engine/metadata-modules/field-metadata/utils/is-valid-unique-input.util.ts
T
2025-11-10 22:11:52 +01:00

39 lines
1.3 KiB
TypeScript

import {
compositeTypeDefinitions,
type FieldMetadataType,
} from 'twenty-shared/types';
import { type FieldMetadataDefaultValue } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-default-value.interface';
import { generateDefaultValue } from 'src/engine/metadata-modules/field-metadata/utils/generate-default-value';
import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util';
export const isValidUniqueFieldDefaultValueCombination = ({
defaultValue,
isUnique,
type,
}: {
defaultValue: FieldMetadataDefaultValue;
isUnique: boolean;
type: FieldMetadataType;
}) => {
if (!isUnique) return true;
const defaultDefaultValue = generateDefaultValue(type);
if (!isCompositeFieldMetadataType(type))
return defaultValue === defaultDefaultValue;
const doUniquePropertiesHaveDefaultValues =
compositeTypeDefinitions
.get(type)
?.properties.filter((property) => property.isIncludedInUniqueConstraint)
.every(
({ name }) =>
(defaultValue as Record<string, string | null>)?.[name] ===
(defaultDefaultValue as Record<string, string | null>)?.[name],
) ?? false;
return doUniquePropertiesHaveDefaultValues;
};