status-desktop/ui/imports/shared/popups/ImportCommunityPopup.qml

139 lines
4.5 KiB
QML
Raw Normal View History

2020-12-18 20:55:33 +00:00
import QtQuick 2.12
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.14
2020-12-18 20:55:33 +00:00
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: Utils.dropCommunityLinkPrefix(keyInput.text.trim())
readonly property bool isPrivateKey: Utils.isPrivateKey(inputKey)
readonly property bool isPublicKey: Utils.isChatKey(inputKey)
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: {
let communityKey = d.inputKey
if (d.isPrivateKey) {
if (!communityKey.startsWith("0x")) {
communityKey = "0x" + communityKey;
}
root.store.importCommunity(communityKey);
root.close();
}
if (d.isPublicKey) {
importButton.loading = true
root.store.requestCommunityInfo(communityKey, true)
root.close();
}
}
}
}
2020-12-18 20:55:33 +00:00
}
ColumnLayout {
anchors.fill: parent
spacing: Style.current.padding
2020-12-18 20:55:33 +00:00
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
2021-02-12 18:19:31 +00:00
}
2020-12-18 20:55:33 +00:00
}
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
}
}
}
}
2020-12-18 20:55:33 +00:00
}