Warning, /network/tokodon/src/content/ui/LoginFlow/RegistrationPage.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2023 Joshua Goins <josh@redstrate.com>
0002 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0003
0004 import QtQuick
0005 import org.kde.kirigami 2 as Kirigami
0006 import QtQuick.Controls 2 as QQC2
0007 import QtQuick.Layouts
0008 import QtQml.Models
0009
0010 import org.kde.kirigamiaddons.formcard 1 as FormCard
0011 import org.kde.kirigamiaddons.components 1 as Components
0012
0013 import org.kde.tokodon
0014
0015 MastoPage {
0016 id: root
0017
0018 title: i18nc("@title:window", "Registration")
0019
0020 required property var account
0021
0022 data: [
0023 Connections {
0024 target: Controller
0025 function onNetworkErrorOccurred(error) {
0026 message.text = i18nc("@info:status Network status", "Failed to contact server: %1. Please check your proxy settings.", error)
0027 message.visible = true;
0028 }
0029 },
0030 Connections {
0031 target: root.account
0032
0033 function onRegistrationError(json) {
0034 const obj = JSON.parse(json);
0035
0036 if (obj.error) {
0037 message.text = i18nc("@info:status Network status", "Failed to contact server: %1. Please check your proxy settings.", obj.error)
0038 message.visible = true;
0039 return;
0040 }
0041
0042 const details = obj.details;
0043
0044 for (const key in details) {
0045 let targetItem;
0046 let targetName;
0047 if (key === "email") {
0048 targetItem = usernameField;
0049 targetName = usernameField.label;
0050 } else if (key === "email") {
0051 targetItem = emailField;
0052 targetName = emailField.label;
0053 } else if (key === "password") {
0054 targetItem = passwordField;
0055 targetName = passwordField.label;
0056 } else if (key === "reason") {
0057 targetItem = reasonField;
0058 targetName = reasonField.label;
0059 }
0060
0061 let errorMessage = "";
0062
0063 for (const error in details[key]) {
0064 if (error > 0) {
0065 errorMessage += "\n";
0066 }
0067 errorMessage += targetName + " " + details[key][error].description;
0068 }
0069
0070 targetItem.status = Kirigami.MessageType.Error;
0071 targetItem.statusMessage = errorMessage;
0072 }
0073 }
0074 }
0075 ]
0076
0077 header: Components.Banner {
0078 id: message
0079 type: Kirigami.MessageType.Error
0080 width: parent.width
0081
0082 showCloseButton: true
0083
0084 actions: Kirigami.Action {
0085 text: i18n("Proxy Settings")
0086 icon.name: "settings-configure"
0087 onTriggered: pageStack.pushDialogLayer(Qt.createComponent("org.kde.tokodon", "NetworkProxyPage"))
0088 }
0089 }
0090
0091 Component.onCompleted: usernameField.forceActiveFocus()
0092
0093 FormCard.FormHeader {
0094 title: i18nc("@title:group", "Register")
0095 }
0096
0097 FormCard.FormCard {
0098 FormCard.FormTextFieldDelegate {
0099 id: usernameField
0100 label: i18n("Username")
0101 inputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhNoAutoUppercase
0102 onAccepted: emailField.forceActiveFocus()
0103 }
0104
0105 FormCard.FormDelegateSeparator {}
0106
0107 FormCard.FormTextFieldDelegate {
0108 id: emailField
0109 label: i18n("Email Address")
0110 inputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhNoAutoUppercase
0111 onAccepted: passwordField.forceActiveFocus()
0112 }
0113
0114 FormCard.FormDelegateSeparator {}
0115
0116 FormCard.FormTextFieldDelegate {
0117 id: passwordField
0118 label: i18n("Password")
0119 echoMode: TextInput.Password
0120 inputMethodHints: Qt.ImhHiddenText | Qt.ImhSensitiveData | Qt.ImhNoPredictiveText
0121 onAccepted: reasonField.forceActiveFocus()
0122 }
0123
0124 FormCard.FormDelegateSeparator {}
0125
0126 FormCard.FormTextFieldDelegate {
0127 id: reasonField
0128 label: i18n("Reason")
0129 }
0130 }
0131
0132 FormCard.FormCard {
0133 Layout.topMargin: Kirigami.Units.largeSpacing
0134
0135 FormCard.FormButtonDelegate {
0136 id: continueButton
0137 text: i18n("Register")
0138 onClicked: {
0139 root.account.registerAccount(usernameField.text, emailField.text, passwordField.text, true, "en", reasonField.text);
0140
0141 account.authenticated.connect(() => {
0142 pageStack.layers.clear();
0143 pageStack.replace(mainTimeline, {
0144 name: "home"
0145 });
0146 Window.window.close();
0147 });
0148 }
0149 }
0150 }
0151 }