From accd4da21417f83fda6d4ab299c16f21fe0e8a04 Mon Sep 17 00:00:00 2001 From: Andrey Bocharnikov Date: Tue, 2 Apr 2024 17:38:08 +0700 Subject: [PATCH] fix(Permissions): tokenOwner is present in the list of collectibles when adding a permission (#14236) fixes #13561 --- src/app/modules/main/communities/module.nim | 61 +++++++++---------- .../modules/shared_models/token_list_item.nim | 9 ++- .../shared_models/token_list_model.nim | 4 ++ .../views/CommunitySettingsView.qml | 14 ++++- 4 files changed, 53 insertions(+), 35 deletions(-) diff --git a/src/app/modules/main/communities/module.nim b/src/app/modules/main/communities/module.nim index bfc58e0bdc..f991e91037 100644 --- a/src/app/modules/main/communities/module.nim +++ b/src/app/modules/main/communities/module.nim @@ -554,7 +554,7 @@ method requestCancelDiscordChannelImport*(self: Module, discordChannelId: string self.controller.requestCancelDiscordChannelImport(discordChannelId) proc createCommunityTokenItem(self: Module, token: CommunityTokensMetadataDto, communityId: string, supply: string, - infiniteSupply: bool): TokenListItem = + infiniteSupply: bool, privilegesLevel: int): TokenListItem = let communityTokenDecimals = if token.tokenType == TokenType.ERC20: 18 else: 0 result = initTokenListItem( key = token.symbol, @@ -566,9 +566,24 @@ proc createCommunityTokenItem(self: Module, token: CommunityTokensMetadataDto, c communityId = communityId, supply, infiniteSupply, - communityTokenDecimals + communityTokenDecimals, + privilegesLevel ) +proc buildCommunityTokenItemFallback(self: Module, communityTokens: seq[CommunityTokenDto], + token: CommunityTokensMetadataDto, communityId: string): TokenListItem = + # Set fallback supply to infinite in case we don't have it + var supply = "1" + var infiniteSupply = true + var privilegesLevel = PrivilegesLevel.Community.int + for communityToken in communityTokens: + if communityToken.symbol == token.symbol: + supply = communityToken.supply.toString(10) + infiniteSupply = communityToken.infiniteSupply + privilegesLevel = communityToken.privilegesLevel.int + break + return self.createCommunityTokenItem(token, communityId, supply, infiniteSupply, privilegesLevel) + proc buildTokensAndCollectiblesFromCommunities(self: Module, communities: seq[CommunityDto]) = var tokenListItems: seq[TokenListItem] var collectiblesListItems: seq[TokenListItem] @@ -576,21 +591,7 @@ proc buildTokensAndCollectiblesFromCommunities(self: Module, communities: seq[Co let communityTokens = self.controller.getAllCommunityTokens() for community in communities: for tokenMetadata in community.communityTokensMetadata: - # Set fallback supply to infinite in case we don't have it - var supply = "1" - var infiniteSupply = true - for communityToken in communityTokens: - if communityToken.symbol == tokenMetadata.symbol: - supply = communityToken.supply.toString(10) - infiniteSupply = communityToken.infiniteSupply - break - - var communityTokenItem = self.createCommunityTokenItem( - tokenMetadata, - community.id, - supply, - infiniteSupply, - ) + var communityTokenItem = self.buildCommunityTokenItemFallback(communityTokens, tokenMetadata, community.id) if tokenMetadata.tokenType == TokenType.ERC20 and not self.view.tokenListModel().hasItem(tokenMetadata.symbol, community.id): @@ -619,6 +620,13 @@ proc buildTokensAndCollectiblesFromWallet(self: Module) = return filteredChains.len != 0 )) for token in erc20Tokens: + let communityTokens = self.controller.getCommunityTokens(token.communityId) + var privilegesLevel = PrivilegesLevel.Community.int + for communityToken in communityTokens: + if communityToken.symbol == token.symbol: + privilegesLevel = communityToken.privilegesLevel.int + break + let tokenListItem = initTokenListItem( key = token.symbol, name = token.name, @@ -627,7 +635,8 @@ proc buildTokensAndCollectiblesFromWallet(self: Module) = communityId = token.communityId, image = "", category = ord(TokenListItemCategory.General), - decimals = token.decimals + decimals = token.decimals, + privilegesLevel = privilegesLevel ) tokenListItems.add(tokenListItem) @@ -638,21 +647,7 @@ method onWalletAccountTokensRebuilt*(self: Module) = method onCommunityTokenMetadataAdded*(self: Module, communityId: string, tokenMetadata: CommunityTokensMetadataDto) = let communityTokens = self.controller.getCommunityTokens(communityId) - var tokenListItem: TokenListItem - # Set fallback supply to infinite in case we don't have it - var supply = "1" - var infiniteSupply = true - for communityToken in communityTokens: - if communityToken.symbol == tokenMetadata.symbol: - supply = communityToken.supply.toString(10) - infiniteSupply = communityToken.infiniteSupply - break - tokenListItem = self.createCommunityTokenItem( - tokenMetadata, - communityId, - supply, - infiniteSupply, - ) + var tokenListItem = self.buildCommunityTokenItemFallback(communityTokens, tokenMetadata, communityId) if tokenMetadata.tokenType == TokenType.ERC721 and not self.view.collectiblesListModel().hasItem(tokenMetadata.symbol, communityId): diff --git a/src/app/modules/shared_models/token_list_item.nim b/src/app/modules/shared_models/token_list_item.nim index 31ac111aa0..85b39e6d64 100644 --- a/src/app/modules/shared_models/token_list_item.nim +++ b/src/app/modules/shared_models/token_list_item.nim @@ -17,6 +17,7 @@ type supply*: string infiniteSupply*: bool decimals*: int + privilegesLevel*: int proc initTokenListItem*( key: string, @@ -28,7 +29,8 @@ proc initTokenListItem*( communityId: string = "", supply: string = "1", infiniteSupply: bool = true, - decimals: int + decimals: int, + privilegesLevel: int ): TokenListItem = result.key = key result.symbol = symbol @@ -40,6 +42,7 @@ proc initTokenListItem*( result.supply = supply result.infiniteSupply = infiniteSupply result.decimals = decimals + result.privilegesLevel = privilegesLevel proc `$`*(self: TokenListItem): string = result = fmt"""TokenListItem( @@ -52,6 +55,7 @@ proc `$`*(self: TokenListItem): string = supply: {self.supply}, infiniteSupply: {self.infiniteSupply}, decimals: {self.decimals}, + privilegesLevel: {self.privilegesLevel} ]""" proc getKey*(self: TokenListItem): string = @@ -83,3 +87,6 @@ proc getInfiniteSupply*(self: TokenListItem): bool = proc getDecimals*(self: TokenListItem): int = return self.decimals + +proc getPrivilegesLevel*(self: TokenListItem): int = + return self.privilegesLevel \ No newline at end of file diff --git a/src/app/modules/shared_models/token_list_model.nim b/src/app/modules/shared_models/token_list_model.nim index f550053242..e713fd895c 100644 --- a/src/app/modules/shared_models/token_list_model.nim +++ b/src/app/modules/shared_models/token_list_model.nim @@ -14,6 +14,7 @@ type Supply InfiniteSupply Decimals + PrivilegesLevel QtObject: type TokenListModel* = ref object of QAbstractListModel @@ -93,6 +94,7 @@ QtObject: ModelRole.Supply.int:"supply", ModelRole.InfiniteSupply.int:"infiniteSupply", ModelRole.Decimals.int:"decimals", + ModelRole.PrivilegesLevel.int:"privilegesLevel", }.toTable method rowCount(self: TokenlistModel, index: QModelIndex = nil): int = @@ -128,3 +130,5 @@ QtObject: result = newQVariant(item.getInfiniteSupply()) of ModelRole.Decimals: result = newQVariant(item.getDecimals()) + of ModelRole.PrivilegesLevel: + result = newQVariant(item.getPrivilegesLevel()) \ No newline at end of file diff --git a/ui/app/AppLayouts/Communities/views/CommunitySettingsView.qml b/ui/app/AppLayouts/Communities/views/CommunitySettingsView.qml index cab829fb29..a7487bef7b 100644 --- a/ui/app/AppLayouts/Communities/views/CommunitySettingsView.qml +++ b/ui/app/AppLayouts/Communities/views/CommunitySettingsView.qml @@ -300,7 +300,19 @@ StatusSectionLayout { // solution soon. assetsModel: rootStore.assetsModel - collectiblesModel: rootStore.collectiblesModel + + SortFilterProxyModel { + id: nonOwnerCollectibles + sourceModel: rootStore.collectiblesModel + filters: [ + ValueFilter { + roleName: "privilegesLevel" + value: Constants.TokenPrivilegesLevel.Owner + inverted: true + } + ] + } + collectiblesModel: nonOwnerCollectibles channelsModel: rootStore.chatCommunitySectionModule.model communityDetails: d.communityDetails