159 lines
4.7 KiB
QML
Raw Normal View History

import QtQuick 2.15
import QtQuick.Layouts 1.15
import StatusQ 0.1
import StatusQ.Core 0.1
import StatusQ.Core.Theme 0.1
import AppLayouts.Wallet.controls 1.0
import utils 1.0
RowLayout {
id: root
/**
Expected model structure:
- tokensKey: unique string ID of the token (asset); e.g. "ETH" or contract address
- name: user visible token name (e.g. "Ethereum")
- symbol: user visible token symbol (e.g. "ETH")
- decimals: number of decimal places
- communityId:optional; ID of the community this token belongs to, if any
- marketDetails: object containing props like `currencyPrice` for the computed values below
- balances: submodel[ chainId:int, account:string, balance:BigIntString, iconUrl:string ]
- currentBalance: amount of tokens
- currencyBalance: e.g. `1000.42` in user's fiat currency
- currencyBalanceAsString: e.g. "1 000,42 CZK" formatted as a string according to the user's locale
- balanceAsString: `1.42` formatted as e.g. "1,42" in user's locale
- iconSource: string
**/
required property var assetsModel
/**
Expected model structure:
- groupName: group name (from collection or community name)
- icon: from imageUrl or mediaUrl
- type: can be "community" or "other"
- subitems: submodel of collectibles/collections of the group
- key: key of collection (community type) or collectible (other type)
- name: name of the subitem (of collectible or collection)
- balance: balance of collection (in case of community collectibles)
or collectible (in case of ERC-1155)
- icon: icon of the subitem
**/
required property var collectiblesModel
/**
Expected model structure:
- chainId: network chain id
- chainName: name of network
- iconUrl: network icon url
**/
required property var networksModel
/** input property holds header is being scrolled **/
property bool isScrolling
/** input property holds if the header is the sticky header **/
property bool isStickyHeader
/** input property for programatic selection of network **/
property int selectedChainId
/** signal to propagate that an asset was selected **/
signal assetSelected(string key)
/** signal to propagate that a collection was selected **/
signal collectionSelected(string key)
/** signal to propagate that a collectible was selected **/
signal collectibleSelected(string key)
/** signal to propagate that a network was selected **/
signal networkSelected(int chainId)
/** input function for programatic selection of token
(asset/collectible/collection) **/
function setToken(name, icon, key) {
tokenSelector.setSelection(name, icon, key)
}
implicitHeight: sendModalTitleText.height
spacing: 8
// if not closed during scrolling they move with the header and it feels undesirable
onIsScrollingChanged: {
tokenSelector.close()
networkFilter.control.popup.close()
}
StatusBaseText {
id: sendModalTitleText
Layout.preferredWidth: contentWidth
lineHeightMode: Text.FixedHeight
lineHeight: root.isStickyHeader ? 30 : 38
font.pixelSize: root.isStickyHeader ? 22 : 28
elide: Text.ElideRight
text: qsTr("Send")
}
TokenSelector {
id: tokenSelector
Layout.fillWidth: true
Layout.maximumWidth: implicitWidth
size: root.isStickyHeader ?
TokenSelectorButton.Size.Small:
TokenSelectorButton.Size.Normal
assetsModel: root.assetsModel
collectiblesModel: root.collectiblesModel
onCollectibleSelected: root.collectibleSelected(key)
onCollectionSelected: root.collectionSelected(key)
onAssetSelected: root.assetSelected(key)
}
// Horizontal spacer
RowLayout {}
StatusBaseText {
Layout.alignment: Qt.AlignRight
text: qsTr("On:")
color: Theme.palette.baseColor1
font.pixelSize: 13
lineHeight: 38
lineHeightMode: Text.FixedHeight
verticalAlignment: Text.AlignVCenter
visible: networkFilter.visible
}
NetworkFilter {
id: networkFilter
Layout.alignment: Qt.AlignTop
control.popup.y: networkFilter.height
flatNetworks: root.networksModel
multiSelection: false
showSelectionIndicator: false
showTitle: false
Binding on selection {
value: [root.selectedChainId]
when: root.selectedChainId !== 0
}
onSelectionChanged: {
if (root.selectedChainId !== selection[0]) {
root.networkSelected(selection[0])
}
}
onToggleNetwork: root.networkSelected(chainId)
}
}