password reset works, missing translations
This commit is contained in:
@@ -774,6 +774,7 @@ table.permission-editor td.checkbox {
|
||||
display: flex;
|
||||
padding: 0.5rem;
|
||||
justify-content: flex-end;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.dialog-buttons button {
|
||||
|
||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+22
-22
@@ -358,7 +358,7 @@
|
||||
},
|
||||
"enter_confirmation_code_prompt": {
|
||||
"translation": "Geben Sie den Bestätigungscode ein, der per {method} geschickt wurde:",
|
||||
"defaultMessage": "Enter confirmation code sent to you by {method}:",
|
||||
"defaultMessage": "Confirmation code",
|
||||
"description": "Request to enter confirmation code",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
@@ -533,7 +533,7 @@
|
||||
},
|
||||
"label_reset_password": {
|
||||
"translation": "Passwort per E-Mail wiederherstellen:",
|
||||
"defaultMessage": "Send a password reset email:",
|
||||
"defaultMessage": "Send a password reset email",
|
||||
"description": "Label for password reset field",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
@@ -1544,10 +1544,10 @@
|
||||
"obsolete": false
|
||||
},
|
||||
"menu_item_audio_call": {
|
||||
"translation": "",
|
||||
"translation": "Anruf",
|
||||
"defaultMessage": "Call",
|
||||
"description": "Start audio call",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"unrecognized_video_format": {
|
||||
@@ -1558,45 +1558,45 @@
|
||||
"obsolete": false
|
||||
},
|
||||
"loading_note": {
|
||||
"translation": "",
|
||||
"translation": "Laden...",
|
||||
"defaultMessage": "Loading...",
|
||||
"description": "Message shown when component is loading",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"password_i_have_code": {
|
||||
"translation": "",
|
||||
"translation": "Ich habe Code",
|
||||
"defaultMessage": "I have code",
|
||||
"description": "Call to open field to enter password reset code",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"uG7N1B": {
|
||||
"translation": "",
|
||||
"defaultMessage": "Mobile phone number",
|
||||
"description": "Prompt for entering a mobile phone number",
|
||||
"missing": true,
|
||||
"obsolete": true
|
||||
},
|
||||
"label_reset_password_tel": {
|
||||
"translation": "",
|
||||
"defaultMessage": "Send a password reset SMS:",
|
||||
"translation": "SMS zum Zurücksetzen des Passworts senden",
|
||||
"defaultMessage": "Send SMS to reset password",
|
||||
"description": "Label for password reset field by phone",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"mobile_phone_number": {
|
||||
"translation": "",
|
||||
"translation": "Mobiltelefonnummer",
|
||||
"defaultMessage": "Mobile phone number",
|
||||
"description": "Prompt for entering a mobile phone number",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"password_reset_sms_sent": {
|
||||
"translation": "",
|
||||
"translation": "Eine Textnachricht mit Sicherheitscode wurde an {phone} gesendet. Geben Sie den Code unten ein.",
|
||||
"defaultMessage": "A text message with security code has been sent to {phone}. Enter the code below.",
|
||||
"description": "Notification that the SMS with password reset instructions has been sent",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"mobile_number_required": {
|
||||
"translation": "Handynummer erforderlich",
|
||||
"defaultMessage": "Mobile phone number required",
|
||||
"description": "Error message",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
}
|
||||
}
|
||||
|
||||
+11
-11
@@ -357,8 +357,8 @@
|
||||
"obsolete": false
|
||||
},
|
||||
"enter_confirmation_code_prompt": {
|
||||
"translation": "Enter confirmation code sent to you by {method}:",
|
||||
"defaultMessage": "Enter confirmation code sent to you by {method}:",
|
||||
"translation": "Confirmation code",
|
||||
"defaultMessage": "Confirmation code",
|
||||
"description": "Request to enter confirmation code",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
@@ -533,7 +533,7 @@
|
||||
},
|
||||
"label_reset_password": {
|
||||
"translation": "Send a password reset email:",
|
||||
"defaultMessage": "Send a password reset email:",
|
||||
"defaultMessage": "Send a password reset email",
|
||||
"description": "Label for password reset field",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
@@ -1571,16 +1571,9 @@
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"uG7N1B": {
|
||||
"translation": "Mobile phone number",
|
||||
"defaultMessage": "Mobile phone number",
|
||||
"description": "Prompt for entering a mobile phone number",
|
||||
"missing": false,
|
||||
"obsolete": true
|
||||
},
|
||||
"label_reset_password_tel": {
|
||||
"translation": "Send a password reset SMS:",
|
||||
"defaultMessage": "Send a password reset SMS:",
|
||||
"defaultMessage": "Send SMS to reset password",
|
||||
"description": "Label for password reset field by phone",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
@@ -1598,5 +1591,12 @@
|
||||
"description": "Notification that the SMS with password reset instructions has been sent",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"mobile_number_required": {
|
||||
"translation": "Mobile phone number required",
|
||||
"defaultMessage": "Mobile phone number required",
|
||||
"description": "Error message",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
}
|
||||
}
|
||||
|
||||
+22
-22
@@ -358,7 +358,7 @@
|
||||
},
|
||||
"enter_confirmation_code_prompt": {
|
||||
"translation": "Introduzca el código de confirmación enviado a tu {method}:",
|
||||
"defaultMessage": "Enter confirmation code sent to you by {method}:",
|
||||
"defaultMessage": "Confirmation code",
|
||||
"description": "Request to enter confirmation code",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
@@ -533,7 +533,7 @@
|
||||
},
|
||||
"label_reset_password": {
|
||||
"translation": "Enviar un correo electrónico de restablecimiento de contraseña:",
|
||||
"defaultMessage": "Send a password reset email:",
|
||||
"defaultMessage": "Send a password reset email",
|
||||
"description": "Label for password reset field",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
@@ -1544,10 +1544,10 @@
|
||||
"obsolete": false
|
||||
},
|
||||
"menu_item_audio_call": {
|
||||
"translation": "",
|
||||
"translation": "Llamada",
|
||||
"defaultMessage": "Call",
|
||||
"description": "Start audio call",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"unrecognized_video_format": {
|
||||
@@ -1558,45 +1558,45 @@
|
||||
"obsolete": false
|
||||
},
|
||||
"loading_note": {
|
||||
"translation": "",
|
||||
"translation": "Cargando...",
|
||||
"defaultMessage": "Loading...",
|
||||
"description": "Message shown when component is loading",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"password_i_have_code": {
|
||||
"translation": "",
|
||||
"translation": "Tengo código",
|
||||
"defaultMessage": "I have code",
|
||||
"description": "Call to open field to enter password reset code",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"uG7N1B": {
|
||||
"translation": "",
|
||||
"defaultMessage": "Mobile phone number",
|
||||
"description": "Prompt for entering a mobile phone number",
|
||||
"missing": true,
|
||||
"obsolete": true
|
||||
},
|
||||
"label_reset_password_tel": {
|
||||
"translation": "",
|
||||
"defaultMessage": "Send a password reset SMS:",
|
||||
"translation": "Enviar SMS para restablecer la contraseña",
|
||||
"defaultMessage": "Send SMS to reset password",
|
||||
"description": "Label for password reset field by phone",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"mobile_phone_number": {
|
||||
"translation": "",
|
||||
"translation": "Número de teléfono móvil",
|
||||
"defaultMessage": "Mobile phone number",
|
||||
"description": "Prompt for entering a mobile phone number",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"password_reset_sms_sent": {
|
||||
"translation": "",
|
||||
"translation": "Se ha enviado un mensaje de texto con un código de seguridad a {phone}. Ingresa el código a continuación.",
|
||||
"defaultMessage": "A text message with security code has been sent to {phone}. Enter the code below.",
|
||||
"description": "Notification that the SMS with password reset instructions has been sent",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"mobile_number_required": {
|
||||
"translation": "Número de teléfono móvil requerido",
|
||||
"defaultMessage": "Mobile phone number required",
|
||||
"description": "Error message",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -268,7 +268,7 @@
|
||||
"description": "Call to action to enable peer's messaging"
|
||||
},
|
||||
"enter_confirmation_code_prompt": {
|
||||
"defaultMessage": "Enter confirmation code sent to you by {method}:",
|
||||
"defaultMessage": "Confirmation code",
|
||||
"description": "Request to enter confirmation code"
|
||||
},
|
||||
"error_invalid_id": {
|
||||
@@ -415,11 +415,11 @@
|
||||
"description": "Label for push notifications switch"
|
||||
},
|
||||
"label_reset_password": {
|
||||
"defaultMessage": "Send a password reset email:",
|
||||
"defaultMessage": "Send a password reset email",
|
||||
"description": "Label for password reset field"
|
||||
},
|
||||
"label_reset_password_tel": {
|
||||
"defaultMessage": "Send a password reset SMS:",
|
||||
"defaultMessage": "Send SMS to reset password",
|
||||
"description": "Label for password reset field by phone"
|
||||
},
|
||||
"label_sdk": {
|
||||
@@ -604,6 +604,10 @@
|
||||
"defaultMessage": "Messaging disabled",
|
||||
"description": "Prompt in SendMessage in read-only topic"
|
||||
},
|
||||
"mobile_number_required": {
|
||||
"defaultMessage": "Mobile phone number required",
|
||||
"description": "Error message"
|
||||
},
|
||||
"mobile_phone_number": {
|
||||
"defaultMessage": "Mobile phone number",
|
||||
"description": "Prompt for entering a mobile phone number"
|
||||
|
||||
+22
-22
@@ -358,7 +358,7 @@
|
||||
},
|
||||
"enter_confirmation_code_prompt": {
|
||||
"translation": "Entrez le code de confirmation envoyé par {method}:",
|
||||
"defaultMessage": "Enter confirmation code sent to you by {method}:",
|
||||
"defaultMessage": "Confirmation code",
|
||||
"description": "Request to enter confirmation code",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
@@ -533,7 +533,7 @@
|
||||
},
|
||||
"label_reset_password": {
|
||||
"translation": "Envoyer un mail de remise à zéro de mot de passe :",
|
||||
"defaultMessage": "Send a password reset email:",
|
||||
"defaultMessage": "Send a password reset email",
|
||||
"description": "Label for password reset field",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
@@ -1544,10 +1544,10 @@
|
||||
"obsolete": false
|
||||
},
|
||||
"menu_item_audio_call": {
|
||||
"translation": "",
|
||||
"translation": "Appel",
|
||||
"defaultMessage": "Call",
|
||||
"description": "Start audio call",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"unrecognized_video_format": {
|
||||
@@ -1558,45 +1558,45 @@
|
||||
"obsolete": false
|
||||
},
|
||||
"loading_note": {
|
||||
"translation": "",
|
||||
"translation": "Chargement...",
|
||||
"defaultMessage": "Loading...",
|
||||
"description": "Message shown when component is loading",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"password_i_have_code": {
|
||||
"translation": "",
|
||||
"translation": "J'ai du code",
|
||||
"defaultMessage": "I have code",
|
||||
"description": "Call to open field to enter password reset code",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"uG7N1B": {
|
||||
"translation": "",
|
||||
"defaultMessage": "Mobile phone number",
|
||||
"description": "Prompt for entering a mobile phone number",
|
||||
"missing": true,
|
||||
"obsolete": true
|
||||
},
|
||||
"label_reset_password_tel": {
|
||||
"translation": "",
|
||||
"defaultMessage": "Send a password reset SMS:",
|
||||
"translation": "Envoyer un SMS pour réinitialiser le mot de passe",
|
||||
"defaultMessage": "Send SMS to reset password",
|
||||
"description": "Label for password reset field by phone",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"mobile_phone_number": {
|
||||
"translation": "",
|
||||
"translation": "Numéro de téléphone mobile",
|
||||
"defaultMessage": "Mobile phone number",
|
||||
"description": "Prompt for entering a mobile phone number",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"password_reset_sms_sent": {
|
||||
"translation": "",
|
||||
"translation": "Un SMS avec un code de sécurité a été envoyé à {phone}. Saisissez le code ci-dessous.",
|
||||
"defaultMessage": "A text message with security code has been sent to {phone}. Enter the code below.",
|
||||
"description": "Notification that the SMS with password reset instructions has been sent",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"mobile_number_required": {
|
||||
"translation": "Numéro de téléphone portable requis",
|
||||
"defaultMessage": "Mobile phone number required",
|
||||
"description": "Error message",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
}
|
||||
}
|
||||
|
||||
+22
-22
@@ -358,7 +358,7 @@
|
||||
},
|
||||
"enter_confirmation_code_prompt": {
|
||||
"translation": "{방법}으로보낸확인코드를입력하십시오:",
|
||||
"defaultMessage": "Enter confirmation code sent to you by {method}:",
|
||||
"defaultMessage": "Confirmation code",
|
||||
"description": "Request to enter confirmation code",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
@@ -533,7 +533,7 @@
|
||||
},
|
||||
"label_reset_password": {
|
||||
"translation": "비밀번호재설정이메일보내기: ",
|
||||
"defaultMessage": "Send a password reset email:",
|
||||
"defaultMessage": "Send a password reset email",
|
||||
"description": "Label for password reset field",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
@@ -1544,10 +1544,10 @@
|
||||
"obsolete": false
|
||||
},
|
||||
"menu_item_audio_call": {
|
||||
"translation": "",
|
||||
"translation": "부르다",
|
||||
"defaultMessage": "Call",
|
||||
"description": "Start audio call",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"unrecognized_video_format": {
|
||||
@@ -1558,45 +1558,45 @@
|
||||
"obsolete": false
|
||||
},
|
||||
"loading_note": {
|
||||
"translation": "",
|
||||
"translation": "로드 중...",
|
||||
"defaultMessage": "Loading...",
|
||||
"description": "Message shown when component is loading",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"password_i_have_code": {
|
||||
"translation": "",
|
||||
"translation": "코드가 있습니다",
|
||||
"defaultMessage": "I have code",
|
||||
"description": "Call to open field to enter password reset code",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"uG7N1B": {
|
||||
"translation": "",
|
||||
"defaultMessage": "Mobile phone number",
|
||||
"description": "Prompt for entering a mobile phone number",
|
||||
"missing": true,
|
||||
"obsolete": true
|
||||
},
|
||||
"label_reset_password_tel": {
|
||||
"translation": "",
|
||||
"defaultMessage": "Send a password reset SMS:",
|
||||
"translation": "비밀번호 재설정을 위해 SMS 보내기",
|
||||
"defaultMessage": "Send SMS to reset password",
|
||||
"description": "Label for password reset field by phone",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"mobile_phone_number": {
|
||||
"translation": "",
|
||||
"translation": "휴대전화 번호",
|
||||
"defaultMessage": "Mobile phone number",
|
||||
"description": "Prompt for entering a mobile phone number",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"password_reset_sms_sent": {
|
||||
"translation": "",
|
||||
"translation": "보안 코드가 포함된 문자 메시지가 {phone}로 전송되었습니다. 아래 코드를 입력하세요.",
|
||||
"defaultMessage": "A text message with security code has been sent to {phone}. Enter the code below.",
|
||||
"description": "Notification that the SMS with password reset instructions has been sent",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"mobile_number_required": {
|
||||
"translation": "휴대전화 번호 필요",
|
||||
"defaultMessage": "Mobile phone number required",
|
||||
"description": "Error message",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
}
|
||||
}
|
||||
|
||||
+22
-22
@@ -358,7 +358,7 @@
|
||||
},
|
||||
"enter_confirmation_code_prompt": {
|
||||
"translation": "Introu codul de confirmare trimis pe {method}:",
|
||||
"defaultMessage": "Enter confirmation code sent to you by {method}:",
|
||||
"defaultMessage": "Confirmation code",
|
||||
"description": "Request to enter confirmation code",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
@@ -533,7 +533,7 @@
|
||||
},
|
||||
"label_reset_password": {
|
||||
"translation": "Resetează parola:",
|
||||
"defaultMessage": "Send a password reset email:",
|
||||
"defaultMessage": "Send a password reset email",
|
||||
"description": "Label for password reset field",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
@@ -1544,10 +1544,10 @@
|
||||
"obsolete": false
|
||||
},
|
||||
"menu_item_audio_call": {
|
||||
"translation": "",
|
||||
"translation": "Apel",
|
||||
"defaultMessage": "Call",
|
||||
"description": "Start audio call",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"unrecognized_video_format": {
|
||||
@@ -1558,45 +1558,45 @@
|
||||
"obsolete": false
|
||||
},
|
||||
"loading_note": {
|
||||
"translation": "",
|
||||
"translation": "Se încarcă...",
|
||||
"defaultMessage": "Loading...",
|
||||
"description": "Message shown when component is loading",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"password_i_have_code": {
|
||||
"translation": "",
|
||||
"translation": "Am cod",
|
||||
"defaultMessage": "I have code",
|
||||
"description": "Call to open field to enter password reset code",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"uG7N1B": {
|
||||
"translation": "",
|
||||
"defaultMessage": "Mobile phone number",
|
||||
"description": "Prompt for entering a mobile phone number",
|
||||
"missing": true,
|
||||
"obsolete": true
|
||||
},
|
||||
"label_reset_password_tel": {
|
||||
"translation": "",
|
||||
"defaultMessage": "Send a password reset SMS:",
|
||||
"translation": "Trimite SMS pentru a reseta parola",
|
||||
"defaultMessage": "Send SMS to reset password",
|
||||
"description": "Label for password reset field by phone",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"mobile_phone_number": {
|
||||
"translation": "",
|
||||
"translation": "Număr de telefon mobil",
|
||||
"defaultMessage": "Mobile phone number",
|
||||
"description": "Prompt for entering a mobile phone number",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"password_reset_sms_sent": {
|
||||
"translation": "",
|
||||
"translation": "Un mesaj text cu cod de securitate a fost trimis la {phone}. Introduceți codul de mai jos.",
|
||||
"defaultMessage": "A text message with security code has been sent to {phone}. Enter the code below.",
|
||||
"description": "Notification that the SMS with password reset instructions has been sent",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"mobile_number_required": {
|
||||
"translation": "Este necesar un număr de telefon mobil",
|
||||
"defaultMessage": "Mobile phone number required",
|
||||
"description": "Error message",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
}
|
||||
}
|
||||
|
||||
+22
-22
@@ -358,7 +358,7 @@
|
||||
},
|
||||
"enter_confirmation_code_prompt": {
|
||||
"translation": "Код подтверждения, полученный по {method}:",
|
||||
"defaultMessage": "Enter confirmation code sent to you by {method}:",
|
||||
"defaultMessage": "Confirmation code",
|
||||
"description": "Request to enter confirmation code",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
@@ -533,7 +533,7 @@
|
||||
},
|
||||
"label_reset_password": {
|
||||
"translation": "Отправить емейл для смены пароля:",
|
||||
"defaultMessage": "Send a password reset email:",
|
||||
"defaultMessage": "Send a password reset email",
|
||||
"description": "Label for password reset field",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
@@ -1544,10 +1544,10 @@
|
||||
"obsolete": false
|
||||
},
|
||||
"menu_item_audio_call": {
|
||||
"translation": "",
|
||||
"translation": "Позвонить",
|
||||
"defaultMessage": "Call",
|
||||
"description": "Start audio call",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"unrecognized_video_format": {
|
||||
@@ -1558,45 +1558,45 @@
|
||||
"obsolete": false
|
||||
},
|
||||
"loading_note": {
|
||||
"translation": "",
|
||||
"translation": "Загружается...",
|
||||
"defaultMessage": "Loading...",
|
||||
"description": "Message shown when component is loading",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"password_i_have_code": {
|
||||
"translation": "",
|
||||
"translation": "У меня есть код",
|
||||
"defaultMessage": "I have code",
|
||||
"description": "Call to open field to enter password reset code",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"uG7N1B": {
|
||||
"translation": "",
|
||||
"defaultMessage": "Mobile phone number",
|
||||
"description": "Prompt for entering a mobile phone number",
|
||||
"missing": true,
|
||||
"obsolete": true
|
||||
},
|
||||
"label_reset_password_tel": {
|
||||
"translation": "",
|
||||
"defaultMessage": "Send a password reset SMS:",
|
||||
"translation": "Отправить SMS для сброса пароля",
|
||||
"defaultMessage": "Send SMS to reset password",
|
||||
"description": "Label for password reset field by phone",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"mobile_phone_number": {
|
||||
"translation": "",
|
||||
"translation": "Номер мобильного телефона",
|
||||
"defaultMessage": "Mobile phone number",
|
||||
"description": "Prompt for entering a mobile phone number",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"password_reset_sms_sent": {
|
||||
"translation": "",
|
||||
"translation": "SMS с защитным кодом отправлено на {phone}. Введите код ниже.",
|
||||
"defaultMessage": "A text message with security code has been sent to {phone}. Enter the code below.",
|
||||
"description": "Notification that the SMS with password reset instructions has been sent",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"mobile_number_required": {
|
||||
"translation": "Номер мобильного телефона",
|
||||
"defaultMessage": "Mobile phone number required",
|
||||
"description": "Error message",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
}
|
||||
}
|
||||
|
||||
+22
-22
@@ -358,7 +358,7 @@
|
||||
},
|
||||
"enter_confirmation_code_prompt": {
|
||||
"translation": "輸入透過 {method} 傳送給您的確認碼:",
|
||||
"defaultMessage": "Enter confirmation code sent to you by {method}:",
|
||||
"defaultMessage": "Confirmation code",
|
||||
"description": "Request to enter confirmation code",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
@@ -533,7 +533,7 @@
|
||||
},
|
||||
"label_reset_password": {
|
||||
"translation": "傳送重設密碼郵件:",
|
||||
"defaultMessage": "Send a password reset email:",
|
||||
"defaultMessage": "Send a password reset email",
|
||||
"description": "Label for password reset field",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
@@ -1544,10 +1544,10 @@
|
||||
"obsolete": false
|
||||
},
|
||||
"menu_item_audio_call": {
|
||||
"translation": "",
|
||||
"translation": "稱呼",
|
||||
"defaultMessage": "Call",
|
||||
"description": "Start audio call",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"unrecognized_video_format": {
|
||||
@@ -1558,45 +1558,45 @@
|
||||
"obsolete": false
|
||||
},
|
||||
"loading_note": {
|
||||
"translation": "",
|
||||
"translation": "加載中...",
|
||||
"defaultMessage": "Loading...",
|
||||
"description": "Message shown when component is loading",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"password_i_have_code": {
|
||||
"translation": "",
|
||||
"translation": "我有代碼",
|
||||
"defaultMessage": "I have code",
|
||||
"description": "Call to open field to enter password reset code",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"uG7N1B": {
|
||||
"translation": "",
|
||||
"defaultMessage": "Mobile phone number",
|
||||
"description": "Prompt for entering a mobile phone number",
|
||||
"missing": true,
|
||||
"obsolete": true
|
||||
},
|
||||
"label_reset_password_tel": {
|
||||
"translation": "",
|
||||
"defaultMessage": "Send a password reset SMS:",
|
||||
"translation": "發送短信重置密碼",
|
||||
"defaultMessage": "Send SMS to reset password",
|
||||
"description": "Label for password reset field by phone",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"mobile_phone_number": {
|
||||
"translation": "",
|
||||
"translation": "手機號碼",
|
||||
"defaultMessage": "Mobile phone number",
|
||||
"description": "Prompt for entering a mobile phone number",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"password_reset_sms_sent": {
|
||||
"translation": "",
|
||||
"translation": "帶有安全碼的短信已發送至{phone}。請在下方輸入密碼。",
|
||||
"defaultMessage": "A text message with security code has been sent to {phone}. Enter the code below.",
|
||||
"description": "Notification that the SMS with password reset instructions has been sent",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"mobile_number_required": {
|
||||
"translation": "需要手機號",
|
||||
"defaultMessage": "Mobile phone number required",
|
||||
"description": "Error message",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
}
|
||||
}
|
||||
|
||||
+22
-22
@@ -358,7 +358,7 @@
|
||||
},
|
||||
"enter_confirmation_code_prompt": {
|
||||
"translation": "输入通过{method}发送的验证码:",
|
||||
"defaultMessage": "Enter confirmation code sent to you by {method}:",
|
||||
"defaultMessage": "Confirmation code",
|
||||
"description": "Request to enter confirmation code",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
@@ -533,7 +533,7 @@
|
||||
},
|
||||
"label_reset_password": {
|
||||
"translation": "发送密码重置邮件:",
|
||||
"defaultMessage": "Send a password reset email:",
|
||||
"defaultMessage": "Send a password reset email",
|
||||
"description": "Label for password reset field",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
@@ -1544,10 +1544,10 @@
|
||||
"obsolete": false
|
||||
},
|
||||
"menu_item_audio_call": {
|
||||
"translation": "",
|
||||
"translation": "称呼",
|
||||
"defaultMessage": "Call",
|
||||
"description": "Start audio call",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"unrecognized_video_format": {
|
||||
@@ -1558,45 +1558,45 @@
|
||||
"obsolete": false
|
||||
},
|
||||
"loading_note": {
|
||||
"translation": "",
|
||||
"translation": "加载中...",
|
||||
"defaultMessage": "Loading...",
|
||||
"description": "Message shown when component is loading",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"password_i_have_code": {
|
||||
"translation": "",
|
||||
"translation": "我有代码",
|
||||
"defaultMessage": "I have code",
|
||||
"description": "Call to open field to enter password reset code",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"uG7N1B": {
|
||||
"translation": "",
|
||||
"defaultMessage": "Mobile phone number",
|
||||
"description": "Prompt for entering a mobile phone number",
|
||||
"missing": true,
|
||||
"obsolete": true
|
||||
},
|
||||
"label_reset_password_tel": {
|
||||
"translation": "",
|
||||
"defaultMessage": "Send a password reset SMS:",
|
||||
"translation": "发送短信重置密码",
|
||||
"defaultMessage": "Send SMS to reset password",
|
||||
"description": "Label for password reset field by phone",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"mobile_phone_number": {
|
||||
"translation": "",
|
||||
"translation": "手机号",
|
||||
"defaultMessage": "Mobile phone number",
|
||||
"description": "Prompt for entering a mobile phone number",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"password_reset_sms_sent": {
|
||||
"translation": "",
|
||||
"translation": "带有安全码的短信已发送至{phone}。请在下方输入密码。",
|
||||
"defaultMessage": "A text message with security code has been sent to {phone}. Enter the code below.",
|
||||
"description": "Notification that the SMS with password reset instructions has been sent",
|
||||
"missing": true,
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
},
|
||||
"mobile_number_required": {
|
||||
"translation": "需要手机号",
|
||||
"defaultMessage": "Mobile phone number required",
|
||||
"description": "Error message",
|
||||
"missing": false,
|
||||
"obsolete": false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,8 +32,6 @@ export default class CreateAccountView extends React.PureComponent {
|
||||
newAvatarMime: null,
|
||||
errorCleared: false,
|
||||
buttonDisabled: false,
|
||||
// method: '',
|
||||
method: 'tel',
|
||||
saveToken: LocalStorageUtil.getObject('keep-logged-in')
|
||||
};
|
||||
|
||||
@@ -49,12 +47,11 @@ export default class CreateAccountView extends React.PureComponent {
|
||||
this.uploadAvatar = this.uploadAvatar.bind(this);
|
||||
this.handleSubmit = this.handleSubmit.bind(this);
|
||||
|
||||
// Connection will trigger change by changing the this.props.serverVersion.
|
||||
props.tinode.connect()
|
||||
.catch(err => {
|
||||
this.props.onError(err.message, 'err');
|
||||
})
|
||||
// "reqCred":{"auth":["email"]}
|
||||
//.finally(_ => this.setState({method: (props.tinode.getServerParam('reqCred', {}).auth || [])[0] || 'email'}));
|
||||
});
|
||||
}
|
||||
|
||||
handleLoginChange(e) {
|
||||
@@ -147,6 +144,9 @@ export default class CreateAccountView extends React.PureComponent {
|
||||
}
|
||||
|
||||
render() {
|
||||
// "reqCred":{"auth":["email"]}
|
||||
const method = (this.props.tinode.getServerParam('reqCred', {}).auth || [])[0] || 'email';
|
||||
|
||||
if (this.state.newAvatar) {
|
||||
return (
|
||||
<AvatarCrop
|
||||
@@ -166,7 +166,7 @@ export default class CreateAccountView extends React.PureComponent {
|
||||
return (
|
||||
<form className="panel-form-column" onSubmit={this.handleSubmit}>
|
||||
<div className="panel-form-row">
|
||||
<div className="panel-form-column">
|
||||
<div className="umn">
|
||||
<FormattedMessage id="login_prompt" defaultMessage="Login"
|
||||
description="Placeholer for username/login">{
|
||||
(login_prompt) => <input type="text" placeholder={login_prompt} autoComplete="user-name"
|
||||
@@ -192,7 +192,7 @@ export default class CreateAccountView extends React.PureComponent {
|
||||
value={this.state.fn} onChange={this.handleFnChange} required/>
|
||||
}</FormattedMessage>
|
||||
</div>
|
||||
{this.state.method == 'email' ?
|
||||
{method == 'email' ?
|
||||
<div className="panel-form-row">
|
||||
<FormattedMessage id="email_prompt" defaultMessage="Email, e.g. jdoe@example.com"
|
||||
description="Input placeholder for email entry">{
|
||||
@@ -200,7 +200,7 @@ export default class CreateAccountView extends React.PureComponent {
|
||||
value={this.state.email} onChange={this.handleEmailChange} required/>
|
||||
}</FormattedMessage>
|
||||
</div>
|
||||
: this.state.method == 'tel' ?
|
||||
: method == 'tel' ?
|
||||
<><div className="panel-form-row">
|
||||
<label className="small gray"><FormattedMessage id="mobile_phone_number" defaultMessage="Mobile phone number"
|
||||
description="Prompt for entering a mobile phone number" /></label>
|
||||
|
||||
@@ -16,21 +16,21 @@ export default class PasswordResetView extends React.PureComponent {
|
||||
email: '',
|
||||
password: '',
|
||||
sent: false,
|
||||
method: '',
|
||||
haveCode: false
|
||||
haveCode: false,
|
||||
code: ''
|
||||
};
|
||||
|
||||
this.handleSubmit = this.handleSubmit.bind(this);
|
||||
this.handleEmailChange = this.handleEmailChange.bind(this);
|
||||
this.handlePasswordChange = this.handlePasswordChange.bind(this);
|
||||
this.handleCodeChange = this.handleCodeChange.bind(this);
|
||||
this.handleShowCodeField = this.handleShowCodeField.bind(this);
|
||||
|
||||
// Connection will trigger change by changing the this.props.serverVersion.
|
||||
props.tinode.connect()
|
||||
.catch(err => {
|
||||
this.props.onError(err.message, 'err');
|
||||
})
|
||||
// "reqCred":{"auth":["email"]}
|
||||
.finally(_ => this.setState({method: (props.tinode.getServerParam('reqCred', {}).auth || [])[0] || 'email'}));
|
||||
});
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
@@ -41,13 +41,24 @@ export default class PasswordResetView extends React.PureComponent {
|
||||
handleSubmit(e) {
|
||||
e.preventDefault();
|
||||
if (this.state.token) {
|
||||
this.props.onReset(this.state.scheme, this.state.password.trim(), this.state.token);
|
||||
} else if (this.state.sent) {
|
||||
this.props.onCancel();
|
||||
// Reset using token.
|
||||
this.props.onReset(this.state.password.trim(), {
|
||||
scheme: 'token',
|
||||
token: this.state.token
|
||||
});
|
||||
} else if (this.state.code && this.method) {
|
||||
// Reset using security code.
|
||||
// The secret is structured as <code>:<cred_method>:<cred_value>, "123456:email:alice@example.com".
|
||||
const cred = this.state.email.trim() || this.state.tel.trim();
|
||||
this.props.onReset(this.state.password.trim(), {
|
||||
scheme: 'code',
|
||||
secret: `${this.state.code}:${this.method}:${cred}`
|
||||
});
|
||||
} else {
|
||||
const email = this.state.email.trim();
|
||||
this.setState({email: email});
|
||||
this.props.onRequest('email', email).then(_ => this.setState({sent: true}));
|
||||
const tel = this.state.tel.trim();
|
||||
this.setState({email: email, tel: tel});
|
||||
this.props.onRequest(this.method, email || tel).then(_ => this.setState({sent: true}));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,15 +70,24 @@ export default class PasswordResetView extends React.PureComponent {
|
||||
this.setState({password: e.target.value});
|
||||
}
|
||||
|
||||
handleCodeChange(e) {
|
||||
this.setState({code: e.target.value.replace(/[^\d]/g, '')});
|
||||
}
|
||||
|
||||
handleShowCodeField(e) {
|
||||
e.preventDefault();
|
||||
this.setState({haveCode: true});
|
||||
}
|
||||
|
||||
render() {
|
||||
const showPasswordInput = (this.state.token && this.state.scheme) || this.state.haveCode;
|
||||
// "reqCred":{"auth":["email"]}
|
||||
this.method = (this.props.tinode.getServerParam('reqCred', {}).auth || [])[0] || 'email';
|
||||
|
||||
const showCredentialInput = !(this.state.token && this.state.scheme);
|
||||
const showPasswordInput = !showCredentialInput || this.state.haveCode || this.state.sent;
|
||||
|
||||
const passwordInput = (<>
|
||||
<label htmlFor="new-password">
|
||||
<label className="small gray" htmlFor="new-password">
|
||||
<FormattedMessage id="label_new_password"
|
||||
defaultMessage="New password"
|
||||
description="Label for entering a new password" />
|
||||
@@ -89,7 +109,7 @@ export default class PasswordResetView extends React.PureComponent {
|
||||
null :
|
||||
<label htmlFor="inputEmail">
|
||||
<FormattedMessage id="label_reset_password"
|
||||
defaultMessage="Send a password reset email:"
|
||||
defaultMessage="Send a password reset email"
|
||||
description="Label for password reset field" />
|
||||
</label>
|
||||
}
|
||||
@@ -107,71 +127,84 @@ export default class PasswordResetView extends React.PureComponent {
|
||||
const phoneInput = (<>
|
||||
{this.state.haveCode ?
|
||||
null :
|
||||
<label>
|
||||
<div><label>
|
||||
<FormattedMessage id="label_reset_password_tel"
|
||||
defaultMessage="Send a password reset SMS:"
|
||||
defaultMessage="Send SMS to reset password"
|
||||
description="Label for password reset field by phone" />
|
||||
</label>
|
||||
</label></div>
|
||||
}
|
||||
<label className="small gray">
|
||||
<FormattedMessage id="mobile_phone_number" defaultMessage="Mobile phone number"
|
||||
description="Prompt for entering a mobile phone number" />
|
||||
</label>
|
||||
<Suspense fallback={<div><FormattedMessage id="loading_note" defaultMessage="Loading..."
|
||||
description="Message shown when component is loading"/></div>}>
|
||||
<PhoneEdit
|
||||
autoFocus={false}
|
||||
onShowCountrySelector={(code, dial) => console.log('onShowCountrySelector', code, dial)}
|
||||
onSubmit={(code, dial) => console.log('onSubmit', code, dial)} />
|
||||
</Suspense>
|
||||
<div>
|
||||
<label className="small gray">
|
||||
<FormattedMessage id="mobile_phone_number" defaultMessage="Mobile phone number"
|
||||
description="Prompt for entering a mobile phone number" />
|
||||
</label>
|
||||
</div>
|
||||
<div className="panel-form-row">
|
||||
<Suspense fallback={<div className="panel-form-row"><FormattedMessage id="loading_note"
|
||||
defaultMessage="Loading..." description="Message shown when component is loading"/></div>}>
|
||||
<PhoneEdit
|
||||
autoFocus={true}
|
||||
onShowCountrySelector={this.props.onShowCountrySelector}
|
||||
onSubmit={number => this.setState({tel: number})} />
|
||||
</Suspense>
|
||||
</div>
|
||||
</>);
|
||||
|
||||
const sentNotification = (<>{
|
||||
this.method == 'email' ?
|
||||
<FormattedMessage id="password_reset_email_sent"
|
||||
defaultMessage="An email with security code has been sent to {email}. Enter the code below."
|
||||
values={{email: <tt>{this.state.email}</tt>}}
|
||||
description="Notification that the email with password reset instructions has been sent" />
|
||||
: this.method == 'tel' ?
|
||||
<FormattedMessage id="password_reset_sms_sent"
|
||||
defaultMessage="A text message with security code has been sent to {phone}. Enter the code below."
|
||||
values={{phone: <tt>{this.state.tel}</tt>}}
|
||||
description="Notification that the SMS with password reset instructions has been sent" />
|
||||
:
|
||||
null
|
||||
}</>);
|
||||
|
||||
const codeInput = (<>
|
||||
<div>
|
||||
<label className="small gray" htmlFor="enter-confirmation-code">
|
||||
<FormattedMessage id="enter_confirmation_code_prompt"
|
||||
defaultMessage="Confirmation code"
|
||||
description="Request to enter confirmation code" />
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
<FormattedMessage id="numeric_confirmation_code_prompt"
|
||||
defaultMessage="Numbers only" description="Prompt for numeric conformation code">{
|
||||
(numbers_only) => <input type="text" id="enter-confirmation-code"
|
||||
placeholder={numbers_only} maxLength={10}
|
||||
value={this.state.code} onChange={this.handleCodeChange} required />
|
||||
}</FormattedMessage>
|
||||
</div>
|
||||
</>);
|
||||
|
||||
const credentialInput = this.method == 'email' ? emailInput : this.method == 'tel' ? phoneInput : null;
|
||||
|
||||
return (
|
||||
<form id="password-reset-form" onSubmit={this.handleSubmit}>
|
||||
{showPasswordInput ?
|
||||
passwordInput
|
||||
: this.state.sent ?
|
||||
<>
|
||||
<br/>
|
||||
<center><i className="material-icons huge green">task_alt</i></center>
|
||||
<br/>
|
||||
<center>{
|
||||
this.state.method == 'email' ?
|
||||
<FormattedMessage id="password_reset_email_sent"
|
||||
defaultMessage="An email with security code has been sent to {email}. Enter the code below."
|
||||
values={{ email: <tt>{this.state.email}</tt> }}
|
||||
description="Notification that the email with password reset instructions has been sent" />
|
||||
: this.state.method == 'tel' ?
|
||||
<FormattedMessage id="password_reset_sms_sent"
|
||||
defaultMessage="A text message with security code has been sent to {phone}. Enter the code below."
|
||||
values={{ email: <tt>{this.state.tel}</tt> }}
|
||||
description="Notification that the SMS with password reset instructions has been sent" />
|
||||
:
|
||||
null
|
||||
}</center>
|
||||
</>
|
||||
: this.state.method == 'email' ? emailInput : this.state.method == 'tel' ? phoneInput : null
|
||||
}
|
||||
{this.state.sent ? sentNotification : showCredentialInput ? credentialInput : null}
|
||||
{this.state.haveCode || this.state.sent ? codeInput : null}
|
||||
{showPasswordInput ? passwordInput : null}
|
||||
<div className="dialog-buttons">
|
||||
<button className="primary" type="submit">{
|
||||
(this.state.token && this.state.scheme) ?
|
||||
<FormattedMessage id="button_reset" defaultMessage="Reset" description="Button [Reset]" />
|
||||
: this.state.sent ?
|
||||
<FormattedMessage id="button_ok" defaultMessage="OK"
|
||||
description="Button [OK]" />
|
||||
:
|
||||
<FormattedMessage id="button_send_request" defaultMessage="Send request"
|
||||
description="Button [Send request]" />
|
||||
}</button>
|
||||
</div>
|
||||
{this.state.haveCode ? null :
|
||||
<div className="panel-form-row">
|
||||
<a href="#" onClick={this.handleShowCodeField}>
|
||||
{this.state.haveCode || this.state.sent ? null :
|
||||
<a href="#" onClick={this.handleShowCodeField} style={{marginRight: 'auto'}}>
|
||||
<FormattedMessage id="password_i_have_code" defaultMessage="I have code"
|
||||
description="Call to open field to enter password reset code" />
|
||||
</a>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
<button className="primary" type="submit">{
|
||||
showPasswordInput ?
|
||||
<FormattedMessage id="button_reset" defaultMessage="Reset" description="Button [Reset]" />
|
||||
:
|
||||
<FormattedMessage id="button_send_request" defaultMessage="Send request"
|
||||
description="Button [Send request]" />
|
||||
}</button>
|
||||
</div>
|
||||
</form>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -157,6 +157,7 @@ class SidepanelView extends React.PureComponent {
|
||||
view === 'register' ?
|
||||
<CreateAccountView
|
||||
tinode={this.props.tinode}
|
||||
serverVersion={this.props.serverVersion}
|
||||
onShowCountrySelector={this.props.onShowCountrySelector}
|
||||
onCreateAccount={this.props.onCreateAccount}
|
||||
onCancel={this.props.onCancel}
|
||||
@@ -247,6 +248,8 @@ class SidepanelView extends React.PureComponent {
|
||||
view === 'reset' ?
|
||||
<PasswordResetView
|
||||
tinode={this.props.tinode}
|
||||
serverVersion={this.props.serverVersion}
|
||||
onShowCountrySelector={this.props.onShowCountrySelector}
|
||||
onRequest={this.props.onPasswordResetRequest}
|
||||
onReset={this.props.onResetPassword}
|
||||
onCancel={this.props.onCancel} /> :
|
||||
|
||||
@@ -1712,13 +1712,13 @@ class TinodeWeb extends React.Component {
|
||||
});
|
||||
}
|
||||
|
||||
handleResetPassword(scheme, newPassword, token) {
|
||||
token = base64ReEncode(token);
|
||||
if (!token) {
|
||||
handleResetPassword(newPassword, tempAuth) {
|
||||
const secret = base64ReEncode(tempAuth.secret);
|
||||
if (!secret || !tempAuth.scheme) {
|
||||
this.handleError(this.props.intl.formatMessage(messages.invalid_security_token), 'err');
|
||||
} else {
|
||||
this.tinode.connect()
|
||||
.then(_ => this.tinode.updateAccountBasic(null, null, newPassword, {token: token}))
|
||||
.then(_ => this.tinode.updateAccountBasic(null, null, newPassword, {scheme: tempAuth.scheme, secret: secret}))
|
||||
.then(_ => HashNavigation.navigateTo(''))
|
||||
.catch(err => {
|
||||
// Socket error
|
||||
|
||||
@@ -87,21 +87,21 @@ class ValidationView extends React.PureComponent {
|
||||
return (
|
||||
<div className="panel-form">
|
||||
<div className="panel-form-row">
|
||||
<label className="small" htmlFor="enter-confirmation-code">
|
||||
<label className="small gray" htmlFor="enter-confirmation-code">
|
||||
<FormattedMessage id="enter_confirmation_code_prompt"
|
||||
defaultMessage="Enter confirmation code sent to you by {method}:"
|
||||
defaultMessage="Confirmation code"
|
||||
description="Request to enter confirmation code"
|
||||
values={{method: method}} />
|
||||
</label>
|
||||
</div>
|
||||
<div className="panel-form-row">
|
||||
<FormattedMessage id="numeric_confirmation_code_prompt"
|
||||
defaultMessage="Numbers only" description="Prompt for numeric conformation code">{
|
||||
(numbers_only) => <input type="text" id="enter-confirmation-code"
|
||||
placeholder={numbers_only}
|
||||
value={this.state.code} onChange={this.handleChange}
|
||||
onKeyPress={this.handleKeyPress} required />
|
||||
}</FormattedMessage>
|
||||
<FormattedMessage id="numeric_confirmation_code_prompt"
|
||||
defaultMessage="Numbers only" description="Prompt for numeric conformation code">{
|
||||
(numbers_only) => <input type="text" id="enter-confirmation-code"
|
||||
placeholder={numbers_only}
|
||||
value={this.state.code} onChange={this.handleChange}
|
||||
onKeyPress={this.handleKeyPress} required />
|
||||
}</FormattedMessage>
|
||||
</div>
|
||||
<div className="dialog-buttons">
|
||||
<button className="secondary" onClick={this.handleCancel}>
|
||||
|
||||
@@ -1,13 +1,21 @@
|
||||
// Editor for a phone number.
|
||||
|
||||
import React from 'react';
|
||||
import { injectIntl } from 'react-intl';
|
||||
import { defineMessages, injectIntl } from 'react-intl';
|
||||
import { getExampleNumber, parsePhoneNumber } from 'libphonenumber-js/mobile';
|
||||
import examples from 'libphonenumber-js/mobile/examples'
|
||||
|
||||
import * as dcodes from '../dcodes.json';
|
||||
import { flagEmoji } from '../lib/strformat';
|
||||
|
||||
const messages = defineMessages({
|
||||
mobile_number_required: {
|
||||
id: 'mobile_number_required',
|
||||
defaultMessage: 'Mobile phone number required',
|
||||
description: 'Error message'
|
||||
}
|
||||
});
|
||||
|
||||
class PhoneEdit extends React.PureComponent {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
@@ -37,14 +45,14 @@ class PhoneEdit extends React.PureComponent {
|
||||
|
||||
handleFinished(e) {
|
||||
e.preventDefault();
|
||||
const raw = `${this.state.dialCode}${this.state.localNumber.trim()}`.replace(/[^\d]/g, '')
|
||||
const raw = `${this.state.dialCode}${this.state.localNumber.trim()}`.replace(/[^\d]/g, '');
|
||||
let number = null;
|
||||
try {
|
||||
number = parsePhoneNumber(raw);
|
||||
number = parsePhoneNumber(`+${raw}`);
|
||||
} catch (err) {}
|
||||
|
||||
if (!number || !number.isValid()) {
|
||||
this.inputField.setCustomValidity("Mobile phone number required");
|
||||
this.inputField.setCustomValidity(this.props.intl.formatMessage(messages.mobile_number_required));
|
||||
return;
|
||||
}
|
||||
this.props.onSubmit(number.format('E.164'));
|
||||
@@ -80,7 +88,7 @@ class PhoneEdit extends React.PureComponent {
|
||||
|
||||
placeholderNumber(code, dial) {
|
||||
const sample = getExampleNumber(code, examples);
|
||||
return sample ? sample.formatInternational().substring(dial.length + 1).trim() : '123 456';
|
||||
return sample ? sample.formatInternational().substring(dial.length + 1).trim() : '123 0123';
|
||||
}
|
||||
|
||||
render() {
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+104
-65
@@ -4330,7 +4330,6 @@ class CreateAccountView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Pu
|
||||
newAvatarMime: null,
|
||||
errorCleared: false,
|
||||
buttonDisabled: false,
|
||||
method: 'tel',
|
||||
saveToken: _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_6__["default"].getObject('keep-logged-in')
|
||||
};
|
||||
this.handleLoginChange = this.handleLoginChange.bind(this);
|
||||
@@ -4454,6 +4453,7 @@ class CreateAccountView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Pu
|
||||
}
|
||||
}
|
||||
render() {
|
||||
const method = (this.props.tinode.getServerParam('reqCred', {}).auth || [])[0] || 'email';
|
||||
if (this.state.newAvatar) {
|
||||
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_avatar_crop_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
|
||||
avatar: this.state.newAvatar,
|
||||
@@ -4473,7 +4473,7 @@ class CreateAccountView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Pu
|
||||
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
||||
className: "panel-form-row"
|
||||
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
||||
className: "panel-form-column"
|
||||
className: "umn"
|
||||
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
|
||||
id: "login_prompt",
|
||||
defaultMessage: [{
|
||||
@@ -4520,7 +4520,7 @@ class CreateAccountView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Pu
|
||||
value: this.state.fn,
|
||||
onChange: this.handleFnChange,
|
||||
required: true
|
||||
}))), this.state.method == 'email' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
||||
}))), method == 'email' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
||||
className: "panel-form-row"
|
||||
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
|
||||
id: "email_prompt",
|
||||
@@ -4535,7 +4535,7 @@ class CreateAccountView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Pu
|
||||
value: this.state.email,
|
||||
onChange: this.handleEmailChange,
|
||||
required: true
|
||||
}))) : this.state.method == 'tel' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
||||
}))) : method == 'tel' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
||||
className: "panel-form-row"
|
||||
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
|
||||
className: "small gray"
|
||||
@@ -7179,18 +7179,17 @@ class PasswordResetView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Pu
|
||||
email: '',
|
||||
password: '',
|
||||
sent: false,
|
||||
method: '',
|
||||
haveCode: false
|
||||
haveCode: false,
|
||||
code: ''
|
||||
};
|
||||
this.handleSubmit = this.handleSubmit.bind(this);
|
||||
this.handleEmailChange = this.handleEmailChange.bind(this);
|
||||
this.handlePasswordChange = this.handlePasswordChange.bind(this);
|
||||
this.handleCodeChange = this.handleCodeChange.bind(this);
|
||||
this.handleShowCodeField = this.handleShowCodeField.bind(this);
|
||||
props.tinode.connect().catch(err => {
|
||||
this.props.onError(err.message, 'err');
|
||||
}).finally(_ => this.setState({
|
||||
method: (props.tinode.getServerParam('reqCred', {}).auth || [])[0] || 'email'
|
||||
}));
|
||||
});
|
||||
}
|
||||
componentDidMount() {
|
||||
const parsed = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_3__["default"].parseUrlHash(window.location.hash);
|
||||
@@ -7202,15 +7201,24 @@ class PasswordResetView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Pu
|
||||
handleSubmit(e) {
|
||||
e.preventDefault();
|
||||
if (this.state.token) {
|
||||
this.props.onReset(this.state.scheme, this.state.password.trim(), this.state.token);
|
||||
} else if (this.state.sent) {
|
||||
this.props.onCancel();
|
||||
this.props.onReset(this.state.password.trim(), {
|
||||
scheme: 'token',
|
||||
token: this.state.token
|
||||
});
|
||||
} else if (this.state.code && this.method) {
|
||||
const cred = this.state.email.trim() || this.state.tel.trim();
|
||||
this.props.onReset(this.state.password.trim(), {
|
||||
scheme: 'code',
|
||||
secret: `${this.state.code}:${this.method}:${cred}`
|
||||
});
|
||||
} else {
|
||||
const email = this.state.email.trim();
|
||||
const tel = this.state.tel.trim();
|
||||
this.setState({
|
||||
email: email
|
||||
email: email,
|
||||
tel: tel
|
||||
});
|
||||
this.props.onRequest('email', email).then(_ => this.setState({
|
||||
this.props.onRequest(this.method, email || tel).then(_ => this.setState({
|
||||
sent: true
|
||||
}));
|
||||
}
|
||||
@@ -7225,6 +7233,11 @@ class PasswordResetView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Pu
|
||||
password: e.target.value
|
||||
});
|
||||
}
|
||||
handleCodeChange(e) {
|
||||
this.setState({
|
||||
code: e.target.value.replace(/[^\d]/g, '')
|
||||
});
|
||||
}
|
||||
handleShowCodeField(e) {
|
||||
e.preventDefault();
|
||||
this.setState({
|
||||
@@ -7232,8 +7245,11 @@ class PasswordResetView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Pu
|
||||
});
|
||||
}
|
||||
render() {
|
||||
const showPasswordInput = this.state.token && this.state.scheme || this.state.haveCode;
|
||||
this.method = (this.props.tinode.getServerParam('reqCred', {}).auth || [])[0] || 'email';
|
||||
const showCredentialInput = !(this.state.token && this.state.scheme);
|
||||
const showPasswordInput = !showCredentialInput || this.state.haveCode || this.state.sent;
|
||||
const passwordInput = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
|
||||
className: "small gray",
|
||||
htmlFor: "new-password"
|
||||
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
|
||||
id: "label_new_password",
|
||||
@@ -7262,7 +7278,7 @@ class PasswordResetView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Pu
|
||||
id: "label_reset_password",
|
||||
defaultMessage: [{
|
||||
"type": 0,
|
||||
"value": "Send a password reset email:"
|
||||
"value": "Send a password reset email"
|
||||
}]
|
||||
})), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
|
||||
id: "credential_email_prompt",
|
||||
@@ -7280,13 +7296,13 @@ class PasswordResetView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Pu
|
||||
required: true,
|
||||
autoFocus: true
|
||||
})));
|
||||
const phoneInput = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, this.state.haveCode ? null : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
|
||||
const phoneInput = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, this.state.haveCode ? null : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
|
||||
id: "label_reset_password_tel",
|
||||
defaultMessage: [{
|
||||
"type": 0,
|
||||
"value": "Send a password reset SMS:"
|
||||
"value": "Send SMS to reset password"
|
||||
}]
|
||||
})), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
|
||||
}))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
|
||||
className: "small gray"
|
||||
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
|
||||
id: "mobile_phone_number",
|
||||
@@ -7294,8 +7310,12 @@ class PasswordResetView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Pu
|
||||
"type": 0,
|
||||
"value": "Mobile phone number"
|
||||
}]
|
||||
})), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {
|
||||
fallback: react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
|
||||
}))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
||||
className: "panel-form-row"
|
||||
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {
|
||||
fallback: react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
||||
className: "panel-form-row"
|
||||
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
|
||||
id: "loading_note",
|
||||
defaultMessage: [{
|
||||
"type": 0,
|
||||
@@ -7303,16 +7323,13 @@ class PasswordResetView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Pu
|
||||
}]
|
||||
}))
|
||||
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PhoneEdit, {
|
||||
autoFocus: false,
|
||||
onShowCountrySelector: (code, dial) => console.log('onShowCountrySelector', code, dial),
|
||||
onSubmit: (code, dial) => console.log('onSubmit', code, dial)
|
||||
})));
|
||||
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("form", {
|
||||
id: "password-reset-form",
|
||||
onSubmit: this.handleSubmit
|
||||
}, showPasswordInput ? passwordInput : this.state.sent ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("br", null), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("center", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
|
||||
className: "material-icons huge green"
|
||||
}, "task_alt")), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("br", null), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("center", null, this.state.method == 'email' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
|
||||
autoFocus: true,
|
||||
onShowCountrySelector: this.props.onShowCountrySelector,
|
||||
onSubmit: number => this.setState({
|
||||
tel: number
|
||||
})
|
||||
}))));
|
||||
const sentNotification = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, this.method == 'email' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
|
||||
id: "password_reset_email_sent",
|
||||
defaultMessage: [{
|
||||
"type": 0,
|
||||
@@ -7327,7 +7344,7 @@ class PasswordResetView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Pu
|
||||
values: {
|
||||
email: react__WEBPACK_IMPORTED_MODULE_0___default().createElement("tt", null, this.state.email)
|
||||
}
|
||||
}) : this.state.method == 'tel' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
|
||||
}) : this.method == 'tel' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
|
||||
id: "password_reset_sms_sent",
|
||||
defaultMessage: [{
|
||||
"type": 0,
|
||||
@@ -7340,42 +7357,66 @@ class PasswordResetView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Pu
|
||||
"value": ". Enter the code below."
|
||||
}],
|
||||
values: {
|
||||
email: react__WEBPACK_IMPORTED_MODULE_0___default().createElement("tt", null, this.state.tel)
|
||||
phone: react__WEBPACK_IMPORTED_MODULE_0___default().createElement("tt", null, this.state.tel)
|
||||
}
|
||||
}) : null)) : this.state.method == 'email' ? emailInput : this.state.method == 'tel' ? phoneInput : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
||||
}) : null);
|
||||
const codeInput = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
|
||||
className: "small gray",
|
||||
htmlFor: "enter-confirmation-code"
|
||||
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
|
||||
id: "enter_confirmation_code_prompt",
|
||||
defaultMessage: [{
|
||||
"type": 0,
|
||||
"value": "Confirmation code"
|
||||
}]
|
||||
}))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
|
||||
id: "numeric_confirmation_code_prompt",
|
||||
defaultMessage: [{
|
||||
"type": 0,
|
||||
"value": "Numbers only"
|
||||
}]
|
||||
}, numbers_only => react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
|
||||
type: "text",
|
||||
id: "enter-confirmation-code",
|
||||
placeholder: numbers_only,
|
||||
maxLength: 10,
|
||||
value: this.state.code,
|
||||
onChange: this.handleCodeChange,
|
||||
required: true
|
||||
}))));
|
||||
const credentialInput = this.method == 'email' ? emailInput : this.method == 'tel' ? phoneInput : null;
|
||||
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("form", {
|
||||
id: "password-reset-form",
|
||||
onSubmit: this.handleSubmit
|
||||
}, this.state.sent ? sentNotification : showCredentialInput ? credentialInput : null, this.state.haveCode || this.state.sent ? codeInput : null, showPasswordInput ? passwordInput : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
||||
className: "dialog-buttons"
|
||||
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
|
||||
}, this.state.haveCode || this.state.sent ? null : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
|
||||
href: "#",
|
||||
onClick: this.handleShowCodeField,
|
||||
style: {
|
||||
marginRight: 'auto'
|
||||
}
|
||||
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
|
||||
id: "password_i_have_code",
|
||||
defaultMessage: [{
|
||||
"type": 0,
|
||||
"value": "I have code"
|
||||
}]
|
||||
})), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
|
||||
className: "primary",
|
||||
type: "submit"
|
||||
}, this.state.token && this.state.scheme ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
|
||||
}, showPasswordInput ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
|
||||
id: "button_reset",
|
||||
defaultMessage: [{
|
||||
"type": 0,
|
||||
"value": "Reset"
|
||||
}]
|
||||
}) : this.state.sent ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
|
||||
id: "button_ok",
|
||||
defaultMessage: [{
|
||||
"type": 0,
|
||||
"value": "OK"
|
||||
}]
|
||||
}) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
|
||||
id: "button_send_request",
|
||||
defaultMessage: [{
|
||||
"type": 0,
|
||||
"value": "Send request"
|
||||
}]
|
||||
}))), this.state.haveCode ? null : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
||||
className: "panel-form-row"
|
||||
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
|
||||
href: "#",
|
||||
onClick: this.handleShowCodeField
|
||||
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
|
||||
id: "password_i_have_code",
|
||||
defaultMessage: [{
|
||||
"type": 0,
|
||||
"value": "I have code"
|
||||
}]
|
||||
}))));
|
||||
}
|
||||
}
|
||||
@@ -7729,6 +7770,7 @@ class SidepanelView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureCo
|
||||
onPersistenceChange: this.props.onPersistenceChange
|
||||
}) : view === 'register' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_create_account_view_jsx__WEBPACK_IMPORTED_MODULE_8__["default"], {
|
||||
tinode: this.props.tinode,
|
||||
serverVersion: this.props.serverVersion,
|
||||
onShowCountrySelector: this.props.onShowCountrySelector,
|
||||
onCreateAccount: this.props.onCreateAccount,
|
||||
onCancel: this.props.onCancel,
|
||||
@@ -7799,6 +7841,8 @@ class SidepanelView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureCo
|
||||
onCancel: this.props.onCancel
|
||||
}) : view === 'reset' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_password_reset_view_jsx__WEBPACK_IMPORTED_MODULE_14__["default"], {
|
||||
tinode: this.props.tinode,
|
||||
serverVersion: this.props.serverVersion,
|
||||
onShowCountrySelector: this.props.onShowCountrySelector,
|
||||
onRequest: this.props.onPasswordResetRequest,
|
||||
onReset: this.props.onResetPassword,
|
||||
onCancel: this.props.onCancel
|
||||
@@ -9365,13 +9409,14 @@ class TinodeWeb extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component)
|
||||
this.handleError(err.message, 'err');
|
||||
});
|
||||
}
|
||||
handleResetPassword(scheme, newPassword, token) {
|
||||
token = (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_15__.base64ReEncode)(token);
|
||||
if (!token) {
|
||||
handleResetPassword(newPassword, tempAuth) {
|
||||
const secret = (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_15__.base64ReEncode)(tempAuth.secret);
|
||||
if (!secret || !tempAuth.scheme) {
|
||||
this.handleError(this.props.intl.formatMessage(messages.invalid_security_token), 'err');
|
||||
} else {
|
||||
this.tinode.connect().then(_ => this.tinode.updateAccountBasic(null, null, newPassword, {
|
||||
token: token
|
||||
scheme: tempAuth.scheme,
|
||||
secret: secret
|
||||
})).then(_ => _lib_navigation_js__WEBPACK_IMPORTED_MODULE_18__["default"].navigateTo('')).catch(err => {
|
||||
this.handleError(err.message, 'err');
|
||||
});
|
||||
@@ -9839,19 +9884,13 @@ class ValidationView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureC
|
||||
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
||||
className: "panel-form-row"
|
||||
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
|
||||
className: "small",
|
||||
className: "small gray",
|
||||
htmlFor: "enter-confirmation-code"
|
||||
}, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
|
||||
id: "enter_confirmation_code_prompt",
|
||||
defaultMessage: [{
|
||||
"type": 0,
|
||||
"value": "Enter confirmation code sent to you by "
|
||||
}, {
|
||||
"type": 1,
|
||||
"value": "method"
|
||||
}, {
|
||||
"type": 0,
|
||||
"value": ":"
|
||||
"value": "Confirmation code"
|
||||
}],
|
||||
values: {
|
||||
method: method
|
||||
|
||||
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -26,6 +26,15 @@ __webpack_require__.r(__webpack_exports__);
|
||||
|
||||
|
||||
|
||||
const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
|
||||
mobile_number_required: {
|
||||
id: "mobile_number_required",
|
||||
defaultMessage: [{
|
||||
"type": 0,
|
||||
"value": "Mobile phone number required"
|
||||
}]
|
||||
}
|
||||
});
|
||||
class PhoneEdit extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
@@ -56,10 +65,10 @@ class PhoneEdit extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureCompon
|
||||
const raw = `${this.state.dialCode}${this.state.localNumber.trim()}`.replace(/[^\d]/g, '');
|
||||
let number = null;
|
||||
try {
|
||||
number = (0,libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_4__.parsePhoneNumberWithError)(raw);
|
||||
number = (0,libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_4__.parsePhoneNumberWithError)(`+${raw}`);
|
||||
} catch (err) {}
|
||||
if (!number || !number.isValid()) {
|
||||
this.inputField.setCustomValidity("Mobile phone number required");
|
||||
this.inputField.setCustomValidity(this.props.intl.formatMessage(messages.mobile_number_required));
|
||||
return;
|
||||
}
|
||||
this.props.onSubmit(number.format('E.164'));
|
||||
@@ -86,7 +95,7 @@ class PhoneEdit extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureCompon
|
||||
}
|
||||
placeholderNumber(code, dial) {
|
||||
const sample = (0,libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_5__.getExampleNumber)(code, libphonenumber_js_mobile_examples__WEBPACK_IMPORTED_MODULE_6__["default"]);
|
||||
return sample ? sample.formatInternational().substring(dial.length + 1).trim() : '123 456';
|
||||
return sample ? sample.formatInternational().substring(dial.length + 1).trim() : '123 0123';
|
||||
}
|
||||
render() {
|
||||
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
|
||||
|
||||
File diff suppressed because one or more lines are too long
+7
-4
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user