mirror of
https://github.com/status-im/status-desktop.git
synced 2025-01-14 08:36:39 +00:00
9be2a8d799
This commit includes the following changes: 1. Request from backend the messages count in a specific interval as opposed to all messages timestamps in that interval. 2. Update the chart end date before refreshing the data 3. Fix metrics type parsing in community service 4. Fix a bug where the new incoming data was not processed by ChartJs without a hover event on the chart. The fix here is to manually request paint() on model changes.d Issues found and not handled here: 1. On large communities the backend request can take 3 minutes to complete 2. CPU usage can easily go to 100% when switching chart tabs on large communities. All the requests are processed by the backend.
287 lines
9.4 KiB
QML
287 lines
9.4 KiB
QML
import QtQuick 2.14
|
|
import QtQuick.Layouts 1.14
|
|
import QtQuick.Controls 2.14
|
|
|
|
import StatusQ.Core 0.1
|
|
import StatusQ.Core.Theme 0.1
|
|
import StatusQ.Controls 0.1
|
|
import StatusQ.Components 0.1
|
|
|
|
import AppLayouts.Communities.layouts 1.0
|
|
import AppLayouts.Communities.panels 1.0
|
|
|
|
import shared.popups 1.0
|
|
|
|
import utils 1.0
|
|
|
|
StackLayout {
|
|
id: root
|
|
|
|
property string communityId
|
|
property string name
|
|
property string description
|
|
property string introMessage
|
|
property string outroMessage
|
|
property string logoImageData
|
|
property string bannerImageData
|
|
property rect bannerCropRect
|
|
property color color
|
|
property string tags
|
|
property string selectedTags
|
|
property bool archiveSupportEnabled
|
|
property bool requestToJoinEnabled
|
|
property bool pinMessagesEnabled
|
|
property string previousPageName: (currentIndex === 1) ? qsTr("Overview") : ""
|
|
|
|
property bool archiveSupporVisible: true
|
|
property bool editable: false
|
|
property bool owned: false
|
|
property bool isControlNode: false
|
|
property int loginType: Constants.LoginType.Password
|
|
property bool communitySettingsDisabled
|
|
|
|
property string overviewChartData: ""
|
|
|
|
function navigateBack() {
|
|
if (editSettingsPanelLoader.item.dirty)
|
|
settingsDirtyToastMessage.notifyDirty()
|
|
else
|
|
root.currentIndex = 0
|
|
}
|
|
|
|
signal collectCommunityMetricsMessagesCount(var intervals)
|
|
|
|
signal edited(Item item) // item containing edited fields (name, description, logoImagePath, color, options, etc..)
|
|
|
|
signal inviteNewPeopleClicked
|
|
signal airdropTokensClicked
|
|
signal exportControlNodeClicked
|
|
signal importControlNodeClicked
|
|
|
|
clip: true
|
|
|
|
Component {
|
|
id: mainSettingsPageComp
|
|
ColumnLayout {
|
|
spacing: 16
|
|
RowLayout {
|
|
Layout.fillWidth: true
|
|
|
|
spacing: 16
|
|
|
|
ColumnLayout {
|
|
Layout.fillWidth: true
|
|
Layout.maximumWidth: 747
|
|
|
|
StatusBaseText {
|
|
id: nameText
|
|
objectName: "communityOverviewSettingsCommunityName"
|
|
Layout.fillWidth: true
|
|
font.pixelSize: 28
|
|
font.bold: true
|
|
font.letterSpacing: -0.4
|
|
color: Theme.palette.directColor1
|
|
wrapMode: Text.WordWrap
|
|
text: root.name
|
|
}
|
|
|
|
StatusBaseText {
|
|
id: descriptionText
|
|
objectName: "communityOverviewSettingsCommunityDescription"
|
|
Layout.fillWidth: true
|
|
font.pixelSize: 15
|
|
color: Theme.palette.directColor1
|
|
wrapMode: Text.WordWrap
|
|
text: root.description
|
|
}
|
|
}
|
|
|
|
Item { Layout.fillWidth: true }
|
|
|
|
StatusButton {
|
|
Layout.preferredHeight: 38
|
|
Layout.alignment: Qt.AlignTop
|
|
objectName: "communityOverviewSettingsEditCommunityButton"
|
|
visible: root.editable
|
|
text: qsTr("Edit Community")
|
|
onClicked: root.currentIndex = 1
|
|
size: StatusBaseButton.Size.Small
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
Layout.fillWidth: true
|
|
|
|
implicitHeight: 1
|
|
color: Theme.palette.statusMenu.separatorColor
|
|
}
|
|
|
|
OverviewSettingsChart {
|
|
model: JSON.parse(root.overviewChartData)
|
|
onCollectCommunityMetricsMessagesCount: {
|
|
root.collectCommunityMetricsMessagesCount(intervals)
|
|
}
|
|
Layout.topMargin: 16
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
Layout.bottomMargin: 16
|
|
|
|
Connections {
|
|
target: root
|
|
onCommunityIdChanged: reset()
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
Layout.fillWidth: true
|
|
|
|
implicitHeight: 1
|
|
color: Theme.palette.statusMenu.separatorColor
|
|
}
|
|
}
|
|
}
|
|
|
|
Component {
|
|
id: overviewSettingsFooterComp
|
|
OverviewSettingsFooter {
|
|
rightPadding: 64
|
|
leftPadding: 64
|
|
bottomPadding: 64
|
|
topPadding: 0
|
|
loginType: root.loginType
|
|
communityName: root.name
|
|
isControlNode: root.isControlNode
|
|
onExportControlNodeClicked: root.exportControlNodeClicked()
|
|
onImportControlNodeClicked: root.importControlNodeClicked()
|
|
//TODO update once the domain changes
|
|
onLearnMoreClicked: Global.openLink(Constants.statusHelpLinkPrefix + "status-communities/about-the-control-node-in-status-communities")
|
|
}
|
|
}
|
|
|
|
Component {
|
|
id: disabledSettingsBannerComp
|
|
StatusInfoBoxPanel {
|
|
title: qsTr("Community administration is disabled when in testnet mode")
|
|
text: qsTr("To access your %1 community admin area, you need to turn off testnet mode.").arg(root.name)
|
|
icon: "settings"
|
|
iconType: StatusInfoBoxPanel.Type.Warning
|
|
buttonText: qsTr("Turn off testnet mode")
|
|
onClicked: Global.openTestnetPopup()
|
|
}
|
|
}
|
|
|
|
SettingsPage {
|
|
Layout.fillWidth: !root.communitySettingsDisabled
|
|
Layout.preferredWidth: root.communitySettingsDisabled ? 560 + leftPadding + rightPadding : -1
|
|
Layout.fillHeight: !root.communitySettingsDisabled
|
|
rightPadding: 64
|
|
bottomPadding: 50
|
|
topPadding: 0
|
|
header: null
|
|
contentItem: Loader {
|
|
sourceComponent: root.communitySettingsDisabled ? disabledSettingsBannerComp : mainSettingsPageComp
|
|
}
|
|
|
|
footer: Loader {
|
|
sourceComponent: overviewSettingsFooterComp
|
|
active: !root.communitySettingsDisabled
|
|
}
|
|
}
|
|
|
|
SettingsPage {
|
|
id: editCommunityPage
|
|
|
|
title: qsTr("Edit Community")
|
|
|
|
contentItem: Loader {
|
|
id: editSettingsPanelLoader
|
|
|
|
function reloadContent() {
|
|
active = false
|
|
active = true
|
|
}
|
|
|
|
sourceComponent: EditSettingsPanel {
|
|
id: editSettingsPanel
|
|
|
|
function isValidRect(r /*rect*/) {
|
|
return r.width !== 0 && r.height !== 0
|
|
}
|
|
|
|
readonly property bool dirty:
|
|
root.name != name ||
|
|
root.description != description ||
|
|
root.introMessage != introMessage ||
|
|
root.outroMessage != outroMessage ||
|
|
root.archiveSupportEnabled != options.archiveSupportEnabled ||
|
|
root.requestToJoinEnabled != options.requestToJoinEnabled ||
|
|
root.pinMessagesEnabled != options.pinMessagesEnabled ||
|
|
root.color != color ||
|
|
root.selectedTags != selectedTags ||
|
|
root.logoImageData != logoImageData ||
|
|
logoImagePath.length > 0 ||
|
|
isValidRect(logoCropRect) ||
|
|
root.bannerImageData != bannerImageData ||
|
|
bannerPath.length > 0 ||
|
|
isValidRect(bannerCropRect)
|
|
|
|
name: root.name
|
|
description: root.description
|
|
introMessage: root.introMessage
|
|
outroMessage: root.outroMessage
|
|
tags: root.tags
|
|
selectedTags: root.selectedTags
|
|
color: root.color
|
|
logoImageData: root.logoImageData
|
|
bannerImageData: root.bannerImageData
|
|
|
|
options {
|
|
archiveSupportEnabled: root.archiveSupportEnabled
|
|
archiveSupporVisible: root.archiveSupporVisible
|
|
requestToJoinEnabled: root.requestToJoinEnabled
|
|
pinMessagesEnabled: root.pinMessagesEnabled
|
|
}
|
|
|
|
bottomReservedSpace:
|
|
Qt.size(settingsDirtyToastMessage.implicitWidth,
|
|
settingsDirtyToastMessage.implicitHeight +
|
|
settingsDirtyToastMessage.anchors.bottomMargin)
|
|
|
|
bottomReservedSpaceActive: dirty
|
|
|
|
Binding {
|
|
target: editSettingsPanel.flickable
|
|
property: "bottomMargin"
|
|
value: 24
|
|
}
|
|
}
|
|
}
|
|
|
|
SettingsDirtyToastMessage {
|
|
id: settingsDirtyToastMessage
|
|
|
|
z: 1
|
|
anchors {
|
|
bottom: parent.bottom
|
|
horizontalCenter: parent.horizontalCenter
|
|
bottomMargin: 16
|
|
}
|
|
|
|
active: !!editSettingsPanelLoader.item &&
|
|
editSettingsPanelLoader.item.dirty
|
|
|
|
saveChangesButtonEnabled:
|
|
!!editSettingsPanelLoader.item &&
|
|
editSettingsPanelLoader.item.saveChangesButtonEnabled
|
|
|
|
onResetChangesClicked: editSettingsPanelLoader.reloadContent()
|
|
|
|
onSaveChangesClicked: {
|
|
root.currentIndex = 0
|
|
root.edited(editSettingsPanelLoader.item)
|
|
editSettingsPanelLoader.reloadContent()
|
|
}
|
|
}
|
|
}
|
|
}
|