status-desktop/ui/app/AppLayouts/Communities/helpers/PermissionsHelpers.qml

142 lines
4.6 KiB
QML

pragma Singleton
import QtQml 2.15
import StatusQ.Core 0.1
import StatusQ.Core.Theme 0.1
import StatusQ.Core.Utils 0.1
import StatusQ.Internal 0.1 as Internal
import AppLayouts.Communities.controls 1.0
import utils 1.0
QtObject {
function getTokenByKey(model, key) {
var item
// key format:
// chainId+address[+tokenId] - ERC721
// symbol - ERC20
// collectionUid model role keeps chainId+address for every ERC721
// key model role keeps: symbol for ERC20, chainId+address for community ERC721 tokens, chainId+address+tokenId for ERC721 tokens from wallet
let collectionUid = getCollectionUidFromKey(key)
if(collectionUid !== "") {
item = ModelUtils.getByKey(model, "collectionUid", collectionUid)
} else {
item = Internal.PermissionUtils.getTokenByKey(model, key)
}
return item
}
function getTokenNameByKey(model, key) {
const item = getTokenByKey(model, key)
if (item)
return item.name
return ""
}
function getTokenShortNameByKey(model, key) {
const item = getTokenByKey(model, key)
if (item)
return item.shortName ?? ""
return ""
}
function getTokenIconByKey(model, key) {
const item = getTokenByKey(model, key)
const defaultIcon = Theme.png("tokens/DEFAULT-TOKEN")
if (item)
return item.iconSource ? item.iconSource : defaultIcon
return defaultIcon
}
function getTokenDecimalsByKey(model, key) {
const item = getTokenByKey(model, key)
if (item)
return item.decimals ?? 0
return 0
}
function getTokenRemainingSupplyByKey(model, key) {
const item = getTokenByKey(model, key)
if (!item || item.remainingSupply === undefined
|| item.multiplierIndex === undefined)
return ""
if (item.infiniteSupply)
return "∞"
return LocaleUtils.numberToLocaleString(
AmountsArithmetic.toNumber(item.remainingSupply,
item.multiplierIndex))
}
function getUniquePermissionTokenKeys(model, tokenType) {
return Internal.PermissionUtils.getUniquePermissionTokenKeys(model, tokenType)
}
function getUniquePermissionChannels(model, permissionsTypesArray = []) {
return Internal.PermissionUtils.getUniquePermissionChannels(model, permissionsTypesArray)
}
function isEligibleToJoinAs(model) {
return Internal.PermissionUtils.isEligibleToJoinAs(model)
}
function isTokenGatedCommunity(model) {
return Internal.PermissionUtils.isTokenGatedCommunity(model)
}
function setHoldingsTextFormat(type, name, amount, decimals) {
if (typeof amount === "string") {
amount = AmountsArithmetic.toNumber(AmountsArithmetic.fromString(amount), decimals)
}
switch (type) {
case Constants.TokenType.ERC20:
return `${LocaleUtils.numberToLocaleString(amount)} ${name}`
case Constants.TokenType.ERC721:
if (amount === 1)
return name
return `${LocaleUtils.numberToLocaleString(amount)} ${name}`
case Constants.TokenType.ENS:
if (name === "*.eth")
return qsTr("Any ENS username")
if (name.startsWith("*."))
return qsTr("ENS username on '%1' domain").arg(name.substring(2))
return qsTr("ENS username '%1'").arg(name)
default:
return ""
}
}
// OWNER AND TMASTER TOKENS related helpers:
readonly property string ownerTokenNameTag: "Owner-"
readonly property string tMasterTokenNameTag: "TMaster-"
readonly property string ownerTokenSymbolTag: "OWN"
readonly property string tMasterTokenSymbolTag: "TM"
// It generates a symbol from a given community name.
// It will be used to autogenerate the Owner and Token Master token symbols.
function communityNameToSymbol(isOwner, communityName) {
const shortName = communityName.substring(0, 3)
if(isOwner)
return ownerTokenSymbolTag + shortName.toUpperCase()
else
return tMasterTokenSymbolTag + shortName.toUpperCase()
}
function getCollectionUidFromKey(key) {
const parts = key.split('+');
if(parts.length === 2)
return key
else if(parts.length === 3)
return parts[0]+"+"+parts[1]
else
return ""
}
}