moment/src/qml/Pages/SignIn.qml

120 lines
3.4 KiB
QML
Raw Normal View History

import QtQuick 2.12
import QtQuick.Layouts 1.12
import "../Base"
HPage {
property string loginWith: "username"
readonly property bool canLogin: idField.text && passwordField.text
onFocusChanged: idField.forceActiveFocus()
HInterfaceBox {
id: signInBox
Layout.alignment: Qt.AlignCenter
multiplyWidth: 0.85
title: qsTr("Sign in")
enterButtonTarget: "login"
buttonModel: [
{ name: "register", text: qsTr("Register"), enabled: false },
{ name: "login", text: qsTr("Login"), enabled: canLogin },
{ name: "forgot", text: qsTr("Forgot?"), enabled: false },
]
buttonCallbacks: ({
register: button => {},
login: button => {
button.loading = true
2019-07-18 19:18:13 +10:00
let args = [idField.text, passwordField.text]
2019-08-17 06:30:18 +10:00
py.callCoro("login_client", args, ([success, data]) => {
if (! success) {
2019-08-17 06:30:18 +10:00
errorMessage.text = qsTr(data)
button.loading = false
return
2019-08-17 06:30:18 +10:00
}
py.callCoro(
"saved_accounts." +
(rememberAccount.checked ? "add": "delete"),
[data]
)
pageLoader.showPage(
"EditAccount/EditAccount", {userId: data}
)
errorMessage.text = ""
button.loading = false
2019-04-28 11:07:20 +10:00
})
},
forgot: button => {}
})
HRowLayout {
spacing: signInBox.horizontalSpacing * 1.25
Layout.alignment: Qt.AlignHCenter
Layout.topMargin: signInBox.verticalSpacing / 2
Layout.bottomMargin: Layout.topMargin
Repeater {
model: ["username", "email", "phone"]
2019-08-21 07:41:24 +10:00
HButton {
iconName: modelData
ico.dimension: 24
circle: true
checked: loginWith == modelData
2019-07-25 08:41:40 +10:00
enabled: modelData == "username"
autoExclusive: true
onClicked: loginWith = modelData
}
}
}
HTextField {
id: idField
placeholderText: qsTr(
loginWith === "email" ? "Email" :
loginWith === "phone" ? "Phone" :
"Username"
)
Layout.fillWidth: true
}
HTextField {
id: passwordField
placeholderText: qsTr("Password")
2019-04-29 05:36:43 +10:00
echoMode: HTextField.Password
Layout.fillWidth: true
}
HCheckBox {
id: rememberAccount
text: qsTr("Automatically sign in")
checked: true
spacing: signInBox.horizontalSpacing
Layout.maximumWidth: parent.width
Layout.alignment: Qt.AlignHCenter
}
2019-08-17 06:30:18 +10:00
HLabel {
id: errorMessage
wrapMode: Text.Wrap
horizontalAlignment: Text.AlignHCenter
color: theme.colors.errorText
visible: Layout.maximumHeight > 0
Layout.maximumHeight: text ? implicitHeight : 0
Behavior on Layout.maximumHeight { HNumberAnimation {} }
Layout.fillWidth: true
}
}
}