import QtQuick 2.13 import QtQuick.Controls 2.13 import shared 1.0 import shared.panels 1.0 import shared.status 1.0 import utils 1.0 import "../controls" import StatusQ.Core 0.1 import StatusQ.Core.Theme 0.1 Item { id: root anchors.fill: parent // Important: // Each chat/channel has its own ChatContentModule and each ChatContentModule has a single usersModule // usersModule on the backend contains everything needed for this component property var usersModule property var messageContextMenu property string label property var rootStore StatusBaseText { id: titleText anchors.top: parent.top anchors.topMargin: Style.current.padding anchors.left: parent.left anchors.leftMargin: Style.current.padding opacity: (root.width > 58) ? 1.0 : 0.0 visible: (opacity > 0.1) font.pixelSize: Style.current.primaryTextFontSize font.weight: Font.Medium color: Theme.palette.directColor1 text: root.label } ListView { id: userListView clip: true ScrollBar.vertical: ScrollBar { policy: ScrollBar.AsNeeded } anchors { top: titleText.bottom topMargin: Style.current.padding left: parent.left right: parent.right bottom: parent.bottom bottomMargin: Style.current.bigPadding } boundsBehavior: Flickable.StopAtBounds model: usersModule.model delegate: UserDelegate { publicKey: model.id name: model.name icon: model.icon isAdded: model.isAdded userStatus: model.onlineStatus messageContextMenu: root.messageContextMenu isCurrentUser: rootStore.isCurrentUser(model.id) } section.property: "onlineStatus" section.delegate: (root.width > 58) ? sectionDelegateComponent : null } Component { id: sectionDelegateComponent Item { width: parent.width height: 24 StyledText { anchors.fill: parent anchors.leftMargin: Style.current.padding verticalAlignment: Text.AlignVCenter font.pixelSize: Style.current.additionalTextSize color: Theme.palette.baseColor1 text: { switch(parseInt(section)) { case Constants.userStatus.offline: return qsTr("Offline") case Constants.userStatus.online: return qsTr("Online") case Constants.userStatus.doNotDisturb: return qsTr("Do not disturb") case Constants.userStatus.idle: return qsTr("Idle") } } } } } }