2020-12-11 20:29:46 +00:00
|
|
|
|
import QtQuick 2.13
|
|
|
|
|
import QtQuick.Controls 2.13
|
2021-07-02 12:34:01 +00:00
|
|
|
|
import QtQuick.Dialogs 1.2
|
2021-02-10 20:37:17 +00:00
|
|
|
|
import QtGraphicalEffects 1.13
|
2020-12-11 20:29:46 +00:00
|
|
|
|
import QtQuick.Layouts 1.13
|
|
|
|
|
|
2021-07-02 12:34:01 +00:00
|
|
|
|
import StatusQ.Components 0.1
|
|
|
|
|
import StatusQ.Popups 0.1
|
|
|
|
|
|
2020-12-11 20:29:46 +00:00
|
|
|
|
import "../../../imports"
|
|
|
|
|
import "../../../shared"
|
|
|
|
|
import "../../../shared/status"
|
2020-12-11 20:38:10 +00:00
|
|
|
|
import "./CommunityComponents"
|
2020-12-11 20:29:46 +00:00
|
|
|
|
|
2021-07-02 12:34:01 +00:00
|
|
|
|
|
|
|
|
|
Item {
|
2020-12-11 20:29:46 +00:00
|
|
|
|
// TODO unhardcode
|
2021-07-02 12:34:01 +00:00
|
|
|
|
property int chatGroupsListViewCount: communityChatListAndCategories.chatList.count
|
2021-06-02 19:43:33 +00:00
|
|
|
|
property Component pinnedMessagesPopupComponent
|
2020-12-11 20:29:46 +00:00
|
|
|
|
|
|
|
|
|
id: root
|
2021-06-25 09:13:54 +00:00
|
|
|
|
|
2021-07-02 12:34:01 +00:00
|
|
|
|
Layout.fillHeight: true
|
|
|
|
|
width: 304
|
2021-06-25 09:13:54 +00:00
|
|
|
|
|
2021-07-02 12:34:01 +00:00
|
|
|
|
StatusChatInfoToolBar {
|
2020-12-11 20:29:46 +00:00
|
|
|
|
id: communityHeader
|
|
|
|
|
anchors.top: parent.top
|
2021-07-02 12:34:01 +00:00
|
|
|
|
anchors.topMargin: 5
|
|
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
|
|
|
|
|
|
chatInfoButton.title: chatsModel.communities.activeCommunity.name
|
|
|
|
|
chatInfoButton.subTitle: chatsModel.communities.activeCommunity.nbMembers === 1 ?
|
|
|
|
|
qsTr("1 Member") :
|
|
|
|
|
qsTr("%1 Members").arg(chatsModel.communities.activeCommunity.nbMembers)
|
|
|
|
|
chatInfoButton.image.source: chatsModel.communities.activeCommunity.thumbnailImage
|
|
|
|
|
chatInfoButton.icon.color: chatsModel.communities.activeCommunity.communityColor
|
|
|
|
|
chatInfoButton.onClicked: communityProfilePopup.open()
|
|
|
|
|
|
|
|
|
|
popupMenu: StatusPopupMenu {
|
|
|
|
|
|
|
|
|
|
StatusMenuItem {
|
|
|
|
|
text: qsTr("Create channel")
|
|
|
|
|
icon.name: "channel"
|
|
|
|
|
enabled: chatsModel.communities.activeCommunity.admin
|
|
|
|
|
onTriggered: openPopup(createChannelPopup, {communityId: chatsModel.communities.activeCommunity.id})
|
2020-12-11 20:29:46 +00:00
|
|
|
|
}
|
|
|
|
|
|
2021-07-02 12:34:01 +00:00
|
|
|
|
StatusMenuItem {
|
|
|
|
|
text: qsTr("Create category")
|
|
|
|
|
icon.name: "channel-category"
|
|
|
|
|
enabled: chatsModel.communities.activeCommunity.admin
|
|
|
|
|
onTriggered: openPopup(createCategoryPopup, {communityId: chatsModel.communities.activeCommunity.id})
|
|
|
|
|
}
|
2021-05-04 18:39:36 +00:00
|
|
|
|
|
2021-07-02 12:34:01 +00:00
|
|
|
|
StatusMenuSeparator {}
|
2021-05-04 18:39:36 +00:00
|
|
|
|
|
2021-07-02 12:34:01 +00:00
|
|
|
|
StatusMenuItem {
|
|
|
|
|
text: qsTr("Invite people")
|
|
|
|
|
icon.name: "share-ios"
|
|
|
|
|
enabled: chatsModel.communities.activeCommunity.canManageUsers
|
|
|
|
|
onTriggered: openPopup(inviteFriendsToCommunityPopup, {communityId: chatsModel.communities.activeCommunity.id})
|
|
|
|
|
}
|
2021-05-04 18:39:36 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-02-11 19:06:39 +00:00
|
|
|
|
Loader {
|
2021-07-02 12:34:01 +00:00
|
|
|
|
id: membershipRequests
|
2021-02-10 20:37:17 +00:00
|
|
|
|
|
2021-07-02 12:34:01 +00:00
|
|
|
|
property int nbRequests: chatsModel.communities.activeCommunity.communityMembershipRequests.nbRequests
|
|
|
|
|
|
|
|
|
|
anchors.top: communityHeader.bottom
|
|
|
|
|
anchors.topMargin: active ? 8 : 0
|
|
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
|
|
|
|
|
|
active: chatsModel.communities.activeCommunity.admin && nbRequests > 0
|
2021-02-11 19:06:39 +00:00
|
|
|
|
sourceComponent: Component {
|
2021-07-02 12:34:01 +00:00
|
|
|
|
StatusContactRequestsIndicatorListItem {
|
|
|
|
|
title: qsTr("Membership requests")
|
|
|
|
|
requestsCount: membershipRequests.nbRequests
|
|
|
|
|
sensor.onClicked: membershipRequestPopup.open()
|
|
|
|
|
}
|
2021-02-10 20:37:17 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-12-11 20:29:46 +00:00
|
|
|
|
ScrollView {
|
|
|
|
|
id: chatGroupsContainer
|
2021-07-02 12:34:01 +00:00
|
|
|
|
anchors.top: membershipRequests.bottom
|
2020-12-11 20:29:46 +00:00
|
|
|
|
anchors.topMargin: Style.current.padding
|
|
|
|
|
anchors.bottom: parent.bottom
|
2021-07-02 12:34:01 +00:00
|
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
|
|
|
|
|
|
width: parent.width
|
|
|
|
|
|
2020-12-11 20:29:46 +00:00
|
|
|
|
leftPadding: Style.current.halfPadding
|
|
|
|
|
rightPadding: Style.current.halfPadding
|
2021-07-02 12:34:01 +00:00
|
|
|
|
|
2020-12-11 20:29:46 +00:00
|
|
|
|
ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
|
|
|
|
|
clip: true
|
2021-07-02 12:34:01 +00:00
|
|
|
|
contentHeight: communityChatListAndCategories.height
|
|
|
|
|
+ emptyViewAndSuggestionsLoader.height
|
|
|
|
|
+ backUpBannerLoader.height
|
|
|
|
|
+ 16
|
|
|
|
|
|
|
|
|
|
StatusChatListAndCategories {
|
|
|
|
|
id: communityChatListAndCategories
|
|
|
|
|
|
|
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
|
width: root.width
|
|
|
|
|
height: {
|
|
|
|
|
if (!emptyViewAndSuggestionsLoader.active &&
|
|
|
|
|
!backUpBannerLoader.active) {
|
|
|
|
|
return implicitHeight > (root.height - 82) ? implicitHeight + 8 : root.height - 82
|
|
|
|
|
}
|
|
|
|
|
return implicitHeight
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
chatList.model: chatsModel.communities.activeCommunity.chats
|
|
|
|
|
categoryList.model: chatsModel.communities.activeCommunity.categories
|
|
|
|
|
|
|
|
|
|
showCategoryActionButtons: chatsModel.communities.activeCommunity.admin
|
|
|
|
|
selectedChatId: chatsModel.channelView.activeChannel.id
|
|
|
|
|
|
|
|
|
|
onChatItemSelected: chatsModel.channelView.setActiveChannel(id)
|
|
|
|
|
onChatItemUnmuted: chatsModel.channelView.unmuteChatItem(id)
|
|
|
|
|
onCategoryAddButtonClicked: openPopup(createChannelPopup, {
|
|
|
|
|
communityId: chatsModel.communities.activeCommunity.id,
|
|
|
|
|
categoryId: id
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
popupMenu: StatusPopupMenu {
|
|
|
|
|
|
|
|
|
|
StatusMenuItem {
|
|
|
|
|
text: qsTr("Create channel")
|
|
|
|
|
icon.name: "channel"
|
|
|
|
|
enabled: chatsModel.communities.activeCommunity.admin
|
|
|
|
|
onTriggered: openPopup(createChannelPopup, {communityId: chatsModel.communities.activeCommunity.id})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StatusMenuItem {
|
|
|
|
|
text: qsTr("Create category")
|
|
|
|
|
icon.name: "channel-category"
|
|
|
|
|
enabled: chatsModel.communities.activeCommunity.admin
|
|
|
|
|
onTriggered: openPopup(createCategoryPopup, {communityId: chatsModel.communities.activeCommunity.id})
|
|
|
|
|
}
|
2020-12-11 20:29:46 +00:00
|
|
|
|
|
2021-07-02 12:34:01 +00:00
|
|
|
|
StatusMenuSeparator {}
|
2021-06-25 09:13:54 +00:00
|
|
|
|
|
2021-07-02 12:34:01 +00:00
|
|
|
|
StatusMenuItem {
|
|
|
|
|
text: qsTr("Invite people")
|
|
|
|
|
icon.name: "share-ios"
|
|
|
|
|
enabled: chatsModel.communities.activeCommunity.canManageUsers
|
|
|
|
|
onTriggered: openPopup(inviteFriendsToCommunityPopup, {communityId: chatsModel.communities.activeCommunity.id})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
categoryPopupMenu: StatusPopupMenu {
|
|
|
|
|
|
|
|
|
|
property var categoryItem
|
|
|
|
|
|
|
|
|
|
openHandler: function (id) {
|
|
|
|
|
categoryItem = chatsModel.communities.activeCommunity.getCommunityCategoryItemById(id)
|
|
|
|
|
}
|
2021-06-25 09:13:54 +00:00
|
|
|
|
|
2021-07-02 12:34:01 +00:00
|
|
|
|
StatusMenuItem {
|
|
|
|
|
enabled: chatsModel.communities.activeCommunity.admin
|
|
|
|
|
text: qsTr("Edit Category")
|
|
|
|
|
icon.name: "edit"
|
|
|
|
|
onTriggered: {
|
|
|
|
|
openPopup(createCategoryPopup, {
|
|
|
|
|
communityId: chatsModel.communities.activeCommunity.id,
|
|
|
|
|
isEdit: true,
|
|
|
|
|
categoryId: categoryItem.id,
|
|
|
|
|
categoryName: categoryItem.name
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-06-25 09:13:54 +00:00
|
|
|
|
|
2021-07-02 12:34:01 +00:00
|
|
|
|
StatusMenuSeparator {
|
|
|
|
|
visible: chatsModel.communities.activeCommunity.admin
|
|
|
|
|
}
|
2021-06-25 09:13:54 +00:00
|
|
|
|
|
2021-07-02 12:34:01 +00:00
|
|
|
|
StatusMenuItem {
|
|
|
|
|
enabled: chatsModel.communities.activeCommunity.admin
|
|
|
|
|
text: qsTr("Delete Category")
|
|
|
|
|
icon.name: "delete"
|
|
|
|
|
type: StatusMenuItem.Type.Danger
|
|
|
|
|
onTriggered: {
|
|
|
|
|
openPopup(deleteCategoryConfirmationDialogComponent, {
|
|
|
|
|
title: qsTr("Delete %1 category").arg(categoryItem.name),
|
|
|
|
|
confirmationText: qsTr("Are you sure you want to delete %1 category? Channels inside the category won’t be deleted.")
|
|
|
|
|
.arg(categoryItem.name),
|
|
|
|
|
categoryId: categoryItem.id
|
|
|
|
|
})
|
|
|
|
|
}
|
2021-06-25 09:13:54 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-07-02 12:34:01 +00:00
|
|
|
|
chatListPopupMenu: StatusPopupMenu {
|
|
|
|
|
|
|
|
|
|
property var chatItem
|
|
|
|
|
|
|
|
|
|
openHandler: function (id) {
|
|
|
|
|
chatItem = chatsModel.channelView.getChatItemById(id)
|
|
|
|
|
}
|
2020-12-11 20:29:46 +00:00
|
|
|
|
|
2021-07-02 12:34:01 +00:00
|
|
|
|
StatusMenuItem {
|
|
|
|
|
text: chatItem && chatItem.muted ?
|
|
|
|
|
qsTr("Unmute chat") :
|
|
|
|
|
qsTr("Mute chat")
|
|
|
|
|
icon.name: "notification"
|
|
|
|
|
onTriggered: {
|
|
|
|
|
if (chatItem && chatItem.muted) {
|
|
|
|
|
return chatsModel.channelView.unmuteChatItem(chatItem.id)
|
|
|
|
|
}
|
|
|
|
|
chatsModel.channelView.muteChatItem(chatItem.id)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StatusMenuItem {
|
|
|
|
|
text: "Mark as Read"
|
|
|
|
|
icon.name: "checkmark-circle"
|
|
|
|
|
onTriggered: chatsModel.channelView.markChatItemAsRead(chatItem.id)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StatusMenuItem {
|
|
|
|
|
text: "Clear history"
|
|
|
|
|
icon.name: "close-circle"
|
|
|
|
|
onTriggered: chatsModel.channelView.clearChatHistory(chatItem.id)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StatusMenuItem {
|
|
|
|
|
text: qsTr("Edit Channel")
|
|
|
|
|
icon.name: "edit"
|
|
|
|
|
enabled: chatsModel.communities.activeCommunity.admin
|
|
|
|
|
onTriggered: openPopup(editChannelPopup, {
|
|
|
|
|
communityId: chatsModel.communities.activeCommunity.id,
|
|
|
|
|
channel: chatItem
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-05-16 15:16:42 +00:00
|
|
|
|
}
|
|
|
|
|
|
2021-04-28 19:03:41 +00:00
|
|
|
|
Loader {
|
|
|
|
|
id: emptyViewAndSuggestionsLoader
|
2021-04-29 14:48:16 +00:00
|
|
|
|
active: chatsModel.communities.activeCommunity.admin && !appSettings.hiddenCommunityWelcomeBanners.includes(chatsModel.communities.activeCommunity.id)
|
2020-12-11 20:29:46 +00:00
|
|
|
|
width: parent.width
|
2021-04-28 19:03:41 +00:00
|
|
|
|
height: active ? item.height : 0
|
2021-07-02 12:34:01 +00:00
|
|
|
|
anchors.top: communityChatListAndCategories.bottom
|
2021-04-28 19:03:41 +00:00
|
|
|
|
anchors.topMargin: active ? Style.current.padding : 0
|
|
|
|
|
sourceComponent: Component {
|
|
|
|
|
CommunityWelcomeBanner {}
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-07-02 12:34:01 +00:00
|
|
|
|
|
2021-04-28 19:03:41 +00:00
|
|
|
|
Loader {
|
|
|
|
|
id: backUpBannerLoader
|
2021-04-29 14:48:16 +00:00
|
|
|
|
active: chatsModel.communities.activeCommunity.admin && !appSettings.hiddenCommunityBackUpBanners.includes(chatsModel.communities.activeCommunity.id)
|
2021-04-28 19:03:41 +00:00
|
|
|
|
width: parent.width
|
|
|
|
|
height: active ? item.height : 0
|
|
|
|
|
anchors.top: emptyViewAndSuggestionsLoader.bottom
|
|
|
|
|
anchors.topMargin: active ? Style.current.padding : 0
|
|
|
|
|
sourceComponent: Component {
|
2021-06-29 17:42:13 +00:00
|
|
|
|
Item {
|
|
|
|
|
width: parent.width
|
|
|
|
|
height: backupBanner.height
|
|
|
|
|
|
|
|
|
|
BackUpCommuntyBanner {
|
|
|
|
|
id: backupBanner
|
|
|
|
|
}
|
|
|
|
|
MouseArea {
|
|
|
|
|
anchors.fill: backupBanner
|
|
|
|
|
acceptedButtons: Qt.RightButton
|
|
|
|
|
onClicked: {
|
|
|
|
|
/* Prevents sending events to the component beneath
|
|
|
|
|
if Right Mouse Button is clicked. */
|
|
|
|
|
mouse.accepted = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-04-28 19:03:41 +00:00
|
|
|
|
}
|
2020-12-11 20:29:46 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2021-07-02 12:34:01 +00:00
|
|
|
|
|
|
|
|
|
Component {
|
|
|
|
|
id: createChannelPopup
|
|
|
|
|
CreateChannelPopup {
|
|
|
|
|
pinnedMessagesPopupComponent: root.pinnedMessagesPopupComponent
|
|
|
|
|
onClosed: {
|
|
|
|
|
destroy()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Component {
|
|
|
|
|
id: createCategoryPopup
|
|
|
|
|
CreateCategoryPopup {
|
|
|
|
|
onClosed: {
|
|
|
|
|
destroy()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Component {
|
|
|
|
|
id: transferOwnershipPopup
|
|
|
|
|
TransferOwnershipPopup {}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CommunityProfilePopup {
|
|
|
|
|
id: communityProfilePopup
|
|
|
|
|
communityId: chatsModel.communities.activeCommunity.id
|
|
|
|
|
name: chatsModel.communities.activeCommunity.name
|
|
|
|
|
description: chatsModel.communities.activeCommunity.description
|
|
|
|
|
access: chatsModel.communities.activeCommunity.access
|
|
|
|
|
nbMembers: chatsModel.communities.activeCommunity.nbMembers
|
|
|
|
|
isAdmin: chatsModel.communities.activeCommunity.admin
|
|
|
|
|
source: chatsModel.communities.activeCommunity.thumbnailImage
|
|
|
|
|
communityColor: chatsModel.communities.activeCommunity.communityColor
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Component {
|
|
|
|
|
id: deleteCategoryConfirmationDialogComponent
|
|
|
|
|
ConfirmationDialog {
|
|
|
|
|
property string categoryId
|
|
|
|
|
btnType: "warn"
|
|
|
|
|
height: 216
|
|
|
|
|
showCancelButton: true
|
|
|
|
|
onClosed: {
|
|
|
|
|
destroy()
|
|
|
|
|
}
|
|
|
|
|
onCancelButtonClicked: {
|
|
|
|
|
close();
|
|
|
|
|
}
|
|
|
|
|
onConfirmButtonClicked: function(){
|
|
|
|
|
const error = chatsModel.communities.deleteCommunityCategory(chatsModel.communities.activeCommunity.id, categoryId)
|
|
|
|
|
if (error) {
|
|
|
|
|
creatingError.text = error
|
|
|
|
|
return creatingError.open()
|
|
|
|
|
}
|
|
|
|
|
close();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MessageDialog {
|
|
|
|
|
id: deleteError
|
|
|
|
|
title: qsTr("Error deleting the category")
|
|
|
|
|
icon: StandardIcon.Critical
|
|
|
|
|
standardButtons: StandardButton.Ok
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MembershipRequestsPopup {
|
|
|
|
|
id: membershipRequestPopup
|
|
|
|
|
}
|
2020-12-11 20:29:46 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*##^##
|
|
|
|
|
Designer {
|
|
|
|
|
D{i:0;autoSize:true;formeditorColor:"#ffffff";height:480;width:640}
|
|
|
|
|
}
|
|
|
|
|
##^##*/
|