2023-02-07 14:21:32 +00:00
import QtQuick 2.15
2023-06-14 08:42:52 +00:00
import QtQuick . Layouts 1.15
2024-10-04 11:01:08 +00:00
import QtQuick . Window 2.15
2023-06-14 08:42:52 +00:00
import QtQuick . Dialogs 1.3
import QtQml . Models 2.15
import QtQml 2.15
import StatusQ . Core 0.1
import StatusQ . Controls 0.1
import StatusQ . Components 0.1
import StatusQ . Popups 0.1
2024-08-20 15:51:18 +00:00
import StatusQ . Popups . Dialog 0.1
2023-06-27 19:56:44 +00:00
import StatusQ . Core . Theme 0.1
2023-10-23 11:32:50 +00:00
import StatusQ . Core . Utils 0.1 as SQUtils
2022-10-21 13:37:39 +00:00
2024-05-22 08:13:39 +00:00
import AppLayouts . stores 1.0 as AppLayoutStores
2022-10-21 13:37:39 +00:00
import AppLayouts . Chat . popups 1.0
2023-02-07 14:21:32 +00:00
import AppLayouts . Profile . popups 1.0
2024-05-22 08:13:39 +00:00
import AppLayouts . Profile . stores 1.0 as ProfileStores
2023-06-23 06:17:04 +00:00
import AppLayouts . Communities . popups 1.0
2023-10-23 11:32:50 +00:00
import AppLayouts . Communities . helpers 1.0
2024-05-13 17:23:01 +00:00
import AppLayouts . Wallet . popups . swap 1.0
2024-08-06 16:04:22 +00:00
import AppLayouts . Wallet . popups . buy 1.0
2024-05-27 16:55:43 +00:00
import AppLayouts . Wallet . popups 1.0
2024-12-04 16:19:27 +00:00
import AppLayouts . Wallet . adaptors 1.0
2024-05-22 08:13:39 +00:00
import AppLayouts . Communities . stores 1.0
2024-11-21 15:10:58 +00:00
import AppLayouts . Profile . helpers 1.0
2023-02-07 14:21:32 +00:00
2024-10-28 23:00:16 +00:00
import AppLayouts . Wallet . stores 1.0 as WalletStores
2024-05-22 08:13:39 +00:00
import AppLayouts . Chat . stores 1.0 as ChatStores
2023-08-02 17:39:42 +00:00
2022-10-21 13:37:39 +00:00
import shared . popups 1.0
2023-02-07 14:21:32 +00:00
import shared . status 1.0
2024-01-24 16:35:53 +00:00
import shared . stores 1.0
2024-07-26 14:47:18 +00:00
import shared . views 1.0
2022-10-21 13:37:39 +00:00
import utils 1.0
QtObject {
id: root
2023-02-07 14:21:32 +00:00
required property var popupParent
2024-10-02 20:47:14 +00:00
required property RootStore sharedRootStore
2024-05-22 08:13:39 +00:00
required property AppLayoutStores . RootStore rootStore
required property CommunityTokensStore communityTokensStore
2024-10-21 22:01:34 +00:00
property UtilsStore utilsStore
2024-05-22 08:13:39 +00:00
property CommunitiesStore communitiesStore
2024-10-15 12:26:45 +00:00
property ProfileStores . ProfileStore profileStore
2024-05-22 08:13:39 +00:00
property ProfileStores . DevicesStore devicesStore
2024-01-24 16:35:53 +00:00
property CurrenciesStore currencyStore
2024-10-28 23:00:16 +00:00
property WalletStores . WalletAssetsStore walletAssetsStore
property WalletStores . CollectiblesStore walletCollectiblesStore
2024-05-22 08:13:39 +00:00
property NetworkConnectionStore networkConnectionStore
2024-10-28 23:00:16 +00:00
property WalletStores . BuyCryptoStore buyCryptoStore
2024-11-28 14:15:34 +00:00
2024-11-21 15:10:58 +00:00
property var allContactsModel
2024-11-28 14:15:34 +00:00
property var mutualContactsModel
2023-06-26 11:44:56 +00:00
property bool isDevBuild
2023-02-07 14:21:32 +00:00
2023-10-10 14:23:48 +00:00
signal openExternalLink ( string link )
signal saveDomainToUnfurledWhitelist ( string domain )
2024-04-17 13:01:55 +00:00
signal ownershipDeclined ( string communityId , string communityName )
2024-12-02 11:02:05 +00:00
signal transferOwnershipRequested ( string tokenId , string senderAddress )
2023-10-10 14:23:48 +00:00
2023-02-07 14:21:32 +00:00
property var activePopupComponents: [ ]
Component.onCompleted: {
2024-02-26 09:39:08 +00:00
Global . openMarkAsIDVerifiedPopup . connect ( openMarkAsIDVerifiedPopup )
Global . openRemoveIDVerificationDialog . connect ( openRemoveIDVerificationDialog )
2023-02-07 14:21:32 +00:00
Global . openInviteFriendsToCommunityPopup . connect ( openInviteFriendsToCommunityPopup )
2024-02-27 17:11:03 +00:00
Global . openInviteFriendsToCommunityByIdPopup . connect ( openInviteFriendsToCommunityByIdPopup )
2023-02-07 14:21:32 +00:00
Global . openContactRequestPopup . connect ( openContactRequestPopup )
2024-02-29 21:01:33 +00:00
Global . openReviewContactRequestPopup . connect ( openReviewContactRequestPopup )
2023-02-07 14:21:32 +00:00
Global . openDownloadModalRequested . connect ( openDownloadModal )
Global . openImagePopup . connect ( openImagePopup )
2024-05-15 09:36:56 +00:00
Global . openVideoPopup . connect ( openVideoPopup )
2023-02-07 14:21:32 +00:00
Global . openProfilePopupRequested . connect ( openProfilePopup )
Global . openNicknamePopupRequested . connect ( openNicknamePopup )
2024-02-16 17:34:09 +00:00
Global . markAsUntrustedRequested . connect ( openMarkAsUntrustedPopup )
2023-02-07 14:21:32 +00:00
Global . blockContactRequested . connect ( openBlockContactPopup )
Global . unblockContactRequested . connect ( openUnblockContactPopup )
Global . openChangeProfilePicPopup . connect ( openChangeProfilePicPopup )
Global . openBackUpSeedPopup . connect ( openBackUpSeedPopup )
Global . openPinnedMessagesPopupRequested . connect ( openPinnedMessagesPopup )
Global . openCommunityProfilePopupRequested . connect ( openCommunityProfilePopup )
2023-04-28 10:35:18 +00:00
Global . createCommunityPopupRequested . connect ( openCreateCommunityPopup )
Global . importCommunityPopupRequested . connect ( openImportCommunityPopup )
2023-11-28 13:41:11 +00:00
Global . communityShareAddressesPopupRequested . connect ( openCommunityShareAddressesPopup )
2023-07-21 17:21:11 +00:00
Global . communityIntroPopupRequested . connect ( openCommunityIntroPopup )
2023-05-10 12:22:26 +00:00
Global . removeContactRequested . connect ( openRemoveContactConfirmationPopup )
2023-02-07 14:21:32 +00:00
Global . openPopupRequested . connect ( openPopup )
2023-05-23 12:46:16 +00:00
Global . closePopupRequested . connect ( closePopup )
2023-05-19 16:07:50 +00:00
Global . openDeleteMessagePopup . connect ( openDeleteMessagePopup )
Global . openDownloadImageDialog . connect ( openDownloadImageDialog )
2023-06-14 08:42:52 +00:00
Global . leaveCommunityRequested . connect ( openLeaveCommunityPopup )
2023-06-27 19:56:44 +00:00
Global . openTestnetPopup . connect ( openTestnetPopup )
2023-07-19 05:58:21 +00:00
Global . openExportControlNodePopup . connect ( openExportControlNodePopup )
2023-07-21 08:44:10 +00:00
Global . openImportControlNodePopup . connect ( openImportControlNodePopup )
2023-08-02 17:39:42 +00:00
Global . openEditSharedAddressesFlow . connect ( openEditSharedAddressesPopup )
2023-09-14 10:02:51 +00:00
Global . openTransferOwnershipPopup . connect ( openTransferOwnershipPopup )
2023-10-23 11:32:50 +00:00
Global . openFinaliseOwnershipPopup . connect ( openFinaliseOwnershipPopup )
Global . openDeclineOwnershipPopup . connect ( openDeclineOwnershipPopup )
2024-01-24 11:49:46 +00:00
Global . openFirstTokenReceivedPopup . connect ( openFirstTokenReceivedPopup )
2024-01-29 15:37:17 +00:00
Global . openConfirmHideAssetPopup . connect ( openConfirmHideAssetPopup )
Global . openConfirmHideCollectiblePopup . connect ( openConfirmHideCollectiblePopup )
2024-03-20 10:50:10 +00:00
Global . openCommunityMemberMessagesPopupRequested . connect ( openCommunityMemberMessagesPopup )
2024-05-13 17:23:01 +00:00
Global . openSwapModalRequested . connect ( openSwapModal )
2024-05-27 16:55:43 +00:00
Global . openBuyCryptoModalRequested . connect ( openBuyCryptoModal )
2024-08-20 15:51:18 +00:00
Global . privacyPolicyRequested . connect ( ( ) = > openPopup ( privacyPolicyPopupComponent ) )
2024-12-04 16:19:27 +00:00
Global . openPaymentRequestModalRequested . connect ( openPaymentRequestModal )
2023-02-07 14:21:32 +00:00
}
2023-05-23 12:46:16 +00:00
property var currentPopup
2023-02-07 14:21:32 +00:00
function openPopup ( popupComponent , params = { } , cb = null ) {
if ( activePopupComponents . includes ( popupComponent ) ) {
return
}
2023-05-23 12:46:16 +00:00
root . currentPopup = popupComponent . createObject ( popupParent , params )
root . currentPopup . open ( ) ;
2023-02-07 14:21:32 +00:00
if ( cb )
2023-05-23 12:46:16 +00:00
cb ( root . currentPopup )
2023-02-07 14:21:32 +00:00
activePopupComponents . push ( popupComponent )
2023-05-23 12:46:16 +00:00
root . currentPopup . closed . connect ( ( ) = > {
2023-02-07 14:21:32 +00:00
const removeIndex = activePopupComponents . indexOf ( popupComponent )
if ( removeIndex !== - 1 ) {
activePopupComponents . splice ( removeIndex , 1 )
}
} )
}
2023-05-23 12:46:16 +00:00
function closePopup ( ) {
if ( ! ! root . currentPopup )
root . currentPopup . close ( ) ;
}
2023-02-07 14:21:32 +00:00
function openDownloadModal ( available: bool , version: string , url: string ) {
const popupProperties = {
newVersionAvailable: available ,
downloadURL: url ,
currentVersion: rootStore . profileSectionStore . getCurrentVersion ( ) ,
newVersion: version
}
openPopup ( downloadPageComponent , popupProperties )
}
2024-05-15 09:36:56 +00:00
function openImagePopup ( image , url , plain ) {
openPopup ( imagePopupComponent , { image: image , url: url , plain: plain } )
}
function openVideoPopup ( url ) {
openPopup ( videoPopupComponent , { url: url } )
2023-02-07 14:21:32 +00:00
}
2023-05-30 19:01:55 +00:00
function openProfilePopup ( publicKey: string , parentPopup , cb ) {
openPopup ( profilePopupComponent , { publicKey: publicKey , parentPopup: parentPopup } , cb )
2023-02-07 14:21:32 +00:00
}
2024-11-06 20:53:41 +00:00
function openNicknamePopup ( publicKey: string , cb ) {
const contactDetails = Utils . getContactDetailsAsJson (
publicKey , false , true , true )
const properties = { publicKey , contactDetails }
openPopup ( nicknamePopupComponent , properties , cb )
2023-02-07 14:21:32 +00:00
}
2024-11-06 20:53:41 +00:00
function openMarkAsUntrustedPopup ( publicKey: string ) {
const contactDetails = Utils . getContactDetailsAsJson (
publicKey , false , true , true )
const properties = { publicKey , contactDetails }
openPopup ( markAsUntrustedComponent , properties )
2024-02-16 17:34:09 +00:00
}
2024-11-06 20:53:41 +00:00
function openBlockContactPopup ( publicKey: string ) {
const contactDetails = Utils . getContactDetailsAsJson (
publicKey , false , true , true )
const properties = { publicKey , contactDetails }
openPopup ( blockContactConfirmationComponent , properties )
2023-02-07 14:21:32 +00:00
}
2024-11-06 20:53:41 +00:00
function openUnblockContactPopup ( publicKey: string ) {
const contactDetails = Utils . getContactDetailsAsJson (
publicKey , false , true , true )
const properties = { publicKey , contactDetails }
openPopup ( unblockContactConfirmationComponent , properties )
2023-02-07 14:21:32 +00:00
}
function openChangeProfilePicPopup ( cb ) {
var popup = changeProfilePicComponent . createObject ( popupParent , { callback: cb } ) ;
popup . chooseImageToCrop ( )
}
function openBackUpSeedPopup ( ) {
openPopup ( backupSeedModalComponent )
}
function openCommunityProfilePopup ( store , community , communitySectionModule ) {
openPopup ( communityProfilePopup , { store: store , community: community , communitySectionModule: communitySectionModule } )
}
2022-10-21 13:37:39 +00:00
2024-11-06 20:53:41 +00:00
function openMarkAsIDVerifiedPopup ( publicKey , cb ) {
const contactDetails = Utils . getContactDetailsAsJson (
2024-11-04 21:47:59 +00:00
publicKey , true , true , true )
2024-11-06 20:53:41 +00:00
const properties = { publicKey , contactDetails }
openPopup ( markAsIDVerifiedPopupComponent , properties , cb )
2024-02-26 09:39:08 +00:00
}
2024-11-06 20:53:41 +00:00
function openRemoveIDVerificationDialog ( publicKey , cb ) {
const contactDetails = Utils . getContactDetailsAsJson (
2024-11-04 21:47:59 +00:00
publicKey , true , true , true )
2024-11-06 20:53:41 +00:00
const properties = { publicKey , contactDetails }
openPopup ( removeIDVerificationPopupComponent , properties , cb )
2024-02-26 09:39:08 +00:00
}
2022-10-21 13:37:39 +00:00
function openInviteFriendsToCommunityPopup ( community , communitySectionModule , cb ) {
2023-02-07 14:21:32 +00:00
openPopup ( inviteFriendsToCommunityPopup , { community: community , communitySectionModule: communitySectionModule } , cb )
2022-10-21 13:37:39 +00:00
}
2024-02-27 17:11:03 +00:00
function openInviteFriendsToCommunityByIdPopup ( communityId , cb ) {
root . rootStore . mainModuleInst . prepareCommunitySectionModuleForCommunityId ( communityId )
const communitySectionModuleData = root . rootStore . mainModuleInst . getCommunitySectionModule ( )
const communityData = root . communitiesStore . getCommunityDetails ( communityId )
openPopup ( inviteFriendsToCommunityPopup , { community: communityData , communitySectionModule: communitySectionModuleData } , cb )
}
2024-11-06 20:53:41 +00:00
function openContactRequestPopup ( publicKey , cb ) {
const contactDetails = Utils . getContactDetailsAsJson (
publicKey , false , true , true )
const properties = { publicKey , contactDetails }
openPopup ( sendContactRequestPopupComponent , properties , cb )
2023-02-07 14:21:32 +00:00
}
2024-11-06 20:53:41 +00:00
function openReviewContactRequestPopup ( publicKey , cb ) {
2024-02-29 21:01:33 +00:00
try {
const crDetails = rootStore . contactStore . getLatestContactRequestForContactAsJson ( publicKey )
if ( crDetails . from !== publicKey ) {
console . warn ( "Popups.openReviewContactRequestPopup: not matching publicKey:" , publicKey )
return
}
2024-11-06 20:53:41 +00:00
const contactDetails = Utils . getContactDetailsAsJson (
publicKey , false , true , true )
const properties = { publicKey , contactDetails , crDetails }
openPopup ( reviewContactRequestPopupComponent , properties , cb )
2024-02-29 21:01:33 +00:00
} catch ( e ) {
console . error ( "Popups.openReviewContactRequestPopup: error getting or parsing contact request data" , e )
}
}
2023-03-24 09:48:05 +00:00
function openPinnedMessagesPopup ( store , messageStore , pinnedMessagesModel , messageToPin , chatId ) {
openPopup ( pinnedMessagesPopup , {
store: store ,
messageStore: messageStore ,
pinnedMessagesModel: pinnedMessagesModel ,
messageToPin: messageToPin ,
chatId: chatId
} )
2023-02-07 14:21:32 +00:00
}
function openCommunityPopup ( store , community , chatCommunitySectionModule ) {
openPopup ( communityProfilePopup , { store: store , community: community , chatCommunitySectionModule: chatCommunitySectionModule } )
2022-10-21 13:37:39 +00:00
}
2023-04-28 10:35:18 +00:00
function openCreateCommunityPopup ( isDiscordImport ) {
openPopup ( createCommunitiesPopupComponent , { isDiscordImport: isDiscordImport } )
}
function openImportCommunityPopup ( ) {
openPopup ( importCommunitiesPopupComponent )
}
2024-07-15 17:27:28 +00:00
function openCommunityIntroPopup ( communityId ,
name ,
introMessage ,
imageSrc ,
isInvitationPending
) {
2024-03-25 17:32:33 +00:00
openPopup ( communityJoinDialogPopup ,
2023-07-21 17:21:11 +00:00
{ communityId: communityId ,
2024-03-19 08:41:41 +00:00
communityName: name ,
2023-07-21 17:21:11 +00:00
introMessage: introMessage ,
2024-03-19 08:41:41 +00:00
communityIcon: imageSrc ,
2023-07-21 17:21:11 +00:00
isInvitationPending: isInvitationPending
2023-08-02 17:39:42 +00:00
} )
}
2023-11-28 13:41:11 +00:00
function openCommunityShareAddressesPopup ( communityId , name , imageSrc ) {
2024-03-25 17:32:33 +00:00
openPopup ( communityJoinDialogPopup ,
2023-11-28 13:41:11 +00:00
{ communityId: communityId ,
stackTitle: qsTr ( "Share addresses with %1's owner" ) . arg ( name ) ,
2024-03-19 08:41:41 +00:00
communityName: name ,
2023-11-28 13:41:11 +00:00
introMessage: qsTr ( "Share addresses to rejoin %1" ) . arg ( name ) ,
2024-03-19 08:41:41 +00:00
communityIcon: imageSrc ,
2023-11-28 13:41:11 +00:00
isInvitationPending: false
} )
}
2023-08-02 17:39:42 +00:00
function openEditSharedAddressesPopup ( communityId ) {
openPopup ( editSharedAddressesPopupComponent , { communityId: communityId , isEditMode: true } )
2023-07-21 17:21:11 +00:00
}
2023-09-01 07:58:48 +00:00
function openDiscordImportProgressPopup ( importingSingleChannel ) {
openPopup ( discordImportProgressDialog , { importingSingleChannel: importingSingleChannel } )
2023-04-28 10:35:18 +00:00
}
2024-11-06 20:53:41 +00:00
function openRemoveContactConfirmationPopup ( publicKey ) {
const contactDetails = Utils . getContactDetailsAsJson (
publicKey , false , true , true )
const properties = { publicKey , contactDetails }
openPopup ( removeContactConfirmationDialog , properties )
2023-05-10 12:22:26 +00:00
}
2023-05-19 16:07:50 +00:00
function openDeleteMessagePopup ( messageId , messageStore ) {
openPopup ( deleteMessageConfirmationDialogComponent ,
{
messageId ,
messageStore
} )
}
function openDownloadImageDialog ( imageSource ) {
// We don't use `openPopup`, because there's no `FileDialog::closed` signal.
const popup = downloadImageDialogComponent . createObject ( popupParent , { imageSource } )
popup . open ( )
}
2023-06-14 08:42:52 +00:00
function openLeaveCommunityPopup ( community , communityId , outroMessage ) {
openPopup ( leaveCommunityPopupComponent , { community , communityId , outroMessage } )
}
2023-06-27 19:56:44 +00:00
function openTestnetPopup ( ) {
openPopup ( testnetModal )
}
2023-09-12 09:26:57 +00:00
function openExportControlNodePopup ( community ) {
openPopup ( exportControlNodePopup , { community } )
2023-07-19 05:58:21 +00:00
}
2023-09-12 09:26:57 +00:00
function openImportControlNodePopup ( community ) {
openPopup ( importControlNodePopup , { community } )
2023-07-21 08:44:10 +00:00
}
2024-11-05 18:51:17 +00:00
function openTransferOwnershipPopup ( communityId , communityName , communityLogo , token ) {
openPopup ( transferOwnershipPopup , { communityId , communityName , communityLogo , token } )
2023-09-14 10:02:51 +00:00
}
2023-10-10 14:23:48 +00:00
function openConfirmExternalLinkPopup ( link , domain ) {
openPopup ( confirmExternalLinkPopup , { link , domain } )
}
2023-10-23 11:32:50 +00:00
function openFinaliseOwnershipPopup ( communityId ) {
openPopup ( finaliseOwnershipPopup , { communityId: communityId } )
}
2023-10-23 11:36:33 +00:00
function openDeclineOwnershipPopup ( communityId , communityName ) {
openPopup ( declineOwnershipPopup , { communityName: communityName , communityId: communityId } )
2023-10-23 11:32:50 +00:00
}
2024-01-24 11:49:46 +00:00
function openFirstTokenReceivedPopup ( communityId , communityName , communityLogo , tokenSymbol , tokenName , tokenAmount , tokenType , tokenImage ) {
openPopup ( firstTokenReceivedPopup ,
{
communityId: communityId ,
communityName: communityName ,
communityLogo: communityLogo ,
tokenSymbol: tokenSymbol ,
tokenName: tokenName ,
tokenAmount: tokenAmount ,
tokenType: tokenType ,
tokenImage: tokenImage
} )
}
2024-03-19 08:41:41 +00:00
2024-01-31 18:09:44 +00:00
function openConfirmHideAssetPopup ( assetSymbol , assetName , assetImage , isCommunityToken ) {
2024-07-26 14:47:18 +00:00
openPopup ( confirmHideAssetPopup , { symbol: assetSymbol , name: assetName , icon: assetImage , isCommunityToken } )
2024-01-29 15:37:17 +00:00
}
2024-01-31 18:09:44 +00:00
function openConfirmHideCollectiblePopup ( collectibleSymbol , collectibleName , collectibleImage , isCommunityToken ) {
openPopup ( confirmHideCollectiblePopup , { collectibleSymbol , collectibleName , collectibleImage , isCommunityToken } )
2024-01-29 15:37:17 +00:00
}
2024-01-24 11:49:46 +00:00
2024-03-20 10:50:10 +00:00
function openCommunityMemberMessagesPopup ( store , chatCommunitySectionModule , memberPubKey , displayName ) {
openPopup ( communityMemberMessagesPopup , {
2024-10-10 15:32:18 +00:00
rootStore: store ,
2024-03-20 10:50:10 +00:00
chatCommunitySectionModule: chatCommunitySectionModule ,
memberPubKey: memberPubKey ,
displayName: displayName
} )
}
2024-05-13 17:23:01 +00:00
function openSwapModal ( parameters ) {
2024-05-15 21:22:13 +00:00
openPopup ( swapModal , { swapInputParamsForm: parameters } )
2024-05-13 17:23:01 +00:00
}
2024-08-06 16:04:22 +00:00
function openBuyCryptoModal ( parameters ) {
openPopup ( buyCryptoModal , {
buyCryptoInputParamsForm: parameters
} )
2024-05-27 16:55:43 +00:00
}
2024-12-04 16:19:27 +00:00
function openPaymentRequestModal ( callback ) {
openPopup ( paymentRequestModalComponent , { callback: callback } )
}
2023-02-07 14:21:32 +00:00
readonly property list < Component > _components : [
2023-05-10 12:22:26 +00:00
Component {
id: removeContactConfirmationDialog
2024-10-22 12:39:42 +00:00
2024-02-20 17:19:36 +00:00
RemoveContactPopup {
2024-10-22 12:39:42 +00:00
utilsStore: root . utilsStore
2024-02-20 17:19:36 +00:00
onAccepted: {
rootStore . contactStore . removeContact ( publicKey )
if ( removeIDVerification )
2024-10-29 18:08:12 +00:00
rootStore . contactStore . removeTrustStatus ( publicKey )
2024-02-20 17:19:36 +00:00
if ( markAsUntrusted ) {
rootStore . contactStore . markUntrustworthy ( publicKey )
Global . displaySuccessToastMessage ( qsTr ( "%1 removed from contacts and marked as untrusted" ) . arg ( mainDisplayName ) )
} else {
Global . displaySuccessToastMessage ( qsTr ( "%1 removed from contacts" ) . arg ( mainDisplayName ) )
}
close ( )
2023-05-10 12:22:26 +00:00
}
2024-02-20 17:19:36 +00:00
onClosed: destroy ( )
2023-05-10 12:22:26 +00:00
}
} ,
2022-10-21 13:37:39 +00:00
2024-02-26 09:39:08 +00:00
Component {
id: markAsIDVerifiedPopupComponent
MarkAsIDVerifiedDialog {
2024-10-22 12:39:42 +00:00
utilsStore: root . utilsStore
2024-02-26 09:39:08 +00:00
onAccepted: {
2024-02-26 18:54:05 +00:00
rootStore . contactStore . markAsTrusted ( publicKey )
2024-10-29 18:08:12 +00:00
Global . displaySuccessToastMessage ( qsTr ( "%1 marked as trusted" ) . arg ( mainDisplayName ) )
2024-02-26 09:39:08 +00:00
close ( )
}
onClosed: destroy ( )
}
} ,
Component {
id: removeIDVerificationPopupComponent
RemoveIDVerificationDialog {
2024-10-22 12:39:42 +00:00
utilsStore: root . utilsStore
2024-02-26 09:39:08 +00:00
onAccepted: {
if ( markAsUntrusted && removeContact ) {
rootStore . contactStore . markUntrustworthy ( publicKey )
rootStore . contactStore . removeContact ( publicKey )
2024-10-29 18:08:12 +00:00
Global . displaySuccessToastMessage ( qsTr ( "%1 trust mark removed, removed from contacts and marked as untrusted" ) . arg ( mainDisplayName ) )
2024-02-26 09:39:08 +00:00
} else if ( markAsUntrusted ) {
rootStore . contactStore . markUntrustworthy ( publicKey )
2024-10-29 18:08:12 +00:00
Global . displaySuccessToastMessage ( qsTr ( "%1 trust mark removed and marked as untrusted" ) . arg ( mainDisplayName ) )
2024-02-26 09:39:08 +00:00
} else if ( removeContact ) {
rootStore . contactStore . removeContact ( publicKey )
2024-10-29 18:08:12 +00:00
Global . displaySuccessToastMessage ( qsTr ( "%1 trust mark removed and removed from contacts" ) . arg ( mainDisplayName ) )
2024-02-26 09:39:08 +00:00
} else {
2024-12-13 23:29:09 +00:00
rootStore . contactStore . removeTrustStatus ( publicKey )
2024-02-26 09:39:08 +00:00
}
close ( )
}
onClosed: destroy ( )
}
} ,
2022-10-21 13:37:39 +00:00
Component {
id: inviteFriendsToCommunityPopup
InviteFriendsToCommunityPopup {
rootStore: root . rootStore
2024-10-28 11:51:56 +00:00
2024-11-28 14:15:34 +00:00
contactsModel: root . mutualContactsModel
2024-10-28 11:51:56 +00:00
2022-10-21 13:37:39 +00:00
onClosed: destroy ( )
}
} ,
Component {
id: sendContactRequestPopupComponent
SendContactRequestModal {
2023-04-06 07:56:50 +00:00
rootStore: root . rootStore
2024-10-22 12:39:42 +00:00
utilsStore: root . utilsStore
2024-02-16 11:56:29 +00:00
onAccepted: rootStore . contactStore . sendContactRequest ( publicKey , message )
2022-10-21 13:37:39 +00:00
onClosed: destroy ( )
}
2023-02-07 14:21:32 +00:00
} ,
2024-02-29 21:01:33 +00:00
Component {
id: reviewContactRequestPopupComponent
ReviewContactRequestPopup {
2024-10-22 12:39:42 +00:00
utilsStore: root . utilsStore
2024-02-29 21:01:33 +00:00
onAccepted: {
rootStore . contactStore . acceptContactRequest ( publicKey , contactRequestId )
Global . displaySuccessToastMessage ( qsTr ( "Contact request accepted" ) )
close ( )
}
onDiscarded: {
rootStore . contactStore . dismissContactRequest ( publicKey , contactRequestId )
Global . displaySuccessToastMessage ( qsTr ( "Contact request ignored" ) )
close ( )
}
onClosed: destroy ( )
}
} ,
2023-02-07 14:21:32 +00:00
Component {
id: backupSeedModalComponent
BackupSeedModal {
privacyStore: rootStore . profileSectionStore . privacyStore
onClosed: destroy ( )
}
} ,
Component {
id: downloadPageComponent
DownloadPage {
onClosed: destroy ( )
}
} ,
Component {
id: imagePopupComponent
StatusImageModal {
id: imagePopup
onClosed: destroy ( )
}
} ,
2024-05-15 09:36:56 +00:00
Component {
id: videoPopupComponent
StatusVideoModal {
id: videoPopup
onClosed: destroy ( )
}
} ,
2023-02-07 14:21:32 +00:00
Component {
id: profilePopupComponent
ProfileDialog {
id: profilePopup
2024-03-29 11:43:49 +00:00
2024-11-21 15:10:58 +00:00
property alias publicKey: contactModelEntry . publicKey
readonly property bool isCurrentUser: contactDetails . isCurrentUser
ContactModelEntry {
id: contactModelEntry
contactsModel: root . allContactsModel
}
contactDetails: contactModelEntry . contactDetails
2024-03-29 11:43:49 +00:00
2023-02-07 14:21:32 +00:00
profileStore: rootStore . profileSectionStore . profileStore
contactsStore: rootStore . profileSectionStore . contactsStore
2024-10-28 23:00:16 +00:00
walletStore: WalletStores . RootStore
2024-10-22 12:39:42 +00:00
utilsStore: root . utilsStore
2024-03-29 11:43:49 +00:00
sendToAccountEnabled: root . networkConnectionStore . sendBuyBridgeEnabled
2024-11-21 15:10:58 +00:00
showcaseCommunitiesModel: isCurrentUser ? rootStore . profileSectionStore . ownShowcaseCommunitiesModel
: rootStore . profileSectionStore . contactShowcaseCommunitiesModel
showcaseAccountsModel: isCurrentUser ? rootStore . profileSectionStore . ownShowcaseAccountsModel
: rootStore . profileSectionStore . contactShowcaseAccountsModel
showcaseCollectiblesModel: isCurrentUser ? rootStore . profileSectionStore . ownShowcaseCollectiblesModel
: rootStore . profileSectionStore . contactShowcaseCollectiblesModel
showcaseSocialLinksModel: isCurrentUser ? rootStore . profileSectionStore . ownShowcaseSocialLinksModel
: rootStore . profileSectionStore . contactShowcaseSocialLinksModel
2024-03-29 11:43:49 +00:00
2024-02-15 09:25:40 +00:00
assetsModel: rootStore . globalAssetsModel
collectiblesModel: rootStore . globalCollectiblesModel
2024-03-29 11:43:49 +00:00
onOpened: {
isCurrentUser ? rootStore . profileSectionStore . requestOwnShowcase ( )
: rootStore . profileSectionStore . requestContactShowcase ( publicKey )
}
2023-02-07 14:21:32 +00:00
onClosed: {
if ( profilePopup . parentPopup ) {
profilePopup . parentPopup . close ( )
}
destroy ( )
}
}
} ,
Component {
id: changeProfilePicComponent
ImageCropWorkflow {
title: qsTr ( "Profile Picture" )
acceptButtonText: qsTr ( "Make this my Profile Pic" )
onImageCropped: {
if ( callback ) {
callback ( image ,
cropRect . x . toFixed ( ) ,
cropRect . y . toFixed ( ) ,
( cropRect . x + cropRect . width ) . toFixed ( ) ,
( cropRect . y + cropRect . height ) . toFixed ( ) )
return
}
rootStore . profileSectionStore . profileStore . uploadImage ( image ,
cropRect . x . toFixed ( ) ,
cropRect . y . toFixed ( ) ,
( cropRect . x + cropRect . width ) . toFixed ( ) ,
( cropRect . y + cropRect . height ) . toFixed ( ) ) ;
}
onDone: destroy ( )
}
} ,
Component {
id: communityProfilePopup
CommunityProfilePopup {
onClosed: destroy ( )
}
} ,
Component {
id: pinnedMessagesPopup
2024-10-22 12:39:42 +00:00
2023-02-07 14:21:32 +00:00
PinnedMessagesPopup {
2024-10-02 20:47:14 +00:00
sharedStore: root . sharedRootStore
2024-10-22 12:39:42 +00:00
utilsStore: root . utilsStore
2023-02-07 14:21:32 +00:00
onClosed: destroy ( )
}
} ,
Component {
id: nicknamePopupComponent
2024-10-21 22:01:34 +00:00
2023-02-07 14:21:32 +00:00
NicknamePopup {
2024-10-21 22:01:34 +00:00
utilsStore: root . utilsStore
2023-02-07 14:21:32 +00:00
onEditDone: {
if ( nickname !== newNickname ) {
2024-02-16 17:34:09 +00:00
rootStore . contactStore . changeContactNickname ( publicKey , newNickname , optionalDisplayName , ! ! nickname )
2023-02-07 14:21:32 +00:00
}
close ( )
}
2024-02-14 12:52:54 +00:00
onRemoveNicknameRequested: {
2024-02-16 17:34:09 +00:00
rootStore . contactStore . changeContactNickname ( publicKey , "" , optionalDisplayName , true )
close ( )
}
onClosed: destroy ( )
}
} ,
Component {
id: markAsUntrustedComponent
MarkAsUntrustedPopup {
2024-10-22 12:39:42 +00:00
utilsStore: root . utilsStore
2024-02-16 17:34:09 +00:00
onAccepted: {
rootStore . contactStore . markUntrustworthy ( publicKey )
if ( removeContact ) {
rootStore . contactStore . removeContact ( publicKey )
Global . displaySuccessToastMessage ( qsTr ( "%1 removed from contacts and marked as untrusted" ) . arg ( mainDisplayName ) )
} else {
2024-02-20 17:19:36 +00:00
Global . displaySuccessToastMessage ( qsTr ( "%1 marked as untrusted" ) . arg ( mainDisplayName ) )
2024-02-16 17:34:09 +00:00
}
2024-02-14 12:52:54 +00:00
close ( )
}
2023-02-07 14:21:32 +00:00
onClosed: destroy ( )
}
} ,
Component {
id: unblockContactConfirmationComponent
UnblockContactConfirmationDialog {
2024-10-22 12:39:42 +00:00
utilsStore: root . utilsStore
2024-02-20 18:52:07 +00:00
onAccepted: {
rootStore . contactStore . unblockContact ( publicKey )
Global . displaySuccessToastMessage ( qsTr ( "%1 unblocked" ) . arg ( mainDisplayName ) )
2023-02-07 14:21:32 +00:00
close ( )
}
onClosed: destroy ( )
}
} ,
Component {
id: blockContactConfirmationComponent
BlockContactConfirmationDialog {
2024-10-22 12:39:42 +00:00
utilsStore: root . utilsStore
2024-02-20 18:52:07 +00:00
onAccepted: {
rootStore . contactStore . blockContact ( publicKey )
if ( removeIDVerification )
2024-10-29 18:08:12 +00:00
rootStore . contactStore . removeTrustStatus ( publicKey )
2024-02-20 18:52:07 +00:00
if ( removeContact )
rootStore . contactStore . removeContact ( publicKey )
Global . displaySuccessToastMessage ( qsTr ( "%1 blocked" ) . arg ( mainDisplayName ) )
2023-02-07 14:21:32 +00:00
close ( )
}
onClosed: destroy ( )
}
2023-04-28 10:35:18 +00:00
} ,
Component {
id: importCommunitiesPopupComponent
ImportCommunityPopup {
store: root . communitiesStore
2023-10-27 10:25:27 +00:00
onJoinCommunityRequested: {
2023-08-02 17:39:42 +00:00
close ( )
2024-07-15 17:27:28 +00:00
communitiesStore . spectateCommunity ( communityId )
2023-08-02 17:39:42 +00:00
openCommunityIntroPopup ( communityId ,
communityDetails . name ,
communityDetails . introMessage ,
communityDetails . image ,
2023-12-04 19:14:13 +00:00
root . rootStore . isMyCommunityRequestPending ( communityId ) )
2023-07-21 17:21:11 +00:00
}
2023-08-02 17:39:42 +00:00
onClosed: destroy ( )
2023-07-21 17:21:11 +00:00
}
} ,
Component {
2024-03-25 17:32:33 +00:00
id: communityJoinDialogPopup
CommunityMembershipSetupDialog {
id: dialogRoot
2023-08-22 18:04:58 +00:00
requirementsCheckPending: root . rootStore . requirementsCheckPending
2024-05-16 09:28:06 +00:00
checkingPermissionToJoinInProgress: root . rootStore . checkingPermissionToJoinInProgress
joinPermissionsCheckCompletedWithoutErrors: root . rootStore . joinPermissionsCheckCompletedWithoutErrors
2024-03-19 08:41:41 +00:00
2023-07-31 15:56:00 +00:00
walletAccountsModel: root . rootStore . walletAccountsModel
2024-10-28 23:00:16 +00:00
walletCollectiblesModel: WalletStores . RootStore . collectiblesStore . allCollectiblesModel
2024-03-28 23:05:59 +00:00
2024-10-28 23:00:16 +00:00
canProfileProveOwnershipOfProvidedAddressesFn: WalletStores . RootStore . canProfileProveOwnershipOfProvidedAddresses
2024-03-19 08:41:41 +00:00
2024-01-24 16:35:53 +00:00
walletAssetsModel: walletAssetsStore . groupedAccountAssetsModel
2023-08-21 18:54:57 +00:00
permissionsModel: {
2024-03-25 17:32:33 +00:00
root . rootStore . prepareTokenModelForCommunity ( dialogRoot . communityId )
2023-08-21 18:54:57 +00:00
return root . rootStore . permissionsModel
}
2023-07-21 17:21:11 +00:00
assetsModel: root . rootStore . assetsModel
collectiblesModel: root . rootStore . collectiblesModel
2024-01-24 16:35:53 +00:00
2024-03-27 12:48:17 +00:00
getCurrencyAmount: function ( balance , symbol ) {
2024-01-24 16:35:53 +00:00
return currencyStore . getCurrencyAmount ( balance , symbol )
}
2023-10-27 17:20:52 +00:00
onPrepareForSigning: {
2024-03-25 17:32:33 +00:00
root . rootStore . prepareKeypairsForSigning ( dialogRoot . communityId , dialogRoot . name , sharedAddresses , airdropAddress , false )
2023-10-27 17:20:52 +00:00
2024-03-25 17:32:33 +00:00
dialogRoot . keypairSigningModel = root . rootStore . communitiesModuleInst . keypairsSigningModel
2023-10-27 17:20:52 +00:00
}
2024-03-19 08:41:41 +00:00
onSignProfileKeypairAndAllNonKeycardKeypairs: {
root . rootStore . signProfileKeypairAndAllNonKeycardKeypairs ( )
2023-10-27 17:20:52 +00:00
}
onSignSharedAddressesForKeypair: {
root . rootStore . signSharedAddressesForKeypair ( keyUid )
}
onJoinCommunity: {
root . rootStore . joinCommunityOrEditSharedAddresses ( )
}
2024-03-27 12:48:17 +00:00
onCancelMembershipRequest: {
root . rootStore . cancelPendingRequest ( dialogRoot . communityId )
}
2023-07-21 17:21:11 +00:00
Connections {
target: root . communitiesStore . communitiesModuleInst
function onCommunityAccessRequested ( communityId: string ) {
2024-03-25 17:32:33 +00:00
if ( communityId !== dialogRoot . communityId )
2023-08-02 17:39:42 +00:00
return
2023-07-21 17:21:11 +00:00
root . communitiesStore . spectateCommunity ( communityId ) ;
2024-03-25 17:32:33 +00:00
dialogRoot . close ( ) ;
2023-07-21 17:21:11 +00:00
}
2023-10-27 17:20:52 +00:00
function onCommunityAccessFailed ( communityId: string , error: string ) {
2024-03-25 17:32:33 +00:00
if ( communityId !== dialogRoot . communityId )
2023-08-02 17:39:42 +00:00
return
2024-03-25 17:32:33 +00:00
dialogRoot . close ( ) ;
2023-07-21 17:21:11 +00:00
}
2023-04-28 10:35:18 +00:00
}
2024-03-27 09:06:14 +00:00
2023-08-21 18:54:57 +00:00
onSharedAddressesUpdated: {
2024-03-25 17:32:33 +00:00
root . rootStore . updatePermissionsModel ( dialogRoot . communityId , sharedAddresses )
2023-08-21 18:54:57 +00:00
}
2024-03-27 09:06:14 +00:00
2024-03-25 17:32:33 +00:00
onAboutToShow: { root . rootStore . communityKeyToImport = dialogRoot . communityId ; }
2024-03-27 09:06:14 +00:00
onClosed: {
root . rootStore . communityKeyToImport = "" ;
root . rootStore . cleanJoinEditCommunityData ( )
}
2023-10-27 17:20:52 +00:00
Connections {
target: root . rootStore . communitiesModuleInst
2024-03-19 08:41:41 +00:00
function onAllSharedAddressesSigned ( ) {
2024-03-25 17:32:33 +00:00
if ( dialogRoot . profileProvesOwnershipOfSelectedAddresses ) {
dialogRoot . joinCommunity ( )
dialogRoot . close ( )
2024-03-19 08:41:41 +00:00
return
}
2024-03-25 17:32:33 +00:00
if ( dialogRoot . allAddressesToRevealBelongToSingleNonProfileKeypair ) {
dialogRoot . joinCommunity ( )
dialogRoot . close ( )
2024-03-19 08:41:41 +00:00
return
}
2024-03-25 17:32:33 +00:00
if ( ! ! dialogRoot . replaceItem ) {
dialogRoot . replaceLoader . item . allSigned ( )
2023-10-27 17:20:52 +00:00
}
}
}
2023-04-28 10:35:18 +00:00
}
} ,
Component {
id: createCommunitiesPopupComponent
CreateCommunityPopup {
store: root . communitiesStore
2023-06-26 11:44:56 +00:00
isDevBuild: root . isDevBuild
2023-04-28 10:35:18 +00:00
onClosed: {
destroy ( )
}
}
} ,
Component {
id: discordImportProgressDialog
DiscordImportProgressDialog {
store: root . communitiesStore
}
2023-05-19 16:07:50 +00:00
} ,
Component {
id: deleteMessageConfirmationDialogComponent
DeleteMessageConfirmationPopup {
onClosed: destroy ( )
}
} ,
Component {
id: downloadImageDialogComponent
FileDialog {
property string imageSource
title: qsTr ( "Please choose a directory" )
selectFolder: true
selectExisting: true
selectMultiple: false
modality: Qt . NonModal
onAccepted: {
2024-10-08 13:28:45 +00:00
SystemUtils . downloadImageByUrl ( imageSource , fileUrl )
2023-05-19 16:07:50 +00:00
destroy ( )
}
onRejected: {
destroy ( )
}
}
2023-06-14 08:42:52 +00:00
} ,
Component {
id: leaveCommunityPopupComponent
StatusModal {
id: leavePopup
property string community
property string communityId
property string outroMessage
headerSettings.title: qsTr ( "Are you sure want to leave '%1'?" ) . arg ( community )
padding: 16
width: 640
contentItem: ColumnLayout {
spacing: 16
StatusBaseText {
id: outroMessage
Layout.fillWidth: true
wrapMode: Text . WrapAtWordBoundaryOrAnywhere
text: leavePopup . outroMessage
visible: ! ! text
}
StatusMenuSeparator {
Layout.fillWidth: true
visible: outroMessage . visible
}
StatusBaseText {
Layout.fillWidth: true
wrapMode: Text . WrapAtWordBoundaryOrAnywhere
font.pixelSize: 13
text: qsTr ( "You will need to request to join if you want to become a member again in the future. If you joined the Community via public key ensure you have a copy of it before you go." )
}
}
rightButtons: [
StatusFlatButton {
text: qsTr ( "Cancel" )
onClicked: leavePopup . close ( )
} ,
StatusButton {
objectName: "CommunitiesListPanel_leaveCommunityButtonInPopup"
type: StatusBaseButton . Type . Danger
text: qsTr ( "Leave %1" ) . arg ( leavePopup . community )
onClicked: {
leavePopup . close ( )
2023-06-21 20:37:51 +00:00
root . rootStore . profileSectionStore . communitiesProfileModule . leaveCommunity ( leavePopup . communityId )
2023-06-14 08:42:52 +00:00
}
}
]
onClosed: destroy ( )
}
2023-06-27 19:56:44 +00:00
} ,
Component {
id: testnetModal
AlertPopup {
width: 521
readonly property string mainTitle: root . rootStore . profileSectionStore . walletStore . areTestNetworksEnabled ? qsTr ( "Turn off testnet mode" ) : qsTr ( "Turn on testnet mode" )
title: mainTitle
alertLabel.textFormat: Text . RichText
alertText: root . rootStore . profileSectionStore . walletStore . areTestNetworksEnabled ?
qsTr ( "Are you sure you want to turn off %1? All future transactions will be performed on live networks with real funds" ) . arg ( "<html><span style='font-weight: 500;'>testnet mode</span></html>" ) :
qsTr ( "Are you sure you want to turn on %1? In this mode, all blockchain data displayed will come from testnets and all blockchain interactions will be with testnets. Testnet mode switches the entire app to using testnets only. Please switch this mode on only if you know exactly why you need to use it." ) . arg ( "<html><span style='font-weight: 500;'>testnet mode</span></html>" )
acceptBtnText: mainTitle
acceptBtnType: root . rootStore . profileSectionStore . walletStore . areTestNetworksEnabled ? StatusBaseButton.Type.Normal : StatusBaseButton . Type . Warning
asset.name: "settings"
asset.color: Theme . palette . warningColor1
asset.bgColor: Theme . palette . warningColor3
onAcceptClicked: {
root . rootStore . profileSectionStore . walletStore . toggleTestNetworksEnabled ( )
Global . displayToastMessage ( root . rootStore . profileSectionStore . walletStore . areTestNetworksEnabled ? qsTr ( "Testnet mode turned on" ) : qsTr ( "Testnet mode turned off" ) , "" , "checkmark-circle" , false , Constants . ephemeralNotificationType . success , "" )
}
onCancelClicked: close ( )
}
2023-07-19 05:58:21 +00:00
} ,
Component {
id: exportControlNodePopup
ExportControlNodePopup {
2023-09-12 09:26:57 +00:00
devicesStore: root . devicesStore
2023-07-19 05:58:21 +00:00
onClosed: destroy ( )
}
2023-07-21 08:44:10 +00:00
} ,
Component {
id: importControlNodePopup
ImportControlNodePopup {
onClosed: destroy ( )
2024-10-26 01:25:50 +00:00
onImportControlNode: root . rootStore . promoteSelfToControlNode ( communityId )
2023-07-21 08:44:10 +00:00
}
2023-08-02 17:39:42 +00:00
} ,
Component {
id: editSharedAddressesPopupComponent
2024-03-25 17:32:33 +00:00
CommunityMembershipSetupDialog {
2023-08-02 17:39:42 +00:00
id: editSharedAddressesPopup
2023-07-21 08:44:10 +00:00
2024-05-22 08:13:39 +00:00
readonly property ChatStores . RootStore chatStore: ChatStores . RootStore {
2023-08-02 17:39:42 +00:00
contactsStore: root . rootStore . contactStore
chatCommunitySectionModule: {
root . rootStore . mainModuleInst . prepareCommunitySectionModuleForCommunityId ( editSharedAddressesPopup . communityId )
return root . rootStore . mainModuleInst . getCommunitySectionModule ( )
}
}
2024-03-19 08:41:41 +00:00
isEditMode: true
currentSharedAddresses: root . rootStore . myRevealedAddressesForCurrentCommunity
currentAirdropAddress: root . rootStore . myRevealedAirdropAddressForCurrentCommunity
2023-08-02 17:39:42 +00:00
communityName: chatStore . sectionDetails . name
communityIcon: chatStore . sectionDetails . image
2024-04-25 09:47:40 +00:00
2023-08-22 18:04:58 +00:00
requirementsCheckPending: root . rootStore . requirementsCheckPending
2024-05-16 09:28:06 +00:00
checkingPermissionToJoinInProgress: root . rootStore . checkingPermissionToJoinInProgress
joinPermissionsCheckCompletedWithoutErrors: root . rootStore . joinPermissionsCheckCompletedWithoutErrors
2024-03-19 08:41:41 +00:00
2024-03-27 12:48:17 +00:00
introMessage: chatStore . sectionDetails . introMessage
2024-10-28 23:00:16 +00:00
canProfileProveOwnershipOfProvidedAddressesFn: WalletStores . RootStore . canProfileProveOwnershipOfProvidedAddresses
2024-03-19 08:41:41 +00:00
2023-08-29 15:28:41 +00:00
walletAccountsModel: root . rootStore . walletAccountsModel
2024-03-28 23:05:59 +00:00
2024-01-24 16:35:53 +00:00
walletAssetsModel: walletAssetsStore . groupedAccountAssetsModel
2024-10-28 23:00:16 +00:00
walletCollectiblesModel: WalletStores . RootStore . collectiblesStore . allCollectiblesModel
2024-03-28 23:05:59 +00:00
2023-08-21 18:54:57 +00:00
permissionsModel: {
root . rootStore . prepareTokenModelForCommunity ( editSharedAddressesPopup . communityId )
return root . rootStore . permissionsModel
}
2023-08-02 17:39:42 +00:00
assetsModel: chatStore . assetsModel
collectiblesModel: chatStore . collectiblesModel
2024-03-19 08:41:41 +00:00
getCurrencyAmount: function ( balance , symbol ) {
return root . currencyStore . getCurrencyAmount ( balance , symbol )
}
onSharedAddressesUpdated: {
root . rootStore . updatePermissionsModel ( editSharedAddressesPopup . communityId , sharedAddresses )
}
2023-10-27 17:20:52 +00:00
onPrepareForSigning: {
root . rootStore . prepareKeypairsForSigning ( editSharedAddressesPopup . communityId , "" , sharedAddresses , airdropAddress , true )
editSharedAddressesPopup . keypairSigningModel = root . rootStore . communitiesModuleInst . keypairsSigningModel
}
2024-03-19 08:41:41 +00:00
onSignProfileKeypairAndAllNonKeycardKeypairs: {
root . rootStore . signProfileKeypairAndAllNonKeycardKeypairs ( )
2023-10-27 17:20:52 +00:00
}
onSignSharedAddressesForKeypair: {
root . rootStore . signSharedAddressesForKeypair ( keyUid )
}
onEditRevealedAddresses: {
root . rootStore . joinCommunityOrEditSharedAddresses ( )
}
2024-03-27 09:06:14 +00:00
onClosed: {
root . rootStore . cleanJoinEditCommunityData ( )
}
2023-10-27 17:20:52 +00:00
Connections {
target: root . rootStore . communitiesModuleInst
2024-03-19 08:41:41 +00:00
function onAllSharedAddressesSigned ( ) {
if ( editSharedAddressesPopup . profileProvesOwnershipOfSelectedAddresses ) {
editSharedAddressesPopup . editRevealedAddresses ( )
editSharedAddressesPopup . close ( )
return
}
2024-01-24 16:35:53 +00:00
2024-03-19 08:41:41 +00:00
if ( editSharedAddressesPopup . allAddressesToRevealBelongToSingleNonProfileKeypair ) {
editSharedAddressesPopup . editRevealedAddresses ( )
editSharedAddressesPopup . close ( )
return
}
if ( ! ! editSharedAddressesPopup . replaceItem ) {
editSharedAddressesPopup . replaceLoader . item . allSigned ( )
}
}
2024-01-24 16:35:53 +00:00
}
2023-08-02 17:39:42 +00:00
}
2023-09-14 10:02:51 +00:00
} ,
Component {
id: transferOwnershipPopup
TransferOwnershipPopup {
2024-12-02 11:02:05 +00:00
onTransferOwnershipRequested: root . transferOwnershipRequested (
tokenId , senderAddress )
2023-09-14 10:02:51 +00:00
onClosed: destroy ( )
}
2023-10-10 14:23:48 +00:00
} ,
Component {
id: confirmExternalLinkPopup
ConfirmExternalLinkPopup {
destroyOnClose: true
onOpenExternalLink: root . openExternalLink ( link )
onSaveDomainToUnfurledWhitelist: root . saveDomainToUnfurledWhitelist ( domain )
}
2023-10-23 11:32:50 +00:00
} ,
// Components related to transfer community ownership flow:
Component {
id: finaliseOwnershipPopup
FinaliseOwnershipPopup {
id: finalisePopup
property string communityId
2023-10-23 11:36:33 +00:00
readonly property var ownerTokenDetails: root . communityTokensStore . ownerTokenDetails
2023-10-23 11:32:50 +00:00
readonly property var communityData : root . communitiesStore . getCommunityDetailsAsJson ( communityId )
2023-10-23 11:36:33 +00:00
Component.onCompleted: root . communityTokensStore . asyncGetOwnerTokenDetails ( communityId )
2023-10-23 11:32:50 +00:00
communityName: communityData . name
communityLogo: communityData . image
communityColor: communityData . color
2023-10-23 11:36:33 +00:00
tokenSymbol: ownerTokenDetails . symbol
tokenChainName: ownerTokenDetails . chainName
2023-10-23 11:32:50 +00:00
feeText: feeSubscriber . feeText
feeErrorText: feeSubscriber . feeErrorText
isFeeLoading: ! feeSubscriber . feesResponse
2024-10-28 23:00:16 +00:00
accounts: WalletStores . RootStore . nonWatchAccounts
2023-10-23 11:32:50 +00:00
destroyOnClose: true
2023-10-23 11:36:33 +00:00
onRejectClicked: Global . openDeclineOwnershipPopup ( finalisePopup . communityId , communityData . name )
2023-10-23 11:32:50 +00:00
onFinaliseOwnershipClicked: signPopup . open ( )
2023-10-23 11:36:33 +00:00
onVisitCommunityClicked: communitiesStore . navigateToCommunity ( finalisePopup . communityId )
2023-10-23 11:32:50 +00:00
onOpenControlNodeDocClicked: Global . openLink ( link )
SetSignerFeesSubscriber {
id: feeSubscriber
readonly property TransactionFeesBroker feesBroker: TransactionFeesBroker {
communityTokensStore: root . communityTokensStore
2024-10-04 11:01:08 +00:00
active: finalisePopup . contentItem . Window . window . active
2023-10-23 11:32:50 +00:00
}
2023-10-23 11:36:33 +00:00
chainId: finalisePopup . ownerTokenDetails . chainId
contractAddress: finalisePopup . ownerTokenDetails . contractAddress
accountAddress: finalisePopup . ownerTokenDetails . accountAddress
2023-10-23 11:32:50 +00:00
enabled: finalisePopup . visible || signPopup . visible
Component.onCompleted: feesBroker . registerSetSignerFeesSubscriber ( feeSubscriber )
}
SignTransactionsPopup {
id: signPopup
title: qsTr ( "Sign transaction - update %1 smart contract" ) . arg ( finalisePopup . communityName )
totalFeeText: finalisePopup . isFeeLoading ? "" : finalisePopup . feeText
errorText: finalisePopup . feeErrorText
2023-10-23 11:36:33 +00:00
accountName: finalisePopup . ownerTokenDetails . accountName
2023-10-23 11:32:50 +00:00
model: QtObject {
readonly property string title: finalisePopup . feeLabel
readonly property string feeText: signPopup . totalFeeText
readonly property bool error: finalisePopup . feeErrorText !== ""
}
onSignTransactionClicked: {
2023-10-23 11:36:33 +00:00
finalisePopup . close ( )
root . communityTokensStore . updateSmartContract ( finalisePopup . communityId , finalisePopup . ownerTokenDetails . chainId , finalisePopup . ownerTokenDetails . contractAddress , finalisePopup . ownerTokenDetails . accountAddress )
2023-10-23 11:32:50 +00:00
}
}
Connections {
target: root
2024-04-17 13:01:55 +00:00
function onOwnershipDeclined ( communityId: string , communityName: string ) {
2023-10-23 11:32:50 +00:00
finalisePopup . close ( )
2024-04-17 13:01:55 +00:00
root . communityTokensStore . ownershipDeclined ( communityId , communityName )
2023-10-23 11:32:50 +00:00
}
}
}
} ,
Component {
id: declineOwnershipPopup
FinaliseOwnershipDeclinePopup {
destroyOnClose: true
2024-04-17 13:01:55 +00:00
onDeclineClicked: root . ownershipDeclined ( communityId , communityName )
2023-10-23 11:32:50 +00:00
}
2024-01-24 11:49:46 +00:00
} ,
2023-10-23 11:32:50 +00:00
// End of components related to transfer community ownership flow.
2024-01-24 11:49:46 +00:00
Component {
id: firstTokenReceivedPopup
FirstTokenReceivedPopup {
2024-01-31 18:09:44 +00:00
destroyOnClose: true
2024-01-24 11:49:46 +00:00
communitiesStore: root . communitiesStore
2024-07-26 14:47:18 +00:00
onHideClicked: ( tokenSymbol , tokenName , tokenImage , isAsset ) = > isAsset ? root . openConfirmHideAssetPopup ( tokenSymbol , tokenName , tokenImage , true )
: root . openConfirmHideCollectiblePopup ( tokenSymbol , tokenName , tokenImage , true )
2024-01-24 11:49:46 +00:00
}
2024-01-29 15:37:17 +00:00
} ,
Component {
id: confirmHideAssetPopup
2024-07-26 14:47:18 +00:00
ConfirmHideAssetPopup {
destroyOnClose: true
2024-01-29 15:37:17 +00:00
2024-07-26 14:47:18 +00:00
required property bool isCommunityToken
2024-01-29 15:37:17 +00:00
onConfirmButtonClicked: {
2024-01-31 18:09:44 +00:00
if ( isCommunityToken )
2024-07-26 14:47:18 +00:00
root . walletAssetsStore . assetsController . showHideCommunityToken ( symbol , false )
2024-01-31 18:09:44 +00:00
else
2024-07-26 14:47:18 +00:00
root . walletAssetsStore . assetsController . showHideRegularToken ( symbol , false )
2024-01-29 15:37:17 +00:00
close ( )
2024-07-26 14:47:18 +00:00
Global . displayToastMessage ( qsTr ( "%1 (%2) successfully hidden. You can toggle asset visibility via %3." ) . arg ( name ) . arg ( symbol )
2024-01-31 18:09:44 +00:00
. arg ( ` < a style = "text-decoration:none" href = "#${Constants.appSection.profile}/${Constants.settingsSubsection.wallet}/${Constants.walletSettingsSubsection.manageHidden}" > ` + qsTr ( "Settings" , "Go to Settings" ) + "</a>" ) ,
2024-01-29 15:37:17 +00:00
"" ,
"checkmark-circle" ,
false ,
Constants . ephemeralNotificationType . success ,
"" )
}
}
} ,
Component {
id: confirmHideCollectiblePopup
ConfirmationDialog {
property string collectibleSymbol
property string collectibleName
property string collectibleImage
2024-01-31 18:09:44 +00:00
property bool isCommunityToken
2024-01-29 15:37:17 +00:00
width: 520
destroyOnClose: true
confirmButtonLabel: qsTr ( "Hide collectible" )
cancelBtnType: ""
showCancelButton: true
headerSettings.title: qsTr ( "Hide %1" ) . arg ( collectibleName )
headerSettings.asset.name: collectibleImage
2024-10-15 19:26:12 +00:00
headerSettings.asset.bgRadius: Theme . radius
2024-01-29 15:37:17 +00:00
confirmationText: qsTr ( "Are you sure you want to hide %1? You will no longer see or be able to interact with this collectible anywhere inside Status." ) . arg ( collectibleName )
onCancelButtonClicked: close ( )
onConfirmButtonClicked: {
2024-01-31 18:09:44 +00:00
if ( isCommunityToken )
root . walletCollectiblesStore . collectiblesController . showHideCommunityToken ( collectibleSymbol , false )
else
root . walletCollectiblesStore . collectiblesController . showHideRegularToken ( collectibleSymbol , false )
2024-01-29 15:37:17 +00:00
close ( )
Global . displayToastMessage ( qsTr ( "%1 successfully hidden. You can toggle collectible visibility via %2." ) . arg ( collectibleName )
2024-01-31 18:09:44 +00:00
. arg ( ` < a style = "text-decoration:none" href = "#${Constants.appSection.profile}/${Constants.settingsSubsection.wallet}/${Constants.walletSettingsSubsection.manageHidden}" > ` + qsTr ( "Settings" , "Go to Settings" ) + "</a>" ) ,
2024-01-29 15:37:17 +00:00
"" ,
"checkmark-circle" ,
false ,
Constants . ephemeralNotificationType . success ,
"" )
}
}
2024-03-20 10:50:10 +00:00
} ,
Component {
id: communityMemberMessagesPopup
CommunityMemberMessagesPopup {
2024-10-02 20:47:14 +00:00
sharedRootStore: root . sharedRootStore
2024-10-22 12:39:42 +00:00
utilsStore: root . utilsStore
2024-03-20 10:50:10 +00:00
onClosed: destroy ( )
}
2024-05-13 17:23:01 +00:00
} ,
Component {
id: swapModal
SwapModal {
2024-05-15 21:22:13 +00:00
swapAdaptor: SwapModalAdaptor {
2024-10-28 23:00:16 +00:00
swapStore: WalletStores . SwapStore { }
2024-05-15 21:22:13 +00:00
walletAssetsStore: root . walletAssetsStore
currencyStore: root . currencyStore
swapFormData: swapInputParamsForm
2024-06-06 14:05:31 +00:00
swapOutputData: SwapOutputData { }
2024-05-15 21:22:13 +00:00
}
2024-07-10 18:35:24 +00:00
loginType: root . rootStore . loginType
2024-05-13 17:23:01 +00:00
onClosed: destroy ( )
}
2024-05-27 16:55:43 +00:00
} ,
Component {
id: buyCryptoModal
BuyCryptoModal {
2024-08-13 12:03:35 +00:00
buyProvidersModel: root . buyCryptoStore . providersModel
isBuyProvidersModelLoading: root . buyCryptoStore . areProvidersLoading
currentCurrency: root . currencyStore . currentCurrency
walletAccountsModel: root . rootStore . accounts
plainTokensBySymbolModel: root . walletAssetsStore . walletTokensStore . plainTokensBySymbolModel
groupedAccountAssetsModel: root . walletAssetsStore . groupedAccountAssetsModel
networksModel: root . rootStore . profileSectionStore . walletStore . flatNetworks
areTestNetworksEnabled: root . rootStore . profileSectionStore . walletStore . areTestNetworksEnabled
Component.onCompleted: {
fetchProviders . connect ( root . buyCryptoStore . fetchProviders )
fetchProviderUrl . connect ( root . buyCryptoStore . fetchProviderUrl )
root . buyCryptoStore . providerUrlReady . connect ( providerUrlReady )
2024-08-06 16:04:22 +00:00
}
2024-05-27 16:55:43 +00:00
onClosed: destroy ( )
}
2024-08-20 15:51:18 +00:00
} ,
Component {
id: privacyPolicyPopupComponent
StatusDialog {
width: 600
padding: 0
title: qsTr ( "Status Software Privacy Policy" )
StatusScrollView {
id: privacyDialogScrollView
anchors.fill: parent
contentWidth: availableWidth
StatusBaseText {
width: privacyDialogScrollView . availableWidth
wrapMode: Text . Wrap
textFormat: Text . MarkdownText
text: SQUtils . StringUtils . readTextFile ( ":/imports/assets/docs/privacy.mdwn" )
onLinkActivated: Global . openLinkWithConfirmation ( link , SQUtils . StringUtils . extractDomainFromLink ( link ) )
}
}
standardButtons: Dialog . Ok
destroyOnClose: true
}
2024-12-04 16:19:27 +00:00
} ,
Component {
id: paymentRequestModalComponent
PaymentRequestModal {
id: paymentRequestModal
readonly property var tokenAdaptor: TokenSelectorViewAdaptor {
assetsModel: null
flatNetworksModel: WalletStores . RootStore . filteredFlatModel
currentCurrency: root . currencyStore . currentCurrency
plainTokensBySymbolModel: WalletStores . RootStore . tokensStore . plainTokensBySymbolModel
enabledChainIds: [ paymentRequestModal . selectedNetworkChainId ]
showAllTokens: true
}
property var callback: null
currentCurrency: root . currencyStore . currentCurrency
formatCurrencyAmount: root . currencyStore . formatCurrencyAmount
flatNetworksModel: WalletStores . RootStore . filteredFlatModel
accountsModel: WalletStores . RootStore . nonWatchAccounts
assetsModel: tokenAdaptor . outputAssetsModel
onAccepted: {
if ( ! callback ) {
console . error ( "No callback set for Payment Request" )
return
}
callback ( selectedAccountAddress , amount , selectedTokenKey , selectedNetworkChainId )
}
destroyOnClose: true
}
2024-01-24 11:49:46 +00:00
}
2022-10-21 13:37:39 +00:00
]
}