276 lines
7.5 KiB
QML
276 lines
7.5 KiB
QML
import QtQuick 2.15
|
|
import QtQuick.Controls 2.15
|
|
import QtQuick.Layouts 1.15
|
|
|
|
import StatusQ.Models 0.1
|
|
|
|
import Storybook 1.0
|
|
|
|
import utils 1.0
|
|
import shared.views 1.0
|
|
|
|
Item {
|
|
id: root
|
|
|
|
ListModel {
|
|
id: listModel
|
|
|
|
readonly property var data: [
|
|
{
|
|
tokensKey: "key_ETH",
|
|
name: "Ether",
|
|
symbol: "ETH",
|
|
balances: [
|
|
{
|
|
chainId: "chain_id_1",
|
|
balance: "186316672770338050",
|
|
account: "account_1",
|
|
},
|
|
{
|
|
chainId: "chain_id_1",
|
|
balance: "386318672772348050",
|
|
account: "account_2",
|
|
},
|
|
{
|
|
chainId: "chain_id_2",
|
|
balance: "186311232772348990",
|
|
account: "account_1",
|
|
},
|
|
{
|
|
chainId: "chain_id_2",
|
|
balance: "986317232772348990",
|
|
account: "account_1",
|
|
}
|
|
],
|
|
decimals: 18,
|
|
communityId: "",
|
|
communityName: "",
|
|
communityImage: Qt.resolvedUrl(""),
|
|
marketDetails: {
|
|
changePct24hour: -2.1232,
|
|
currencyPrice: {
|
|
amount: 3423.23898
|
|
}
|
|
},
|
|
detailsLoading: false,
|
|
image: Qt.resolvedUrl("")
|
|
},
|
|
{
|
|
tokensKey: "key_SNT",
|
|
name: "Status",
|
|
symbol: "SNT",
|
|
balances: [
|
|
{
|
|
chainId: "chain_id_1",
|
|
balance: "386316672770338850",
|
|
account: "account_1",
|
|
},
|
|
{
|
|
chainId: "chain_id_1",
|
|
balance: "377778672772348050",
|
|
account: "account_2",
|
|
},
|
|
{
|
|
chainId: "chain_id_2",
|
|
balance: "146311232772348990",
|
|
account: "account_1",
|
|
},
|
|
{
|
|
chainId: "chain_id_3",
|
|
balance: "86317232772348990",
|
|
account: "account_1",
|
|
}
|
|
],
|
|
decimals: 18,
|
|
communityId: "",
|
|
communityName: "",
|
|
communityImage: Qt.resolvedUrl(""),
|
|
marketDetails: {
|
|
changePct24hour: 9.232,
|
|
currencyPrice: {
|
|
amount: 33.23898
|
|
}
|
|
},
|
|
detailsLoading: false,
|
|
image: Qt.resolvedUrl("")
|
|
},
|
|
{
|
|
tokensKey: "key_MYASST",
|
|
name: "Community Asset",
|
|
symbol: "MYASST",
|
|
balances: [
|
|
{
|
|
chainId: "chain_id_1",
|
|
balance: "23234",
|
|
account: "account_1",
|
|
},
|
|
{
|
|
chainId: "chain_id_1",
|
|
balance: "63234",
|
|
account: "account_2",
|
|
}
|
|
],
|
|
decimals: 3,
|
|
communityId: "0x033f36ccb",
|
|
communityName: "My Community",
|
|
communityImage: Constants.tokenIcon("DAI", false),
|
|
marketDetails: {
|
|
changePct24hour: 0,
|
|
currencyPrice: {
|
|
amount: 0
|
|
}
|
|
},
|
|
detailsLoading: false,
|
|
image: Constants.tokenIcon("ZRX", false)
|
|
}
|
|
]
|
|
|
|
Component.onCompleted: {
|
|
append(data)
|
|
|
|
const chains = new Set()
|
|
const accounts = new Set()
|
|
|
|
data.forEach(e => e.balances.forEach(
|
|
e => { chains.add(e.chainId);
|
|
accounts.add(e.account)}))
|
|
|
|
chainsSelector.model = [...chains.values()]
|
|
chainsDownSelector.model = [...chains.values()]
|
|
accountsSelector.model = [...accounts.values()]
|
|
}
|
|
}
|
|
|
|
ManageTokensController {
|
|
id: manageTokensController
|
|
|
|
sourceModel: listModel
|
|
serializeAsCollectibles: false
|
|
|
|
onRequestLoadSettings: {
|
|
loadingStarted()
|
|
|
|
const jsonData = [
|
|
{
|
|
"key": "ETH",
|
|
"position": 1,
|
|
"visible": true
|
|
},
|
|
{
|
|
"key": "SNT",
|
|
"position": 2,
|
|
"visible": true
|
|
},
|
|
{
|
|
"key": "MYASST",
|
|
"position": 5,
|
|
"visible": true
|
|
}
|
|
]
|
|
|
|
loadingFinished(JSON.stringify(jsonData))
|
|
}
|
|
}
|
|
|
|
AssetsViewAdaptor {
|
|
id: adaptor
|
|
|
|
controller: manageTokensController
|
|
|
|
chains: chainsSelector.selection
|
|
accounts: accountsSelector.selection
|
|
|
|
marketValueThreshold: minimumBalanceSlider.value
|
|
|
|
chainsError: chains => {
|
|
const chainsDown = chainsDownSelector.selection
|
|
const downForToken = chains.filter(value => chainsDown.includes(value))
|
|
|
|
if (downForToken.length)
|
|
return "Chains down: " + JSON.stringify(downForToken)
|
|
|
|
return ""
|
|
}
|
|
|
|
tokensModel: listModel
|
|
}
|
|
|
|
ColumnLayout {
|
|
anchors.fill: parent
|
|
|
|
Label { text: "CHAINS:" }
|
|
|
|
CheckBoxFlowSelector {
|
|
id: chainsSelector
|
|
|
|
Layout.fillWidth: true
|
|
initialSelection: true
|
|
}
|
|
|
|
Label { text: "CHAINS DOWN:" }
|
|
|
|
CheckBoxFlowSelector {
|
|
id: chainsDownSelector
|
|
|
|
Layout.fillWidth: true
|
|
}
|
|
|
|
Label { text: "ACCOUNTS:" }
|
|
|
|
CheckBoxFlowSelector {
|
|
id: accountsSelector
|
|
|
|
Layout.fillWidth: true
|
|
initialSelection: true
|
|
}
|
|
|
|
Label { text: "MINIMUM BALANCE:" }
|
|
|
|
RowLayout {
|
|
Slider {
|
|
id: minimumBalanceSlider
|
|
|
|
from: 0.1
|
|
to: 100
|
|
|
|
value: 10
|
|
}
|
|
Label {
|
|
text: minimumBalanceSlider.value
|
|
}
|
|
}
|
|
|
|
RowLayout {
|
|
GenericListView {
|
|
label: "Input model"
|
|
|
|
model: listModel
|
|
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
|
|
skipEmptyRoles: true
|
|
}
|
|
|
|
GenericListView {
|
|
label: "Adapter's output model"
|
|
|
|
model: adaptor.model
|
|
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
|
|
roles:
|
|
["key", "symbol", "name", "icon", "error", "balance", "balanceText",
|
|
"marketDetailsAvailable", "marketDetailsLoading",
|
|
"marketPrice", "marketChangePct24hour", "communityId",
|
|
"communityName", "communityIcon", "position", "canBeHidden"]
|
|
|
|
skipEmptyRoles: true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// category: Adaptors
|