2020-12-18 15:55:33 -05:00
import QtQuick 2.12
import QtQuick . Controls 2.3
2022-11-28 15:57:56 +01:00
import QtQuick . Layouts 1.14
2020-12-18 15:55:33 -05:00
import QtGraphicalEffects 1.13
import QtQuick . Dialogs 1.3
2022-11-28 15:57:56 +01:00
import QtQml . Models 2.14
2021-09-28 18:04:06 +03:00
import utils 1.0
2021-10-28 00:27:49 +03:00
import shared . controls 1.0
2021-10-19 10:51:11 +02:00
import StatusQ . Core 0.1
import StatusQ . Core . Theme 0.1
2022-11-28 15:57:56 +01:00
import StatusQ . Popups . Dialog 0.1
import StatusQ . Controls 0.1
2021-10-19 10:51:11 +02:00
2022-11-28 15:57:56 +01:00
StatusDialog {
2021-10-22 23:49:47 +03:00
id: root
2021-11-30 10:49:36 -04:00
property var store
2022-11-28 15:57:56 +01:00
width: 640
title: qsTr ( "Import Community" )
2021-10-22 23:49:47 +03:00
2022-11-28 15:57:56 +01:00
QtObject {
id: d
property string importErrorMessage
readonly property string inputErrorMessage: isInputValid ? "" : qsTr ( "Invalid key" )
readonly property string errorMessage: importErrorMessage || inputErrorMessage
2023-05-15 13:31:23 +03:00
readonly property string inputKey: keyInput . text . trim ( )
2023-05-04 18:37:44 +03:00
readonly property bool isPrivateKey: Utils . isPrivateKey ( inputKey )
2023-05-15 13:31:23 +03:00
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 )
}
2022-11-28 15:57:56 +01:00
readonly property bool isInputValid: isPrivateKey || isPublicKey
2021-03-10 15:25:06 +01:00
}
2022-11-28 15:57:56 +01:00
footer: StatusDialogFooter {
rightButtons: ObjectModel {
StatusFlatButton {
text: qsTr ( "Cancel" )
onClicked: root . reject ( )
}
StatusButton {
2023-05-04 18:37:44 +03:00
id: importButton
enabled: d . isInputValid
text: d . isPrivateKey ? qsTr ( "Make this an Owner Node" ) : qsTr ( "Import" )
onClicked: {
if ( d . isPrivateKey ) {
2023-05-15 13:31:23 +03:00
const communityKey = d . inputKey
2023-05-04 18:37:44 +03:00
if ( ! communityKey . startsWith ( "0x" ) ) {
communityKey = "0x" + communityKey ;
}
root . store . importCommunity ( communityKey ) ;
root . close ( ) ;
2022-11-28 15:57:56 +01:00
}
2023-05-04 18:37:44 +03:00
if ( d . isPublicKey ) {
importButton . loading = true
2023-05-15 13:31:23 +03:00
root . store . requestCommunityInfo ( d . publicKey , true )
2023-05-04 18:37:44 +03:00
root . close ( ) ;
}
}
2022-11-28 15:57:56 +01:00
}
}
2020-12-18 15:55:33 -05:00
}
2022-11-28 15:57:56 +01:00
ColumnLayout {
anchors.fill: parent
spacing: Style . current . padding
2020-12-18 15:55:33 -05:00
2022-03-23 13:56:25 +03:00
StatusBaseText {
id: infoText1
2022-11-28 15:57:56 +01:00
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." )
2022-03-23 13:56:25 +03:00
wrapMode: Text . WordWrap
font.pixelSize: 13
color: Theme . palette . baseColor1
}
2022-11-28 15:57:56 +01:00
StatusBaseText {
id: inputLabel
text: qsTr ( "Community key" )
color: Theme . palette . directColor1
font.pixelSize: 15
}
StatusTextArea {
2021-03-10 15:25:06 +01:00
id: keyInput
2022-11-28 15:57:56 +01:00
Layout.fillWidth: true
2023-05-05 17:01:34 +03:00
implicitHeight: 110
placeholderText: "0x0..."
wrapMode: TextEdit . WrapAtWordBoundaryOrAnywhere
2022-11-28 15:57:56 +01:00
onTextChanged: d . importErrorMessage = ""
}
2022-02-02 18:54:28 +01:00
2022-11-28 15:57:56 +01:00
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" )
}
2022-02-02 18:54:28 +01:00
}
2022-11-28 15:57:56 +01:00
color: d . errorMessage === "" ? Theme.palette.successColor1 : Theme . palette . dangerColor1
2021-02-12 13:19:31 -05:00
}
2020-12-18 15:55:33 -05:00
}
2022-11-28 15:57:56 +01: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 15:55:33 -05:00
}