feat(desktop/wallet): Adding Setttings tab in wallet 2
Added nim api's to get the account signing phrase fixes #3303
This commit is contained in:
parent
7013a677ac
commit
35e15f7ed0
|
@ -48,6 +48,9 @@ proc init*(self: WalletController) =
|
||||||
var data = WalletSignal(e)
|
var data = WalletSignal(e)
|
||||||
debug "TODO: handle wallet signal", signalType=data.eventType
|
debug "TODO: handle wallet signal", signalType=data.eventType
|
||||||
|
|
||||||
|
self.view.setSigningPhrase(self.status.settings.getSetting[:string](Setting.SigningPhrase))
|
||||||
|
self.view.setEtherscanLink(self.status.settings.getCurrentNetworkDetails().etherscanLink)
|
||||||
|
|
||||||
self.status.events.on("cryptoServicesFetched") do(e: Args):
|
self.status.events.on("cryptoServicesFetched") do(e: Args):
|
||||||
var args = CryptoServicesArg(e)
|
var args = CryptoServicesArg(e)
|
||||||
self.view.onCryptoServicesFetched(args.services)
|
self.view.onCryptoServicesFetched(args.services)
|
|
@ -2,7 +2,7 @@ import atomics, strformat, strutils, sequtils, json, std/wrapnils, parseUtils, t
|
||||||
import NimQml, chronicles, stint
|
import NimQml, chronicles, stint
|
||||||
|
|
||||||
import status/[status, wallet2]
|
import status/[status, wallet2]
|
||||||
import views/[accounts, account_list, collectibles]
|
import views/[accounts, account_list, collectibles, settings]
|
||||||
import views/buy_sell_crypto/[service_controller]
|
import views/buy_sell_crypto/[service_controller]
|
||||||
import ../../../app_service/[main]
|
import ../../../app_service/[main]
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@ QtObject:
|
||||||
appService: AppService
|
appService: AppService
|
||||||
accountsView: AccountsView
|
accountsView: AccountsView
|
||||||
collectiblesView: CollectiblesView
|
collectiblesView: CollectiblesView
|
||||||
|
settingsView*: SettingsView
|
||||||
cryptoServiceController: CryptoServiceController
|
cryptoServiceController: CryptoServiceController
|
||||||
|
|
||||||
proc delete(self: WalletView) =
|
proc delete(self: WalletView) =
|
||||||
|
@ -20,6 +21,7 @@ QtObject:
|
||||||
self.collectiblesView.delete
|
self.collectiblesView.delete
|
||||||
self.cryptoServiceController.delete
|
self.cryptoServiceController.delete
|
||||||
self.QAbstractListModel.delete
|
self.QAbstractListModel.delete
|
||||||
|
self.settingsView.delete
|
||||||
|
|
||||||
proc setup(self: WalletView) =
|
proc setup(self: WalletView) =
|
||||||
self.QAbstractListModel.setup
|
self.QAbstractListModel.setup
|
||||||
|
@ -30,6 +32,7 @@ QtObject:
|
||||||
result.appService = appService
|
result.appService = appService
|
||||||
result.accountsView = newAccountsView(status)
|
result.accountsView = newAccountsView(status)
|
||||||
result.collectiblesView = newCollectiblesView(status, appService)
|
result.collectiblesView = newCollectiblesView(status, appService)
|
||||||
|
result.settingsView = newSettingsView()
|
||||||
result.cryptoServiceController = newCryptoServiceController(status, appService)
|
result.cryptoServiceController = newCryptoServiceController(status, appService)
|
||||||
result.setup
|
result.setup
|
||||||
|
|
||||||
|
@ -42,6 +45,10 @@ QtObject:
|
||||||
proc getCollectibles(self: WalletView): QVariant {.slot.} =
|
proc getCollectibles(self: WalletView): QVariant {.slot.} =
|
||||||
return newQVariant(self.collectiblesView)
|
return newQVariant(self.collectiblesView)
|
||||||
|
|
||||||
|
proc getSettings(self: WalletView): QVariant {.slot.} = newQVariant(self.settingsView)
|
||||||
|
QtProperty[QVariant] settingsView:
|
||||||
|
read = getSettings
|
||||||
|
|
||||||
QtProperty[QVariant] collectiblesView:
|
QtProperty[QVariant] collectiblesView:
|
||||||
read = getCollectibles
|
read = getCollectibles
|
||||||
|
|
||||||
|
@ -61,6 +68,12 @@ QtObject:
|
||||||
if (self.accountsView.accounts.rowCount == 1):
|
if (self.accountsView.accounts.rowCount == 1):
|
||||||
self.setCurrentAccountByIndex(0)
|
self.setCurrentAccountByIndex(0)
|
||||||
|
|
||||||
|
proc setSigningPhrase*(self: WalletView, signingPhrase: string) =
|
||||||
|
self.settingsView.setSigningPhrase(signingPhrase)
|
||||||
|
|
||||||
|
proc setEtherscanLink*(self: WalletView, link: string) =
|
||||||
|
self.settingsView.setEtherscanLink(link)
|
||||||
|
|
||||||
proc getCryptoServiceController*(self: WalletView): QVariant {.slot.} =
|
proc getCryptoServiceController*(self: WalletView): QVariant {.slot.} =
|
||||||
newQVariant(self.cryptoServiceController)
|
newQVariant(self.cryptoServiceController)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
import atomics, strformat, strutils, sequtils, json, std/wrapnils, parseUtils, tables, chronicles, web3/[ethtypes, conversions], stint
|
||||||
|
import NimQml, json, sequtils, chronicles, strutils, strformat, json
|
||||||
|
|
||||||
|
logScope:
|
||||||
|
topics = "settings-view"
|
||||||
|
|
||||||
|
QtObject:
|
||||||
|
type SettingsView* = ref object of QObject
|
||||||
|
etherscanLink: string
|
||||||
|
signingPhrase: string
|
||||||
|
|
||||||
|
proc setup(self: SettingsView) = self.QObject.setup
|
||||||
|
proc delete(self: SettingsView) = self.QObject.delete
|
||||||
|
|
||||||
|
proc newSettingsView*(): SettingsView =
|
||||||
|
new(result, delete)
|
||||||
|
result.etherscanLink = ""
|
||||||
|
result.signingPhrase = ""
|
||||||
|
result.setup
|
||||||
|
|
||||||
|
proc etherscanLinkChanged*(self: SettingsView) {.signal.}
|
||||||
|
|
||||||
|
proc getEtherscanLink*(self: SettingsView): QVariant {.slot.} =
|
||||||
|
newQVariant(self.etherscanLink.replace("/address", "/tx"))
|
||||||
|
|
||||||
|
proc setEtherscanLink*(self: SettingsView, link: string) =
|
||||||
|
self.etherscanLink = link
|
||||||
|
self.etherscanLinkChanged()
|
||||||
|
|
||||||
|
proc signingPhraseChanged*(self: SettingsView) {.signal.}
|
||||||
|
|
||||||
|
proc getSigningPhrase*(self: SettingsView): QVariant {.slot.} =
|
||||||
|
newQVariant(self.signingPhrase)
|
||||||
|
|
||||||
|
proc setSigningPhrase*(self: SettingsView, signingPhrase: string) =
|
||||||
|
self.signingPhrase = signingPhrase
|
||||||
|
self.signingPhraseChanged()
|
||||||
|
|
||||||
|
QtProperty[QVariant] etherscanLink:
|
||||||
|
read = getEtherscanLink
|
||||||
|
notify = etherscanLinkChanged
|
||||||
|
|
||||||
|
QtProperty[QVariant] signingPhrase:
|
||||||
|
read = getSigningPhrase
|
||||||
|
notify = signingPhraseChanged
|
|
@ -0,0 +1,164 @@
|
||||||
|
import QtQuick 2.13
|
||||||
|
import QtGraphicalEffects 1.13
|
||||||
|
|
||||||
|
import StatusQ.Core.Theme 0.1
|
||||||
|
import StatusQ.Components 0.1
|
||||||
|
import StatusQ.Controls 0.1
|
||||||
|
import StatusQ.Core 0.1
|
||||||
|
|
||||||
|
import "../../../imports"
|
||||||
|
import "../Profile/Sections"
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
Column {
|
||||||
|
anchors.top:parent.top
|
||||||
|
leftPadding: 20
|
||||||
|
rightPadding: 20
|
||||||
|
width: parent.width
|
||||||
|
spacing: 12
|
||||||
|
|
||||||
|
StatusExpandableItem {
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.leftMargin: 20
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.rightMargin: 20
|
||||||
|
|
||||||
|
visible : (walletV2Model.accountsView.currentAccount.walletType !== Constants.seedWalletType) &&
|
||||||
|
(walletV2Model.accountsView.currentAccount.walletType !== Constants.watchWalletType) &&
|
||||||
|
(walletV2Model.accountsView.currentAccount.walletType !== Constants.keyWalletType)
|
||||||
|
expandable: false
|
||||||
|
icon.name: "seed-phrase"
|
||||||
|
primaryText: qsTr("Back up seed phrase")
|
||||||
|
secondaryText: qsTr("Back up your seed phrase now to secure this account")
|
||||||
|
button.text: qsTr("Back up seed phrase")
|
||||||
|
button.enabled: !profileModel.mnemonic.isBackedUp
|
||||||
|
button.onClicked: backupSeedModal.open()
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusExpandableItem {
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.leftMargin: 20
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.rightMargin: 20
|
||||||
|
|
||||||
|
visible : walletV2Model.accountsView.currentAccount.walletType !== Constants.watchWalletType
|
||||||
|
expandable: true
|
||||||
|
icon.name: "secret"
|
||||||
|
primaryText: qsTr("Account signing phrase")
|
||||||
|
secondaryText: qsTr("View your signing phrase and ensure that you never get scammed")
|
||||||
|
expandableComponent: showSigningPhraseExpandableRegion
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusExpandableItem {
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.leftMargin: 20
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.rightMargin: 20
|
||||||
|
|
||||||
|
visible : (walletV2Model.accountsView.currentAccount.walletType === Constants.keyWalletType) ||
|
||||||
|
(walletV2Model.accountsView.currentAccount.walletType === Constants.seedWalletType)
|
||||||
|
expandable: true
|
||||||
|
icon.name: "seed-phrase"
|
||||||
|
primaryText: qsTr("View private key")
|
||||||
|
secondaryText: qsTr("View your seed phrase and ensure it's stored in a safe place")
|
||||||
|
button.text: qsTr("View private key")
|
||||||
|
expandableComponent: notImplemented
|
||||||
|
button.onClicked: {
|
||||||
|
// To-do open enter password Modal
|
||||||
|
expanded = !expanded
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusExpandableItem {
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.leftMargin: 20
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.rightMargin: 20
|
||||||
|
|
||||||
|
expandable: true
|
||||||
|
icon.name: "security"
|
||||||
|
primaryText: qsTr("Security preferences")
|
||||||
|
secondaryText: qsTr("View & set security preferences for this wallet")
|
||||||
|
expandableComponent: notImplemented
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Component {
|
||||||
|
id: notImplemented
|
||||||
|
Rectangle {
|
||||||
|
anchors.centerIn: parent
|
||||||
|
width: 654
|
||||||
|
height: infoText.implicitHeight
|
||||||
|
color: Theme.palette.baseColor5
|
||||||
|
StatusBaseText {
|
||||||
|
id: infoText
|
||||||
|
anchors.centerIn: parent
|
||||||
|
color: Theme.palette.directColor4
|
||||||
|
font.pixelSize: 15
|
||||||
|
lineHeight: 22
|
||||||
|
lineHeightMode: Text.FixedHeight
|
||||||
|
font.weight: Font.Medium
|
||||||
|
text: qsTr("Not Implemented")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Component {
|
||||||
|
id: showSigningPhraseExpandableRegion
|
||||||
|
Row {
|
||||||
|
spacing: 1
|
||||||
|
anchors.centerIn: parent
|
||||||
|
width: 654
|
||||||
|
Rectangle {
|
||||||
|
id: keyRect
|
||||||
|
color: Theme.palette.baseColor5
|
||||||
|
width: Math.min(keyText.implicitWidth, 200) + keyText.anchors.leftMargin + keyText.anchors.rightMargin
|
||||||
|
height: Math.max(keyText.implicitHeight, infoText.implicitHeight) + 42
|
||||||
|
StatusBaseText {
|
||||||
|
id: keyText
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.leftMargin: 21
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.rightMargin: 21
|
||||||
|
width: Math.min(implicitWidth, 200)
|
||||||
|
|
||||||
|
color: Theme.palette.dangerColor1
|
||||||
|
font.pixelSize: 15
|
||||||
|
lineHeight: 22
|
||||||
|
lineHeightMode: Text.FixedHeight
|
||||||
|
elide: Text.ElideRight
|
||||||
|
wrapMode: Text.Wrap
|
||||||
|
text: walletV2Model.settingsView.signingPhrase
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Rectangle {
|
||||||
|
id: infoRect
|
||||||
|
color: Theme.palette.baseColor5
|
||||||
|
width: parent.width - keyRect.width
|
||||||
|
height: Math.max(keyText.implicitHeight, infoText.implicitHeight) + 42
|
||||||
|
StatusBaseText {
|
||||||
|
id: infoText
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.leftMargin: 25
|
||||||
|
width: 366
|
||||||
|
|
||||||
|
color: Theme.palette.directColor4
|
||||||
|
font.pixelSize: 12
|
||||||
|
lineHeight: 16
|
||||||
|
lineHeightMode: Text.FixedHeight
|
||||||
|
elide: Text.ElideRight
|
||||||
|
wrapMode: Text.Wrap
|
||||||
|
text: qsTr("If you see something different, you should immediately sign out and reinstall Status")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BackupSeedModal {
|
||||||
|
id: backupSeedModal
|
||||||
|
}
|
||||||
|
}
|
|
@ -85,6 +85,12 @@ Item {
|
||||||
id: collectiblesBtn
|
id: collectiblesBtn
|
||||||
btnText: qsTr("Collectibles")
|
btnText: qsTr("Collectibles")
|
||||||
}
|
}
|
||||||
|
StatusTabButton {
|
||||||
|
id: settingsBtn
|
||||||
|
anchors.left: collectiblesBtn.right
|
||||||
|
anchors.leftMargin: walletInfoContent.width - collectiblesBtn.width - 100
|
||||||
|
btnText: qsTr("Settings")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
StackLayout {
|
StackLayout {
|
||||||
|
@ -93,12 +99,16 @@ Item {
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
anchors.bottom: parent.bottom
|
anchors.bottom: parent.bottom
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
anchors.topMargin: Style.current.bigPadding
|
anchors.topMargin: Style.current.padding
|
||||||
currentIndex: walletTabBar.currentIndex
|
currentIndex: walletTabBar.currentIndex
|
||||||
|
|
||||||
CollectiblesTab {
|
CollectiblesTab {
|
||||||
id: collectiblesTab
|
id: collectiblesTab
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SettingsTab {
|
||||||
|
id: settingsTab
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,3 +2,4 @@ LeftTab 1.0 LeftTab.qml
|
||||||
WalletHeader 1.0 WalletHeader.qml
|
WalletHeader 1.0 WalletHeader.qml
|
||||||
AssetsTab 1.0 AssetsTab.qml
|
AssetsTab 1.0 AssetsTab.qml
|
||||||
CollectiblesTab 1.0 CollectiblesTab.qml
|
CollectiblesTab 1.0 CollectiblesTab.qml
|
||||||
|
SettingsTab SettingsTab.qml
|
||||||
|
|
Loading…
Reference in New Issue