Files
twenty/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata-validation.service.ts
T
gitstart-app[bot] 97eff774bd Allow input and display of floats for Number fields (#7340)
### Description

- We added a decimal field for a Number Field type in the settings
- We updated the Number Field type create a form with decimals input
- We are not implementing the dropdown present on the Figma because it
seems not related

### Demo


<https://www.loom.com/share/18a8d4b712a14f6d8b66806764f8467f?sid=3fc79b46-ae32-46e3-8635-d0eee02e53b2>

Fixes #6987

---------

Co-authored-by: gitstart-twenty <gitstart-twenty@users.noreply.github.com>
Co-authored-by: Marie Stoppa <marie.stoppa@essec.edu>
2024-10-04 10:45:25 +02:00

49 lines
1.3 KiB
TypeScript

import { Injectable } from '@nestjs/common';
import { FieldMetadataSettings } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-settings.interface';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import {
FieldMetadataException,
FieldMetadataExceptionCode,
} from 'src/engine/metadata-modules/field-metadata/field-metadata.exception';
@Injectable()
export class FieldMetadataValidationService<
T extends FieldMetadataType | 'default' = 'default',
> {
constructor() {}
validateSettingsOrThrow({
fieldType,
settings,
}: {
fieldType: FieldMetadataType;
settings: FieldMetadataSettings<T>;
}) {
switch (fieldType) {
case FieldMetadataType.NUMBER:
this.validateNumberSettings(settings);
break;
default:
break;
}
}
private validateNumberSettings(settings: FieldMetadataSettings<T>) {
if ('decimals' in settings) {
const { decimals } = settings;
if (
decimals !== undefined &&
(decimals < 0 || !Number.isInteger(decimals))
) {
throw new FieldMetadataException(
`Decimals value "${decimals}" must be a positive integer`,
FieldMetadataExceptionCode.INVALID_FIELD_INPUT,
);
}
}
}
}