status-desktop/ui/app/AppLayouts/Wallet/AddCustomTokenModal.qml

170 lines
4.6 KiB
QML
Raw Normal View History

2020-06-17 19:18:31 +00:00
import QtQuick 2.13
import QtQuick.Controls 2.13
import QtQuick.Layouts 1.13
import "../../../imports"
import "../../../shared"
ModalPopup {
id: popup
2020-10-30 19:22:54 +00:00
property bool editable: true
property int marginBetweenInputs: 35
property string validationError: ""
2020-10-30 19:22:54 +00:00
title: editable ?
//% "Add custom token"
qsTrId("add-custom-token")
: nameInput.text
height: editable ? 450 : 380
onOpened: {
2020-11-02 18:18:13 +00:00
addressInput.forceActiveFocus(Qt.MouseFocusReason)
}
function openEditable(){
2020-10-30 19:22:54 +00:00
addressInput.text = "";
nameInput.text = "";
symbolInput.text = "";
decimalsInput.text = "";
2020-11-02 18:18:13 +00:00
editable = true;
open();
}
2020-11-02 18:18:13 +00:00
function openWithData(address, name, symbol, decimals){
2020-10-30 19:22:54 +00:00
addressInput.text = address;
nameInput.text = name;
symbolInput.text = symbol;
decimalsInput.text = decimals;
editable = false;
2020-11-02 18:18:13 +00:00
open();
2020-10-30 19:22:54 +00:00
}
function validate() {
if (addressInput.text !== "" && !Utils.isAddress(addressInput.text)) {
validationError = qsTr("This needs to be a valid address");
}
return validationError === ""
}
property var getTokenDetails: Backpressure.debounce(popup, 500, function (tokenAddress){
walletModel.customTokenList.getTokenDetails(tokenAddress)
});
function onKeyReleased(){
validationError = "";
if (!validate() || addressInput.text === "") {
return;
}
Qt.callLater(getTokenDetails, addressInput.text)
}
Item {
Connections {
target: walletModel.customTokenList
onTokenDetailsWereResolved: {
const jsonObj = JSON.parse(tokenDetails)
2020-11-06 13:33:15 +00:00
if(jsonObj.name === "" || jsonObj.symbol === "" || jsonObj.decimals === ""){
validationError = qsTr("Invalid ERC20 address")
return;
}
if(addressInput.text.toLowerCase() === jsonObj.address.toLowerCase()){
symbolInput.text = jsonObj.symbol;
decimalsInput.text = jsonObj.decimals;
nameInput.text = jsonObj.name;
}
}
}
}
Input {
id: addressInput
2020-10-30 19:22:54 +00:00
readOnly: !editable
textField.maximumLength: 42
//% "Enter contract address..."
placeholderText: qsTrId("enter-contract-address...")
//% "Contract address"
label: qsTrId("contract-address")
validationError: popup.validationError
Keys.onReleased: onKeyReleased()
}
Input {
id: nameInput
2020-10-30 19:22:54 +00:00
readOnly: !editable
anchors.top: addressInput.bottom
anchors.topMargin: marginBetweenInputs
//% "The name of your token..."
placeholderText: qsTrId("the-name-of-your-token...")
//% "Name"
label: qsTrId("name")
}
2020-11-02 18:18:13 +00:00
Input {
id: symbolInput
readOnly: !editable
//% "ABC"
placeholderText: qsTrId("abc")
//% "Symbol"
label: qsTrId("symbol")
anchors.top: nameInput.bottom
anchors.topMargin: marginBetweenInputs
2020-10-30 19:22:54 +00:00
anchors.left: parent.left
2020-11-02 18:18:13 +00:00
anchors.right: undefined
width: parent.width / 2 - 20
}
2020-11-02 18:18:13 +00:00
Input {
id: decimalsInput
readOnly: !editable
placeholderText: "18"
//% "Decimals"
label: qsTrId("decimals")
text: "18"
2020-10-30 19:22:54 +00:00
anchors.top: nameInput.bottom
anchors.topMargin: marginBetweenInputs
2020-10-30 19:22:54 +00:00
anchors.right: parent.right
2020-11-02 18:18:13 +00:00
anchors.left: undefined
width: parent.width / 2 - 20
}
2020-11-02 18:18:13 +00:00
footer: Item {
width: parent.width
height: addBtn.height
2020-10-30 19:22:54 +00:00
visible: editable
StyledButton {
id: addBtn
anchors.top: parent.top
anchors.right: parent.right
anchors.rightMargin: Style.current.padding
//% "Add"
label: qsTrId("add")
disabled: validationError !== "" && addressInput.text === "" || nameInput.text === "" || symbolInput.text === "" || decimalsInput.text === ""
onClicked : {
const error = walletModel.addCustomToken(addressInput.text, nameInput.text, symbolInput.text, decimalsInput.text);
if (error) {
errorSound.play()
changeError.text = error
changeError.open()
return
}
walletModel.loadCustomTokens()
popup.close();
}
}
}
}
/*##^##
Designer {
D{i:0;autoSize:true;height:480;width:640}
}
##^##*/