status-desktop/storybook/pages/ImportCommunityPopupPage.qml

338 lines
12 KiB
QML

import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import QtQml 2.15
import Storybook 1.0
import Models 1.0
import StatusQ.Core.Theme 0.1
import AppLayouts.Communities.popups 1.0
import AppLayouts.Communities.stores 1.0 as CommunitiesStores
import shared.popups 1.0
import shared.stores 1.0 as SharedStores
import utils 1.0
SplitView {
id: root
Logs { id: logs }
orientation: Qt.Vertical
QtObject {
id: d
readonly property alias dialog: loader.item
property bool utilsReady: false
readonly property string newCommunityLink: "https://status.app/c/Cw6AChsKBnlveW95bxIGeW95b3lvGAEiByM4OEIwRkYD#zQ3shwHXstcword5gUtJCWVi55ZxPsdtfTQitnWNEAR1p3Gzd"
readonly property string newCommunityPublicKey: "0x03f751777ab35759f98ad241150f4329b9cc13aa42052ef64d16e9d474b9677bea"
readonly property string newCommunityCompressedPublicKey: "zQ3shwHXstcword5gUtJCWVi55ZxPsdtfTQitnWNEAR1p3Gzd"
readonly property var newCommunityDetails: QtObject {
readonly property string id: "0x039c47e9837a1a7dcd00a6516399d0eb521ab0a92d512ca20a44ac6278bfdbb5c5"
readonly property string name: "test-1"
readonly property int memberRole: 0
readonly property bool isControlNode: false
readonly property string description: "test"
readonly property string introMessage: "123"
readonly property string outroMessage: "342"
readonly property string image: ModelsData.icons.superRare
readonly property string bannerImageData: ModelsData.banners.superRare
readonly property string icon: ""
readonly property string color: "#4360DF"
readonly property string tags: "null"
readonly property bool hasNotification: false
readonly property int notificationsCount: 0
readonly property bool active: false
readonly property bool enabled: true
readonly property bool joined: false
readonly property bool spectated: false
readonly property bool canJoin: true
readonly property bool canManageUsers: false
readonly property bool canRequestAccess: false
readonly property bool isMember: false
readonly property bool amIBanned: false
readonly property int access: 1
readonly property bool ensOnly: false
readonly property int nbMembers: 42
readonly property bool encrypted: false
}
readonly property string knownCommunityLink: "https://status.app/c/CwyAChcKBHRlc3QSBHRlc3QYAiIHIzQzNjBERgM=#zQ3shqAAKxRroS2BE4FgLjjombivfU7XgeNqVFj1eRZ4GHuAU"
readonly property string knownCommunityPublicKey: "0x03c892238f64e9b74cefbaaaf5d557fee401a20d6fb52da126de45755b2a2b8166"
readonly property string knownCommunityCompressedPublicKey: "zQ3shqAAKxRroS2BE4FgLjjombivfU7XgeNqVFj1eRZ4GHuAU"
readonly property var knownCommunityDetails: QtObject {
readonly property string id: "0x03c892238f64e9b74cefbaaaf5d557fee401a20d6fb52da126de45755b2a2b8166"
readonly property string name: "test-2"
readonly property int memberRole: 0
readonly property bool isControlNode: false
readonly property string description: "test"
readonly property string introMessage: "123"
readonly property string outroMessage: "342"
readonly property string image: ModelsData.icons.status
readonly property string bannerImageData: ModelsData.banners.status
readonly property string icon: ""
readonly property string color: "#4360DF"
readonly property string tags: "null"
readonly property bool hasNotification: false
readonly property int notificationsCount: 0
readonly property bool active: false
readonly property bool enabled: true
readonly property bool joined: false
readonly property bool spectated: false
readonly property bool canJoin: true
readonly property bool canManageUsers: false
readonly property bool canRequestAccess: false
readonly property bool isMember: false
readonly property bool amIBanned: false
readonly property int access: 1
readonly property bool ensOnly: false
readonly property int nbMembers: 15
readonly property bool encrypted: false
}
property bool currenKeyIsPublic: false
property string currentKey: ""
}
CommunitiesStores.CommunitiesStore {
id: communityStoreMock
property bool newCommunityFetched: false
signal communityInfoRequestCompleted(string communityId, string errorMsg)
function getCommunityDetails(publicKey, importing, requestWhenNotFound) {
if (publicKey === d.knownCommunityPublicKey) {
return d.knownCommunityDetails
}
if (publicKey === d.newCommunityPublicKey && newCommunityFetched)
return d.newCommunityDetails
return null
}
function requestCommunityInfo(communityId) {
// Dynamically create a timer to be able to simulate overlapping requests
let timer = Qt.createQmlObject("import QtQuick 2.0; Timer {}", root)
timer.interval = 1000
timer.repeat = false
timer.triggered.connect(() => {
const communityFound = (communityId === d.knownCommunityPublicKey || communityId === d.newCommunityPublicKey)
const error = communityFound ? "" : "communtiy not found"
if (communityId === d.newCommunityPublicKey) {
newCommunityFetched = true
}
communityStoreMock.communityInfoRequestCompleted(communityId, error)
})
timer.start()
}
}
QtObject {
id: utilsMock
function getContactDetailsAsJson(arg1, arg2) {
return JSON.stringify({
displayName: "Mock user",
displayIcon: Theme.png("tokens/AST"),
publicKey: 123456789,
name: "",
ensVerified: false,
alias: "",
lastUpdated: 0,
lastUpdatedLocally: 0,
localNickname: "",
thumbnailImage: "",
largeImage: "",
isContact: false,
isAdded: false,
isBlocked: false,
requestReceived: false,
isSyncing: false,
removed: false,
trustStatus: Constants.trustStatus.unknown,
verificationStatus: Constants.verificationStatus.unverified,
})
}
function getCommunityDataFromSharedLink(link) {
return d.knownCommunityDetails
}
function getCompressedPk(publicKey) {
return d.knownCommunityCompressedPublicKey
}
signal importingCommunityStateChanged(string communityId, int state, string errorMsg)
// sharedUrlsModuleInst
function parseCommunitySharedUrl(link) {
if (link === d.knownCommunityLink)
return JSON.stringify({ communityId: d.knownCommunityPublicKey })
if (link === d.newCommunityLink)
return JSON.stringify({ communityId: d.newCommunityPublicKey })
return null
}
Component.onCompleted: {
Utils.sharedUrlsModuleInst = this
Utils.globalUtilsInst = this
d.utilsReady = true
}
Component.onDestruction: {
d.utilsReady = false
Utils.sharedUrlsModuleInst = {}
Utils.globalUtilsInst = {}
}
}
Item {
SplitView.fillWidth: true
SplitView.fillHeight: true
PopupBackground {
id: popupBg
anchors.fill: parent
Button {
anchors.centerIn: parent
text: "Reopen"
onClicked: loader.item.open()
}
}
Loader {
id: loader
active: d.utilsReady
anchors.fill: parent
sourceComponent: ImportCommunityPopup {
anchors.centerIn: parent
modal: false
closePolicy: Popup.NoAutoClose
destroyOnClose: false
store: communityStoreMock
utilsStore: SharedStores.UtilsStore {
function isCompressedPubKey(key) {
return d.dialog.text === d.knownCommunityCompressedPublicKey ||
d.dialog.text === d.newCommunityCompressedPublicKey
}
function isCommunityPublicKey() {
return true
}
function changeCommunityKeyCompression(key) {
if (key === d.knownCommunityCompressedPublicKey)
return d.knownCommunityPublicKey
if (key === d.newCommunityCompressedPublicKey)
return d.newCommunityPublicKey
if (key === d.knownCommunityPublicKey)
return d.knownCommunityCompressedPublicKey
if (key === d.newCommunityPublicKey)
return d.newCommunityCompressedPublicKey
return ""
}
}
Component.onCompleted: open()
onJoinCommunityRequested: (communityId, communityDetails) => {
logs.logEvent("onJoinCommunity", ["communityId", "communityDetails"], communityId, communityDetails)
}
}
}
}
LogsAndControlsPanel {
SplitView.minimumHeight: 100
SplitView.preferredHeight: 200
logsView.logText: logs.logText
GridLayout {
columns: 4
Button {
text: "Reset communities storage"
Layout.fillWidth: false
Layout.columnSpan: 4
Layout.alignment: Qt.AlignRight
onClicked: {
communityStoreMock.newCommunityFetched = false
const prevText = d.dialog.text
d.dialog.text = ""
d.dialog.text = prevText
}
}
Label {
text: "Known community"
}
Button {
checked: d.dialog && d.dialog.text === d.knownCommunityLink
text: "Link"
onClicked: {
d.dialog.text = d.knownCommunityLink
}
}
Button {
checked: d.dialog && d.dialog.text === d.knownCommunityPublicKey
text: "Public key"
onClicked: {
d.dialog.text = d.knownCommunityPublicKey
}
}
Button {
checked: d.dialog && d.dialog.text === d.knownCommunityCompressedPublicKey
text: "Compressed public key"
onClicked: {
d.dialog.text = d.knownCommunityCompressedPublicKey
}
}
Label {
text: "Never fetched community"
}
Button {
checked: d.dialog && d.dialog.text === d.newCommunityLink
text: "Link"
onClicked: {
d.dialog.text = d.newCommunityLink
}
}
Button {
checked: d.dialog && d.dialog.text === d.newCommunityPublicKey
text: "Public key"
onClicked: {
d.dialog.text = d.newCommunityPublicKey
}
}
Button {
checked: d.dialog && d.dialog.text === d.newCommunityCompressedPublicKey
text: "Compressed public key"
onClicked: {
d.dialog.text = d.newCommunityCompressedPublicKey
}
}
}
}
}
// category: Popups