@strapi/admin 5.34.0 → 5.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.js +4 -1
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.js.map +1 -1
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs +5 -2
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs.map +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.js +2 -0
- package/dist/admin/admin/src/components/NpsSurvey.js.map +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.mjs +2 -0
- package/dist/admin/admin/src/components/NpsSurvey.mjs.map +1 -1
- package/dist/admin/admin/src/components/SubNav.js +2 -2
- package/dist/admin/admin/src/components/SubNav.js.map +1 -1
- package/dist/admin/admin/src/components/SubNav.mjs +3 -3
- package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
- package/dist/admin/admin/src/constants/theme.js +2 -0
- package/dist/admin/admin/src/constants/theme.js.map +1 -1
- package/dist/admin/admin/src/constants/theme.mjs +2 -1
- package/dist/admin/admin/src/constants/theme.mjs.map +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.js +51 -11
- package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs +51 -11
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js +12 -3
- package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/ResetPassword.mjs +12 -3
- package/dist/admin/admin/src/pages/Auth/components/ResetPassword.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/utils/validation.js +12 -3
- package/dist/admin/admin/src/pages/Settings/pages/Users/utils/validation.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/utils/validation.mjs +12 -3
- package/dist/admin/admin/src/pages/Settings/pages/Users/utils/validation.mjs.map +1 -1
- package/dist/admin/admin/src/translations/ko.json.js +430 -96
- package/dist/admin/admin/src/translations/ko.json.js.map +1 -1
- package/dist/admin/admin/src/translations/ko.json.mjs +427 -97
- package/dist/admin/admin/src/translations/ko.json.mjs.map +1 -1
- package/dist/admin/index.js +3 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/src/constants/theme.d.ts +2 -1
- package/dist/admin/src/index.d.ts +1 -1
- package/package.json +7 -7
|
@@ -31,21 +31,30 @@ const RESET_PASSWORD_SCHEMA = yup.object().shape({
|
|
|
31
31
|
if (!value || typeof value !== 'string') return true; // validated elsewhere
|
|
32
32
|
const byteSize = getByteSize(value);
|
|
33
33
|
return byteSize <= 72;
|
|
34
|
-
}).
|
|
34
|
+
}).test('lowercase', {
|
|
35
35
|
message: {
|
|
36
36
|
id: 'components.Input.error.contain.lowercase',
|
|
37
37
|
defaultMessage: 'Password must contain at least 1 lowercase letter'
|
|
38
38
|
}
|
|
39
|
-
})
|
|
39
|
+
}, (value)=>{
|
|
40
|
+
if (!value) return true;
|
|
41
|
+
return /[a-z]/.test(value);
|
|
42
|
+
}).test('uppercase', {
|
|
40
43
|
message: {
|
|
41
44
|
id: 'components.Input.error.contain.uppercase',
|
|
42
45
|
defaultMessage: 'Password must contain at least 1 uppercase letter'
|
|
43
46
|
}
|
|
44
|
-
})
|
|
47
|
+
}, (value)=>{
|
|
48
|
+
if (!value) return true;
|
|
49
|
+
return /[A-Z]/.test(value);
|
|
50
|
+
}).test('number', {
|
|
45
51
|
message: {
|
|
46
52
|
id: 'components.Input.error.contain.number',
|
|
47
53
|
defaultMessage: 'Password must contain at least 1 number'
|
|
48
54
|
}
|
|
55
|
+
}, (value)=>{
|
|
56
|
+
if (!value) return true;
|
|
57
|
+
return /\d/.test(value);
|
|
49
58
|
}).required({
|
|
50
59
|
id: errorsTrads.required.id,
|
|
51
60
|
defaultMessage: 'Password is required'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResetPassword.mjs","sources":["../../../../../../../admin/src/pages/Auth/components/ResetPassword.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Main, Typography, Link } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate, Navigate, useLocation } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { ResetPassword } from '../../../../../shared/contracts/authentication';\nimport { Form } from '../../../components/Form';\nimport { InputRenderer } from '../../../components/FormInputs/Renderer';\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport { useTypedDispatch } from '../../../core/store/hooks';\nimport { useAPIErrorHandler } from '../../../hooks/useAPIErrorHandler';\nimport {\n Column,\n LayoutContent,\n UnauthenticatedLayout,\n} from '../../../layouts/UnauthenticatedLayout';\nimport { login } from '../../../reducer';\nimport { useResetPasswordMutation } from '../../../services/auth';\nimport { isBaseQueryError } from '../../../utils/baseQuery';\nimport { getByteSize } from '../../../utils/strings';\nimport { translatedErrors } from '../../../utils/translatedErrors';\n\nconst RESET_PASSWORD_SCHEMA = yup.object().shape({\n password: yup\n .string()\n .min(8, {\n id: translatedErrors.minLength.id,\n defaultMessage: 'Password must be at least 8 characters',\n values: { min: 8 },\n })\n // bcrypt has a max length of 72 bytes (not characters!)\n .test(\n 'required-byte-size',\n {\n id: 'components.Input.error.contain.maxBytes',\n defaultMessage: 'Password must be less than 73 bytes',\n },\n function (value) {\n if (!value || typeof value !== 'string') return true; // validated elsewhere\n\n const byteSize = getByteSize(value);\n return byteSize <= 72;\n }\n )\n .matches(/[a-z]/, {\n message: {\n id: 'components.Input.error.contain.lowercase',\n defaultMessage: 'Password must contain at least 1 lowercase letter',\n },\n })\n .matches(/[A-Z]/, {\n message: {\n id: 'components.Input.error.contain.uppercase',\n defaultMessage: 'Password must contain at least 1 uppercase letter',\n },\n })\n .matches(/\\d/, {\n message: {\n id: 'components.Input.error.contain.number',\n defaultMessage: 'Password must contain at least 1 number',\n },\n })\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Password is required',\n })\n .nullable(),\n confirmPassword: yup\n .string()\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Confirm password is required',\n })\n .oneOf([yup.ref('password'), null], {\n id: 'components.Input.error.password.noMatch',\n defaultMessage: 'Passwords must match',\n })\n .nullable(),\n});\n\nconst ResetPassword = () => {\n const { formatMessage } = useIntl();\n const dispatch = useTypedDispatch();\n const navigate = useNavigate();\n const { search: searchString } = useLocation();\n const query = React.useMemo(() => new URLSearchParams(searchString), [searchString]);\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const [resetPassword, { error }] = useResetPasswordMutation();\n\n const handleSubmit = async (body: ResetPassword.Request['body']) => {\n const res = await resetPassword(body);\n\n if ('data' in res) {\n dispatch(login({ token: res.data.token }));\n navigate('/');\n }\n };\n /**\n * If someone doesn't have a reset password token\n * then they should just be redirected back to the login page.\n */\n if (!query.get('code')) {\n return <Navigate to=\"/auth/login\" />;\n }\n\n return (\n <UnauthenticatedLayout>\n <Main>\n <LayoutContent>\n <Column>\n <Logo />\n <Box paddingTop={6} paddingBottom={7}>\n <Typography tag=\"h1\" variant=\"alpha\">\n {formatMessage({\n id: 'global.reset-password',\n defaultMessage: 'Reset password',\n })}\n </Typography>\n </Box>\n {error ? (\n <Typography id=\"global-form-error\" role=\"alert\" tabIndex={-1} textColor=\"danger600\">\n {isBaseQueryError(error)\n ? formatAPIError(error)\n : formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n })}\n </Typography>\n ) : null}\n </Column>\n <Form\n method=\"POST\"\n initialValues={{\n password: '',\n confirmPassword: '',\n }}\n onSubmit={(values) => {\n // We know query.code is defined because we check for it above.\n handleSubmit({ password: values.password, resetPasswordToken: query.get('code')! });\n }}\n validationSchema={RESET_PASSWORD_SCHEMA}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {[\n {\n hint: formatMessage({\n id: 'Auth.form.password.hint',\n defaultMessage:\n 'Password must contain at least 8 characters, 1 uppercase, 1 lowercase and 1 number',\n }),\n label: formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n }),\n name: 'password',\n required: true,\n type: 'password' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Confirm Password',\n }),\n name: 'confirmPassword',\n required: true,\n type: 'password' as const,\n },\n ].map((field) => (\n <InputRenderer key={field.name} {...field} />\n ))}\n <Button fullWidth type=\"submit\">\n {formatMessage({\n id: 'global.change-password',\n defaultMessage: 'Change password',\n })}\n </Button>\n </Flex>\n </Form>\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n <Link tag={NavLink} to=\"/auth/login\">\n {formatMessage({ id: 'Auth.link.ready', defaultMessage: 'Ready to sign in?' })}\n </Link>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n\nexport { ResetPassword };\n"],"names":["RESET_PASSWORD_SCHEMA","yup","object","shape","password","string","min","id","translatedErrors","minLength","defaultMessage","values","test","value","byteSize","getByteSize","matches","message","required","nullable","confirmPassword","oneOf","ref","ResetPassword","formatMessage","useIntl","dispatch","useTypedDispatch","navigate","useNavigate","search","searchString","useLocation","query","React","useMemo","URLSearchParams","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","resetPassword","error","useResetPasswordMutation","handleSubmit","body","res","login","token","data","get","_jsx","Navigate","to","UnauthenticatedLayout","_jsxs","Main","LayoutContent","Column","Logo","Box","paddingTop","paddingBottom","Typography","tag","variant","role","tabIndex","textColor","isBaseQueryError","Form","method","initialValues","onSubmit","resetPasswordToken","validationSchema","Flex","direction","alignItems","gap","hint","label","name","type","map","field","InputRenderer","Button","fullWidth","justifyContent","Link","NavLink"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ResetPassword.mjs","sources":["../../../../../../../admin/src/pages/Auth/components/ResetPassword.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Main, Typography, Link } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate, Navigate, useLocation } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { ResetPassword } from '../../../../../shared/contracts/authentication';\nimport { Form } from '../../../components/Form';\nimport { InputRenderer } from '../../../components/FormInputs/Renderer';\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport { useTypedDispatch } from '../../../core/store/hooks';\nimport { useAPIErrorHandler } from '../../../hooks/useAPIErrorHandler';\nimport {\n Column,\n LayoutContent,\n UnauthenticatedLayout,\n} from '../../../layouts/UnauthenticatedLayout';\nimport { login } from '../../../reducer';\nimport { useResetPasswordMutation } from '../../../services/auth';\nimport { isBaseQueryError } from '../../../utils/baseQuery';\nimport { getByteSize } from '../../../utils/strings';\nimport { translatedErrors } from '../../../utils/translatedErrors';\n\nconst RESET_PASSWORD_SCHEMA = yup.object().shape({\n password: yup\n .string()\n .min(8, {\n id: translatedErrors.minLength.id,\n defaultMessage: 'Password must be at least 8 characters',\n values: { min: 8 },\n })\n // bcrypt has a max length of 72 bytes (not characters!)\n .test(\n 'required-byte-size',\n {\n id: 'components.Input.error.contain.maxBytes',\n defaultMessage: 'Password must be less than 73 bytes',\n },\n function (value) {\n if (!value || typeof value !== 'string') return true; // validated elsewhere\n\n const byteSize = getByteSize(value);\n return byteSize <= 72;\n }\n )\n .test(\n 'lowercase',\n {\n message: {\n id: 'components.Input.error.contain.lowercase',\n defaultMessage: 'Password must contain at least 1 lowercase letter',\n },\n },\n (value) => {\n if (!value) return true;\n return /[a-z]/.test(value);\n }\n )\n .test(\n 'uppercase',\n {\n message: {\n id: 'components.Input.error.contain.uppercase',\n defaultMessage: 'Password must contain at least 1 uppercase letter',\n },\n },\n (value) => {\n if (!value) return true;\n return /[A-Z]/.test(value);\n }\n )\n .test(\n 'number',\n {\n message: {\n id: 'components.Input.error.contain.number',\n defaultMessage: 'Password must contain at least 1 number',\n },\n },\n (value) => {\n if (!value) return true;\n return /\\d/.test(value);\n }\n )\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Password is required',\n })\n .nullable(),\n confirmPassword: yup\n .string()\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Confirm password is required',\n })\n .oneOf([yup.ref('password'), null], {\n id: 'components.Input.error.password.noMatch',\n defaultMessage: 'Passwords must match',\n })\n .nullable(),\n});\n\nconst ResetPassword = () => {\n const { formatMessage } = useIntl();\n const dispatch = useTypedDispatch();\n const navigate = useNavigate();\n const { search: searchString } = useLocation();\n const query = React.useMemo(() => new URLSearchParams(searchString), [searchString]);\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const [resetPassword, { error }] = useResetPasswordMutation();\n\n const handleSubmit = async (body: ResetPassword.Request['body']) => {\n const res = await resetPassword(body);\n\n if ('data' in res) {\n dispatch(login({ token: res.data.token }));\n navigate('/');\n }\n };\n /**\n * If someone doesn't have a reset password token\n * then they should just be redirected back to the login page.\n */\n if (!query.get('code')) {\n return <Navigate to=\"/auth/login\" />;\n }\n\n return (\n <UnauthenticatedLayout>\n <Main>\n <LayoutContent>\n <Column>\n <Logo />\n <Box paddingTop={6} paddingBottom={7}>\n <Typography tag=\"h1\" variant=\"alpha\">\n {formatMessage({\n id: 'global.reset-password',\n defaultMessage: 'Reset password',\n })}\n </Typography>\n </Box>\n {error ? (\n <Typography id=\"global-form-error\" role=\"alert\" tabIndex={-1} textColor=\"danger600\">\n {isBaseQueryError(error)\n ? formatAPIError(error)\n : formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n })}\n </Typography>\n ) : null}\n </Column>\n <Form\n method=\"POST\"\n initialValues={{\n password: '',\n confirmPassword: '',\n }}\n onSubmit={(values) => {\n // We know query.code is defined because we check for it above.\n handleSubmit({ password: values.password, resetPasswordToken: query.get('code')! });\n }}\n validationSchema={RESET_PASSWORD_SCHEMA}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {[\n {\n hint: formatMessage({\n id: 'Auth.form.password.hint',\n defaultMessage:\n 'Password must contain at least 8 characters, 1 uppercase, 1 lowercase and 1 number',\n }),\n label: formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n }),\n name: 'password',\n required: true,\n type: 'password' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Confirm Password',\n }),\n name: 'confirmPassword',\n required: true,\n type: 'password' as const,\n },\n ].map((field) => (\n <InputRenderer key={field.name} {...field} />\n ))}\n <Button fullWidth type=\"submit\">\n {formatMessage({\n id: 'global.change-password',\n defaultMessage: 'Change password',\n })}\n </Button>\n </Flex>\n </Form>\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n <Link tag={NavLink} to=\"/auth/login\">\n {formatMessage({ id: 'Auth.link.ready', defaultMessage: 'Ready to sign in?' })}\n </Link>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n\nexport { ResetPassword };\n"],"names":["RESET_PASSWORD_SCHEMA","yup","object","shape","password","string","min","id","translatedErrors","minLength","defaultMessage","values","test","value","byteSize","getByteSize","message","required","nullable","confirmPassword","oneOf","ref","ResetPassword","formatMessage","useIntl","dispatch","useTypedDispatch","navigate","useNavigate","search","searchString","useLocation","query","React","useMemo","URLSearchParams","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","resetPassword","error","useResetPasswordMutation","handleSubmit","body","res","login","token","data","get","_jsx","Navigate","to","UnauthenticatedLayout","_jsxs","Main","LayoutContent","Column","Logo","Box","paddingTop","paddingBottom","Typography","tag","variant","role","tabIndex","textColor","isBaseQueryError","Form","method","initialValues","onSubmit","resetPasswordToken","validationSchema","Flex","direction","alignItems","gap","hint","label","name","type","map","field","InputRenderer","Button","fullWidth","justifyContent","Link","NavLink"],"mappings":"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"}
|
|
@@ -46,15 +46,24 @@ var yup__namespace = /*#__PURE__*/_interopNamespaceDefault(yup);
|
|
|
46
46
|
}, function(value) {
|
|
47
47
|
if (!value) return true;
|
|
48
48
|
return new TextEncoder().encode(value).length <= 72;
|
|
49
|
-
}).
|
|
49
|
+
}).test('lowercase', {
|
|
50
50
|
id: 'components.Input.error.contain.lowercase',
|
|
51
51
|
defaultMessage: 'Password must contain at least one lowercase character'
|
|
52
|
-
})
|
|
52
|
+
}, (value)=>{
|
|
53
|
+
if (!value) return true;
|
|
54
|
+
return /[a-z]/.test(value);
|
|
55
|
+
}).test('uppercase', {
|
|
53
56
|
id: 'components.Input.error.contain.uppercase',
|
|
54
57
|
defaultMessage: 'Password must contain at least one uppercase character'
|
|
55
|
-
})
|
|
58
|
+
}, (value)=>{
|
|
59
|
+
if (!value) return true;
|
|
60
|
+
return /[A-Z]/.test(value);
|
|
61
|
+
}).test('number', {
|
|
56
62
|
id: 'components.Input.error.contain.number',
|
|
57
63
|
defaultMessage: 'Password must contain at least one number'
|
|
64
|
+
}, (value)=>{
|
|
65
|
+
if (!value) return true;
|
|
66
|
+
return /\d/.test(value);
|
|
58
67
|
}),
|
|
59
68
|
confirmPassword: yup__namespace.string().transform((value)=>value === '' ? null : value).nullable().min(8, {
|
|
60
69
|
...translatedErrors.translatedErrors.minLength,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Users/utils/validation.ts"],"sourcesContent":["import * as yup from 'yup';\n\nimport { translatedErrors } from '../../../../../utils/translatedErrors';\n\n/**\n * @description This needs wrapping in `yup.object().shape()` before use.\n */\nconst COMMON_USER_SCHEMA = {\n firstname: yup.string().trim().required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n }),\n lastname: yup.string().nullable(),\n email: yup.string().email(translatedErrors.email).lowercase().required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n }),\n username: yup\n .string()\n .transform((value) => (value === '' ? undefined : value))\n .nullable(),\n password: yup\n .string()\n .transform((value) => (value === '' || value === null ? undefined : value))\n .nullable()\n .min(8, {\n ...translatedErrors.minLength,\n values: { min: 8 },\n })\n .test(\n 'max-bytes',\n {\n id: 'components.Input.error.contain.maxBytes',\n defaultMessage: 'Password must be less than 73 bytes',\n },\n function (value) {\n if (!value) return true;\n return new TextEncoder().encode(value).length <= 72;\n }\n )\n .
|
|
1
|
+
{"version":3,"file":"validation.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Users/utils/validation.ts"],"sourcesContent":["import * as yup from 'yup';\n\nimport { translatedErrors } from '../../../../../utils/translatedErrors';\n\n/**\n * @description This needs wrapping in `yup.object().shape()` before use.\n */\nconst COMMON_USER_SCHEMA = {\n firstname: yup.string().trim().required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n }),\n lastname: yup.string().nullable(),\n email: yup.string().email(translatedErrors.email).lowercase().required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n }),\n username: yup\n .string()\n .transform((value) => (value === '' ? undefined : value))\n .nullable(),\n password: yup\n .string()\n .transform((value) => (value === '' || value === null ? undefined : value))\n .nullable()\n .min(8, {\n ...translatedErrors.minLength,\n values: { min: 8 },\n })\n .test(\n 'max-bytes',\n {\n id: 'components.Input.error.contain.maxBytes',\n defaultMessage: 'Password must be less than 73 bytes',\n },\n function (value) {\n if (!value) return true;\n return new TextEncoder().encode(value).length <= 72;\n }\n )\n .test(\n 'lowercase',\n {\n id: 'components.Input.error.contain.lowercase',\n defaultMessage: 'Password must contain at least one lowercase character',\n },\n (value) => {\n if (!value) return true;\n return /[a-z]/.test(value);\n }\n )\n .test(\n 'uppercase',\n {\n id: 'components.Input.error.contain.uppercase',\n defaultMessage: 'Password must contain at least one uppercase character',\n },\n (value) => {\n if (!value) return true;\n return /[A-Z]/.test(value);\n }\n )\n .test(\n 'number',\n {\n id: 'components.Input.error.contain.number',\n defaultMessage: 'Password must contain at least one number',\n },\n (value) => {\n if (!value) return true;\n return /\\d/.test(value);\n }\n ),\n confirmPassword: yup\n .string()\n .transform((value) => (value === '' ? null : value))\n .nullable()\n .min(8, {\n ...translatedErrors.minLength,\n values: { min: 8 },\n })\n .oneOf([yup.ref('password'), null], {\n id: 'components.Input.error.password.noMatch',\n defaultMessage: 'Passwords must match',\n })\n .when('password', (password, passSchema) => {\n return password\n ? passSchema\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n })\n .nullable()\n : passSchema;\n }),\n};\n\nexport { COMMON_USER_SCHEMA };\n"],"names":["COMMON_USER_SCHEMA","firstname","yup","string","trim","required","id","translatedErrors","defaultMessage","lastname","nullable","email","lowercase","username","transform","value","undefined","password","min","minLength","values","test","TextEncoder","encode","length","confirmPassword","oneOf","ref","when","passSchema"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAIA;;AAEC,UACKA,kBAAqB,GAAA;AACzBC,IAAAA,SAAAA,EAAWC,eAAIC,MAAM,EAAA,CAAGC,IAAI,EAAA,CAAGC,QAAQ,CAAC;QACtCC,EAAIC,EAAAA,iCAAAA,CAAiBF,QAAQ,CAACC,EAAE;QAChCE,cAAgB,EAAA;AAClB,KAAA,CAAA;IACAC,QAAUP,EAAAA,cAAAA,CAAIC,MAAM,EAAA,CAAGO,QAAQ,EAAA;IAC/BC,KAAOT,EAAAA,cAAAA,CAAIC,MAAM,EAAA,CAAGQ,KAAK,CAACJ,iCAAiBI,CAAAA,KAAK,CAAEC,CAAAA,SAAS,EAAGP,CAAAA,QAAQ,CAAC;QACrEC,EAAIC,EAAAA,iCAAAA,CAAiBF,QAAQ,CAACC,EAAE;QAChCE,cAAgB,EAAA;AAClB,KAAA,CAAA;IACAK,QAAUX,EAAAA,cAAAA,CACPC,MAAM,EAAA,CACNW,SAAS,CAAC,CAACC,KAAAA,GAAWA,KAAU,KAAA,EAAA,GAAKC,SAAYD,GAAAA,KAAAA,CAAAA,CACjDL,QAAQ,EAAA;AACXO,IAAAA,QAAAA,EAAUf,eACPC,MAAM,EAAA,CACNW,SAAS,CAAC,CAACC,KAAWA,GAAAA,KAAAA,KAAU,EAAMA,IAAAA,KAAAA,KAAU,OAAOC,SAAYD,GAAAA,KAAAA,CAAAA,CACnEL,QAAQ,EACRQ,CAAAA,GAAG,CAAC,CAAG,EAAA;AACN,QAAA,GAAGX,kCAAiBY,SAAS;QAC7BC,MAAQ,EAAA;YAAEF,GAAK,EAAA;AAAE;KAElBG,CAAAA,CAAAA,IAAI,CACH,WACA,EAAA;QACEf,EAAI,EAAA,yCAAA;QACJE,cAAgB,EAAA;AAClB,KAAA,EACA,SAAUO,KAAK,EAAA;QACb,IAAI,CAACA,OAAO,OAAO,IAAA;AACnB,QAAA,OAAO,IAAIO,WAAcC,EAAAA,CAAAA,MAAM,CAACR,KAAAA,CAAAA,CAAOS,MAAM,IAAI,EAAA;KAGpDH,CAAAA,CAAAA,IAAI,CACH,WACA,EAAA;QACEf,EAAI,EAAA,0CAAA;QACJE,cAAgB,EAAA;AAClB,KAAA,EACA,CAACO,KAAAA,GAAAA;QACC,IAAI,CAACA,OAAO,OAAO,IAAA;QACnB,OAAO,OAAA,CAAQM,IAAI,CAACN,KAAAA,CAAAA;KAGvBM,CAAAA,CAAAA,IAAI,CACH,WACA,EAAA;QACEf,EAAI,EAAA,0CAAA;QACJE,cAAgB,EAAA;AAClB,KAAA,EACA,CAACO,KAAAA,GAAAA;QACC,IAAI,CAACA,OAAO,OAAO,IAAA;QACnB,OAAO,OAAA,CAAQM,IAAI,CAACN,KAAAA,CAAAA;KAGvBM,CAAAA,CAAAA,IAAI,CACH,QACA,EAAA;QACEf,EAAI,EAAA,uCAAA;QACJE,cAAgB,EAAA;AAClB,KAAA,EACA,CAACO,KAAAA,GAAAA;QACC,IAAI,CAACA,OAAO,OAAO,IAAA;QACnB,OAAO,IAAA,CAAKM,IAAI,CAACN,KAAAA,CAAAA;AACnB,KAAA,CAAA;AAEJU,IAAAA,eAAAA,EAAiBvB,cACdC,CAAAA,MAAM,EACNW,CAAAA,SAAS,CAAC,CAACC,KAAAA,GAAWA,KAAU,KAAA,EAAA,GAAK,OAAOA,KAC5CL,CAAAA,CAAAA,QAAQ,EACRQ,CAAAA,GAAG,CAAC,CAAG,EAAA;AACN,QAAA,GAAGX,kCAAiBY,SAAS;QAC7BC,MAAQ,EAAA;YAAEF,GAAK,EAAA;AAAE;AACnB,KAAA,CAAA,CACCQ,KAAK,CAAC;AAACxB,QAAAA,cAAAA,CAAIyB,GAAG,CAAC,UAAA,CAAA;AAAa,QAAA;KAAK,EAAE;QAClCrB,EAAI,EAAA,yCAAA;QACJE,cAAgB,EAAA;AAClB,KAAA,CAAA,CACCoB,IAAI,CAAC,UAAY,EAAA,CAACX,QAAUY,EAAAA,UAAAA,GAAAA;QAC3B,OAAOZ,QAAAA,GACHY,UACGxB,CAAAA,QAAQ,CAAC;YACRC,EAAIC,EAAAA,iCAAAA,CAAiBF,QAAQ,CAACC,EAAE;YAChCE,cAAgB,EAAA;AAClB,SAAA,CAAA,CACCE,QAAQ,EACXmB,GAAAA,UAAAA;AACN,KAAA;AACJ;;;;"}
|
|
@@ -25,15 +25,24 @@ import { translatedErrors as errorsTrads } from '../../../../../utils/translated
|
|
|
25
25
|
}, function(value) {
|
|
26
26
|
if (!value) return true;
|
|
27
27
|
return new TextEncoder().encode(value).length <= 72;
|
|
28
|
-
}).
|
|
28
|
+
}).test('lowercase', {
|
|
29
29
|
id: 'components.Input.error.contain.lowercase',
|
|
30
30
|
defaultMessage: 'Password must contain at least one lowercase character'
|
|
31
|
-
})
|
|
31
|
+
}, (value)=>{
|
|
32
|
+
if (!value) return true;
|
|
33
|
+
return /[a-z]/.test(value);
|
|
34
|
+
}).test('uppercase', {
|
|
32
35
|
id: 'components.Input.error.contain.uppercase',
|
|
33
36
|
defaultMessage: 'Password must contain at least one uppercase character'
|
|
34
|
-
})
|
|
37
|
+
}, (value)=>{
|
|
38
|
+
if (!value) return true;
|
|
39
|
+
return /[A-Z]/.test(value);
|
|
40
|
+
}).test('number', {
|
|
35
41
|
id: 'components.Input.error.contain.number',
|
|
36
42
|
defaultMessage: 'Password must contain at least one number'
|
|
43
|
+
}, (value)=>{
|
|
44
|
+
if (!value) return true;
|
|
45
|
+
return /\d/.test(value);
|
|
37
46
|
}),
|
|
38
47
|
confirmPassword: yup.string().transform((value)=>value === '' ? null : value).nullable().min(8, {
|
|
39
48
|
...errorsTrads.minLength,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.mjs","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Users/utils/validation.ts"],"sourcesContent":["import * as yup from 'yup';\n\nimport { translatedErrors } from '../../../../../utils/translatedErrors';\n\n/**\n * @description This needs wrapping in `yup.object().shape()` before use.\n */\nconst COMMON_USER_SCHEMA = {\n firstname: yup.string().trim().required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n }),\n lastname: yup.string().nullable(),\n email: yup.string().email(translatedErrors.email).lowercase().required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n }),\n username: yup\n .string()\n .transform((value) => (value === '' ? undefined : value))\n .nullable(),\n password: yup\n .string()\n .transform((value) => (value === '' || value === null ? undefined : value))\n .nullable()\n .min(8, {\n ...translatedErrors.minLength,\n values: { min: 8 },\n })\n .test(\n 'max-bytes',\n {\n id: 'components.Input.error.contain.maxBytes',\n defaultMessage: 'Password must be less than 73 bytes',\n },\n function (value) {\n if (!value) return true;\n return new TextEncoder().encode(value).length <= 72;\n }\n )\n .
|
|
1
|
+
{"version":3,"file":"validation.mjs","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Users/utils/validation.ts"],"sourcesContent":["import * as yup from 'yup';\n\nimport { translatedErrors } from '../../../../../utils/translatedErrors';\n\n/**\n * @description This needs wrapping in `yup.object().shape()` before use.\n */\nconst COMMON_USER_SCHEMA = {\n firstname: yup.string().trim().required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n }),\n lastname: yup.string().nullable(),\n email: yup.string().email(translatedErrors.email).lowercase().required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n }),\n username: yup\n .string()\n .transform((value) => (value === '' ? undefined : value))\n .nullable(),\n password: yup\n .string()\n .transform((value) => (value === '' || value === null ? undefined : value))\n .nullable()\n .min(8, {\n ...translatedErrors.minLength,\n values: { min: 8 },\n })\n .test(\n 'max-bytes',\n {\n id: 'components.Input.error.contain.maxBytes',\n defaultMessage: 'Password must be less than 73 bytes',\n },\n function (value) {\n if (!value) return true;\n return new TextEncoder().encode(value).length <= 72;\n }\n )\n .test(\n 'lowercase',\n {\n id: 'components.Input.error.contain.lowercase',\n defaultMessage: 'Password must contain at least one lowercase character',\n },\n (value) => {\n if (!value) return true;\n return /[a-z]/.test(value);\n }\n )\n .test(\n 'uppercase',\n {\n id: 'components.Input.error.contain.uppercase',\n defaultMessage: 'Password must contain at least one uppercase character',\n },\n (value) => {\n if (!value) return true;\n return /[A-Z]/.test(value);\n }\n )\n .test(\n 'number',\n {\n id: 'components.Input.error.contain.number',\n defaultMessage: 'Password must contain at least one number',\n },\n (value) => {\n if (!value) return true;\n return /\\d/.test(value);\n }\n ),\n confirmPassword: yup\n .string()\n .transform((value) => (value === '' ? null : value))\n .nullable()\n .min(8, {\n ...translatedErrors.minLength,\n values: { min: 8 },\n })\n .oneOf([yup.ref('password'), null], {\n id: 'components.Input.error.password.noMatch',\n defaultMessage: 'Passwords must match',\n })\n .when('password', (password, passSchema) => {\n return password\n ? passSchema\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n })\n .nullable()\n : passSchema;\n }),\n};\n\nexport { COMMON_USER_SCHEMA };\n"],"names":["COMMON_USER_SCHEMA","firstname","yup","string","trim","required","id","translatedErrors","defaultMessage","lastname","nullable","email","lowercase","username","transform","value","undefined","password","min","minLength","values","test","TextEncoder","encode","length","confirmPassword","oneOf","ref","when","passSchema"],"mappings":"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"}
|