status-desktop/ui/app/AppLayouts/Profile/views/EnsView.qml

371 lines
10 KiB
QML
Raw Normal View History

import QtQuick 2.14
2020-05-27 21:28:25 +00:00
import QtQuick.Layouts 1.3
import QtQuick.Controls 2.14
import QtQml.StateMachine 1.14 as DSM
import utils 1.0
import shared 1.0
import shared.stores 1.0 as SharedStores
import shared.stores.send 1.0
import AppLayouts.Wallet.stores 1.0
import "../stores"
2020-05-27 21:28:25 +00:00
Item {
id: ensView
2020-05-27 21:28:25 +00:00
property EnsUsernamesStore ensUsernamesStore
property WalletAssetsStore walletAssetsStore
property ContactsStore contactsStore
property SharedStores.NetworkConnectionStore networkConnectionStore
required property TransactionStore transactionStore
property int profileContentWidth
property bool showSearchScreen: false
property string addedUsername: ""
2020-08-06 19:45:57 +00:00
property string selectedUsername: ""
2023-01-11 16:10:13 +00:00
property string selectedChainId: ""
signal next(output: string)
2020-08-06 19:45:57 +00:00
signal back()
2020-08-27 16:06:53 +00:00
signal done(ensUsername: string)
signal connect(ensUsername: string)
signal changePubKey(ensUsername: string)
signal goToWelcome();
signal goToList();
Layout.fillHeight: true
Layout.fillWidth: true
clip: true
DSM.StateMachine {
id: stateMachine
initialState: ensView.ensUsernamesStore.ensUsernamesModel.count > 0 ? listState : welcomeState
running: true
DSM.State {
id: welcomeState
onEntered: loader.sourceComponent = welcome
DSM.SignalTransition {
targetState: searchState
signal: next
}
DSM.SignalTransition {
targetState: listState
signal: goToList
}
}
DSM.State {
id: searchState
onEntered: loader.sourceComponent = search
DSM.SignalTransition {
targetState: tAndCState
signal: next
guard: output === "available"
}
DSM.SignalTransition {
targetState: addedState
signal: connect
}
DSM.SignalTransition {
targetState: listState
signal: goToList
}
DSM.SignalTransition {
targetState: welcomeState
signal: goToWelcome
}
DSM.SignalTransition {
targetState: ensConnectedState
signal: done
}
}
DSM.State {
id: addedState
onEntered: {
loader.sourceComponent = added;
loader.item.ensUsername = addedUsername;
}
DSM.SignalTransition {
targetState: listState
signal: next
}
DSM.SignalTransition {
targetState: listState
signal: goToList
}
DSM.SignalTransition {
targetState: welcomeState
signal: goToWelcome
}
}
DSM.State {
id: listState
onEntered: {
loader.sourceComponent = list;
}
DSM.SignalTransition {
targetState: searchState
signal: next
2020-08-06 19:45:57 +00:00
guard: output === "search"
}
DSM.SignalTransition {
targetState: detailsState
signal: next
guard: output === "details"
}
DSM.SignalTransition {
targetState: listState
signal: goToList
}
DSM.SignalTransition {
targetState: welcomeState
signal: goToWelcome
}
}
DSM.State {
id: detailsState
onEntered: {
loader.sourceComponent = details;
}
DSM.SignalTransition {
targetState: listState
signal: back
}
DSM.SignalTransition {
targetState: listState
signal: goToList
}
DSM.SignalTransition {
targetState: welcomeState
signal: goToWelcome
}
2021-08-09 22:23:52 +00:00
DSM.SignalTransition {
targetState: ensReleasedState
signal: done
}
}
DSM.State {
id: tAndCState
onEntered:loader.sourceComponent = termsAndConditions
DSM.SignalTransition {
targetState: listState
signal: goToList
}
DSM.SignalTransition {
targetState: welcomeState
signal: goToWelcome
}
DSM.SignalTransition {
targetState: listState
signal: back
}
2020-08-27 16:06:53 +00:00
DSM.SignalTransition {
targetState: listState
signal: back
}
DSM.SignalTransition {
targetState: ensRegisteredState
signal: done
}
}
DSM.State {
id: ensRegisteredState
onEntered:loader.sourceComponent = ensRegistered
DSM.SignalTransition {
targetState: listState
signal: next
}
}
2021-08-09 22:23:52 +00:00
DSM.State {
id: ensReleasedState
onEntered:loader.sourceComponent = ensReleased
DSM.SignalTransition {
targetState: listState
signal: next
}
}
DSM.State {
id: ensConnectedState
onEntered:loader.sourceComponent = ensConnected
DSM.SignalTransition {
targetState: listState
signal: next
}
2022-02-09 09:43:23 +00:00
}
}
Loader {
id: loader
anchors.fill: parent
}
Component {
id: welcome
EnsWelcomeView {
username: ensView.ensUsernamesStore.username
2020-08-07 16:27:41 +00:00
onStartBtnClicked: next(null)
profileContentWidth: ensView.profileContentWidth
startButtonEnabled: ensView.networkConnectionStore.ensNetworkAvailable
tooltipText: ensView.networkConnectionStore.ensNetworkUnavailableText
}
}
Component {
id: search
EnsSearchView {
ensUsernamesStore: ensView.ensUsernamesStore
contactsStore: ensView.contactsStore
transactionStore: ensView.transactionStore
profileContentWidth: ensView.profileContentWidth
2020-08-07 16:27:41 +00:00
onContinueClicked: {
if(output === "connected"){
connect(username)
} else {
selectedUsername = username;
next(output);
}
}
onUsernameUpdated: {
selectedUsername = username;
done(username);
}
}
}
Component {
id: termsAndConditions
EnsTermsAndConditionsView {
ensUsernamesStore: ensView.ensUsernamesStore
contactsStore: ensView.contactsStore
transactionStore: ensView.transactionStore
walletAssetsStore: ensView.walletAssetsStore
username: selectedUsername
onBackBtnClicked: back();
2020-08-27 16:06:53 +00:00
onUsernameRegistered: done(userName);
}
}
Component {
id: added
EnsAddedView {
2020-08-07 16:27:41 +00:00
onOkBtnClicked: next(null)
}
}
2020-08-27 16:06:53 +00:00
Component {
id: ensRegistered
EnsRegisteredView {
2020-08-27 16:06:53 +00:00
ensUsername: selectedUsername
onOkBtnClicked: next(null)
}
}
2021-08-09 22:23:52 +00:00
Component {
id: ensReleased
EnsReleasedView {
2021-08-09 22:23:52 +00:00
ensUsername: selectedUsername
onOkBtnClicked: next(null)
}
}
Component {
id: ensConnected
EnsConnectedView {
ensUsername: selectedUsername
onOkBtnClicked: next(null)
}
}
Component {
id: list
EnsListView {
ensUsernamesStore: ensView.ensUsernamesStore
profileContentWidth: ensView.profileContentWidth
2020-08-07 16:27:41 +00:00
onAddBtnClicked: next("search")
onSelectEns: {
2023-01-11 16:10:13 +00:00
ensView.ensUsernamesStore.ensDetails(chainId, username)
selectedUsername = username
selectedChainId = chainId
2020-08-06 19:45:57 +00:00
next("details")
}
}
}
Component {
id: details
EnsDetailsView {
ensUsernamesStore: ensView.ensUsernamesStore
contactsStore: ensView.contactsStore
transactionStore: ensView.transactionStore
2020-08-06 19:45:57 +00:00
username: selectedUsername
2023-01-11 16:10:13 +00:00
chainId: selectedChainId
onBackBtnClicked: back()
2021-08-09 22:23:52 +00:00
onUsernameReleased: {
2023-01-11 16:10:13 +00:00
selectedUsername = username
selectedChainId = chainId
done(username)
2021-08-09 22:23:52 +00:00
}
}
}
Connections {
target: ensView
function onConnect(ensUsername: string) {
addedUsername = ensUsername;
}
2020-05-27 21:28:25 +00:00
}
Connections {
target: ensView.ensUsernamesStore.ensUsernamesModule
function onTransactionCompleted(success: bool, txHash: string, username: string, trxType: string) {
let title = ""
switch(trxType){
case "RegisterENS":
title = !success ?
qsTr("ENS Registration failed")
:
qsTr("ENS Registration completed");
break;
case "SetPubKey":
title = !success ?
qsTr("Updating ENS pubkey failed")
:
qsTr("Updating ENS pubkey completed");
break;
default:
console.error("unknown transaction type: ", trxType);
return
}
let icon = "block-icon";
let ephType = Constants.ephemeralNotificationType.normal;
if (success) {
icon = "check-circle";
ephType = Constants.ephemeralNotificationType.success;
}
let url = `${ensView.ensUsernamesStore.getEtherscanLink()}/${txHash}`;
Global.displayToastMessage(qsTr("Transaction pending..."),
qsTr("View on etherscan"),
icon,
false,
ephType,
url)
}
}
2020-05-27 21:28:25 +00:00
}