97eff774bd
### 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>
49 lines
1.3 KiB
TypeScript
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,
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|