status-desktop/ui/app/AppLayouts/Chat/views/ChatContextMenuView.qml

243 lines
8.0 KiB
QML
Raw Normal View History

import QtQuick 2.13
import QtQuick.Controls 2.13
import QtQuick.Layouts 1.13
import Qt.labs.platform 1.1
import utils 1.0
import StatusQ.Popups 0.1
import shared.popups 1.0
import "../popups"
StatusPopupMenu {
id: root
property string currentFleet: ""
property bool isCommunityChat: false
property bool isCommunityAdmin: false
property string chatId: ""
property string chatName: ""
property string chatIcon: ""
property int chatType: -1
property bool chatMuted: false
signal viewGroupOrProfile(string id)
signal requestAllHistoricMessages(string id)
signal unmuteChat(string id)
signal muteChat(string id)
signal markAsRead(string id)
signal clearChatHistory(string id)
signal editChannel(string id)
signal downloadMessages(string file)
signal deleteChat(string id)
StatusMenuItem {
id: viewProfileMenuItem
text: {
switch (root.chatType) {
case Constants.chatType.oneToOne:
//% "View Profile"
return qsTrId("view-profile")
case Constants.chatType.privateGroupChat:
//% "View Group"
return qsTrId("view-group")
default:
return ""
}
}
icon.name: "group-chat"
enabled: root.chatType === Constants.chatType.oneToOne ||
root.chatType === Constants.chatType.privateGroupChat
onTriggered: {
if (root.chatType === Constants.chatType.oneToOne) {
const userProfileImage = appMain.getProfileImage(root.chatId)
return openProfilePopup(
root.chatName,
root.chatId,
root.chatIcon,
"",
root.chatName
)
}
// Not Refactored Yet
// if (root.chatType === Constants.chatType.privateGroupChat) {
// return Global.openPopup(groupInfoPopupComponent, {
// channel: chatItem,
// channelType: GroupInfoPopup.ChannelType.ContextChannel
// })
// }
}
}
StatusMenuSeparator {
visible: viewProfileMenuItem.enabled
}
2021-07-20 17:23:43 +00:00
Action {
enabled: root.currentFleet
// Will be deleted later
// enabled: root.store.profileModelInst.fleets.fleet == Constants.waku_prod ||
// root.store.profileModelInst.fleets.fleet === Constants.waku_test
//% "Test WakuV2 - requestAllHistoricMessages"
text: qsTrId("test-wakuv2---requestallhistoricmessages")
onTriggered: {
root.requestAllHistoricMessages(root.chatId)
}
// Will be deleted later
//onTriggered: root.store.chatsModelInst.requestAllHistoricMessages()
2021-07-20 17:23:43 +00:00
}
StatusMenuItem {
text: root.chatMuted ?
//% "Unmute chat"
qsTrId("unmute-chat") :
//% "Mute chat"
qsTrId("mute-chat")
icon.name: "notification"
enabled: root.chatType !== Constants.chatType.privateGroupChat
onTriggered: {
if(root.chatMuted)
root.unmuteChat(root.chatId)
else
root.muteChat(root.chatId)
}
}
StatusMenuItem {
//% "Mark as Read"
text: qsTrId("mark-as-read")
icon.name: "checkmark-circle"
enabled: root.chatType !== Constants.chatType.privateGroupChat
onTriggered: {
root.markAsRead(root.chatId)
}
// Will be deleted later
//onTriggered: root.store.chatsModelInst.channelView.markChatItemAsRead(chatItem.id)
}
StatusMenuItem {
//% "Clear history"
text: qsTrId("clear-history")
icon.name: "close-circle"
onTriggered: {
root.clearChatHistory(root.chatId)
}
// Will be deleted later
//onTriggered: root.store.chatsModelInst.channelView.clearChatHistory(chatItem.id)
}
StatusMenuItem {
//% "Edit Channel"
text: qsTrId("edit-channel")
icon.name: "edit"
enabled: communityActive &&
root.store.chatsModelInst.communities.activeCommunity.admin
// Not Refactored Yet
// onTriggered: Global.openPopup(editChannelPopup, {
// store: root.store,
// communityId: root.store.chatsModelInst.communities.activeCommunity.id,
// channel: chatItem
// })
}
StatusMenuItem {
text: qsTr("Download")
enabled: localAccountSensitiveSettings.downloadChannelMessagesEnabled
icon.name: "download"
onTriggered: downdloadDialog.open()
}
StatusMenuSeparator {
visible: deleteOrLeaveMenuItem.enabled
}
StatusMenuItem {
id: deleteOrLeaveMenuItem
text: {
if (isCommunityChat) {
return qsTr("Delete Channel")
}
return root.chatType === Constants.chatType.oneToOne ?
//% "Delete chat"
qsTrId("delete-chat") :
//% "Leave chat"
qsTrId("leave-chat")
}
icon.name: root.chatType === Constants.chatType.oneToOne || isCommunityChat ? "delete" : "arrow-right"
icon.width: root.chatType === Constants.chatType.oneToOne || isCommunityChat ? 18 : 14
iconRotation: root.chatType === Constants.chatType.oneToOne || isCommunityChat ? 0 : 180
type: StatusMenuItem.Type.Danger
onTriggered: {
Global.openPopup(deleteChatConfirmationDialogComponent)
}
enabled: !isCommunityChat || isCommunityAdmin
// Will be deleted later
// enabled: !communityActive || root.store.chatsModelInst.communities.activeCommunity.admin
}
FileDialog {
id: downdloadDialog
acceptLabel: qsTr("Save")
fileMode: FileDialog.SaveFile
title: qsTr("Download messages")
currentFile: StandardPaths.writableLocation(StandardPaths.DocumentsLocation) + "/messages.json"
defaultSuffix: "json"
onAccepted: {
root.downloadMessages(downdloadDialog.currentFile)
}
// Will be deleted later
// onAccepted: {
// root.store.chatsModelInst.messageView.downloadMessages(downdloadDialog.currentFile)
// }
}
Component {
id: deleteChatConfirmationDialogComponent
ConfirmationDialog {
btnType: "warn"
header.title: isCommunityChat ? qsTr("Delete #%1").arg(root.chatName) :
root.chatType === Constants.chatType.oneToOne ?
//% "Delete chat"
qsTrId("delete-chat") :
//% "Leave chat"
qsTrId("leave-chat")
confirmButtonLabel: isCommunityChat ? qsTr("Delete") : header.title
confirmationText: isCommunityChat ? qsTr("Are you sure you want to delete #%1 channel?").arg(root.chatName) :
root.chatType === Constants.chatType.oneToOne ?
qsTr("Are you sure you want to delete this chat?"):
qsTr("Are you sure you want to leave this chat?")
showCancelButton: isCommunityChat
onClosed: {
destroy()
}
onCancelButtonClicked: {
close()
}
onConfirmButtonClicked: {
root.deleteChat(root.chatId)
}
// Will be deleted later
// onConfirmButtonClicked: {
// if (communityActive) {
// root.store.chatsModelInst.communities.deleteCommunityChat(root.store.chatsModelInst.communities.activeCommunity.id, chatId)
// } else {
// root.store.chatsModelInst.channelView.leaveChat(chatId)
// }
// close();
// }
}
}
}