status-desktop/ui/app/AppLayouts/Chat/popups/community/CommunityDetailPopup.qml
Sale Djenic c8b429388f refactor(user-profile): name, icon and isIdenticon properties added to global instance userProfile
Apart of all properties we have, now we have 3 new added props which will be used
almost always when we need the following details about logged in user:
- `name` - this will return an ens name in a pretty form or an alias if ens name
was not set (verified). Apart of this there are still `username` and `ensName`
properties for fetching them when it's needed.
- `icon` - this will return a thumbnail image if it's set, otherwise it will
return identicon. Apart of this there are still `identicon` and `thumbnailImage`
properties for fetching them when it's needed.
- `isIdenticon` - this will return `false` if a thumbnail image is set, otherwise
it will return `true`
2022-02-01 11:37:29 +01:00

231 lines
7.6 KiB
QML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import QtQuick 2.12
import QtQuick.Controls 2.3
import QtQuick.Dialogs 1.3
import StatusQ.Core 0.1
import StatusQ.Core.Theme 0.1
import StatusQ.Components 0.1
import StatusQ.Controls 0.1
import StatusQ.Popups 0.1
import utils 1.0
StatusModal {
id: root
property var store
property QtObject community: root.store.chatsModelInst.communities.observedCommunity
property string communityId: community.id
property string name: community.name
property string description: community.description
property int access: community.access
property string source: community.thumbnailImage
property int nbMembers: community.nbMembers
property bool ensOnly: community.ensOnly
property bool canJoin: community.canJoin
property bool canRequestAccess: community.canRequestAccess
property bool isMember: community.isMember
property string communityColor: community.communityColor || Style.current.blue
header.title: name
header.subTitle: {
let subTitle = ""
switch(access) {
case Constants.communityChatPublicAccess:
//% "Public community"
subTitle = qsTrId("public-community");
break;
case Constants.communityChatInvitationOnlyAccess:
//% "Invitation only community"
subTitle = qsTrId("invitation-only-community");
break;
case Constants.communityChatOnRequestAccess:
//% "On request community"
subTitle = qsTrId("on-request-community");
break;
default:
subTitle = qsTrId("Unknown community");
break;
}
if (ensOnly) {
//% " - ENS only"
subTitle += qsTrId("---ens-only")
}
return subTitle
}
contentItem: Column {
width: root.width
Item {
height: childrenRect.height + 8
width: parent.width - 32
anchors.horizontalCenter: parent.horizontalCenter
StatusBaseText {
id: description
anchors.top: parent.top
anchors.topMargin: 16
text: root.description
font.pixelSize: 15
color: Theme.palette.directColor1
wrapMode: Text.WordWrap
width: parent.width
}
StatusIcon {
id: statusIcon
anchors.top: description.bottom
anchors.topMargin: 16
anchors.left: parent.left
icon: "tiny/contact"
width: 16
color: Theme.palette.directColor1
}
StatusBaseText {
//% "%1 members"
text: qsTrId("-1-members").arg(nbMembers)
font.pixelSize: 15
font.weight: Font.Medium
color: Theme.palette.directColor1
anchors.left: statusIcon.right
anchors.leftMargin: 2
anchors.verticalCenter: statusIcon.verticalCenter
}
}
StatusModalDivider {
topPadding: 8
bottomPadding: 8
}
Item {
anchors.horizontalCenter: parent.horizontalCenter
width: parent.width - 32
height: 34
StatusBaseText {
//% "Channels"
text: qsTrId("channels")
anchors.bottom: parent.bottom
anchors.bottomMargin: 4
font.pixelSize: 15
color: Theme.palette.baseColor1
}
}
ScrollView {
width: root.width
height: 300
ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
clip: true
ListView {
id: chatList
anchors.fill: parent
clip: true
model: community.chats
boundsBehavior: Flickable.StopAtBounds
delegate: StatusListItem {
anchors.horizontalCenter: parent.horizontalCenter
title: "#" + model.name
subTitle: model.description
icon.isLetterIdenticon: true
icon.background.color: root.communityColor
}
}
}
}
leftButtons: [
StatusRoundButton {
id: backButton
icon.name: "arrow-right"
icon.height: 16
icon.width: 20
rotation: 180
onClicked: {
openPopup(communitiesPopupComponent)
root.close()
}
}
]
rightButtons: [
StatusButton {
property bool isPendingRequest: {
if (access !== Constants.communityChatOnRequestAccess) {
return false
}
return root.store.chatsModelInst.communities.isCommunityRequestPending(root.communityId)
}
text: {
if (root.ensOnly && !root.store.profileModelInst.profile.ensVerified) {
//% "Membership requires an ENS username"
return qsTrId("membership-requires-an-ens-username")
}
if (root.canJoin) {
//% "Join %1"
return qsTrId("join---1-").arg(root.name);
}
if (isPendingRequest) {
//% "Pending"
return qsTrId("invite-chat-pending")
}
switch(root.access) {
//% "Join %1"
case Constants.communityChatPublicAccess: return qsTrId("join---1-").arg(root.name);
//% "You need to be invited"
case Constants.communityChatInvitationOnlyAccess: return qsTrId("you-need-to-be-invited");
//% "Request to join %1"
case Constants.communityChatOnRequestAccess: return qsTrId("request-to-join---1-").arg(root.name);
//% "Unknown community"
default: return qsTrId("unknown-community");
}
}
enabled: {
if (root.ensOnly && !root.store.profileModelInst.profile.ensVerified) {
return false
}
if (root.access === Constants.communityChatInvitationOnlyAccess || isPendingRequest) {
return false
}
if (canJoin) {
return true
}
return true
}
onClicked: {
let error
if (access === Constants.communityChatOnRequestAccess && !root.isMember) {
error = root.store.chatsModelInst.communities.requestToJoinCommunity(root.communityId, userProfile.name)
if (!error) {
enabled = false
//% "Pending"
text = qsTrId("invite-chat-pending")
}
} else {
error = root.store.chatsModelInst.communities.joinCommunity(root.communityId, true)
}
if (error) {
joiningError.text = error
return joiningError.open()
}
root.close()
}
}
]
MessageDialog {
id: joiningError
//% "Error joining the community"
title: qsTrId("error-joining-the-community")
icon: StandardIcon.Critical
standardButtons: StandardButton.Ok
}
}