status-desktop/ui/app/AppLayouts/Chat/panels/communities/CommunityMembersTabPanel.qml

123 lines
4.1 KiB
QML

import QtQuick 2.14
import QtQuick.Layouts 1.14
import QtQuick.Controls 2.14
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.controls.chat 1.0
import "../../layouts"
Item {
id: root
property string placeholderText
property var model
signal userProfileClicked(string id)
signal kickUserClicked(string id, string name)
signal banUserClicked(string id, string name)
signal unbanUserClicked(string id)
enum TabType {
AllMembers,
BannedMembers
}
property int panelType: CommunityMembersTabPanel.TabType.AllMembers
ColumnLayout {
anchors.fill: parent
spacing: 30
StatusInput {
id: memberSearch
Layout.preferredWidth: 350
Layout.leftMargin: 12
maximumHeight: 36
topPadding: 0
bottomPadding: 0
rightPadding: 0
placeholderText: root.placeholderText
input.icon.name: "search"
enabled: model.count > 0
}
ListView {
id: membersList
Layout.fillWidth: true
Layout.fillHeight: true
model: root.model
clip: true
spacing: 15
delegate: StatusMemberListItem {
id: memberItem
readonly property bool itsMe: model.pubKey.toLowerCase() === userProfile.pubKey.toLowerCase()
readonly property bool showButton: !memberItem.itsMe && !model.isAdmin
&& memberItem.sensor.containsMouse
statusListItemComponentsSlot.spacing: 16
rightPadding: 80
leftPadding: 12
components: [
StatusButton {
visible: (root.panelType === CommunityMembersTabPanel.TabType.AllMembers) && showButton
text: qsTr("Kick")
type: StatusBaseButton.Type.Danger
size: StatusBaseButton.Size.Small
onClicked: root.kickUserClicked(model.pubKey, model.displayName)
},
StatusButton {
visible: (root.panelType === CommunityMembersTabPanel.TabType.AllMembers) && showButton
text: qsTr("Ban")
type: StatusBaseButton.Type.Danger
size: StatusBaseButton.Size.Small
onClicked: root.banUserClicked(model.pubKey, model.displayName)
},
StatusButton {
visible: (root.panelType === CommunityMembersTabPanel.TabType.BannedMembers) && showButton
text: qsTr("Unban")
type: StatusBaseButton.Type.Normal
size: StatusBaseButton.Size.Small
onClicked: root.unbanUserClicked(model.pubKey)
width: 95
}
]
width: membersList.width
visible: memberSearch.text === "" || title.toLowerCase().includes(memberSearch.text.toLowerCase())
height: visible ? implicitHeight : 0
color: "transparent"
pubKey: Utils.getElidedCompressedPk(model.pubKey)
nickName: model.localNickname
userName: model.displayName
status: model.onlineStatus
icon.color: Theme.palette.userCustomizationColors[Utils.colorIdForPubkey(model.pubKey)] // FIXME: use model.colorId
image.source: model.icon
image.isIdenticon: false
image.width: 40
image.height: 40
icon.height: 40
icon.width: 40
ringSettings.ringSpecModel: Utils.getColorHashAsJson(model.pubKey)
statusListItemIcon.badge.visible: (root.panelType === CommunityMembersTabPanel.TabType.AllMembers)
onClicked: root.userProfileClicked(model.pubKey)
}
}
}
}