UI - МЕЖПРОЕКТНАЯ КОММУНИКАЦИЯ: auth screens, project actions и полировка внешних контуров

This commit is contained in:
DCCONSTRUCTIONS
2026-04-20 10:50:09 +03:00
parent c6ace8b9cc
commit 8fed697531
15 changed files with 362 additions and 241 deletions
+110 -110
View File
@@ -60,32 +60,32 @@ export type PasswordCriteria = {
export const getPasswordCriteria = (password: string): PasswordCriteria[] => [
{
key: "length",
label: "Min 8 characters",
label: "Минимум 8 символов",
isValid: password.length >= 8,
},
{
key: "uppercase",
label: "Min 1 upper-case letter",
label: "Минимум 1 заглавная буква",
isValid: /[A-Z]/.test(password),
},
{
key: "lowercase",
label: "Min 1 lower-case letter",
label: "Минимум 1 строчная буква",
isValid: /[a-z]/.test(password),
},
{
key: "number",
label: "Min 1 number",
label: "Минимум 1 цифра",
isValid: /[0-9]/.test(password),
},
{
key: "special",
label: "Min 1 special character",
label: "Минимум 1 спецсимвол",
isValid: /[!@#$%^&*()\-_+=\[\]{}|;:'",.<>?/]/.test(password),
},
{
key: "predictable",
label: "Avoid common or predictable patterns",
label: "Избегайте простых и предсказуемых шаблонов",
isValid: password.length >= 8 ? zxcvbn(password).score >= 3 : false,
},
];
@@ -96,218 +96,218 @@ const errorCodeMessages: {
} = {
// global
[EAuthErrorCodes.INSTANCE_NOT_CONFIGURED]: {
title: `Instance not configured`,
message: () => `Instance not configured. Please contact your administrator.`,
title: `Инстанс не настроен`,
message: () => `Инстанс не настроен. Обратитесь к администратору.`,
},
[EAuthErrorCodes.SIGNUP_DISABLED]: {
title: `Sign up disabled`,
message: () => `Sign up disabled. Please contact your administrator.`,
title: `Регистрация отключена`,
message: () => `Регистрация отключена. Обратитесь к администратору.`,
},
[EAuthErrorCodes.INVALID_PASSWORD]: {
title: `Invalid password`,
message: () => `Invalid password. Please try again.`,
title: `Неверный пароль`,
message: () => `Неверный пароль. Попробуйте снова.`,
},
[EAuthErrorCodes.PASSWORD_TOO_WEAK]: {
title: `Password too weak`,
title: `Слишком простой пароль`,
message: () =>
`Password must include upper-case, lower-case, number, special character, and must not be predictable.`,
`Пароль должен содержать заглавные и строчные буквы, цифру, спецсимвол и не быть предсказуемым.`,
},
[EAuthErrorCodes.SMTP_NOT_CONFIGURED]: {
title: `SMTP not configured`,
message: () => `SMTP not configured. Please contact your administrator.`,
title: `SMTP не настроен`,
message: () => `SMTP не настроен. Обратитесь к администратору.`,
},
// email check in both sign up and sign in
[EAuthErrorCodes.INVALID_EMAIL]: {
title: `Invalid email`,
message: () => `Invalid email. Please try again.`,
title: `Некорректный e-mail`,
message: () => `Некорректный e-mail. Попробуйте снова.`,
},
[EAuthErrorCodes.EMAIL_REQUIRED]: {
title: `Email required`,
message: () => `Email required. Please try again.`,
title: `Нужен e-mail`,
message: () => `Укажите e-mail и попробуйте снова.`,
},
// sign up
[EAuthErrorCodes.USER_ALREADY_EXIST]: {
title: `User already exists`,
message: () => `Your account is already registered. Sign in now.`,
title: `Аккаунт уже существует`,
message: () => `Аккаунт уже зарегистрирован. Выполните вход.`,
},
[EAuthErrorCodes.REQUIRED_EMAIL_PASSWORD_SIGN_UP]: {
title: `Email and password required`,
message: () => `Email and password required. Please try again.`,
title: `Нужны e-mail и пароль`,
message: () => `Укажите e-mail и пароль, затем попробуйте снова.`,
},
[EAuthErrorCodes.AUTHENTICATION_FAILED_SIGN_UP]: {
title: `Authentication failed`,
message: () => `Authentication failed. Please try again.`,
title: `Не удалось выполнить вход`,
message: () => `Не удалось выполнить вход. Проверьте данные и попробуйте снова.`,
},
[EAuthErrorCodes.INVALID_EMAIL_SIGN_UP]: {
title: `Invalid email`,
message: () => `Invalid email. Please try again.`,
title: `Некорректный e-mail`,
message: () => `Некорректный e-mail. Попробуйте снова.`,
},
[EAuthErrorCodes.MAGIC_SIGN_UP_EMAIL_CODE_REQUIRED]: {
title: `Email and code required`,
message: () => `Email and code required. Please try again.`,
title: `Нужны e-mail и код`,
message: () => `Укажите e-mail и код подтверждения, затем попробуйте снова.`,
},
[EAuthErrorCodes.INVALID_EMAIL_MAGIC_SIGN_UP]: {
title: `Invalid email`,
message: () => `Invalid email. Please try again.`,
title: `Некорректный e-mail`,
message: () => `Некорректный e-mail. Попробуйте снова.`,
},
// sign in
[EAuthErrorCodes.USER_ACCOUNT_DEACTIVATED]: {
title: `User account deactivated`,
message: () => `User account deactivated. Please contact administrator.`,
title: `Аккаунт деактивирован`,
message: () => `Аккаунт деактивирован. Обратитесь к администратору.`,
},
[EAuthErrorCodes.USER_DOES_NOT_EXIST]: {
title: `User does not exist`,
message: () => `No account found. Create one to get started.`,
title: `Аккаунт не найден`,
message: () => `Аккаунт не найден. Создайте новый для начала работы.`,
},
[EAuthErrorCodes.REQUIRED_EMAIL_PASSWORD_SIGN_IN]: {
title: `Email and password required`,
message: () => `Email and password required. Please try again.`,
title: `Нужны e-mail и пароль`,
message: () => `Укажите e-mail и пароль, затем попробуйте снова.`,
},
[EAuthErrorCodes.AUTHENTICATION_FAILED_SIGN_IN]: {
title: `Authentication failed`,
message: () => `Authentication failed. Please try again.`,
title: `Не удалось выполнить вход`,
message: () => `Не удалось выполнить вход. Проверьте данные и попробуйте снова.`,
},
[EAuthErrorCodes.INVALID_EMAIL_SIGN_IN]: {
title: `Invalid email`,
message: () => `Invalid email. Please try again.`,
title: `Некорректный e-mail`,
message: () => `Некорректный e-mail. Попробуйте снова.`,
},
[EAuthErrorCodes.MAGIC_SIGN_IN_EMAIL_CODE_REQUIRED]: {
title: `Email and code required`,
message: () => `Email and code required. Please try again.`,
title: `Нужны e-mail и код`,
message: () => `Укажите e-mail и код подтверждения, затем попробуйте снова.`,
},
[EAuthErrorCodes.INVALID_EMAIL_MAGIC_SIGN_IN]: {
title: `Invalid email`,
message: () => `Invalid email. Please try again.`,
title: `Некорректный e-mail`,
message: () => `Некорректный e-mail. Попробуйте снова.`,
},
// Both Sign in and Sign up
[EAuthErrorCodes.INVALID_MAGIC_CODE_SIGN_IN]: {
title: `Authentication failed`,
message: () => `Invalid magic code. Please try again.`,
title: `Неверный код подтверждения`,
message: () => `Неверный код подтверждения. Попробуйте снова.`,
},
[EAuthErrorCodes.INVALID_MAGIC_CODE_SIGN_UP]: {
title: `Authentication failed`,
message: () => `Invalid magic code. Please try again.`,
title: `Неверный код подтверждения`,
message: () => `Неверный код подтверждения. Попробуйте снова.`,
},
[EAuthErrorCodes.EXPIRED_MAGIC_CODE_SIGN_IN]: {
title: `Expired magic code`,
message: () => `Expired magic code. Please try again.`,
title: `Код подтверждения истёк`,
message: () => `Код подтверждения истёк. Запросите новый и попробуйте снова.`,
},
[EAuthErrorCodes.EXPIRED_MAGIC_CODE_SIGN_UP]: {
title: `Expired magic code`,
message: () => `Expired magic code. Please try again.`,
title: `Код подтверждения истёк`,
message: () => `Код подтверждения истёк. Запросите новый и попробуйте снова.`,
},
[EAuthErrorCodes.EMAIL_CODE_ATTEMPT_EXHAUSTED_SIGN_IN]: {
title: `Expired magic code`,
message: () => `Expired magic code. Please try again.`,
title: `Лимит попыток исчерпан`,
message: () => `Лимит попыток ввода кода исчерпан. Запросите новый код.`,
},
[EAuthErrorCodes.EMAIL_CODE_ATTEMPT_EXHAUSTED_SIGN_UP]: {
title: `Expired magic code`,
message: () => `Expired magic code. Please try again.`,
title: `Лимит попыток исчерпан`,
message: () => `Лимит попыток ввода кода исчерпан. Запросите новый код.`,
},
// Oauth
[EAuthErrorCodes.OAUTH_NOT_CONFIGURED]: {
title: `OAuth not configured`,
message: () => `OAuth not configured. Please contact your administrator.`,
title: `OAuth не настроен`,
message: () => `OAuth не настроен. Обратитесь к администратору.`,
},
[EAuthErrorCodes.GOOGLE_NOT_CONFIGURED]: {
title: `Google not configured`,
message: () => `Google not configured. Please contact your administrator.`,
title: `Google OAuth не настроен`,
message: () => `Google OAuth не настроен. Обратитесь к администратору.`,
},
[EAuthErrorCodes.GITHUB_NOT_CONFIGURED]: {
title: `GitHub not configured`,
message: () => `GitHub not configured. Please contact your administrator.`,
title: `GitHub OAuth не настроен`,
message: () => `GitHub OAuth не настроен. Обратитесь к администратору.`,
},
[EAuthErrorCodes.GITLAB_NOT_CONFIGURED]: {
title: `GitLab not configured`,
message: () => `GitLab not configured. Please contact your administrator.`,
title: `GitLab OAuth не настроен`,
message: () => `GitLab OAuth не настроен. Обратитесь к администратору.`,
},
[EAuthErrorCodes.GOOGLE_OAUTH_PROVIDER_ERROR]: {
title: `Google OAuth provider error`,
message: () => `Google OAuth provider error. Please try again.`,
title: `Ошибка Google OAuth`,
message: () => `Не удалось авторизоваться через Google. Попробуйте снова.`,
},
[EAuthErrorCodes.GITHUB_OAUTH_PROVIDER_ERROR]: {
title: `GitHub OAuth provider error`,
message: () => `GitHub OAuth provider error. Please try again.`,
title: `Ошибка GitHub OAuth`,
message: () => `Не удалось авторизоваться через GitHub. Попробуйте снова.`,
},
[EAuthErrorCodes.GITLAB_OAUTH_PROVIDER_ERROR]: {
title: `GitLab OAuth provider error`,
message: () => `GitLab OAuth provider error. Please try again.`,
title: `Ошибка GitLab OAuth`,
message: () => `Не удалось авторизоваться через GitLab. Попробуйте снова.`,
},
// Reset Password
[EAuthErrorCodes.INVALID_PASSWORD_TOKEN]: {
title: `Invalid password token`,
message: () => `Invalid password token. Please try again.`,
title: `Некорректный токен`,
message: () => `Некорректный токен восстановления. Попробуйте снова.`,
},
[EAuthErrorCodes.EXPIRED_PASSWORD_TOKEN]: {
title: `Expired password token`,
message: () => `Expired password token. Please try again.`,
title: `Токен истёк`,
message: () => `Токен восстановления истёк. Запросите новый.`,
},
// Change password
[EAuthErrorCodes.MISSING_PASSWORD]: {
title: `Password required`,
message: () => `Password required. Please try again.`,
title: `Нужен пароль`,
message: () => `Укажите пароль и попробуйте снова.`,
},
[EAuthErrorCodes.INCORRECT_OLD_PASSWORD]: {
title: `Incorrect old password`,
message: () => `Incorrect old password. Please try again.`,
title: `Неверный старый пароль`,
message: () => `Старый пароль указан неверно. Попробуйте снова.`,
},
[EAuthErrorCodes.INVALID_NEW_PASSWORD]: {
title: `Invalid new password`,
message: () => `Invalid new password. Please try again.`,
title: `Некорректный новый пароль`,
message: () => `Новый пароль не соответствует требованиям.`,
},
// set password
[EAuthErrorCodes.PASSWORD_ALREADY_SET]: {
title: `Password already set`,
message: () => `Password already set. Please try again.`,
title: `Пароль уже установлен`,
message: () => `Пароль уже установлен. Выполните вход.`,
},
// admin
[EAuthErrorCodes.ADMIN_ALREADY_EXIST]: {
title: `Admin already exists`,
message: () => `Admin already exists. Please try again.`,
title: `Администратор уже существует`,
message: () => `Администратор уже существует. Попробуйте снова.`,
},
[EAuthErrorCodes.REQUIRED_ADMIN_EMAIL_PASSWORD_FIRST_NAME]: {
title: `Email, password and first name required`,
message: () => `Email, password and first name required. Please try again.`,
title: `Нужны e-mail, пароль и имя`,
message: () => `Укажите e-mail, пароль и имя, затем попробуйте снова.`,
},
[EAuthErrorCodes.INVALID_ADMIN_EMAIL]: {
title: `Invalid admin email`,
message: () => `Invalid admin email. Please try again.`,
title: `Некорректный e-mail администратора`,
message: () => `Некорректный e-mail администратора. Попробуйте снова.`,
},
[EAuthErrorCodes.INVALID_ADMIN_PASSWORD]: {
title: `Invalid admin password`,
message: () => `Invalid admin password. Please try again.`,
title: `Некорректный пароль администратора`,
message: () => `Некорректный пароль администратора. Попробуйте снова.`,
},
[EAuthErrorCodes.REQUIRED_ADMIN_EMAIL_PASSWORD]: {
title: `Email and password required`,
message: () => `Email and password required. Please try again.`,
title: `Нужны e-mail и пароль`,
message: () => `Укажите e-mail и пароль, затем попробуйте снова.`,
},
[EAuthErrorCodes.ADMIN_AUTHENTICATION_FAILED]: {
title: `Authentication failed`,
message: () => `Authentication failed. Please try again.`,
title: `Не удалось выполнить вход`,
message: () => `Не удалось выполнить вход. Проверьте данные и попробуйте снова.`,
},
[EAuthErrorCodes.ADMIN_USER_ALREADY_EXIST]: {
title: `Admin user already exists`,
message: () => `Admin user already exists. Sign in now.`,
title: `Администратор уже существует`,
message: () => `Администратор уже существует. Выполните вход.`,
},
[EAuthErrorCodes.ADMIN_USER_DOES_NOT_EXIST]: {
title: `Admin user does not exist`,
message: () => `Admin user does not exist. Sign in now.`,
title: `Администратор не найден`,
message: () => `Администратор не найден. Выполните вход.`,
},
[EAuthErrorCodes.MAGIC_LINK_LOGIN_DISABLED]: {
title: `Magic link login disabled`,
message: () => `Magic link login is disabled. Please use password to login.`,
title: `Вход по magic link отключён`,
message: () => `Вход по magic link отключён. Используйте пароль.`,
},
[EAuthErrorCodes.PASSWORD_LOGIN_DISABLED]: {
title: `Password login disabled`,
message: () => `Password login is disabled. Please use magic link to login.`,
title: `Вход по паролю отключён`,
message: () => `Вход по паролю отключён. Используйте magic link.`,
},
[EAuthErrorCodes.ADMIN_USER_DEACTIVATED]: {
title: `Admin user deactivated`,
message: () => `Admin user account has been deactivated. Please contact administrator.`,
title: `Администратор деактивирован`,
message: () => `Аккаунт администратора деактивирован. Обратитесь к администратору.`,
},
[EAuthErrorCodes.RATE_LIMIT_EXCEEDED]: {
title: `Rate limit exceeded`,
message: () => `Too many requests. Please try again later.`,
title: `Слишком много запросов`,
message: () => `Слишком много запросов. Повторите попытку позже.`,
},
};
@@ -365,8 +365,8 @@ export const authErrorHandler = (errorCode: EAuthErrorCodes, email?: string): TA
return {
type: EErrorAlertType.BANNER_ALERT,
code: errorCode,
title: errorCodeMessages[errorCode]?.title || "Error",
message: errorCodeMessages[errorCode]?.message(email) || "Something went wrong. Please try again.",
title: errorCodeMessages[errorCode]?.title || "Ошибка",
message: errorCodeMessages[errorCode]?.message(email) || "Что-то пошло не так. Попробуйте снова.",
};
return undefined;