moment/src/gui/Pages/Chat/ChatPage.qml

129 lines
3.0 KiB
QML
Raw Normal View History

2019-12-19 22:46:16 +11:00
// SPDX-License-Identifier: LGPL-3.0-or-later
2019-12-09 20:25:31 +11:00
import QtQuick 2.12
import QtQuick.Layouts 1.12
2019-12-18 19:53:08 +11:00
import "../../Base"
import "AutoCompletion"
2019-12-09 20:25:31 +11:00
import "Banners"
import "Composer"
2019-12-09 20:25:31 +11:00
import "FileTransfer"
import "Timeline"
2019-12-09 20:25:31 +11:00
HColumnPage {
2019-12-09 20:25:31 +11:00
id: chatPage
property bool loadedOnce: false
property var loadMembersFuture: null
2019-12-10 05:13:38 +11:00
readonly property alias composer: composer
readonly property bool loadEventList:
mainUI.mainPane.collapse ?
! mainUI.mainPane.visible : ! pageLoader.appearAnimation.running
2019-12-10 05:13:38 +11:00
2019-12-09 20:25:31 +11:00
padding: 0
column.spacing: 0
onLoadEventListChanged: if (loadEventList) loadedOnce = true
Component.onDestruction: if (loadMembersFuture) loadMembersFuture.cancel()
Timer {
interval: 200
running: true
onTriggered: loadMembersFuture = py.callClientCoro(
chat.userId,
"load_all_room_members",
[chat.roomId],
() => { loadMembersFuture = null },
)
}
2019-12-09 20:25:31 +11:00
RoomHeader {
Layout.fillWidth: true
}
HLoader {
id: eventListLoader
opacity: loadEventList ? 1 : 0
sourceComponent:
loadedOnce || loadEventList ? evListComponent : placeholder
2019-12-09 20:25:31 +11:00
Layout.fillWidth: true
Layout.fillHeight: true
Behavior on opacity { HNumberAnimation {} }
Component {
id: placeholder
Item {}
}
Component {
id: evListComponent
EventList {}
}
2019-12-09 20:25:31 +11:00
}
TypingMembersBar {
typingMembers: JSON.parse(chat.roomInfo.typing_members)
2020-05-20 19:19:06 +10:00
Layout.fillWidth: true
}
ReplyBar {
2020-05-20 20:17:14 +10:00
replyToEventId: chat.replyToEventId
2020-05-20 19:19:06 +10:00
replyToUserId: chat.replyToUserId
replyToDisplayName: chat.replyToDisplayName
onCancel: {
2020-05-20 20:17:14 +10:00
chat.replyToEventId = ""
2020-05-20 19:19:06 +10:00
chat.replyToUserId = ""
chat.replyToDisplayName = ""
}
2019-12-09 20:25:31 +11:00
Layout.fillWidth: true
}
TransferList {
Layout.fillWidth: true
Layout.minimumHeight: implicitHeight
Layout.preferredHeight: implicitHeight * transferCount
Layout.maximumHeight: chatPage.height / 6
Behavior on Layout.preferredHeight { HNumberAnimation {} }
}
UserAutoCompletion {
id: userCompletion
textArea: composer.messageArea
2020-08-22 00:19:29 +10:00
clip: true
Layout.fillWidth: true
Layout.maximumHeight: chatPage.height / 4
}
2019-12-09 20:25:31 +11:00
InviteBanner {
id: inviteBanner
visible: ! chat.roomInfo.left && inviterId
inviterId: chat.roomInfo.inviter_id
Layout.fillWidth: true
}
LeftBanner {
id: leftBanner
visible: chat.roomInfo.left
Layout.fillWidth: true
}
2019-12-09 20:25:31 +11:00
Composer {
id: composer
userCompletion: userCompletion
eventList: loadEventList ? eventListLoader.item.eventList : null
visible: ! chat.roomInfo.left && ! chat.roomInfo.inviter_id
2019-12-09 20:25:31 +11:00
Layout.fillWidth: true
Layout.maximumHeight: parent.height / 2
}
2019-12-09 20:25:31 +11:00
}