mirror of
https://github.com/status-im/status-desktop.git
synced 2025-01-10 06:16:32 +00:00
0e5c566dcd
Fixes #10523 The problem was that the CreateChatView now uses an isolated Chat RootStore, since we can't be sure if the personal chat section will be loaded yet. To fix that, I created a new store that is only for storing the properties needed for that new chat. That way we are sure that it is created and shared to necessary components.
197 lines
7.1 KiB
QML
197 lines
7.1 KiB
QML
import QtQuick 2.12
|
|
import QtQuick.Controls 2.12
|
|
import QtQuick.Layouts 1.12
|
|
import QtQml.Models 2.2
|
|
import QtGraphicalEffects 1.0
|
|
|
|
import StatusQ.Controls 0.1
|
|
import StatusQ.Components 0.1
|
|
import StatusQ.Core 0.1
|
|
import StatusQ.Core.Theme 0.1
|
|
|
|
import utils 1.0
|
|
import shared.status 1.0
|
|
import shared.controls.delegates 1.0
|
|
|
|
Page {
|
|
id: root
|
|
|
|
property var rootStore
|
|
property var createChatPropertiesStore
|
|
property var emojiPopup: null
|
|
property var stickersPopup: null
|
|
|
|
QtObject {
|
|
id: d
|
|
|
|
function createChat() {
|
|
root.createChatPropertiesStore.createChatInitMessage = chatInput.textInput.text
|
|
root.createChatPropertiesStore.createChatFileUrls = chatInput.fileUrlsAndSources
|
|
membersSelector.createChat()
|
|
|
|
membersSelector.cleanup()
|
|
chatInput.textInput.clear()
|
|
|
|
Global.closeCreateChatView()
|
|
}
|
|
}
|
|
|
|
padding: 0
|
|
|
|
Behavior on opacity { NumberAnimation {}}
|
|
Behavior on anchors.bottomMargin { NumberAnimation { duration: 30 }}
|
|
|
|
background: Rectangle {
|
|
anchors.fill: parent
|
|
color: Theme.palette.statusAppLayout.rightPanelBackgroundColor
|
|
}
|
|
|
|
header: Item {
|
|
implicitHeight: headerLayout.implicitHeight + headerLayout.anchors.topMargin + headerLayout.anchors.bottomMargin
|
|
RowLayout {
|
|
id: headerLayout
|
|
anchors.fill: parent
|
|
MembersSelectorView {
|
|
id: membersSelector
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
Layout.leftMargin: Style.current.halfPadding
|
|
Layout.rightMargin: Style.current.halfPadding
|
|
rootStore: root.rootStore
|
|
|
|
function createChat() {
|
|
if (model.count === 0) {
|
|
console.warn("Can't create chat with no members")
|
|
return
|
|
}
|
|
if (model.count === 1) {
|
|
const member = model.get(0)
|
|
const ensName = member.displayName.includes(".eth") ? member.displayName : ""
|
|
root.rootStore.chatCommunitySectionModule.createOneToOneChat("", member.pubKey, ensName)
|
|
} else {
|
|
var groupName = "";
|
|
var pubKeys = [];
|
|
for (var i = 0; i < model.count; i++) {
|
|
const member = model.get(i)
|
|
groupName += (member.displayName + (i === model.count - 1 ? "" : "&"))
|
|
pubKeys.push(member.pubKey)
|
|
}
|
|
root.rootStore.chatCommunitySectionModule.createGroupChat("", groupName, JSON.stringify(pubKeys))
|
|
}
|
|
}
|
|
|
|
onConfirmed: { d.createChat() }
|
|
|
|
onRejected: {
|
|
cleanup()
|
|
Global.closeCreateChatView()
|
|
}
|
|
|
|
onVisibleChanged: {
|
|
if (visible)
|
|
edit.forceActiveFocus()
|
|
}
|
|
|
|
onEnterKeyPressed: {
|
|
entryAccepted(contactsList.itemAtIndex(contactsList.currentIndex));
|
|
}
|
|
|
|
onUpKeyPressed: {
|
|
contactsList.decrementCurrentIndex();
|
|
}
|
|
|
|
onDownKeyPressed: {
|
|
contactsList.incrementCurrentIndex();
|
|
}
|
|
}
|
|
|
|
StatusActivityCenterButton {
|
|
Layout.alignment: Qt.AlignVCenter
|
|
unreadNotificationsCount: activityCenterStore.unreadNotificationsCount
|
|
hasUnseenNotifications: activityCenterStore.hasUnseenNotifications
|
|
onClicked: Global.openActivityCenterPopup()
|
|
}
|
|
}
|
|
}
|
|
|
|
contentItem: Item {
|
|
ColumnLayout {
|
|
anchors {
|
|
fill: parent
|
|
topMargin: Style.current.bigPadding
|
|
bottomMargin: Style.current.padding
|
|
leftMargin: Style.current.halfPadding
|
|
}
|
|
|
|
StatusBaseText {
|
|
Layout.alignment: Qt.AlignTop
|
|
Layout.leftMargin: Style.current.halfPadding
|
|
visible: contactsList.visible
|
|
font.pixelSize: 15
|
|
text: qsTr("Contacts")
|
|
color: Theme.palette.baseColor1
|
|
}
|
|
|
|
StatusListView {
|
|
id: contactsList
|
|
objectName: "createChatContactsList"
|
|
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
visible: membersSelector.suggestionsModel.count &&
|
|
!(membersSelector.edit.text !== "")
|
|
implicitWidth: contentItem.childrenRect.width
|
|
model: membersSelector.suggestionsModel
|
|
delegate: ContactListItemDelegate {
|
|
width: ListView.view.width
|
|
highlighted: ListView.isCurrentItem
|
|
onClicked: membersSelector.entryAccepted(this)
|
|
}
|
|
}
|
|
|
|
StatusChatInput {
|
|
id: chatInput
|
|
Layout.alignment: Qt.AlignBottom
|
|
Layout.fillWidth: true
|
|
visible: membersSelector.model.count > 0
|
|
chatType: membersSelector.model.count === 1? Constants.chatType.oneToOne : Constants.chatType.privateGroupChat
|
|
emojiPopup: root.emojiPopup
|
|
stickersPopup: root.stickersPopup
|
|
closeGifPopupAfterSelection: true
|
|
usersStore: ({
|
|
usersModel: membersSelector.model
|
|
})
|
|
onSendTransactionCommandButtonClicked: {
|
|
root.createChatPropertiesStore.createChatStartSendTransactionProcess = true;
|
|
membersSelector.createChat();
|
|
}
|
|
onReceiveTransactionCommandButtonClicked: {
|
|
root.createChatPropertiesStore.createChatStartReceiveTransactionProcess = true;
|
|
membersSelector.createChat();
|
|
}
|
|
onStickerSelected: {
|
|
root.createChatPropertiesStore.createChatStickerHashId = hashId;
|
|
root.createChatPropertiesStore.createChatStickerPackId = packId;
|
|
root.createChatPropertiesStore.createChatStickerUrl = url;
|
|
membersSelector.createChat();
|
|
}
|
|
|
|
onSendMessage: { d.createChat() }
|
|
}
|
|
}
|
|
|
|
StatusBaseText {
|
|
anchors.centerIn: parent
|
|
width: Math.min(553, parent.width - 2 * Style.current.padding)
|
|
visible: root.rootStore.contactsModel.count === 0
|
|
horizontalAlignment: Text.AlignHCenter
|
|
verticalAlignment: Text.AlignVCenter
|
|
wrapMode: Text.WordWrap
|
|
font.pixelSize: 15
|
|
color: Theme.palette.baseColor1
|
|
text: qsTr("You can only send direct messages to your Contacts.\n
|
|
Send a contact request to the person you would like to chat with, you will be able to chat with them once they have accepted your contact request.")
|
|
}
|
|
}
|
|
}
|