187 lines
5.1 KiB
QML
187 lines
5.1 KiB
QML
import QtQuick 2.12
|
||
import QtQuick.Dialogs 1.3
|
||
import "../../../../imports"
|
||
import "../../../../shared"
|
||
import "../../../../shared/status"
|
||
import "../ContactsColumn"
|
||
|
||
ModalPopup {
|
||
property QtObject community: chatsModel.observedCommunity
|
||
property string communityId: community.id
|
||
property string name: community.name
|
||
property string description: community.description
|
||
property int access: community.access
|
||
// TODO get the real image once it's available
|
||
property string source: "../../../img/ens-header-dark@2x.png"
|
||
property int nbMembers: community.nbMembers
|
||
|
||
id: popup
|
||
|
||
header: Item {
|
||
height: childrenRect.height
|
||
width: parent.width
|
||
|
||
RoundedImage {
|
||
id: communityImg
|
||
source: popup.source
|
||
width: 40
|
||
height: 40
|
||
}
|
||
|
||
StyledTextEdit {
|
||
id: communityName
|
||
text: popup.name
|
||
anchors.top: parent.top
|
||
anchors.topMargin: 2
|
||
anchors.left: communityImg.right
|
||
anchors.leftMargin: Style.current.smallPadding
|
||
font.bold: true
|
||
font.pixelSize: 17
|
||
readOnly: true
|
||
}
|
||
|
||
StyledText {
|
||
// TODO get this from access property
|
||
text: {
|
||
switch(access) {
|
||
case Constants.communityChatPublicAccess: return qsTr("Public community");
|
||
case Constants.communityChatInvitationOnlyAccess: return qsTr("Invitation only community");
|
||
case Constants.communityChatOnRequestAccess: return qsTr("On request community");
|
||
default: return qsTr("Unknown community");
|
||
}
|
||
}
|
||
anchors.left: communityName.left
|
||
anchors.top: communityName.bottom
|
||
anchors.topMargin: 2
|
||
font.pixelSize: 15
|
||
font.weight: Font.Thin
|
||
color: Style.current.secondaryText
|
||
}
|
||
}
|
||
|
||
StyledText {
|
||
id: descriptionText
|
||
text: popup.description
|
||
wrapMode: Text.Wrap
|
||
width: parent.width
|
||
font.pixelSize: 15
|
||
font.weight: Font.Thin
|
||
}
|
||
|
||
Item {
|
||
id: memberContainer
|
||
width: parent.width
|
||
height: memberImage.height
|
||
anchors.top: descriptionText.bottom
|
||
anchors.topMargin: Style.current.padding
|
||
|
||
SVGImage {
|
||
id: memberImage
|
||
source: "../../../img/member.svg"
|
||
width: 16
|
||
height: 16
|
||
}
|
||
|
||
|
||
StyledText {
|
||
text: nbMembers === 1 ?
|
||
qsTr("1 member") :
|
||
qsTr("%1 members").arg(popup.nbMembers)
|
||
wrapMode: Text.WrapAnywhere
|
||
width: parent.width
|
||
anchors.left: memberImage.right
|
||
anchors.leftMargin: 4
|
||
font.pixelSize: 15
|
||
font.weight: Font.Medium
|
||
}
|
||
}
|
||
|
||
|
||
Separator {
|
||
id: sep1
|
||
anchors.left: parent.left
|
||
anchors.right: parent.right
|
||
anchors.top: memberContainer.bottom
|
||
anchors.topMargin: Style.current.smallPadding
|
||
anchors.leftMargin: -Style.current.padding
|
||
anchors.rightMargin: -Style.current.padding
|
||
}
|
||
|
||
StyledText {
|
||
id: chatsTitle
|
||
text: qsTr("Chats")
|
||
anchors.top: sep1.bottom
|
||
anchors.topMargin: Style.current.bigPadding
|
||
font.pixelSize: 15
|
||
font.weight: Font.Thin
|
||
}
|
||
|
||
|
||
ListView {
|
||
id: chatsList
|
||
width: parent.width
|
||
anchors.top: chatsTitle.bottom
|
||
anchors.topMargin: 4
|
||
anchors.bottom: parent.bottom
|
||
clip: true
|
||
model: community.chats
|
||
boundsBehavior: Flickable.StopAtBounds
|
||
delegate: Channel {
|
||
id: channelItem
|
||
unviewedMessagesCount: ""
|
||
width: parent.width
|
||
name: model.name
|
||
lastMessage: model.description
|
||
contentType: Constants.messageType
|
||
border.width: 0
|
||
color: Style.current.transparent
|
||
enableMouseArea: false
|
||
}
|
||
}
|
||
|
||
footer: Item {
|
||
width: parent.width
|
||
height: backButton.height
|
||
|
||
StatusIconButton {
|
||
id: backButton
|
||
icon.name: "leave_chat"
|
||
width: 44
|
||
height: 44
|
||
iconColor: Style.current.primary
|
||
highlighted: true
|
||
icon.color: Style.current.primary
|
||
icon.width: 28
|
||
icon.height: 28
|
||
radius: width / 2
|
||
onClicked: {
|
||
openPopup(communitiesPopupComponent)
|
||
popup.close()
|
||
}
|
||
}
|
||
|
||
StatusButton {
|
||
text: qsTr("Join ‘%1’").arg(popup.name)
|
||
anchors.right: parent.right
|
||
onClicked: {
|
||
const error = chatsModel.joinCommunity(popup.communityId)
|
||
|
||
if (error) {
|
||
joiningError.text = error
|
||
return joiningError.open()
|
||
}
|
||
|
||
popup.close()
|
||
}
|
||
}
|
||
|
||
MessageDialog {
|
||
id: joiningError
|
||
title: qsTr("Error joining the community")
|
||
icon: StandardIcon.Critical
|
||
standardButtons: StandardButton.Ok
|
||
}
|
||
}
|
||
}
|
||
|