next-demo/next-app/src/demoData/schemas/validationShema.ts (93 lines of code) (raw):

import { Metadata } from '@epam/uui-core'; import { PersonDetails } from '../models/types'; const fullNameRegExp = /^[A-Za-z][A-Za-z\'\-]+([\ A-Za-z][A-Za-z\'\-]+)*/; export const personDetailsSchema = ( value: PersonDetails ): Metadata<PersonDetails> => ({ props: { personalInfo: { props: { fullName: { isRequired: true, validators: [ (value: string = '') => [ !fullNameRegExp.exec(value)?.length && 'Please type correct name!', ], ], }, birthdayDate: { isRequired: true }, }, }, location: { props: { country: { isRequired: true }, city: { isRequired: true, isDisabled: !value.location?.country, }, }, }, primaryInfo: { isDisabled: value.role !== 'Admin', }, education: { props: { institution: { isRequired: false }, faculty: { isRequired: false }, department: { isRequired: false }, degree: { isRequired: false }, speciality: { isRequired: false }, graduationYear: { isRequired: false }, }, }, languageInfo: { all: { props: { language: { isRequired: false }, speakingLevel: { isRequired: false }, writingLevel: { isRequired: false }, }, }, }, travelVisas: { props: { visas: { all: { props: { country: { isRequired: false }, term: { props: { from: { isRequired: false, }, to: { isRequired: false, }, }, }, }, }, }, scans: { all: { props: { progress: { isRequired: false }, id: { isRequired: false }, name: { isRequired: false }, size: { isRequired: false }, path: { isRequired: false }, type: { isRequired: false }, extension: { isRequired: false }, }, }, }, }, }, otherInfo: { props: { tShirtSize: { isRequired: false }, }, }, }, });