password reset works, missing translations

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