UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

140 lines 4.32 kB
import React, { useCallback, useMemo } from 'react'; import StringField from "../String/index.js"; import useTranslation from "../../hooks/useTranslation.js"; import { FormError } from "../../utils/index.js"; export const namePattern = '^(?!.*[-\\s]{2})[\\p{L}]([\\p{L}\\p{M}\\p{Zs}-]*[\\p{L}])?$'; export const companyPattern = '^(?!.*[-\\s]{2})(?!.*[\\.]{2})[\\p{L}\\p{N}]([\\p{L}\\p{N}\\p{P}\\p{Zs}.]*[\\p{L}\\p{N}])?$'; function Name(props) { const { onBlurValidator: onBlurValidatorProp, minLength: minLengthProp = 1, ...otherProps } = props; const nameValidator = useCallback(value => { if (value !== undefined) { if (value === '') { return; } if (!new RegExp(namePattern, 'u').test(value)) { return new FormError('Field.errorPattern'); } } }, []); const onBlurValidator = useMemo(() => { if (onBlurValidatorProp === false) { return undefined; } if (typeof onBlurValidatorProp === 'function') { return (value, args) => { const coreResult = nameValidator(value); if (coreResult instanceof Error) { return coreResult; } return onBlurValidatorProp(value, args); }; } return nameValidator; }, [onBlurValidatorProp, nameValidator]); const StringFieldProps = { trim: true, autoComplete: 'name', minLength: minLengthProp, ...otherProps, onBlurValidator, exportValidators: { nameValidator } }; return React.createElement(StringField, StringFieldProps); } Name._supportsSpacingProps = true; Name.First = function FirstName(props) { const translations = useTranslation().FirstName; const errorMessages = useMemo(() => { return { 'Field.errorRequired': translations.errorRequired, 'Field.errorPattern': translations.errorPattern, ...props.errorMessages }; }, [props.errorMessages, translations.errorPattern, translations.errorRequired]); const nameProps = { label: translations.label, autoComplete: 'given-name', ...props, errorMessages }; return React.createElement(Name, nameProps); }; Name.First['_supportsSpacingProps'] = true; Name.Last = function LastName(props) { const translations = useTranslation().LastName; const errorMessages = useMemo(() => { return { 'Field.errorRequired': translations.errorRequired, 'Field.errorPattern': translations.errorPattern, ...props.errorMessages }; }, [props.errorMessages, translations.errorPattern, translations.errorRequired]); const nameProps = { label: translations.label, autoComplete: 'family-name', ...props, errorMessages }; return React.createElement(Name, nameProps); }; Name.Last['_supportsSpacingProps'] = true; Name.Company = function CompanyName(props) { const translations = useTranslation().CompanyName; const { onBlurValidator: onBlurValidatorProp, minLength: minLengthProp = 3, ...otherProps } = props; const errorMessages = useMemo(() => { return { 'Field.errorRequired': translations.errorRequired, ...props.errorMessages }; }, [props.errorMessages, translations.errorRequired]); const companyValidator = useCallback(value => { if (value !== undefined) { if (value === '') { return; } if (!new RegExp(companyPattern, 'u').test(value)) { return new FormError('Field.errorPattern'); } } }, []); const onBlurValidator = useMemo(() => { if (onBlurValidatorProp === false) { return undefined; } if (typeof onBlurValidatorProp === 'function') { return (value, args) => { const coreResult = companyValidator(value); if (coreResult instanceof Error) { return coreResult; } return onBlurValidatorProp(value, args); }; } return companyValidator; }, [onBlurValidatorProp, companyValidator]); const StringFieldProps = { label: translations.label, autoComplete: 'organization', minLength: minLengthProp, ...otherProps, errorMessages, onBlurValidator, exportValidators: { companyValidator } }; return React.createElement(StringField, StringFieldProps); }; Name.Company['_supportsSpacingProps'] = true; export default Name; //# sourceMappingURL=Name.js.map