148 lines
4.8 KiB
QML
148 lines
4.8 KiB
QML
import QtQuick 2.12
|
|
import QtQuick.Controls 2.3
|
|
import QtQuick.Layouts 1.14
|
|
import QtGraphicalEffects 1.13
|
|
import QtQuick.Dialogs 1.3
|
|
import QtQml.Models 2.14
|
|
|
|
import utils 1.0
|
|
import shared.controls 1.0
|
|
|
|
import StatusQ.Core 0.1
|
|
import StatusQ.Core.Theme 0.1
|
|
import StatusQ.Popups.Dialog 0.1
|
|
import StatusQ.Controls 0.1
|
|
|
|
StatusDialog {
|
|
id: root
|
|
property var store
|
|
width: 640
|
|
title: qsTr("Import Community")
|
|
|
|
QtObject {
|
|
id: d
|
|
property string importErrorMessage
|
|
readonly property string inputErrorMessage: isInputValid ? "" : qsTr("Invalid key")
|
|
readonly property string errorMessage: importErrorMessage || inputErrorMessage
|
|
readonly property string inputKey: keyInput.text.trim()
|
|
readonly property bool isPrivateKey: Utils.isPrivateKey(inputKey)
|
|
readonly property bool isPublicKey: publicKey !== ""
|
|
readonly property string publicKey: {
|
|
const key = Utils.dropCommunityLinkPrefix(inputKey)
|
|
if (!Utils.isCommunityPublicKey(key))
|
|
return ""
|
|
if (!Utils.isCompressedPubKey(key))
|
|
return key
|
|
return Utils.changeCommunityKeyCompression(key)
|
|
}
|
|
|
|
readonly property bool isInputValid: isPrivateKey || isPublicKey
|
|
}
|
|
|
|
footer: StatusDialogFooter {
|
|
rightButtons: ObjectModel {
|
|
StatusFlatButton {
|
|
text: qsTr("Cancel")
|
|
onClicked: root.reject()
|
|
}
|
|
StatusButton {
|
|
id: importButton
|
|
enabled: d.isInputValid
|
|
text: d.isPrivateKey ? qsTr("Make this an Owner Node") : qsTr("Import")
|
|
onClicked: {
|
|
if (d.isPrivateKey) {
|
|
const communityKey = d.inputKey
|
|
if (!communityKey.startsWith("0x")) {
|
|
communityKey = "0x" + communityKey;
|
|
}
|
|
root.store.importCommunity(communityKey);
|
|
root.close();
|
|
}
|
|
if (d.isPublicKey) {
|
|
importButton.loading = true
|
|
root.store.requestCommunityInfo(d.publicKey, true)
|
|
root.close();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
ColumnLayout {
|
|
anchors.fill: parent
|
|
spacing: Style.current.padding
|
|
|
|
StatusBaseText {
|
|
id: infoText1
|
|
Layout.fillWidth: true
|
|
text: qsTr("Enter the public key of the community you wish to access, or enter the private key of a community you own. Remember to always keep any private key safe and never share a private key with anyone else.")
|
|
wrapMode: Text.WordWrap
|
|
font.pixelSize: 13
|
|
color: Theme.palette.baseColor1
|
|
}
|
|
|
|
StatusBaseText {
|
|
id: inputLabel
|
|
text: qsTr("Community key")
|
|
color: Theme.palette.directColor1
|
|
font.pixelSize: 15
|
|
}
|
|
|
|
StatusTextArea {
|
|
id: keyInput
|
|
Layout.fillWidth: true
|
|
implicitHeight: 110
|
|
placeholderText: "0x0..."
|
|
wrapMode: TextEdit.WrapAtWordBoundaryOrAnywhere
|
|
onTextChanged: d.importErrorMessage = ""
|
|
}
|
|
|
|
StatusBaseText {
|
|
id: detectionLabel
|
|
Layout.fillWidth: true
|
|
horizontalAlignment: Text.AlignRight
|
|
verticalAlignment: Text.AlignVCenter
|
|
font.pixelSize: 13
|
|
visible: keyInput.text.trim() !== ""
|
|
text: {
|
|
if (d.errorMessage !== "") {
|
|
return d.errorMessage
|
|
}
|
|
if (d.isPrivateKey) {
|
|
return qsTr("Private key detected")
|
|
}
|
|
if (d.isPublicKey) {
|
|
return qsTr("Public key detected")
|
|
}
|
|
}
|
|
color: d.errorMessage === "" ? Theme.palette.successColor1 : Theme.palette.dangerColor1
|
|
}
|
|
}
|
|
|
|
|
|
Connections {
|
|
target: root.store
|
|
function onImportingCommunityStateChanged(communityId, state, errorMsg) {
|
|
let communityKey = keyInput.text.trim();
|
|
if (d.isPublicKey) {
|
|
let currentCommunityKey = Utils.isCompressedPubKey(communityKey) ?
|
|
Utils.changeCommunityKeyCompression(communityKey) :
|
|
communityKey
|
|
|
|
if (communityId == currentCommunityKey) {
|
|
importButton.loading = false
|
|
if (state === Constants.communityImported && root.opened) {
|
|
root.close()
|
|
return
|
|
}
|
|
}
|
|
|
|
if (state === Constants.communityImportingError) {
|
|
d.importErrorMessage = errorMsg
|
|
importButton.loading = false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|