status-desktop/ui/app/AppLayouts/Chat/popups/GroupChatPopup.qml

188 lines
5.1 KiB
QML
Raw Normal View History

2020-06-17 15:56:48 +00:00
import QtQuick 2.12
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.3
import QtQml.Models 2.3
import utils 1.0
import shared.controls 1.0
import StatusQ.Controls 0.1
import shared.views 1.0
import shared.panels 1.0
import shared.popups 1.0
import "../panels"
import "../controls"
2020-06-17 15:56:48 +00:00
// TODO: replace with StatusModal
2020-06-17 15:56:48 +00:00
ModalPopup {
id: popup
property var chatSectionModule
property var store
2020-06-17 15:56:48 +00:00
property bool selectChatMembers: true
property int memberCount: 1
readonly property int maxMembers: 10
property string channelNameValidationError: ""
2020-06-17 15:56:48 +00:00
onOpened: {
groupName.text = "";
searchBox.text = "";
selectChatMembers = true;
memberCount = 1;
contactList.selectedPubKeys = [];
2020-06-17 15:56:48 +00:00
chatSectionModule.populateMyContacts("")
2020-12-11 20:38:10 +00:00
noContactsRect.visible = !chatSectionModule.listOfMyContacts.rowCount() > 0
2020-12-11 20:38:10 +00:00
contactList.visible = !noContactsRect.visible;
if (!contactList.visible) {
memberCount = 0;
}
2020-06-17 15:56:48 +00:00
}
onClosed: chatSectionModule.clearMyContacts()
function validate() {
if (groupName.text === "") {
2021-02-18 16:36:05 +00:00
//% "You need to enter a channel name"
channelNameValidationError = qsTrId("you-need-to-enter-a-channel-name")
} else if (!Utils.isValidChannelName(groupName.text)) {
2021-02-18 16:36:05 +00:00
//% "The channel name can only contain lowercase letters, numbers and dashes"
channelNameValidationError = qsTrId("the-channel-name-can-only-contain-lowercase-letters--numbers-and-dashes")
} else {
channelNameValidationError = ""
}
return channelNameValidationError === ""
}
function doJoin() {
if (!validate()) {
return
}
if (contactList.selectedPubKeys.length === 0) {
return;
}
popup.chatSectionModule.createGroupChat(Utils.filterXSS(groupName.text), JSON.stringify(contactList.selectedPubKeys));
2020-06-17 15:56:48 +00:00
popup.close();
}
function groupNameFilter(text) {
groupName.text = text.toLowerCase().replace(' ', '-');
}
2020-06-17 15:56:48 +00:00
header: Item {
height: 30
width: parent.width
2022-02-09 09:43:23 +00:00
StyledText {
2020-06-17 15:56:48 +00:00
id: lblNewGroup
//% "New group chat"
text: qsTrId("new-group-chat")
2020-06-17 15:56:48 +00:00
anchors.left: parent.left
font.bold: true
font.pixelSize: 17
anchors.top: parent.top
}
StyledText {
2020-06-17 15:56:48 +00:00
anchors.top: lblNewGroup.bottom
//% "%1 / 10 members"
text: qsTrId("%1-/-10-members").arg(memberCount)
color: Style.current.secondaryText
2020-06-17 15:56:48 +00:00
font.pixelSize: 15
}
}
2020-06-18 13:54:08 +00:00
SearchBox {
2020-06-17 15:56:48 +00:00
id: searchBox
visible: selectChatMembers
iconWidth: 17
iconHeight: 17
2020-06-18 13:54:08 +00:00
customHeight: 44
fontPixelSize: 15
2020-06-17 15:56:48 +00:00
}
Input {
id: groupName
//% "Group name"
placeholderText: qsTrId("group-name")
2020-06-17 15:56:48 +00:00
visible: !selectChatMembers
validationError: channelNameValidationError
onTextEdited: function (text) {
groupNameFilter(text)
}
validator: RegExpValidator { regExp: /^[a-zA-Z0-9\-\ ]+$/ }
2020-06-17 15:56:48 +00:00
}
2020-12-11 20:38:10 +00:00
NoFriendsRectangle {
id: noContactsRect
visible: false
anchors.top: groupName.bottom
anchors.topMargin: Style.current.xlPadding
anchors.horizontalCenter: parent.horizontalCenter
}
ContactListPanel {
2020-12-11 20:38:10 +00:00
id: contactList
anchors.fill: parent
model: chatSectionModule.listOfMyContacts
2020-12-11 20:38:10 +00:00
searchString: searchBox.text.toLowerCase()
selectMode: selectChatMembers && memberCount < maxMembers
2020-06-17 15:56:48 +00:00
anchors.topMargin: 50
anchors.top: searchBox.bottom
onSelectedPubKeysChanged:{
memberCount = selectedPubKeys.length + 1;
2020-06-17 15:56:48 +00:00
}
}
2020-12-11 20:38:10 +00:00
2020-06-17 15:56:48 +00:00
footer: Item {
width: parent.width
height: btnSelectMembers.height
2020-06-17 15:56:48 +00:00
StatusRoundButton {
2020-06-17 15:56:48 +00:00
id: btnSelectMembers
visible: selectChatMembers
anchors.bottom: parent.bottom
anchors.right: parent.right
icon.name: "arrow-right"
icon.width: 20
icon.height: 16
enabled: contactList.selectedPubKeys.length > 0
onClicked : {
if (contactList.selectedPubKeys.length > 0)
selectChatMembers = false
searchBox.text = ""
groupName.forceActiveFocus(Qt.MouseFocusReason)
2020-06-17 15:56:48 +00:00
}
}
StatusRoundButton {
2020-06-17 15:56:48 +00:00
id: btnBack
visible: !selectChatMembers
anchors.bottom: parent.bottom
anchors.left: parent.left
icon.name: "arrow-right"
icon.width: 20
icon.height: 16
icon.rotation: 180
onClicked : {
selectChatMembers = true
2020-06-17 15:56:48 +00:00
}
}
StatusButton {
2020-06-17 15:56:48 +00:00
visible: !selectChatMembers
anchors.bottom: parent.bottom
anchors.right: parent.right
//% "Create Group Chat"
text: qsTrId("create-group-chat")
enabled: groupName.text !== ""
2020-06-17 15:56:48 +00:00
onClicked : doJoin()
}
}
}