130 lines
3.9 KiB
QML
130 lines
3.9 KiB
QML
import QtQuick 2.15
|
|
import QtQuick.Layouts 1.15
|
|
import QtQuick.Controls 2.15
|
|
|
|
import StatusQ.Core 0.1
|
|
import StatusQ.Core.Theme 0.1
|
|
import StatusQ.Controls 0.1
|
|
import StatusQ.Controls.Validators 0.1
|
|
import StatusQ.Components 0.1
|
|
import StatusQ.Popups 0.1
|
|
|
|
import shared.controls 1.0
|
|
import utils 1.0
|
|
|
|
StatusStackModal {
|
|
id: root
|
|
|
|
required property string communityName
|
|
required property string publicKey
|
|
property int initialShardIndex: -1
|
|
property bool shardingInProgress
|
|
|
|
signal enableSharding(int shardIndex)
|
|
|
|
stackTitle: qsTr("Enable community sharding for %1").arg(communityName)
|
|
width: 640
|
|
|
|
readonly property var cancelButton: StatusFlatButton {
|
|
text: qsTr("Cancel")
|
|
onClicked: root.close()
|
|
}
|
|
|
|
nextButton: StatusButton {
|
|
text: qsTr("Next")
|
|
enabled: typeof(currentItem.canGoNext) == "undefined" || currentItem.canGoNext
|
|
loading: root.shardingInProgress
|
|
onClicked: {
|
|
let nextAction = currentItem.nextAction
|
|
if (typeof(nextAction) == "function") {
|
|
return nextAction()
|
|
}
|
|
root.currentIndex++
|
|
}
|
|
}
|
|
|
|
finishButton: StatusButton {
|
|
text: qsTr("Enable community sharding")
|
|
enabled: typeof(currentItem.canGoNext) == "undefined" || currentItem.canGoNext
|
|
onClicked: {
|
|
root.enableSharding(d.shardIndex)
|
|
root.close()
|
|
}
|
|
}
|
|
|
|
rightButtons: [cancelButton, nextButton, finishButton]
|
|
|
|
QtObject {
|
|
id: d
|
|
readonly property string pubSubTopic: '{"pubsubTopic":"/waku/2/rs/16/%1", "publicKey":"%2"}'.arg(shardIndex).arg(root.publicKey) // FIXME backend
|
|
property int shardIndex: root.initialShardIndex
|
|
}
|
|
|
|
onAboutToShow: shardIndexEdit.focus = true
|
|
|
|
stackItems: [
|
|
ColumnLayout {
|
|
id: firstPage
|
|
spacing: Style.current.halfPadding
|
|
|
|
readonly property bool canGoNext: shardIndexEdit.valid
|
|
readonly property var nextAction: function () {
|
|
d.shardIndex = parseInt(shardIndexEdit.text)
|
|
root.currentIndex++
|
|
}
|
|
|
|
StatusInput {
|
|
id: shardIndexEdit
|
|
Layout.fillWidth: true
|
|
label: qsTr("Enter shard number")
|
|
placeholderText: qsTr("Enter a number between 0 and 1023")
|
|
text: d.shardIndex !== -1 ? d.shardIndex : ""
|
|
validators: [
|
|
StatusIntValidator {
|
|
bottom: 0
|
|
top: 1023
|
|
errorMessage: qsTr("Invalid shard number. Number must be 0 — 1023.")
|
|
}
|
|
]
|
|
Keys.onPressed: {
|
|
if (!shardIndexEdit.valid)
|
|
return
|
|
if (event.key === Qt.Key_Enter || event.key === Qt.Key_Return) {
|
|
event.accepted = true
|
|
firstPage.nextAction()
|
|
}
|
|
}
|
|
}
|
|
},
|
|
ColumnLayout {
|
|
readonly property bool canGoNext: agreement.checked
|
|
|
|
StatusBaseText {
|
|
text: qsTr("Pub/Sub topic")
|
|
}
|
|
|
|
StatusTextArea {
|
|
Layout.fillWidth: true
|
|
Layout.preferredHeight: 138
|
|
readOnly: true
|
|
text: d.pubSubTopic
|
|
rightPadding: 48
|
|
wrapMode: TextEdit.Wrap
|
|
|
|
CopyButton {
|
|
anchors.right: parent.right
|
|
anchors.top: parent.top
|
|
anchors.rightMargin: 12
|
|
anchors.topMargin: 10
|
|
textToCopy: parent.text
|
|
}
|
|
}
|
|
|
|
StatusCheckBox {
|
|
id: agreement
|
|
text: qsTr("I have made a copy of the Pub/Sub topic and public key string")
|
|
}
|
|
}
|
|
]
|
|
}
|