From caddc4dff9b4f06fae527e95c25021c057052ed2 Mon Sep 17 00:00:00 2001 From: simonguo Date: Tue, 9 Apr 2024 11:34:16 +0800 Subject: [PATCH] feat: add support for `label` method --- README.md | 18 ++++++++++++++++++ src/MixedType.ts | 17 +++++++++++++++-- test/MixedTypeSpec.js | 18 +++++++++++++++--- 3 files changed, 48 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 41d5f79..cca6b31 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ Schema for data modeling & validation - [`when(condition: (schemaSpec: SchemaDeclaration) => Type)`](#whencondition-schemaspec-schemadeclarationdatatype-errormsgtype--type) - [`check(value: ValueType, data?: DataType):CheckResult`](#checkvalue-valuetype-data-datatypecheckresult) - [`checkAsync(value: ValueType, data?: DataType):Promise`](#checkasyncvalue-valuetype-data-datatypepromisecheckresult) + - [`label(label: string)`](#labellabel-string) - [StringType(errorMessage?: string)](#stringtypeerrormessage-string) - [`isEmail(errorMessage?: string)`](#isemailerrormessage-string) - [`isURL(errorMessage?: string)`](#isurlerrormessage-string) @@ -515,6 +516,23 @@ type.checkAsync(1).then(checkResult => { }); ``` +#### `label(label: string)` + +Overrides the key name in error messages. + +```js +MixedType().label('Username'); +``` + +Eg: + +```js +SchemaModel({ + first_name: StringType().label('First name'), + age: NumberType().label('Age') +}); +``` + ### StringType(errorMessage?: string) Define a string type. Supports all the same methods as [MixedType](#mixedtype). diff --git a/src/MixedType.ts b/src/MixedType.ts index d559d5c..9d146cf 100644 --- a/src/MixedType.ts +++ b/src/MixedType.ts @@ -24,6 +24,7 @@ export class MixedType[] = []; protected priorityRules: RuleType[] = []; + protected fieldLabel?: string; schemaSpec: SchemaDeclaration; value: any; @@ -43,7 +44,9 @@ export class MixedType() { diff --git a/test/MixedTypeSpec.js b/test/MixedTypeSpec.js index 84fd684..419d965 100644 --- a/test/MixedTypeSpec.js +++ b/test/MixedTypeSpec.js @@ -1,6 +1,6 @@ -/* eslint-disable @typescript-eslint/no-var-requires */ -const chai = require('chai'); -const schema = require('../src'); +import chai, { expect } from 'chai'; +import * as schema from '../src'; + chai.should(); const { StringType, SchemaModel, NumberType, ArrayType, MixedType } = schema; @@ -460,4 +460,16 @@ describe('#MixedType', () => { } }, 100); }); + + it('Should use label to override the field name in the error message', () => { + const schema = SchemaModel({ + first_name: StringType().label('First Name').isRequired(), + age: NumberType().label('Age').isRequired() + }); + + expect(schema.check({})).to.deep.equal({ + first_name: { hasError: true, errorMessage: 'First Name is a required field' }, + age: { hasError: true, errorMessage: 'Age is a required field' } + }); + }); });