Default address country 🗺️ & Phone prefix ☎️ (#8614)

# Default address 🗺️ country & Phone ☎️ country

We add the ability to add a Default address country and a default Phone
country for fields in the Data model.

fix #8081

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
Guillim
2024-12-02 13:34:05 +01:00
committed by GitHub
parent 39a9cd0d51
commit 0527bc296e
28 changed files with 617 additions and 108 deletions

View File

@ -23,7 +23,7 @@ enum ValueType {
NUMBER = 'number',
}
class SettingsValidation {
class NumberSettingsValidation {
@IsOptional()
@IsInt()
@Min(0)
@ -32,7 +32,9 @@ class SettingsValidation {
@IsOptional()
@IsEnum(ValueType)
type?: 'percentage' | 'number';
}
class TextSettingsValidation {
@IsOptional()
@IsInt()
@Min(0)
@ -55,17 +57,19 @@ export class FieldMetadataValidationService<
}) {
switch (fieldType) {
case FieldMetadataType.NUMBER:
await this.validateSettings(NumberSettingsValidation, settings);
break;
case FieldMetadataType.TEXT:
await this.validateSettings(settings);
await this.validateSettings(TextSettingsValidation, settings);
break;
default:
break;
}
}
private async validateSettings(settings: any) {
private async validateSettings(validator: any, settings: any) {
try {
const settingsInstance = plainToInstance(SettingsValidation, settings);
const settingsInstance = plainToInstance(validator, settings);
await validateOrReject(settingsInstance);
} catch (error) {

View File

@ -0,0 +1,59 @@
import { FieldMetadataSettings } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-settings.interface';
import { FieldMetadataValidationService } from 'src/engine/metadata-modules/field-metadata/field-metadata-validation.service';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { FieldMetadataException } from 'src/engine/metadata-modules/field-metadata/field-metadata.exception';
describe('FieldMetadataValidationService', () => {
let service: FieldMetadataValidationService;
beforeAll(() => {
service = new FieldMetadataValidationService();
});
it('should validate NUMBER settings successfully', async () => {
const settings = { decimals: 2, type: 'number' } as FieldMetadataSettings;
await expect(
service.validateSettingsOrThrow({
fieldType: FieldMetadataType.NUMBER,
settings,
}),
).resolves.not.toThrow();
});
it('should throw an error for invalid NUMBER settings', async () => {
const settings = { type: 'invalidType' } as FieldMetadataSettings;
await expect(
service.validateSettingsOrThrow({
fieldType: FieldMetadataType.NUMBER,
settings,
}),
).rejects.toThrow(FieldMetadataException);
});
it('should validate TEXT settings successfully', async () => {
const settings = { displayedMaxRows: 10 } as FieldMetadataSettings;
await expect(
service.validateSettingsOrThrow({
fieldType: FieldMetadataType.TEXT,
settings,
}),
).resolves.not.toThrow();
});
it('should throw an error for invalid TEXT settings', async () => {
const settings = {
displayedMaxRows: 'NotANumber',
} as FieldMetadataSettings;
await expect(
service.validateSettingsOrThrow({
fieldType: FieldMetadataType.TEXT,
settings,
}),
).rejects.toThrow(FieldMetadataException);
});
});