Alexandra Betouni 4ee21ada05 feat(desktop) Added image function in Style
Introduced Style.svg() Style.png() Style.emoji() and
Style.icon() in Style.qml. Those should be used to
set the source in Images instead of using relative
paths. Usage:
Image {
   source: Style.svg("check)
   ....

Also moved all Singletons inside a new "utils"
folder and made it a QML module, to use
import utils 1.0 instead of relative paths

Closes #3678
2021-09-28 15:28:00 -04:00

145 lines
5.0 KiB
QML

import QtQuick 2.12
import QtQuick.Controls 2.12
import StatusQ.Controls 0.1
import StatusQ.Popups 0.1
import utils 1.0
StatusModal {
property var community
id: popup
onClosed: {
while (contentItem.depth > 1) {
contentItem.pop()
}
}
header.title: contentItem.currentItem.headerTitle
header.subTitle: contentItem.currentItem.headerSubtitle || ""
header.image.source: contentItem.currentItem.headerImageSource || ""
header.icon.isLetterIdenticon: contentItem.currentItem.headerTitle == popup.community.name && !contentItem.currentItem.headerImageSource
header.icon.background.color: popup.community.communityColor
contentItem: StackView {
id: stack
initialItem: profileOverview
width: popup.width
implicitHeight: currentItem.implicitHeight || currentItem.height
pushEnter: Transition { enabled: false }
pushExit: Transition { enabled: false }
popEnter: Transition { enabled: false }
popExit: Transition { enabled: false }
Component {
id: profileOverview
CommunityProfilePopupOverview {
width: stack.width
headerTitle: popup.community.name
headerSubtitle: {
switch(popup.community.access) {
//% "Public community"
case Constants.communityChatPublicAccess: return qsTrId("public-community");
//% "Invitation only community"
case Constants.communityChatInvitationOnlyAccess: return qsTrId("invitation-only-community");
//% "On request community"
case Constants.communityChatOnRequestAccess: return qsTrId("on-request-community");
//% "Unknown community"
default: return qsTrId("unknown-community");
}
}
headerImageSource: popup.community.thumbnailImage
community: popup.community
onMembersListButtonClicked: popup.contentItem.push(membersList)
onNotificationsButtonClicked: {
chatsModel.communities.setCommunityMuted(popup.community.id, checked)
}
onEditButtonClicked: openPopup(editCommunityPopup, {
community: popup.community
})
onTransferOwnershipButtonClicked: openPopup(transferOwnershipPopup, {privateKey: chatsModel.communities.exportCommunity()})
onLeaveButtonClicked: {
chatsModel.communities.leaveCommunity(popup.community.id)
popup.close()
}
}
}
Component {
id: transferOwnershipPopup
TransferOwnershipPopup {
anchors.centerIn: parent
onClosed: {
destroy()
}
}
}
Component {
id: membersList
CommunityProfilePopupMembersList {
width: stack.width
//% "Members"
headerTitle: qsTrId("members-label")
headerSubtitle: popup.community.nbMembers.toString()
community: popup.community
onInviteButtonClicked: popup.contentItem.push(inviteFriendsView)
}
}
Component {
id: inviteFriendsView
CommunityProfilePopupInviteFriendsView {
width: stack.width
//% "Invite friends"
headerTitle: qsTrId("invite-friends")
community: popup.community
contactListSearch.chatKey.text: ""
contactListSearch.pubKey: ""
contactListSearch.pubKeys: []
contactListSearch.ensUsername: ""
contactListSearch.existingContacts.visible: profileModel.contacts.list.hasAddedContacts()
contactListSearch.noContactsRect.visible: !contactListSearch.existingContacts.visible
}
}
}
leftButtons: [
StatusRoundButton {
id: backButton
icon.name: "arrow-right"
icon.height: 16
icon.width: 20
rotation: 180
visible: contentItem.depth > 1
height: !visible ? 0 : implicitHeight
onClicked: {
contentItem.pop()
}
}
]
rightButtons: [
StatusButton {
//% "Invite"
text: qsTrId("community-invite-title")
visible: popup.contentItem.depth > 2
height: !visible ? 0 : implicitHeight
enabled: popup.contentItem.currentItem.contactListSearch !== undefined && popup.contentItem.currentItem.contactListSearch.pubKeys.length > 0
onClicked: {
popup.contentItem.currentItem.sendInvites(popup.contentItem.currentItem.contactListSearch.pubKeys)
popup.contentItem.pop()
}
}
]
}