mirror of
https://github.com/status-im/status-desktop.git
synced 2025-01-10 14:26:34 +00:00
57ac94c4ac
When the profile popup is opened inside the contacts list, it doesn't have a surrounding window context (`Popup` types should usually be used within `ApplicationWindow` or `Window` components as per https://doc.qt.io/qt-5/qml-qtquick-controls2-popup.html). This is problematic when popup are nested, like it's the case with the nickname popup that will be instantiated by the profile popup. With no window context, such nested popup can't be opened by the application. This commit ensures the profile popup is created with a proper context, fixing the issue that the nickname popup won't open when visting via contacts list. Fixes #2216
80 lines
2.8 KiB
QML
80 lines
2.8 KiB
QML
import QtQuick 2.13
|
|
import QtQuick.Controls 2.13
|
|
import QtQuick.Layouts 1.13
|
|
import "./samples/"
|
|
import "../../../../../imports"
|
|
import "../../../../../shared"
|
|
import "../../../Chat/components"
|
|
import "."
|
|
|
|
ListView {
|
|
id: contactList
|
|
property var contacts: ContactsData {}
|
|
property string searchStr: ""
|
|
property string searchString: ""
|
|
property string lowerCaseSearchString: searchString.toLowerCase()
|
|
property string contactToRemove: ""
|
|
|
|
property Component profilePopupComponent: ProfilePopup {
|
|
id: profilePopup
|
|
onClosed: destroy()
|
|
}
|
|
|
|
width: parent.width
|
|
|
|
model: contacts
|
|
|
|
delegate: Contact {
|
|
name: Utils.removeStatusEns(model.name)
|
|
address: model.address
|
|
localNickname: model.localNickname
|
|
identicon: model.thumbnailImage || model.identicon
|
|
isContact: model.isContact
|
|
isBlocked: model.isBlocked
|
|
profileClick: function (showFooter, userName, fromAuthor, identicon, textParam, nickName) {
|
|
var popup = profilePopupComponent.createObject(contactList);
|
|
popup.openPopup(showFooter, userName, fromAuthor, identicon, textParam, nickName);
|
|
}
|
|
visible: searchString === "" ||
|
|
model.name.toLowerCase().includes(lowerCaseSearchString) ||
|
|
model.address.toLowerCase().includes(lowerCaseSearchString)
|
|
onBlockContactActionTriggered: {
|
|
blockContactConfirmationDialog.contactName = name
|
|
blockContactConfirmationDialog.contactAddress = address
|
|
blockContactConfirmationDialog.open()
|
|
}
|
|
onRemoveContactActionTriggered: {
|
|
removeContactConfirmationDialog.value = address
|
|
removeContactConfirmationDialog.open()
|
|
}
|
|
}
|
|
|
|
// TODO: Make BlockContactConfirmationDialog a dynamic component on a future refactor
|
|
BlockContactConfirmationDialog {
|
|
id: blockContactConfirmationDialog
|
|
onBlockButtonClicked: {
|
|
profileModel.contacts.blockContact(blockContactConfirmationDialog.contactAddress)
|
|
blockContactConfirmationDialog.close()
|
|
}
|
|
}
|
|
|
|
// TODO: Make ConfirmationDialog a dynamic component on a future refactor
|
|
ConfirmationDialog {
|
|
id: removeContactConfirmationDialog
|
|
title: qsTrId("remove-contact")
|
|
//% "Are you sure you want to remove this contact?"
|
|
confirmationText: qsTrId("are-you-sure-you-want-to-remove-this-contact-")
|
|
onConfirmButtonClicked: {
|
|
if (profileModel.contacts.isAdded(removeContactConfirmationDialog.value)) {
|
|
profileModel.contacts.removeContact(removeContactConfirmationDialog.value);
|
|
}
|
|
removeContactConfirmationDialog.close()
|
|
}
|
|
}
|
|
}
|
|
/*##^##
|
|
Designer {
|
|
D{i:0;autoSize:true;height:480;width:640}
|
|
}
|
|
##^##*/
|