2023-02-07 14:21:32 +00:00
import QtQuick 2.15
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
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
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
required property var rootStore
property var activePopupComponents: [ ]
Component.onCompleted: {
Global . openSendIDRequestPopup . connect ( openSendIDRequestPopup )
Global . openOutgoingIDRequestPopup . connect ( openOutgoingIDRequestPopup )
Global . openIncomingIDRequestPopup . connect ( openIncomingIDRequestPopup )
Global . openInviteFriendsToCommunityPopup . connect ( openInviteFriendsToCommunityPopup )
Global . openContactRequestPopup . connect ( openContactRequestPopup )
Global . openChooseBrowserPopup . connect ( openChooseBrowserPopup )
Global . openDownloadModalRequested . connect ( openDownloadModal )
Global . openImagePopup . connect ( openImagePopup )
Global . openProfilePopupRequested . connect ( openProfilePopup )
Global . openNicknamePopupRequested . connect ( openNicknamePopup )
Global . blockContactRequested . connect ( openBlockContactPopup )
Global . unblockContactRequested . connect ( openUnblockContactPopup )
Global . openChangeProfilePicPopup . connect ( openChangeProfilePicPopup )
Global . openBackUpSeedPopup . connect ( openBackUpSeedPopup )
Global . openEditDisplayNamePopup . connect ( openEditDisplayNamePopup )
Global . openPinnedMessagesPopupRequested . connect ( openPinnedMessagesPopup )
Global . openCommunityProfilePopupRequested . connect ( openCommunityProfilePopup )
Global . openPopupRequested . connect ( openPopup )
}
function openPopup ( popupComponent , params = { } , cb = null ) {
if ( activePopupComponents . includes ( popupComponent ) ) {
return
}
const popup = popupComponent . createObject ( popupParent , params )
popup . open ( )
if ( cb )
cb ( popup )
activePopupComponents . push ( popupComponent )
popup . closed . connect ( ( ) = > {
const removeIndex = activePopupComponents . indexOf ( popupComponent )
if ( removeIndex !== - 1 ) {
activePopupComponents . splice ( removeIndex , 1 )
}
} )
}
function openChooseBrowserPopup ( link: string ) {
openPopup ( chooseBrowserPopupComponent , { link: link } )
}
function openDownloadModal ( available: bool , version: string , url: string ) {
const popupProperties = {
newVersionAvailable: available ,
downloadURL: url ,
currentVersion: rootStore . profileSectionStore . getCurrentVersion ( ) ,
newVersion: version
}
openPopup ( downloadPageComponent , popupProperties )
}
function openImagePopup ( image , contextMenu ) {
var popup = imagePopupComponent . createObject ( popupParent )
popup . contextMenu = contextMenu
popup . openPopup ( image )
}
function openProfilePopup ( publicKey: string , parentPopup ) {
openPopup ( profilePopupComponent , { publicKey: publicKey , parentPopup: parentPopup } )
}
function openNicknamePopup ( publicKey: string , nickname: string , subtitle: string ) {
openPopup ( nicknamePopupComponent , { publicKey: publicKey , nickname: nickname , "header.subTitle" : subtitle } )
}
function openBlockContactPopup ( publicKey: string , contactName: string ) {
openPopup ( blockContactConfirmationComponent , { contactName: contactName , contactAddress: publicKey } )
}
function openUnblockContactPopup ( publicKey: string , contactName: string ) {
openPopup ( unblockContactConfirmationComponent , { contactName: contactName , contactAddress: publicKey } )
}
function openChangeProfilePicPopup ( cb ) {
var popup = changeProfilePicComponent . createObject ( popupParent , { callback: cb } ) ;
popup . chooseImageToCrop ( )
}
function openBackUpSeedPopup ( ) {
openPopup ( backupSeedModalComponent )
}
function openEditDisplayNamePopup ( ) {
openPopup ( displayNamePopupComponent )
}
function openCommunityProfilePopup ( store , community , communitySectionModule ) {
openPopup ( communityProfilePopup , { store: store , community: community , communitySectionModule: communitySectionModule } )
}
2022-10-21 13:37:39 +00:00
function openSendIDRequestPopup ( publicKey , cb ) {
2022-12-01 10:24:25 +00:00
const contactDetails = Utils . getContactDetailsAsJson ( publicKey , false )
2023-02-07 14:21:32 +00:00
openPopup ( sendIDRequestPopupComponent , {
2022-10-21 13:37:39 +00:00
userPublicKey: publicKey ,
userDisplayName: contactDetails . displayName ,
userIcon: contactDetails . largeImage ,
userIsEnsVerified: contactDetails . ensVerified ,
"header.title" : qsTr ( "Verify %1's Identity" ) . arg ( contactDetails . displayName ) ,
challengeText: qsTr ( "Ask a question that only the real %1 will be able to answer e.g. a question about a shared experience, or ask %1 to enter a code or phrase you have sent to them via a different communication channel (phone, post, etc...)." ) . arg ( contactDetails . displayName ) ,
buttonText: qsTr ( "Send verification request" )
2023-02-07 14:21:32 +00:00
} , cb )
2022-10-21 13:37:39 +00:00
}
function openOutgoingIDRequestPopup ( publicKey , cb ) {
try {
const verificationDetails = root . rootStore . profileSectionStore . contactsStore . getSentVerificationDetailsAsJson ( publicKey )
const popupProperties = {
userPublicKey: publicKey ,
verificationStatus: verificationDetails . requestStatus ,
verificationChallenge: verificationDetails . challenge ,
verificationResponse: verificationDetails . response ,
verificationResponseDisplayName: verificationDetails . displayName ,
verificationResponseIcon: verificationDetails . icon ,
verificationRequestedAt: verificationDetails . requestedAt ,
verificationRepliedAt: verificationDetails . repliedAt
}
2023-02-07 14:21:32 +00:00
openPopup ( contactOutgoingVerificationRequestPopupComponent , popupProperties , cb )
2022-10-21 13:37:39 +00:00
} catch ( e ) {
console . error ( "Error getting or parsing verification data" , e )
}
}
function openIncomingIDRequestPopup ( publicKey , cb ) {
2022-12-02 13:02:41 +00:00
const popupProperties = {
contactsStore: root . rootStore . profileSectionStore . contactsStore ,
publicKey: publicKey
}
2022-10-21 13:37:39 +00:00
2023-02-07 14:21:32 +00:00
openPopup ( contactVerificationRequestPopupComponent , popupProperties , cb )
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
}
function openContactRequestPopup ( publicKey , cb ) {
2022-12-01 10:24:25 +00:00
const contactDetails = Utils . getContactDetailsAsJson ( publicKey , false )
2022-10-21 13:37:39 +00:00
const popupProperties = {
userPublicKey: publicKey ,
userDisplayName: contactDetails . displayName ,
userIcon: contactDetails . largeImage ,
userIsEnsVerified: contactDetails . ensVerified
}
2023-02-07 14:21:32 +00:00
openPopup ( sendContactRequestPopupComponent , popupProperties , cb )
}
function openPinnedMessagesPopup ( store , messageStore , pinnedMessagesModel , messageToPin ) {
openPopup ( pinnedMessagesPopup , { store: store , messageStore: messageStore ,
pinnedMessagesModel: pinnedMessagesModel , messageToPin: messageToPin } )
}
function openCommunityPopup ( store , community , chatCommunitySectionModule ) {
openPopup ( communityProfilePopup , { store: store , community: community , chatCommunitySectionModule: chatCommunitySectionModule } )
2022-10-21 13:37:39 +00:00
}
2023-02-07 14:21:32 +00:00
readonly property list < Component > _components : [
2022-10-21 13:37:39 +00:00
Component {
id: contactVerificationRequestPopupComponent
ContactVerificationRequestPopup {
onResponseSent: {
root . rootStore . profileSectionStore . contactsStore . acceptVerificationRequest ( senderPublicKey , response )
}
onVerificationRefused: {
root . rootStore . profileSectionStore . contactsStore . declineVerificationRequest ( senderPublicKey )
}
onClosed: destroy ( )
}
} ,
Component {
id: contactOutgoingVerificationRequestPopupComponent
OutgoingContactVerificationRequestPopup {
onVerificationRequestCanceled: {
root . rootStore . profileSectionStore . contactsStore . cancelVerificationRequest ( userPublicKey )
}
onUntrustworthyVerified: {
root . rootStore . profileSectionStore . contactsStore . verifiedUntrustworthy ( userPublicKey )
}
onTrustedVerified: {
root . rootStore . profileSectionStore . contactsStore . verifiedTrusted ( userPublicKey )
}
onClosed: destroy ( )
}
} ,
Component {
id: sendIDRequestPopupComponent
SendContactRequestModal {
anchors.centerIn: parent
onAccepted: root . rootStore . profileSectionStore . contactsStore . sendVerificationRequest ( userPublicKey , message )
onClosed: destroy ( )
}
} ,
Component {
id: inviteFriendsToCommunityPopup
InviteFriendsToCommunityPopup {
anchors.centerIn: parent
rootStore: root . rootStore
contactsStore: root . rootStore . contactStore
onClosed: destroy ( )
}
} ,
Component {
id: sendContactRequestPopupComponent
SendContactRequestModal {
anchors.centerIn: parent
onAccepted: root . rootStore . profileSectionStore . contactsStore . sendContactRequest ( userPublicKey , message )
onClosed: destroy ( )
}
2023-02-07 14:21:32 +00:00
} ,
Component {
id: backupSeedModalComponent
BackupSeedModal {
anchors.centerIn: parent
privacyStore: rootStore . profileSectionStore . privacyStore
onClosed: destroy ( )
}
} ,
Component {
id: displayNamePopupComponent
DisplayNamePopup {
anchors.centerIn: parent
profileStore: rootStore . profileSectionStore . profileStore
onClosed: destroy ( )
}
} ,
Component {
id: downloadPageComponent
DownloadPage {
onClosed: destroy ( )
}
} ,
Component {
id: imagePopupComponent
StatusImageModal {
id: imagePopup
onClicked: {
if ( mouse . button === Qt . LeftButton ) {
imagePopup . close ( )
} else if ( mouse . button === Qt . RightButton ) {
contextMenu . imageSource = imagePopup . imageSource
contextMenu . hideEmojiPicker = true
contextMenu . isRightClickOnImage = true
contextMenu . parent = imagePopup . contentItem
contextMenu . show ( )
}
}
onClosed: destroy ( )
}
} ,
Component {
id: profilePopupComponent
ProfileDialog {
id: profilePopup
profileStore: rootStore . profileSectionStore . profileStore
contactsStore: rootStore . profileSectionStore . contactsStore
2023-02-28 15:00:10 +00:00
communitiesModel: rootStore . profileSectionStore . communitiesList
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: chooseBrowserPopupComponent
ChooseBrowserPopup {
onClosed: destroy ( )
}
} ,
Component {
id: communityProfilePopup
CommunityProfilePopup {
anchors.centerIn: parent
contactsStore: rootStore . contactStore
hasAddedContacts: rootStore . hasAddedContacts
onClosed: destroy ( )
}
} ,
Component {
id: pinnedMessagesPopup
PinnedMessagesPopup {
onClosed: destroy ( )
}
} ,
Component {
id: nicknamePopupComponent
NicknamePopup {
onEditDone: {
if ( nickname !== newNickname ) {
rootStore . contactStore . changeContactNickname ( publicKey , newNickname )
}
close ( )
}
onClosed: destroy ( )
}
} ,
Component {
id: unblockContactConfirmationComponent
UnblockContactConfirmationDialog {
onUnblockButtonClicked: {
rootStore . contactStore . unblockContact ( contactAddress )
close ( )
}
onClosed: destroy ( )
}
} ,
Component {
id: blockContactConfirmationComponent
BlockContactConfirmationDialog {
onBlockButtonClicked: {
rootStore . contactStore . blockContact ( contactAddress )
close ( )
}
onClosed: destroy ( )
}
2022-10-21 13:37:39 +00:00
}
]
}