mirror of
https://github.com/status-im/status-desktop.git
synced 2025-01-10 06:16:32 +00:00
663fd91425
There are cases when the AccountSelector can receive invalid address in the input API. In this case we'll default to the first selected item
151 lines
4.9 KiB
QML
151 lines
4.9 KiB
QML
import QtQuick 2.15
|
|
import QtQuick.Controls 2.15
|
|
import QtQuick.Layouts 1.15
|
|
import QtQml 2.15
|
|
|
|
import StatusQ 0.1
|
|
import StatusQ.Controls 0.1
|
|
import StatusQ.Components 0.1
|
|
import StatusQ.Core 0.1
|
|
import StatusQ.Core.Theme 0.1
|
|
import StatusQ.Core.Utils 0.1 as StatusQUtils
|
|
|
|
import utils 1.0
|
|
|
|
import shared.controls 1.0
|
|
|
|
/**
|
|
Expected model structure:
|
|
name [string] - account name e.g. "Piggy Bank"
|
|
address [string] - wallet account address e.g. "0x1234567890"
|
|
colorizedChainPrefixes [string] - chain prefixes with rich text colors e.g. "<font color=\"red\">eth:</font><font color=\"blue\">oeth:</font><font color=\"green\">arb:</font>"
|
|
emoji [string] - emoji for account e.g. "🐷"
|
|
colorId [string] - color id for account e.g. "1"
|
|
currencyBalance [var] - fiat currency balance
|
|
amount [number] - amount of currency e.g. 1234
|
|
symbol [string] - currency symbol e.g. "USD"
|
|
displayDecimals [number] - optional number of decimals to display
|
|
stripTrailingZeroes [bool] - strip trailing zeroes
|
|
walletType [string] - wallet type e.g. Constants.watchWalletType. See `Constants` for possible values
|
|
migratedToKeycard [bool] - whether account is migrated to keycard
|
|
accountBalance [var] - account balance for a specific network
|
|
formattedBalance [string] - formatted balance e.g. "1234.56B"
|
|
balance [string] - balance e.g. "123456000000"
|
|
iconUrl [string] - icon url e.g. "network/Network=Hermez"
|
|
chainColor [string] - chain color e.g. "#FF0000"
|
|
**/
|
|
|
|
StatusComboBox {
|
|
id: root
|
|
|
|
// input property for programatic selection
|
|
property string selectedAddress: ""
|
|
// output property for selected account
|
|
readonly property alias currentAccount: selectedEntry.item
|
|
readonly property string currentAccountAddress: d.currentAccountSelection
|
|
|
|
// styling options
|
|
type: StatusComboBox.Type.Secondary
|
|
size: StatusComboBox.Size.Small
|
|
|
|
currentIndex: 0
|
|
|
|
objectName: "accountSelector"
|
|
popupContentItemObjectName: "accountSelectorList"
|
|
|
|
control.popup.width: 430
|
|
|
|
control.valueRole: "address"
|
|
control.textRole: "name"
|
|
implicitHeight: control.implicitHeight
|
|
implicitWidth: control.implicitWidth
|
|
|
|
contentItem: RowLayout {
|
|
id: contentItemRow
|
|
|
|
spacing: 4
|
|
|
|
StatusSmartIdenticon {
|
|
id: assetContent
|
|
objectName: "assetContent"
|
|
asset.emoji: currentAccount.emoji ?? ""
|
|
asset.color: currentAccount.color ?? Theme.palette.baseColor1
|
|
asset.width: 24
|
|
asset.height: asset.width
|
|
asset.isLetterIdenticon: !!currentAccount.emoji
|
|
asset.bgColor: Theme.palette.primaryColor3
|
|
visible: !!currentAccount.emoji
|
|
}
|
|
|
|
StatusBaseText {
|
|
id: textContent
|
|
objectName: "textContent"
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
text: currentAccount.name ?? ""
|
|
horizontalAlignment: Text.AlignLeft
|
|
verticalAlignment: Text.AlignVCenter
|
|
elide: Text.ElideRight
|
|
font.pixelSize: 13
|
|
color: Theme.palette.directColor1
|
|
}
|
|
}
|
|
|
|
delegate: WalletAccountListItem {
|
|
id: delegateItem
|
|
|
|
required property var model
|
|
|
|
tagsScrollBarVisible: false
|
|
|
|
width: ListView.view.width
|
|
name: model.name
|
|
address: model.address
|
|
chainShortNames: model.colorizedChainPrefixes ?? ""
|
|
emoji: model.emoji
|
|
walletColor: Utils.getColorForId(model.colorId)
|
|
currencyBalance: model.currencyBalance
|
|
walletType: model.walletType
|
|
migratedToKeycard: model.migratedToKeycard ?? false
|
|
accountBalance: model.accountBalance ?? null
|
|
color: sensor.containsMouse || highlighted ?
|
|
Theme.palette.baseColor2 :
|
|
!!currentAccount && currentAccount.name === model.name ? Theme.palette.statusListItem.highlightColor : "transparent"
|
|
onClicked: {
|
|
d.currentAccountSelection = model.address
|
|
control.popup.close()
|
|
}
|
|
}
|
|
|
|
ModelEntry {
|
|
id: selectedEntry
|
|
sourceModel: root.model ?? null
|
|
key: "address"
|
|
value: d.currentAccountSelection
|
|
onAvailableChanged: {
|
|
if (!available) {
|
|
d.resetSelection()
|
|
}
|
|
}
|
|
}
|
|
|
|
QtObject {
|
|
id: d
|
|
property string currentAccountSelection: root.selectedAddress || root.currentValue
|
|
|
|
Binding on currentAccountSelection {
|
|
value: root.selectedAddress || root.currentValue
|
|
}
|
|
|
|
function resetSelection() {
|
|
currentAccountSelection = ""
|
|
}
|
|
}
|
|
|
|
Component.onCompleted: {
|
|
if (!selectedEntry.available)
|
|
d.resetSelection()
|
|
}
|
|
}
|
|
|