status-desktop/ui/app/AppLayouts/stores/RootStore.qml

263 lines
9.5 KiB
QML

import QtQuick 2.13
import utils 1.0
import StatusQ 0.1
import StatusQ.Core.Theme 0.1
import SortFilterProxyModel 0.2
import AppLayouts.Profile.stores 1.0 as ProfileStores
import AppLayouts.Wallet.stores 1.0 as WalletStore
QtObject {
id: root
property var mainModuleInst: mainModule
property var walletSectionInst: walletSection
property var aboutModuleInst: aboutModule
property var communitiesModuleInst: communitiesModule
property bool newVersionAvailable: false
readonly property bool requirementsCheckPending: communitiesModuleInst.requirementsCheckPending
readonly property bool checkingPermissionToJoinInProgress: communitiesModuleInst.checkingPermissionToJoinInProgress
readonly property bool joinPermissionsCheckCompletedWithoutErrors: communitiesModuleInst.joinPermissionsCheckCompletedWithoutErrors
readonly property bool channelsPermissionsCheckSuccessful: communitiesModuleInst.channelsPermissionsCheckSuccessful
property string latestVersion
property string downloadURL
readonly property int loginType: getLoginType()
function getLoginType() {
if(!d.userProfileInst)
return Constants.LoginType.Password
if(d.userProfileInst.usingBiometricLogin)
return Constants.LoginType.Biometrics
if(d.userProfileInst.isKeycardUser)
return Constants.LoginType.Keycard
return Constants.LoginType.Password
}
function prepareTokenModelForCommunity(publicKey) {
root.communitiesModuleInst.prepareTokenModelForCommunity(publicKey)
}
property string communityKeyToImport
readonly property var permissionsModel: !!root.communitiesModuleInst.spectatedCommunityPermissionModel ?
root.communitiesModuleInst.spectatedCommunityPermissionModel : null
readonly property var myRevealedAddressesForCurrentCommunity: {
try {
let revealedAddresses = root.communitiesModuleInst.myRevealedAddressesStringForCurrentCommunity
let revealedAddressArray = JSON.parse(revealedAddresses)
return revealedAddressArray.map(addr => addr.toLowerCase())
} catch (e) {
console.error("Error parsing my revealed addresses", e)
}
return []
}
readonly property string myRevealedAirdropAddressForCurrentCommunity:
root.communitiesModuleInst.myRevealedAirdropAddressForCurrentCommunity.toLowerCase()
property var walletAccountsModel: WalletStore.RootStore.nonWatchAccounts
readonly property var globalAssetsModel: SortFilterProxyModel {
sourceModel: communitiesModuleInst.tokenList
proxyRoles: FastExpressionRole {
function tokenIcon(symbol) {
return Constants.tokenIcon(symbol)
}
name: "iconSource"
expression: !!model.icon ? model.icon : tokenIcon(model.symbol)
expectedRoles: ["icon", "symbol"]
}
}
readonly property var globalCollectiblesModel: SortFilterProxyModel {
sourceModel: communitiesModuleInst.collectiblesModel
proxyRoles: FastExpressionRole {
function collectibleIcon(icon) {
return !!icon ? icon : Theme.png("tokens/DEFAULT-TOKEN")
}
name: "iconSource"
expression: collectibleIcon(model.icon)
expectedRoles: ["icon"]
}
}
property var assetsModel: SortFilterProxyModel {
sourceModel: globalAssetsModel
filters: [
AnyOf {
// We accept tokens from this community or general (empty community ID)
ValueFilter {
roleName: "communityId"
value: ""
}
ValueFilter {
roleName: "communityId"
value: root.communityKeyToImport
}
}
]
}
property var collectiblesModel: SortFilterProxyModel {
sourceModel: globalCollectiblesModel
filters: [
AnyOf {
// We accept tokens from this community or general (empty community ID)
ValueFilter {
roleName: "communityId"
value: ""
}
ValueFilter {
roleName: "communityId"
value: root.communityKeyToImport
}
}
]
}
function setLatestVersionInfo(newVersionAvailable, latestVersion, downloadURL) {
root.newVersionAvailable = newVersionAvailable;
root.latestVersion = latestVersion;
root.downloadURL = downloadURL;
}
function resetLastVersion(){
root.newVersionAvailable = false
}
property AppSearchStore appSearchStore: AppSearchStore {
appSearchModule: root.mainModuleInst.appSearchModule
}
property ProfileStores.ProfileSectionStore profileSectionStore: ProfileStores.ProfileSectionStore {
}
property var chatSearchModel: mainModuleInst.chatSearchModel
function rebuildChatSearchModel() {
mainModuleInst.rebuildChatSearchModel()
}
function setActiveSectionChat(sectionId, chatId) {
mainModuleInst.switchTo(sectionId, chatId)
}
readonly property var accounts: walletSectionAccounts.accounts
property ProfileStores.ContactsStore contactStore: profileSectionStore.contactsStore
property ProfileStores.PrivacyStore privacyStore: profileSectionStore.privacyStore
property ProfileStores.MessagingStore messagingStore: profileSectionStore.messagingStore
property real volume: !!appSettings ? appSettings.volume * 0.01 : 0.5
property bool notificationSoundsEnabled: !!appSettings ? appSettings.notificationSoundsEnabled : true
property var walletSectionSendInst: walletSectionSend
property var savedAddressesModel: walletSectionSavedAddresses.model
property var flatNetworks: networksModule.flatNetworks
readonly property QtObject _d: QtObject {
id: d
readonly property var userProfileInst: userProfile
}
function getEtherscanTxLink(chainID) {
return networksModule.getBlockExplorerTxURL(chainID)
}
function createCommunity(communityName, communityDescription, checkedMembership, communityColor, communityTags,
communityImage, imageCropperModalaX, imageCropperModalaY, imageCropperModalbX, imageCropperModalbY,
historyArchiveSupportEnabled, pinMessagesAllowedForMembers, bannerJsonStr, encrypted) {
communitiesModuleInst.createCommunity(communityName, communityDescription, checkedMembership, communityColor,
communityTags, communityImage, imageCropperModalaX, imageCropperModalaY,
imageCropperModalbX, imageCropperModalbY,
historyArchiveSupportEnabled, pinMessagesAllowedForMembers,
bannerJsonStr, encrypted);
}
function communityHasMember(communityId, pubKey)
{
return communitiesModuleInst.isMemberOfCommunity(communityId, pubKey)
}
function isMyCommunityRequestPending(id: string) {
return communitiesModuleInst.isMyCommunityRequestPending(id)
}
function cancelPendingRequest(id: string) {
communitiesModuleInst.cancelRequestToJoinCommunity(id)
}
function generateAlias(pk) {
return globalUtils.generateAlias(pk);
}
property string currentCurrency: walletSection.currentCurrency
property string signingPhrase: walletSection.signingPhrase
function getFiatValue(balance, cryptoSymbol, fiatSymbol) {
return profileSectionStore.ensUsernamesStore.getFiatValue(balance, cryptoSymbol, fiatSymbol)
}
function getGasEthValue(gweiValue, gasLimit) {
return profileSectionStore.ensUsernamesStore.getGasEthValue(gweiValue, gasLimit)
}
function setCurrentUserStatus(newStatus) {
if (d.userProfileInst && d.userProfileInst.currentUserStatus !== newStatus) {
mainModuleInst.setCurrentUserStatus(newStatus)
}
}
function setActiveCommunity(communityId) {
mainModuleInst.setActiveSectionById(communityId);
}
function resolveENS(value) {
mainModuleInst.resolveENS(value, "")
}
function windowActivated() {
mainModuleInst.windowActivated()
}
function windowDeactivated() {
mainModuleInst.windowDeactivated()
}
function prepareKeypairsForSigning(communityId, ensName, addressesToShare = [], airdropAddress = "", editMode = false) {
communitiesModuleInst.prepareKeypairsForSigning(communityId, ensName, JSON.stringify(addressesToShare), airdropAddress, editMode)
}
function signProfileKeypairAndAllNonKeycardKeypairs() {
communitiesModuleInst.signProfileKeypairAndAllNonKeycardKeypairs()
}
function signSharedAddressesForKeypair(keyUid) {
communitiesModuleInst.signSharedAddressesForKeypair(keyUid)
}
function joinCommunityOrEditSharedAddresses() {
communitiesModuleInst.joinCommunityOrEditSharedAddresses()
}
function cleanJoinEditCommunityData() {
communitiesModuleInst.cleanJoinEditCommunityData()
}
function updatePermissionsModel(communityId, sharedAddresses) {
communitiesModuleInst.checkPermissions(communityId, JSON.stringify(sharedAddresses))
}
function promoteSelfToControlNode(communityId) {
communitiesModuleInst.promoteSelfToControlNode(communityId)
}
}