mirror of
https://github.com/status-im/status-desktop.git
synced 2025-02-01 01:06:07 +00:00
47ae3a4c16
use the available dark image for ens section add the image, ensure 624 widths and fix button move common strings to constants and use number consts
264 lines
8.9 KiB
QML
264 lines
8.9 KiB
QML
import QtQuick 2.14
|
|
import QtQuick.Layouts 1.3
|
|
import QtQuick.Controls 2.14
|
|
import "../../../../../imports"
|
|
import "../../../../../shared"
|
|
import "../../../../../shared/status"
|
|
|
|
Item {
|
|
id: searchENS
|
|
|
|
signal continueClicked(string output, string username)
|
|
signal usernameUpdated(username: string);
|
|
|
|
|
|
property string validationMessage: ""
|
|
property bool valid: false
|
|
property bool isStatus: true
|
|
property bool loading: false
|
|
property string ensStatus: ""
|
|
|
|
property var validateENS: Backpressure.debounce(searchENS, 500, function (ensName, isStatus){
|
|
profileModel.ens.validate(ensName, isStatus)
|
|
});
|
|
|
|
function validate(ensUsername) {
|
|
validationMessage = "";
|
|
valid = false;
|
|
ensStatus = "";
|
|
if (ensUsername.length < 4) {
|
|
//% "At least 4 characters. Latin letters, numbers, and lowercase only."
|
|
validationMessage = qsTrId("ens-username-hints");
|
|
} else if(isStatus && !ensUsername.match(/^[a-z0-9]+$/)){
|
|
//% "Letters and numbers only."
|
|
validationMessage = qsTrId("ens-username-invalid");
|
|
} else if(!isStatus && !ensUsername.endsWith(".eth")){
|
|
//% "Type the entire username including the custom domain like username.domain.eth"
|
|
validationMessage = qsTrId("ens-custom-username-hints")
|
|
}
|
|
return validationMessage === "";
|
|
}
|
|
|
|
function onKeyReleased(ensUsername){
|
|
if (!validate(ensUsername)) {
|
|
return;
|
|
}
|
|
loading = true;
|
|
Qt.callLater(validateENS, ensUsername, isStatus)
|
|
}
|
|
|
|
Loader {
|
|
id: transactionDialog
|
|
function open() {
|
|
this.active = true
|
|
this.item.open()
|
|
}
|
|
function closed() {
|
|
this.active = false // kill an opened instance
|
|
}
|
|
sourceComponent: SetPubKeyModal {
|
|
onClosed: {
|
|
transactionDialog.closed()
|
|
}
|
|
ensUsername: ensUsername.text
|
|
width: 400
|
|
height: 400
|
|
}
|
|
}
|
|
|
|
Item {
|
|
id: ensContainer
|
|
anchors.top: parent.top
|
|
width: 624
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
StyledText {
|
|
id: sectionTitle
|
|
text: ""
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: Style.current.bigPadding
|
|
anchors.top: parent.top
|
|
anchors.topMargin: Style.current.bigPadding
|
|
font.weight: Font.Bold
|
|
font.pixelSize: 20
|
|
}
|
|
|
|
Rectangle {
|
|
id: circleAt
|
|
anchors.top: sectionTitle.bottom
|
|
anchors.topMargin: Style.current.bigPadding
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
width: 60
|
|
height: 60
|
|
radius: 120
|
|
color: Style.current.blue
|
|
|
|
SVGImage {
|
|
id: imgIcon
|
|
visible: ensStatus === Constants.ens_taken
|
|
fillMode: Image.PreserveAspectFit
|
|
source: "../../../../img/block-icon-white.svg"
|
|
width: 20
|
|
height: 20
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
}
|
|
|
|
StyledText {
|
|
visible: ensStatus !== Constants.ens_taken
|
|
text: {
|
|
if((ensStatus === Constants.ens_available ||
|
|
ensStatus === Constants.ens_connected ||
|
|
ensStatus === Constants.ens_connected_dkey)) {
|
|
return "✓"
|
|
} else {
|
|
return "@"
|
|
}
|
|
}
|
|
opacity: 0.7
|
|
font.weight: Font.Bold
|
|
font.pixelSize: 18
|
|
color: Style.current.white
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
}
|
|
}
|
|
|
|
Input {
|
|
id: ensUsername
|
|
placeholderText: !isStatus ? "vitalik94.domain.eth" : "vitalik94"
|
|
anchors.top: circleAt.bottom
|
|
anchors.topMargin: Style.current.bigPadding
|
|
anchors.right: btnContinue.left
|
|
anchors.rightMargin: Style.current.bigPadding
|
|
Keys.onReleased: {
|
|
onKeyReleased(ensUsername.text);
|
|
}
|
|
|
|
Connections {
|
|
target: profileModel.ens
|
|
onEnsWasResolved: {
|
|
if(!validate(ensUsername.text)) return;
|
|
valid = false;
|
|
loading = false;
|
|
ensStatus = ensResult;
|
|
switch(ensResult){
|
|
case Constants.ens_available:
|
|
case Constants.ens_owned:
|
|
case Constants.ens_connected:
|
|
case Constants.ens_connected_dkey:
|
|
valid = true;
|
|
validationMessage = Constants.ensState[ensResult]
|
|
break;
|
|
case Constants.ens_taken:
|
|
validationMessage = !isStatus ? Constants.ensState['taken_custom'] : Constants.ensState['taken'];
|
|
break;
|
|
case Constants.already_connected:
|
|
validationMessage = Constants.ensState[ensResult]
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
StatusRoundButton {
|
|
id: btnContinue
|
|
width: 44
|
|
height: 44
|
|
anchors.top: circleAt.bottom
|
|
anchors.topMargin: Style.current.bigPadding
|
|
anchors.right: parent.right
|
|
size: "medium"
|
|
type: "secondary"
|
|
icon.name: "arrow-right"
|
|
icon.width: 18
|
|
icon.height: 14
|
|
visible: valid
|
|
onClicked: {
|
|
if(!valid) return;
|
|
|
|
if(ensStatus === Constants.ens_connected){
|
|
profileModel.ens.connectOwnedUsername(ensUsername.text, isStatus);
|
|
continueClicked(ensStatus, ensUsername.text)
|
|
return;
|
|
}
|
|
|
|
if(ensStatus === Constants.ens_available){
|
|
continueClicked(ensStatus, ensUsername.text);
|
|
return;
|
|
}
|
|
|
|
if(ensStatus === Constants.ens_connected_dkey || ensStatus === Constants.ens_owned){
|
|
transactionDialog.open();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
id: ensTypeRect
|
|
anchors.top: ensUsername.bottom
|
|
anchors.topMargin: Style.current.bigPadding
|
|
border.width: 1
|
|
border.color: Style.current.border
|
|
color: Style.current.background
|
|
radius: 50
|
|
height: 30
|
|
width: 350
|
|
|
|
Item {
|
|
anchors.left: parent.left
|
|
anchors.right: parent.right
|
|
anchors.top: parent.top
|
|
anchors.topMargin: Style.current.halfPadding
|
|
anchors.leftMargin: Style.current.padding
|
|
height: 20
|
|
|
|
StyledText {
|
|
text: !isStatus ?
|
|
//% "Custom domain"
|
|
qsTrId("ens-custom-domain")
|
|
:
|
|
".stateofus.eth"
|
|
font.weight: Font.Bold
|
|
font.pixelSize: 12
|
|
anchors.leftMargin: Style.current.padding
|
|
color: Style.current.textColor
|
|
}
|
|
|
|
StyledText {
|
|
text: !isStatus ?
|
|
//% "I want a stateofus.eth domain"
|
|
qsTrId("ens-want-domain")
|
|
:
|
|
//% "I own a name on another domain"
|
|
qsTrId("ens-want-custom-domain")
|
|
font.pixelSize: 12
|
|
color: Style.current.blue
|
|
anchors.right: parent.right
|
|
anchors.rightMargin: Style.current.padding
|
|
|
|
MouseArea {
|
|
cursorShape: Qt.PointingHandCursor
|
|
anchors.fill: parent
|
|
onClicked : {
|
|
isStatus = !isStatus;
|
|
let ensUser = ensUsername.text;
|
|
if(validate(ensUser))
|
|
validateENS(ensUser, isStatus)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
StyledText {
|
|
id: validationResult
|
|
text: validationMessage
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
anchors.top: ensTypeRect.bottom
|
|
anchors.topMargin: Style.current.bigPadding
|
|
}
|
|
}
|
|
}
|