Alexandra Betouni 4ee21ada05 feat(desktop) Added image function in Style
Introduced Style.svg() Style.png() Style.emoji() and
Style.icon() in Style.qml. Those should be used to
set the source in Images instead of using relative
paths. Usage:
Image {
   source: Style.svg("check)
   ....

Also moved all Singletons inside a new "utils"
folder and made it a QML module, to use
import utils 1.0 instead of relative paths

Closes #3678
2021-09-28 15:28:00 -04:00

209 lines
7.5 KiB
QML

import QtQuick 2.13
import QtQuick.Dialogs 1.3
import utils 1.0
QtObject {
id: root
property CollectiblesStore collectiblesStore: CollectiblesStore { }
property var walletModelInst: walletModel
property var walletModelV2Inst: walletV2Model
property var profileModelInst: profileModel
property var chatsModelInst: chatsModel
property var onboardingModelInst: onboardingModel
property int selectedAccount: 0
function getSavedAddressErrorText(savedAddresses, error) {
switch (error) {
case savedAddresses.Error.CreateSavedAddressError:
return qsTr("Error creating new saved address, please try again later.");
case savedAddresses.Error.DeleteSavedAddressError:
return qsTr("Error deleting saved address, please try again later.");
case savedAddresses.Error.ReadSavedAddressesError:
return qsTr("Error getting saved addresses, please try again later.");
case savedAddresses.Error.UpdateSavedAddressError:
return qsTr("Error updating saved address, please try again later.");
default: return "";
}
}
function copyText(text) {
root.chatsModelInst.copyToClipboard(text);
}
function changeSelectedAccount(newIndex) {
if (newIndex > root.walletModelV2Inst.accountsView.accounts) {
return;
}
root.selectedAccount = newIndex;
root.walletModelV2Inst.setCurrentAccountByIndex(newIndex);
}
function afterAddAccount() {
changeSelectedAccount(walletModelInst.accountsView.accounts.rowCount() - 1);
}
function getCollectionMaxValue(traitType, value, maxValue, collectionIndex) {
if(maxValue !== "")
return parseInt(value) + qsTr(" of ") + maxValue;
else
return parseInt(value) + qsTr(" of ") +
walletModelV2Inst.collectiblesView.collections.getCollectionTraitMaxValue(collectionIndex, traitType).toString();
}
property bool seedPhraseInserted: false
property bool isSeedCountValid: false
property bool loadingAccounts: false
function seedPhraseNotFound(text) {
var seedValidationError = root.onboardingModelInst.validateMnemonic(text);
var regex = new RegExp('word [a-z]+ not found in the dictionary', 'i');
return regex.test(seedValidationError);
}
function validateAddAccountPopup(text, model, keyOrSeedValid, accountNameValid) {
if (root.isSeedCountValid && !root.seedPhraseNotFound(text)) {
var validCount = 0;
for (var i = 0; i < model.count; i++) {
if (!!model.itemAtIndex(i) && model.itemAtIndex(i).nameInputValid) {
validCount++;
}
}
}
return (root.isSeedCountValid && !root.seedPhraseNotFound(text)) ? (validCount === model.count) :
(keyOrSeedValid && accountNameValid);
}
function validateTextInput(text) {
root.seedPhraseInserted = text.includes(" ");
var errorMessage;
root.isSeedCountValid = (!!text && (text.match(/(\w+)/g).length === 12));
if (text === "") {
errorMessage = qsTr("You need to enter a valid private key or seed phrase");
} else {
if (!root.seedPhraseInserted) {
errorMessage = !Utils.isPrivateKey(text) ?
qsTrId("enter-a-valid-private-key-(64-characters-hexadecimal-string)") : "";
} else {
if (!root.isSeedCountValid) {
errorMessage = qsTrId("enter-a-valid-mnemonic");
} else if (root.seedPhraseNotFound(text)) {
errorMessage = qsTrId("custom-seed-phrase") + '. ' + qsTrId("custom-seed-phrase-text-1");
} else {
errorMessage = "";
}
}
}
return errorMessage;
}
function addAccount(text, model, keyOrSeedValid, accountNameInput) {
root.loadingAccounts = true;
if (!root.validateAddAccountPopup(text, model, keyOrSeedValid, accountNameInput.nameInputValid)) {
//TOOD improve this to not use dynamic scoping
errorSound.play();
root.loadingAccounts = false;
} else {
//TODO account color to be verified with design
var result;
if (root.isSeedCountValid && !root.seedPhraseNotFound(text)) {
for (var i = 0; i < model.count; i++) {
//TODO add authorization process when Authorization moadl is ready
if (!!model.itemAtIndex(i)) {
result = root.walletModelInst.accountsView.addAccountsFromSeed(model.itemAtIndex(i).accountAddress, "qwqwqw", model.itemAtIndex(i).accountName, "")
}
}
} else {
result = root.walletModelInst.accountsView.addAccountsFromPrivateKey(text, "qwqwqw", accountNameInput.text, "");
}
root.loadingAccounts = false;
if (result) {
let resultJson = JSON.parse(result);
if (!Utils.isInvalidPasswordMessage(resultJson.error)) {
accountError.text = resultJson.error;
accountError.open();
}
//TOOD improve this to not use dynamic scoping
errorSound.play();
return;
}
}
}
property MessageDialog accountError: MessageDialog {
id: accountError
title: qsTr("Adding the account failed")
icon: StandardIcon.Critical
standardButtons: StandardButton.Ok
}
function deleteAccount(address) {
walletModelInst.accountsView.deleteAccount(address);
}
property ListModel exampleWalletModel: ListModel {
id: exampleWalletModel
ListElement {
name: "Status account"
address: "0xcfc9f08bbcbcb80760e8cb9a3c1232d19662fc6f"
isFavorite: false
}
ListElement {
name: "Test account 1"
address: "0x2Ef1...E0Ba"
isFavorite: false
}
ListElement {
name: "Status account 2"
address: "0x2Ef1...E0Ba"
isFavorite: true
}
ListElement {
name: "Status account"
address: "0xcfc9f08bbcbcb80760e8cb9a3c1232d19662fc6f"
isFavorite: false
}
ListElement {
name: "Test account 1"
address: "0x2Ef1...E0Ba"
isFavorite: false
}
ListElement {
name: "Status account 2"
address: "0x2Ef1...E0Ba"
isFavorite: true
}
ListElement {
name: "Status account"
address: "0xcfc9f08bbcbcb80760e8cb9a3c1232d19662fc6f"
isFavorite: false
}
ListElement {
name: "Test account 1"
address: "0x2Ef1...E0Ba"
isFavorite: false
}
ListElement {
name: "Status account 2"
address: "0x2Ef1...E0Ba"
isFavorite: true
}
ListElement {
name: "Status account"
address: "0xcfc9f08bbcbcb80760e8cb9a3c1232d19662fc6f"
isFavorite: false
}
ListElement {
name: "Test account 1"
address: "0x2Ef1...E0Ba"
isFavorite: false
}
ListElement {
name: "Status account 2"
address: "0x2Ef1...E0Ba"
isFavorite: true
}
}
}