status-desktop/ui/app/AppLayouts/Communities/views/HoldingsSelectionModel.qml

96 lines
3.0 KiB
QML
Raw Normal View History

import SortFilterProxyModel 0.2
import AppLayouts.Communities.helpers 1.0
import AppLayouts.Communities.panels 1.0
import AppLayouts.Communities.controls 1.0
import StatusQ.Core.Utils 0.1
import StatusQ 0.1
import utils 1.0
SortFilterProxyModel {
property var assetsModel
property var collectiblesModel
readonly property ModelChangeTracker _assetsChanges: ModelChangeTracker {
model: assetsModel
}
readonly property ModelChangeTracker _collectiblesChanges: ModelChangeTracker {
model: collectiblesModel
}
proxyRoles: [
FastExpressionRole {
name: "text"
function getName(type, key) {
if (type === Constants.TokenType.ENS)
return key
const model = type === Constants.TokenType.ERC20
? assetsModel
: collectiblesModel
const item = PermissionsHelpers.getTokenByKey(model, key)
return item ? item.symbol || item.shortName || item.name : ""
}
function getDecimals(type, key) {
if (type !== Constants.TokenType.ERC20) {
return 0
}
const item = PermissionsHelpers.getTokenByKey(assetsModel, key)
return item.decimals
}
function getText(type, key, amount) {
const name = getName(type, key)
const decimals = getDecimals(type, key)
return PermissionsHelpers.setHoldingsTextFormat(
type, name, amount, decimals)
}
// Direct call for singleton function is not handled properly by
// SortFilterProxyModel that's why helper function is used instead.
expression: {
_assetsChanges.revision
_collectiblesChanges.revision
return getText(model.type, model.key, model.amount)
}
expectedRoles: ["type", "key", "amount"]
},
FastExpressionRole {
name: "imageSource"
function getIcon(type, key) {
if (type === Constants.TokenType.ENS)
return Style.png("tokens/ENS")
const model = type === Constants.TokenType.ERC20
? assetsModel : collectiblesModel
return PermissionsHelpers.getTokenIconByKey(model, key)
}
expression: {
_assetsChanges.revision
_collectiblesChanges.revision
return getIcon(model.type, model.key)
}
expectedRoles: ["type", "key"]
},
FastExpressionRole {
name: "operator"
// Direct call for singleton enum is not handled properly by SortFilterProxyModel.
readonly property int none: OperatorsUtils.Operators.None
expression: none
expectedRoles: []
}
]
}