116 lines
3.1 KiB
QML
116 lines
3.1 KiB
QML
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)
|
||
}
|
||
}
|
||
}
|
||
}
|