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

116 lines
3.1 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 TokenSelectorPanel::assetsModel **/
property alias assetsModel: tokenSelectorPanel.assetsModel
/** Expected model structure: see TokenSelectorPanel::collectiblesModel **/
property alias collectiblesModel: tokenSelectorPanel.collectiblesModel
readonly property bool isTokenSelected: d.isTokenSelected
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 setCustom(name: string, icon: url, key: string) {
d.isTokenSelected = true
d.currentName = name
d.currentIcon = icon
tokenSelectorPanel.highlightedKey = key ?? ""
}
QtObject {
id: d
property bool isTokenSelected: false
property string currentName
property url currentIcon
}
contentItem: TokenSelectorButton {
selected: d.isTokenSelected
forceHovered: dropdown.opened
name: d.currentName
icon: d.currentIcon
onClicked: dropdown.opened ? dropdown.close() : dropdown.open()
}
StatusDropdown {
id: dropdown
y: parent.height + 4
closePolicy: Popup.CloseOnPressOutsideParent
bottomPadding: 0
contentItem: TokenSelectorPanel {
id: tokenSelectorPanel
objectName: "tokenSelectorPanel"
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) {
d.currentName = name
d.currentIcon = icon
d.isTokenSelected = 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)
}
}
}
}