status-desktop/ui/imports/shared/popups/keycard/states/EnterPairingCode.qml

184 lines
5.7 KiB
QML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import QtQuick 2.15
import QtQuick.Layouts 1.15
import StatusQ.Core 0.1
import StatusQ.Core.Theme 0.1
import StatusQ.Controls 0.1
import utils 1.0
Item {
id: root
property var sharedKeycardModule
signal validation(bool result)
QtObject {
id: d
property bool allEntriesValid: false
function processText(text) {
if(text.length === 0)
return ""
if(/(^\s|^\r|^\n)|(\s$|^\r$|^\n$)/.test(text)) {
return text.trim()
}
else if(/\s|\r|\n/.test(text)) {
return ""
}
return text
}
function update() {
let codeEntered = code0.text.length > 0 && code1.text.length > 0
if (codeEntered && code0.text !== code1.text) {
errorTxt.text = qsTr("The codes dont match")
}
else {
errorTxt.text = ""
}
d.allEntriesValid = codeEntered && code0.text === code1.text
if (d.allEntriesValid) {
root.sharedKeycardModule.setPairingCode(code0.text)
}
else {
root.sharedKeycardModule.setPairingCode("")
}
root.validation(d.allEntriesValid)
}
}
ColumnLayout {
anchors.fill: parent
anchors.topMargin: Theme.xlPadding
anchors.bottomMargin: Theme.halfPadding
anchors.leftMargin: Theme.xlPadding
anchors.rightMargin: Theme.xlPadding
spacing: Theme.padding
clip: true
StatusBaseText {
id: title
Layout.preferredHeight: Constants.keycard.general.titleHeight
Layout.alignment: Qt.AlignHCenter
text: qsTr("Enter a new pairing code")
font.pixelSize: Constants.keycard.general.fontSize1
font.weight: Font.Bold
color: Theme.palette.directColor1
}
StatusBaseText {
Layout.preferredWidth: code0.width
Layout.alignment: Qt.AlignCenter
text: qsTr("Pairing code")
font.pixelSize: Constants.keycard.general.fontSize2
color: Theme.palette.directColor1
}
StatusPasswordInput {
id: code0
property bool showPassword: false
Layout.preferredWidth: Constants.keycard.general.keycardPairingCodeInputWidth
Layout.alignment: Qt.AlignCenter
placeholderText: qsTr("Enter code")
echoMode: showPassword ? TextInput.Normal : TextInput.Password
rightPadding: showHideIcon0.width + showHideIcon0.anchors.rightMargin + Theme.padding / 2
onTextChanged: {
text = d.processText(text)
d.update()
}
onAccepted: {
if (d.allEntriesValid &&
(input.edit.keyEvent === Qt.Key_Return ||
input.edit.keyEvent === Qt.Key_Enter)) {
event.accepted = true
root.sharedKeycardModule.currentState.doPrimaryAction()
}
}
StatusFlatRoundButton {
id: showHideIcon0
visible: code0.text !== ""
anchors.verticalCenter: parent.verticalCenter
anchors.right: parent.right
anchors.rightMargin: 16
width: 24
height: 24
icon.name: code0.showPassword ? "hide" : "show"
icon.color: Theme.palette.baseColor1
onClicked: code0.showPassword = !code0.showPassword
}
}
Item {
Layout.fillWidth: true
Layout.preferredHeight: Theme.padding
}
StatusBaseText {
Layout.preferredWidth: code1.width
Layout.alignment: Qt.AlignCenter
text: qsTr("Confirm pairing code")
font.pixelSize: Constants.keycard.general.fontSize2
color: Theme.palette.directColor1
}
StatusPasswordInput {
id: code1
property bool showPassword: false
Layout.preferredWidth: Constants.keycard.general.keycardPairingCodeInputWidth
Layout.alignment: Qt.AlignCenter
placeholderText: qsTr("Confirm code")
echoMode: showPassword ? TextInput.Normal : TextInput.Password
rightPadding: showHideIcon1.width + showHideIcon1.anchors.rightMargin + Theme.padding / 2
onTextChanged: {
text = d.processText(text)
d.update()
}
onAccepted: {
if (d.allEntriesValid &&
(input.edit.keyEvent === Qt.Key_Return ||
input.edit.keyEvent === Qt.Key_Enter)) {
event.accepted = true
root.sharedKeycardModule.currentState.doPrimaryAction()
}
}
StatusFlatRoundButton {
id: showHideIcon1
visible: code1.text !== ""
anchors.verticalCenter: parent.verticalCenter
anchors.right: parent.right
anchors.rightMargin: 16
width: 24
height: 24
icon.name: code1.showPassword ? "hide" : "show"
icon.color: Theme.palette.baseColor1
onClicked: code1.showPassword = !code1.showPassword
}
}
StatusBaseText {
id: errorTxt
Layout.alignment: Qt.AlignHCenter
Layout.fillHeight: true
font.pixelSize: Constants.keycard.general.fontSize3
color: Theme.palette.dangerColor1
}
}
}