status-desktop/ui/app/AppLayouts/Profile/panels/TokenSettingsModalContent.qml

146 lines
4.7 KiB
QML

import QtQuick 2.13
import QtQuick.Controls 2.13
import QtQuick.Layouts 1.13
import utils 1.0
import StatusQ.Core 0.1
import StatusQ.Controls 0.1
import StatusQ.Components 0.1
import StatusQ.Popups 0.1
import shared.panels 1.0
import shared.controls 1.0
Item {
id: modalBody
property var defaultTokenList
property var customTokenList
signal toggleVisibleClicked(int chainId, string address)
signal removeCustomTokenTriggered(int chainId, string address)
signal showTokenDetailsTriggered(int chainId, string address, string name, string symbol, string decimals)
Component {
id: tokenComponent
StatusListItem {
id: assetSymbol
title: symbol
subTitle: name || ""
asset.name: Style.png("tokens/" + (hasIcon ? symbol : "DEFAULT-TOKEN@3x"))
asset.isImage: true
asset.height: 36
components: [StatusCheckBox {
id: assetCheck
checked: model.isVisible
onClicked: toggleVisibleClicked(chainId, address)
}]
visible: symbol && (searchBox.text == "" || name.toLowerCase().includes(searchBox.text.toLowerCase()) || symbol.toLowerCase().includes(searchBox.text.toLowerCase()))
MouseArea {
acceptedButtons: Qt.LeftButton | Qt.RightButton
cursorShape: Qt.PointingHandCursor
anchors.fill: parent
onClicked: function (event) {
if (event.button === Qt.RightButton) {
return contextMenu.popup(mouseX, mouseY)
}
assetCheck.checked = !assetCheck.checked
toggleVisibleClicked(chainId, address)
}
StatusMenu {
id: contextMenu
Action {
icon.name: "admin"
text: qsTr("Token details")
onTriggered: {
modalBody.showTokenDetailsTriggered(chainId, address, name, symbol, decimals);
}
}
Action {
icon.name: "remove"
icon.color: Style.current.red
enabled: isCustom
text: qsTr("Remove token")
onTriggered: removeCustomTokenTriggered(chainId, address)
}
}
}
}
}
SearchBox {
id: searchBox
input.font.pixelSize: 12
anchors.top: modalBody.top
anchors.topMargin: Style.current.padding
anchors.right: parent.right
anchors.left: parent.left
}
StatusScrollView {
id: sview
ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
ScrollBar.vertical.policy: ScrollBar.AlwaysOn
anchors.top: searchBox.bottom
anchors.topMargin: Style.current.smallPadding
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
Item {
id: tokenList
height: childrenRect.height
Column {
id: customTokens
spacing: Style.current.halfPadding
visible: { modalBody.customTokenList.count > 0 }
StyledText {
id: customLbl
text: qsTr("Custom")
font.pixelSize: 13
color: Style.current.secondaryText
height: 20
}
Repeater {
id: customTokensRepeater
model: modalBody.customTokenList
delegate: tokenComponent
anchors.top: customLbl.bottom
anchors.topMargin: Style.current.smallPadding
}
}
Column {
anchors.top: customTokens.bottom
anchors.topMargin: Style.current.smallPadding
id: defaultTokens
spacing: Style.current.halfPadding
StyledText {
id: defaultLbl
text: qsTr("Default")
font.pixelSize: 13
color: Style.current.secondaryText
height: 20
}
Repeater {
model: modalBody.defaultTokenList
delegate: tokenComponent
anchors.top: defaultLbl.bottom
anchors.topMargin: Style.current.smallPadding
anchors.left: parent.left
anchors.right: parent.right
}
}
}
}
}