status-desktop/ui/app/AppLayouts/Chat/CommunityComponents/CommunitiesPopup.qml

152 lines
4.6 KiB
QML
Raw Normal View History

2020-12-11 20:29:46 +00:00
import QtQuick 2.12
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.3
import StatusQ.Core 0.1
import StatusQ.Core.Theme 0.1
import StatusQ.Controls 0.1
import StatusQ.Components 0.1
import StatusQ.Popups 0.1
2020-12-11 20:29:46 +00:00
import "../../../../imports"
import "../../../../shared"
StatusModal {
2020-12-11 20:29:46 +00:00
id: popup
onOpened: {
contentComponent.searchBox.input.text = "";
contentComponent.searchBox.input.forceActiveFocus(Qt.MouseFocusReason)
2020-12-11 20:29:46 +00:00
}
//% "Communities"
header.title: qsTrId("communities")
headerActionButton: StatusFlatRoundButton {
type: StatusFlatRoundButton.Type.Secondary
width: 32
height: 32
icon.name: "more"
onClicked: contextMenu.popup(-contextMenu.width+width, height + 4)
StatusPopupMenu {
id: contextMenu
StatusMenuItem {
icon.name: "download"
//% "Access existing community"
text: qsTrId("access-existing-community")
onTriggered: openPopup(importCommunitiesPopupComponent)
}
2021-02-12 18:19:31 +00:00
}
}
2021-02-12 18:19:31 +00:00
content: Column {
width: popup.width
property alias searchBox: searchBox
2021-02-12 18:19:31 +00:00
Item {
height: 8
width: parent.width
}
StatusInput {
id: searchBox
input.placeholderText: qsTr("Search for communities or topics")
input.icon.name: "search"
input.height: 36
input.topPadding: 9
input.bottomPadding: 0
2021-02-12 18:19:31 +00:00
}
StatusModalDivider { topPadding: 8 }
2020-12-11 20:29:46 +00:00
ScrollView {
width: parent.width
ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
topPadding: 8
bottomPadding: 8
height: 400
2020-12-11 20:29:46 +00:00
clip: true
2021-06-22 18:30:51 +00:00
ListView {
anchors.fill: parent
model: communitiesDelegateModel
spacing: 4
clip: true
id: communitiesList
section.property: "name"
section.criteria: ViewSection.FirstCharacter
section.delegate: Column {
StatusBaseText {
anchors.left: parent.left
anchors.leftMargin: 16
text: section.toUpperCase()
font.pixelSize: 15
font.weight: Font.Medium
color: Theme.palette.directColor1
2021-06-22 18:30:51 +00:00
}
2020-12-11 20:29:46 +00:00
StatusModalDivider {
bottomPadding: 8
}
}
}
DelegateModelGeneralized {
id: communitiesDelegateModel
lessThan: [
function(left, right) {
return left.name.toLowerCase() < right.name.toLowerCase()
}
]
model: chatsModel.communities.list
delegate: StatusListItem {
visible: {
if (!searchBox.input.text) {
return true
}
const lowerCaseSearchStr = searchBox.input.text.toLowerCase()
return name.toLowerCase().includes(lowerCaseSearchStr) || description.toLowerCase().includes(lowerCaseSearchStr)
}
height: visible ? implicitHeight : 0
anchors.horizontalCenter: parent.horizontalCenter
title: name
subTitle: description
2021-07-30 16:02:22 +00:00
//% "%1 members"
tertiaryTitle: qsTrId("-1-members").arg(nbMembers)
statusListItemTitle.font.weight: Font.Bold
statusListItemTitle.font.pixelSize: 17
image.source: thumbnailImage
icon.isLetterIdenticon: !!!thumbnailImage
icon.background.color: communityColor
sensor.onClicked: {
if (joined && isMember) {
chatsModel.communities.setActiveCommunity(id)
2020-12-11 20:29:46 +00:00
} else {
chatsModel.communities.setObservedCommunity(id)
2020-12-11 20:29:46 +00:00
openPopup(communityDetailPopup)
}
popup.close()
}
}
}
}
}
2020-12-11 20:38:10 +00:00
rightButtons: [
StatusButton {
//% "Create a community"
text: qsTrId("create-community")
onClicked: {
openPopup(createCommunitiesPopupComponent)
popup.close()
}
2020-12-11 20:29:46 +00:00
}
]
2020-12-11 20:29:46 +00:00
}