Skip to content

Commit

Permalink
Draft.
Browse files Browse the repository at this point in the history
  • Loading branch information
Seitseman committed Jul 30, 2024
1 parent 1813e1a commit 5acd634
Show file tree
Hide file tree
Showing 7 changed files with 81 additions and 17 deletions.
2 changes: 1 addition & 1 deletion src/app/modules/main/wallet_section/accounts/model.nim
Original file line number Diff line number Diff line change
Expand Up @@ -163,4 +163,4 @@ QtObject:
defer: index.delete
self.dataChanged(index, index, @[ModelRole.PreferredSharingChainIds.int])
break
i.inc
i.inc
2 changes: 2 additions & 0 deletions storybook/pages/DAppsWorkflowPage.qml
Original file line number Diff line number Diff line change
Expand Up @@ -418,6 +418,8 @@ Item {
// Name mismatch between storybook and production
readonly property var groupedAccountAssetsModel: groupedAccountsAssetsModel
}

readonly property string selectedAddress: ""
}

onDisplayToastMessage: (message, isErr) => {
Expand Down
2 changes: 1 addition & 1 deletion ui/app/AppLayouts/Wallet/controls/DappsComboBox.qml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ ComboBox {

background: SQP.StatusComboboxBackground {
objectName: "dappsBackground"
active: root.down || root.hovered
active: root.down || root.hovered || !root.enabled
}

indicator: null
Expand Down
5 changes: 4 additions & 1 deletion ui/app/AppLayouts/Wallet/panels/WalletHeader.qml
Original file line number Diff line number Diff line change
Expand Up @@ -133,9 +133,12 @@ Item {

spacing: 8

visible: !root.walletStore.showSavedAddresses && Global.featureFlags.dappsEnabled
visible: !root.walletStore.showSavedAddresses
&& Global.featureFlags.dappsEnabled
&& Global.walletConnectService.isServiceAvailableForAddressSelection
enabled: !!Global.walletConnectService


wcService: Global.walletConnectService
loginType: root.store.loginType
selectedAccountAddress: root.walletStore.selectedAddress
Expand Down
31 changes: 28 additions & 3 deletions ui/app/AppLayouts/Wallet/services/dapps/DAppsListProvider.qml
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import QtQuick 2.15

import StatusQ 0.1
import StatusQ.Core.Utils 0.1

import SortFilterProxyModel 0.2

import AppLayouts.Wallet.services.dapps 1.0

import shared.stores 1.0
Expand All @@ -15,7 +18,28 @@ QObject {
required property DAppsStore store
required property var supportedAccountsModel

readonly property alias dappsModel: d.dappsModel
property string selectedAddress: ""

readonly property SortFilterProxyModel dappsModel: SortFilterProxyModel {
objectName: "dappsModelSorted"
sourceModel: d.dappsModel
filters: [
FastExpressionFilter {
enabled: !!root.selectedAddress

function isAddressIncluded(addresses) {
const dataArray = ModelUtils.modelToArray(addresses, ["address"]).map(obj => obj.address);
return dataArray.includes(root.selectedAddress)
}

expression: {
root.selectedAddress
return isAddressIncluded(model.accountAddresses)
}
expectedRoles: ["accountAddresses"]
}
]
}

function updateDapps() {
d.updateDappsModel()
Expand All @@ -26,6 +50,7 @@ QObject {

property ListModel dappsModel: ListModel {
id: dapps
objectName: "DAppsModel"
}

property var dappsListReceivedFn: null
Expand Down Expand Up @@ -54,7 +79,7 @@ QObject {

let tmpMap = {}
var topics = []
const sessions = Helpers.filterActiveSessionsForKnownAccounts(allSessions, root.supportedAccountsModel)
const sessions = Helpers.filterActiveSessionsForKnownAccounts(allSessions)
for (let key in sessions) {
let dapp = sessions[key].peer.metadata
if (!!dapp.icons && dapp.icons.length > 0) {
Expand Down Expand Up @@ -87,4 +112,4 @@ QObject {
}
}
}
}
}
44 changes: 41 additions & 3 deletions ui/app/AppLayouts/Wallet/services/dapps/WalletConnectService.qml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ QObject {
readonly property alias dappsModel: dappsProvider.dappsModel
readonly property alias requestHandler: requestHandler

readonly property bool isServiceAvailableForAddressSelection: dappsProvider.supportedAccountsModel.count

readonly property var validAccounts: SortFilterProxyModel {
sourceModel: d.supportedAccountsModel
proxyRoles: [
Expand Down Expand Up @@ -110,7 +112,7 @@ QObject {

function disconnectDapp(url) {
wcSDK.getActiveSessions((allSessions) => {
const sessions = Helpers.filterActiveSessionsForKnownAccounts(allSessions, d.supportedAccountsModel)
const sessions = Helpers.filterActiveSessionsForKnownAccounts(allSessions)
for (let session in sessions) {
let dapp = session.peer.metadata
let topic = session.topic
Expand Down Expand Up @@ -225,7 +227,13 @@ QObject {
QObject {
id: d

readonly property var supportedAccountsModel: root.walletRootStore.nonWatchAccounts
readonly property var supportedAccountsModel: SortFilterProxyModel {
sourceModel: root.walletRootStore.nonWatchAccounts
filters: ValueFilter {
roleName: "keycardAccount"
value: false
}
}

property var currentSessionProposal: null
property var acceptedSessionProposal: null
Expand Down Expand Up @@ -264,7 +272,37 @@ QObject {

sdk: root.wcSDK
store: root.store
supportedAccountsModel: d.supportedAccountsModel
supportedAccountsModel: SortFilterProxyModel {
objectName: "SelectedAddressModelForDAppsListProvider"
sourceModel: d.supportedAccountsModel
filters: [
FastExpressionFilter {
expression: root.walletRootStore.selectedAddress === model.address;
expectedRoles: ["address"]
enabled: !root.walletRootStore.showAllAccounts
}
]
}

// onSelectedAddressChanged: {
// console.log("####@ onSupportedAccountsModelChanged: ", JSON.stringify(supportedAccountsModel),
// "\n####@ count: ", supportedAccountsModel.count)
// dappsProvider.updateDapps();
// }

selectedAddress: root.walletRootStore.selectedAddress

// readonly property SortFilterProxyModel selectedAddressModel: SortFilterProxyModel {
// objectName: "SelectedAddressModel"
// sourceModel: d.supportedAccountsModel
// filters: ValueFilter {
// roleName: "address"
// value: root.walletRootStore.selectedAddress
// onValueChanged: {
// console.log("####@ value changed: ", value)
// }
// }
// }
}

// Timeout for the corner case where the URL was already dismissed and the SDK doesn't respond with an error nor advances with the proposal
Expand Down
12 changes: 4 additions & 8 deletions ui/app/AppLayouts/Wallet/services/dapps/helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ function extractInfoFromPairUri(uri) {
return { topic, expiry }
}

function filterActiveSessionsForKnownAccounts(sessions, accountsModel) {
function filterActiveSessionsForKnownAccounts(sessions) {
let knownSessions = ({})
Object.keys(sessions).forEach((topic) => {
const session = sessions[topic]
Expand All @@ -105,13 +105,9 @@ function filterActiveSessionsForKnownAccounts(sessions, accountsModel) {
eip155Addresses.map(eip155Address => eip155Address.split(':').pop().trim())
);
const uniqueAddresses = Array.from(accountSet);
const firstAccount = SQUtils.ModelUtils.getFirstModelEntryIf(accountsModel, (account) => {
return uniqueAddresses.includes(account.address)
})
if (!firstAccount) {
return
}

session.peer.metadata.accountAddresses = uniqueAddresses.map(value => ({ address: value }));
knownSessions[topic] = session
})
return knownSessions
}
}

0 comments on commit 5acd634

Please sign in to comment.