status-desktop/ui/app/AppLayouts/Wallet/controls/TokenSelector.qml

121 lines
3.4 KiB
QML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import QtQuick 2.15
import QtQuick.Controls 2.15
import StatusQ.Controls 0.1
import StatusQ.Core.Utils 0.1
import AppLayouts.Wallet.panels 1.0
import utils 1.0
Control {
id: root
/** Expected model structure: see SearchableAssetsPanel::model **/
property alias assetsModel: tokenSelectorPanel.assetsModel
/** Expected model structure: see SearchableCollectiblesPanel::model **/
property alias collectiblesModel: tokenSelectorPanel.collectiblesModel
readonly property bool isTokenSelected: tokenSelectorButton.selected
signal assetSelected(string key)
signal collectionSelected(string key)
signal collectibleSelected(string key)
// Index of the current tab, indexes correspond to the
// TokensSelectorPanel.Tabs enum values.
property alias currentTab: tokenSelectorPanel.currentTab
function setSelection(name: string, icon: url, key: string) {
tokenSelectorButton.selected = true
tokenSelectorButton.name = name
tokenSelectorButton.icon = icon
tokenSelectorPanel.highlightedKey = key ?? ""
}
QObject {
id: d
readonly property int maxPopupHeight: 330
}
contentItem: TokenSelectorButton {
id: tokenSelectorButton
forceHovered: dropdown.opened
onClicked: dropdown.opened ? dropdown.close() : dropdown.open()
}
StatusDropdown {
id: dropdown
y: parent.height + 4
width: 448
closePolicy: Popup.CloseOnPressOutsideParent
horizontalPadding: 0
bottomPadding: 0
onClosed: tokenSelectorPanel.clear()
contentItem: Item {
implicitHeight: Math.min(tokenSelectorPanel.implicitHeight, d.maxPopupHeight)
TokenSelectorPanel {
id: tokenSelectorPanel
objectName: "tokenSelectorPanel"
anchors.fill: parent
function findSubitem(key) {
const count = collectiblesModel.rowCount()
for (let i = 0; i < count; i++) {
const entry = ModelUtils.get(collectiblesModel, i)
const subitem = ModelUtils.getByKey(
entry.subitems, "key", key)
if (subitem)
return subitem
}
}
function setCurrentAndClose(name, icon) {
tokenSelectorButton.name = name
tokenSelectorButton.icon = icon
tokenSelectorButton.selected = true
dropdown.close()
}
onAssetSelected: {
const entry = ModelUtils.getByKey(assetsModel, "tokensKey", key)
highlightedKey = key
setCurrentAndClose(entry.symbol, entry.iconSource)
root.assetSelected(key)
}
onCollectibleSelected: {
highlightedKey = key
const subitem = findSubitem(key)
setCurrentAndClose(subitem.name, subitem.icon)
root.collectibleSelected(key)
}
onCollectionSelected: {
highlightedKey = key
const subitem = findSubitem(key)
setCurrentAndClose(subitem.name, subitem.icon)
root.collectionSelected(key)
}
}
}
}
}