status-desktop/ui/imports/shared/popups/NicknamePopup.qml

103 lines
3.4 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 QtQml.Models 2.15
import StatusQ 0.1
import StatusQ.Core 0.1
import StatusQ.Core.Theme 0.1
import StatusQ.Controls 0.1
import StatusQ.Controls.Validators 0.1
import StatusQ.Popups.Dialog 0.1
import shared.controls 1.0
import utils 1.0
CommonContactDialog {
id: root
readonly property string nickname: contactDetails.localNickname
signal editDone(string newNickname)
signal removeNicknameRequested()
title: d.editMode ? qsTr("Edit nickname") : qsTr("Add nickname")
onOpened: {
nicknameInput.input.edit.forceActiveFocus()
}
readonly property var d: QtObject {
id: d
readonly property bool editMode: root.nickname !== ""
}
StatusInput {
Layout.fillWidth: true
id: nicknameInput
label: qsTr("Nickname")
input.clearable: true
text: root.nickname
charLimit: Constants.keypair.nameLengthMax
validators: [
StatusValidator {
validatorObj: RXValidator { regularExpression: /^[\w\d_ -\.]*$/u }
validate: (value) => validatorObj.test(value)
errorMessage: qsTr("Invalid characters (use A-Z and 0-9, hyphens and underscores only)")
},
StatusMinLengthValidator {
minLength: Constants.keypair.nameLengthMin
errorMessage: qsTr("Nicknames must be at least %n character(s) long", "", minLength)
},
StatusValidator {
name: "startsWithSpaceValidator"
validate: function (t) { return !(t.startsWith(" ") || t.endsWith(" "))}
errorMessage: qsTr("Nicknames cant start or end with a space")
},
StatusValidator {
name: "endsWith-ethValidator"
validate: function (t) { return !(t.endsWith("-eth") || t.endsWith("_eth") || t.endsWith(".eth")) }
errorMessage: qsTr("Nicknames cant end in “.eth”, “_eth” or “-eth”")
},
StatusValidator {
name: "isAliasValidator"
validate: function (t) { return !Utils.isAlias(t) }
errorMessage: qsTr("Adjective-animal nickname formats are not allowed")
}
]
onKeyPressed: {
if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
if (root.nickname !== nicknameInput.text && nicknameInput.valid)
root.editDone(nicknameInput.text)
}
}
}
StatusBaseText {
Layout.fillWidth: true
text: qsTr("Nicknames help you identify others and are only visible to you")
wrapMode: Text.WordWrap
color: Theme.palette.baseColor1
font.pixelSize: Theme.tertiaryTextFontSize
}
rightButtons: ObjectModel {
StatusFlatButton {
visible: !d.editMode
text: qsTr("Cancel")
onClicked: root.close()
}
StatusFlatButton {
visible: d.editMode
borderColor: "transparent"
type: StatusBaseButton.Type.Danger
text: qsTr("Remove nickname")
onClicked: root.removeNicknameRequested()
}
StatusButton {
enabled: root.nickname !== nicknameInput.text && nicknameInput.valid
text: d.editMode ? qsTr("Change nickname") : qsTr("Add nickname")
onClicked: root.editDone(nicknameInput.text)
}
}
}