status-desktop/ui/app/AppLayouts/Chat/popups/community/CommunitiesPopup.qml

157 lines
4.7 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
import utils 1.0
import shared 1.0
2020-12-11 20:29:46 +00:00
StatusModal {
2020-12-11 20:29:46 +00:00
id: popup
property var communitiesList
signal setActiveCommunity(string id)
signal setObservedCommunity(string id)
2020-12-11 20:29:46 +00:00
onOpened: {
contentItem.searchBox.input.text = "";
contentItem.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: Global.openPopup(importCommunitiesPopupComponent)
}
2021-02-12 18:19:31 +00:00
}
}
2021-02-12 18:19:31 +00:00
contentItem: 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
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: popup.communitiesList
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
// TODO refactor members in the backend
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: model.image
icon.isLetterIdenticon: !image
icon.background.color: color
sensor.onClicked: {
if (joined && isMember) {
popup.setActiveCommunity(id);
2020-12-11 20:29:46 +00:00
} else {
popup.setObservedCommunity(id);
Global.openPopup(communityDetailPopup)
2020-12-11 20:29:46 +00:00
}
popup.close()
}
}
}
}
}
2020-12-11 20:38:10 +00:00
rightButtons: [
StatusButton {
//% "Create a community"
text: qsTrId("create-community")
onClicked: {
Global.openPopup(createCommunitiesPopupComponent)
popup.close()
}
2020-12-11 20:29:46 +00:00
}
]
2020-12-11 20:29:46 +00:00
}