feat(Components): introduce `StatusChatList`
This commit introduce a new `StautsChatList` component that can be used to render `StatusChatListItem`s, typically for chat and community views. The component expects a `chatListItems.model` that has the following properties: ```qml ListModel { ListElement { chatId: "0" name: "#status" chatType: StatusChatListItem.Type.PublicChat muted: false hasUnreadMessages: false hasMention: false unreadMessagesCount: 0 iconColor: "blue" } ... } ``` It also emits two possible signals: - `onChatItemSelected(string id)` - `onChatItemUnmuted(string id)` Usage: ```qml import StatusQ.Components 0.1 StatusChatList { selectedChatId: "0" chatListItems.model: demoChatListItems onChatItemSelected: ... onChatItemUnmuted: ... } ``` Closes #100
This commit is contained in:
parent
82643816f6
commit
52f5c31b3d
|
@ -127,42 +127,22 @@ Rectangle {
|
||||||
leftPanel: Item {
|
leftPanel: Item {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
||||||
Column {
|
StatusChatList {
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
anchors.topMargin: 64
|
anchors.topMargin: 64
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
|
||||||
spacing: 4
|
selectedChatId: "0"
|
||||||
|
chatListItems.model: demoChatListItems
|
||||||
StatusChatListItem {
|
onChatItemSelected: selectedChatId = id
|
||||||
name: "#status"
|
onChatItemUnmuted: {
|
||||||
type: StatusChatListItem.Type.PublicChat
|
for (var i = 0; i < demoChatListItems.count; i++) {
|
||||||
|
let item = demoChatListItems.get(i);
|
||||||
|
if (item.chatId === id) {
|
||||||
|
demoChatListItems.setProperty(i, "muted", false)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
StatusChatListItem {
|
|
||||||
name: "#status-desktop"
|
|
||||||
type: StatusChatListItem.Type.PublicChat
|
|
||||||
hasUnreadMessages: true
|
|
||||||
badge.value: 1
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusChatListItem {
|
|
||||||
name: "Amazing Funny Squirrel"
|
|
||||||
type: StatusChatListItem.Type.OneToOneChat
|
|
||||||
selected: true
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusChatListItem {
|
|
||||||
name: "Black Ops"
|
|
||||||
type: StatusChatListItem.Type.GroupChat
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusChatListItem {
|
|
||||||
name: "Spectacular Growling Otter"
|
|
||||||
type: StatusChatListItem.Type.OneToOneChat
|
|
||||||
muted: true
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -263,4 +243,55 @@ Rectangle {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ListModel {
|
||||||
|
id: demoChatListItems
|
||||||
|
ListElement {
|
||||||
|
chatId: "0"
|
||||||
|
name: "#status"
|
||||||
|
chatType: StatusChatListItem.Type.PublicChat
|
||||||
|
muted: false
|
||||||
|
hasUnreadMessages: false
|
||||||
|
hasMention: false
|
||||||
|
unreadMessagesCount: 0
|
||||||
|
iconColor: "blue"
|
||||||
|
}
|
||||||
|
ListElement {
|
||||||
|
chatId: "1"
|
||||||
|
name: "#status-desktop"
|
||||||
|
chatType: StatusChatListItem.Type.PublicChat
|
||||||
|
muted: false
|
||||||
|
hasUnreadMessages: true
|
||||||
|
iconColor: "red"
|
||||||
|
unreadMessagesCount: 1
|
||||||
|
}
|
||||||
|
ListElement {
|
||||||
|
chatId: "2"
|
||||||
|
name: "Amazing Funny Squirrel"
|
||||||
|
chatType: StatusChatListItem.Type.OneToOneChat
|
||||||
|
muted: false
|
||||||
|
hasUnreadMessages: false
|
||||||
|
iconColor: "green"
|
||||||
|
identicon: "https://pbs.twimg.com/profile_images/1369221718338895873/T_5fny6o_400x400.jpg"
|
||||||
|
unreadMessagesCount: 0
|
||||||
|
}
|
||||||
|
ListElement {
|
||||||
|
chatId: "3"
|
||||||
|
name: "Black Ops"
|
||||||
|
chatType: StatusChatListItem.Type.GroupChat
|
||||||
|
muted: false
|
||||||
|
hasUnreadMessages: false
|
||||||
|
iconColor: "purple"
|
||||||
|
unreadMessagesCount: 0
|
||||||
|
}
|
||||||
|
ListElement {
|
||||||
|
chatId: "4"
|
||||||
|
name: "Spectacular Growing Otter"
|
||||||
|
chatType: StatusChatListItem.Type.OneToOneChat
|
||||||
|
muted: true
|
||||||
|
hasUnreadMessages: false
|
||||||
|
iconColor: "Orange"
|
||||||
|
unreadMessagesCount: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
import QtQuick 2.13
|
||||||
|
|
||||||
|
import StatusQ.Core 0.1
|
||||||
|
import StatusQ.Core.Theme 0.1
|
||||||
|
import StatusQ.Components 0.1
|
||||||
|
import StatusQ.Controls 0.1
|
||||||
|
|
||||||
|
Column {
|
||||||
|
id: statusChatList
|
||||||
|
|
||||||
|
spacing: 4
|
||||||
|
|
||||||
|
property string selectedChatId: ""
|
||||||
|
property alias chatListItems: statusChatListItems
|
||||||
|
|
||||||
|
signal chatItemSelected(string id)
|
||||||
|
signal chatItemUnmuted(string id)
|
||||||
|
|
||||||
|
Repeater {
|
||||||
|
id: statusChatListItems
|
||||||
|
delegate: StatusChatListItem {
|
||||||
|
chatId: model.chatId
|
||||||
|
name: model.name
|
||||||
|
type: model.chatType
|
||||||
|
muted: !!model.muted
|
||||||
|
hasUnreadMessages: !!model.hasUnreadMessages
|
||||||
|
hasMention: !!model.hasMention
|
||||||
|
badge.value: model.unreadMessagesCount || 0
|
||||||
|
selected: model.chatId === statusChatList.selectedChatId
|
||||||
|
|
||||||
|
icon.color: model.iconColor || ""
|
||||||
|
image.source: model.identicon || ""
|
||||||
|
|
||||||
|
onClicked: statusChatList.chatItemSelected(model.chatId)
|
||||||
|
onUnmute: statusChatList.chatItemUnmuted(model.chatId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -7,6 +7,7 @@ import StatusQ.Controls 0.1
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: statusChatListItem
|
id: statusChatListItem
|
||||||
|
|
||||||
|
property string chatId: ""
|
||||||
property string name: ""
|
property string name: ""
|
||||||
property alias badge: statusBadge
|
property alias badge: statusBadge
|
||||||
property bool hasUnreadMessages: false
|
property bool hasUnreadMessages: false
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
module StatusQ.Components
|
module StatusQ.Components
|
||||||
|
|
||||||
StatusBadge 0.1 StatusBadge.qml
|
StatusBadge 0.1 StatusBadge.qml
|
||||||
|
StatusChatList 0.1 StatusChatList.qml
|
||||||
StatusChatListItem 0.1 StatusChatListItem.qml
|
StatusChatListItem 0.1 StatusChatListItem.qml
|
||||||
StatusChatToolBar 0.1 StatusChatToolBar.qml
|
StatusChatToolBar 0.1 StatusChatToolBar.qml
|
||||||
StatusDescriptionListItem 0.1 StatusDescriptionListItem.qml
|
StatusDescriptionListItem 0.1 StatusDescriptionListItem.qml
|
||||||
|
|
Loading…
Reference in New Issue