From d5a05895913070c866ac3de09295f52da64444f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Cie=C5=9Blak?= Date: Mon, 14 Oct 2024 16:49:01 +0200 Subject: [PATCH] Remove unused RecipientSelector and related components --- storybook/pages/ContactsListAndSearchPage.qml | 165 ---------- ui/StatusQ/sandbox/main.qml | 5 - .../pages/StatusAccountSelectorPage.qml | 67 ---- ui/StatusQ/sandbox/qml.qrc | 1 - .../Controls/StatusAccountSelector.qml | 287 ------------------ ui/StatusQ/src/StatusQ/Controls/qmldir | 93 +++--- ui/StatusQ/src/statusq.qrc | 11 +- ui/imports/shared/controls/AddressInput.qml | 96 ------ .../shared/controls/ContactSelector.qml | 202 ------------ .../shared/controls/ContactsListAndSearch.qml | 247 --------------- .../shared/controls/RecipientSelector.qml | 262 ---------------- .../controls/chat/SendTransactionButton.qml | 1 - ui/imports/shared/controls/qmldir | 20 +- ui/imports/shared/views/EnsResolver.qml | 57 ---- ui/imports/shared/views/SearchResults.qml | 166 ---------- .../views/chat/AcceptTransactionView.qml | 1 - .../views/chat/TransactionBubbleView.qml | 11 - ui/imports/shared/views/qmldir | 2 - 18 files changed, 59 insertions(+), 1635 deletions(-) delete mode 100644 storybook/pages/ContactsListAndSearchPage.qml delete mode 100644 ui/StatusQ/sandbox/pages/StatusAccountSelectorPage.qml delete mode 100644 ui/StatusQ/src/StatusQ/Controls/StatusAccountSelector.qml delete mode 100644 ui/imports/shared/controls/AddressInput.qml delete mode 100644 ui/imports/shared/controls/ContactSelector.qml delete mode 100644 ui/imports/shared/controls/ContactsListAndSearch.qml delete mode 100644 ui/imports/shared/controls/RecipientSelector.qml delete mode 100644 ui/imports/shared/views/EnsResolver.qml delete mode 100644 ui/imports/shared/views/SearchResults.qml diff --git a/storybook/pages/ContactsListAndSearchPage.qml b/storybook/pages/ContactsListAndSearchPage.qml deleted file mode 100644 index 08e789d491..0000000000 --- a/storybook/pages/ContactsListAndSearchPage.qml +++ /dev/null @@ -1,165 +0,0 @@ -import QtQuick 2.14 -import QtQuick.Controls 2.14 - -import shared.controls 1.0 -import shared.stores 1.0 - -import utils 1.0 - -Pane { - QtObject { - id: userProfileInst - - Component.onCompleted: RootStore.userProfileInst = userProfileInst - } - - QtObject { - id: gifsModule - } - - QtObject { - id: mainModule - - signal resolvedENS - } - - QtObject { - id: globalUtilsInst - - function isCompressedPubKey() { - return true - } - - function getCompressedPk(publicKey) { - return "zx3sh" + publicKey - } - - Component.onCompleted: Utils.globalUtilsInst = globalUtilsInst - } - - QtObject { - id: mainModuleInst - - function isCompressedPubKey() { - return true - } - - function getContactDetailsAsJson() { - return JSON.stringify({ - alias: "alias", - isAdded: false - }) - } - - Component.onCompleted: Utils.mainModuleInst = mainModuleInst - } - - ContactsListAndSearch { - anchors.fill: parent - - community: ({ id: "communityId" }) - - contactsStore: QtObject { - readonly property ListModel myContactsModel: ListModel { - ListElement { - pubKey: "0x02342342342" - isContact: true - onlineStatus: true - displayName: "x1" - icon: "" - colorId: 0 - ensName: "ens name" - isBlocked: false - alias: "some alias" - localNickname: "l1" - } - ListElement { - pubKey: "0x02342342342" - isContact: true - onlineStatus: true - displayName: "x2 sdfsd" - icon: "" - colorId: 0 - ensName: "ens name" - isBlocked: false - alias: "some alias" - localNickname: "" - } - ListElement { - pubKey: "0x02342342342" - isContact: true - onlineStatus: true - displayName: "x3 xcvxcv" - icon: "" - colorId: 0 - ensName: "ens name" - isBlocked: false - alias: "some alias" - localNickname: "" - } - ListElement { - pubKey: "0x02342342342" - isContact: true - onlineStatus: true - displayName: "x4 drt5" - icon: "" - colorId: 0 - ensName: "ens name" - isBlocked: false - alias: "some alias" - localNickname: "" - } - ListElement { - pubKey: "0x02342342342" - isContact: true - onlineStatus: true - displayName: "x4 drt5e" - icon: "" - colorId: 0 - ensName: "ens name" - isBlocked: false - alias: "some alias" - localNickname: "" - } - ListElement { - pubKey: "0x02342342342" - isContact: true - onlineStatus: true - displayName: "x4 drtew5" - icon: "" - colorId: 0 - ensName: "ens name" - isBlocked: false - alias: "some alias" - localNickname: "" - } - ListElement { - pubKey: "0x02342342342" - isContact: true - onlineStatus: true - displayName: "x4 drt5e" - icon: "" - colorId: 0 - ensName: "ens name" - isBlocked: false - alias: "some alias" - localNickname: "" - } - ListElement { - pubKey: "0x02342342342" - isContact: true - onlineStatus: true - displayName: "x4 drtew5" - icon: "" - colorId: 0 - ensName: "ens name" - isBlocked: false - alias: "some alias" - localNickname: "" - } - } - } - } -} - -// category: Components diff --git a/ui/StatusQ/sandbox/main.qml b/ui/StatusQ/sandbox/main.qml index 5ebe2d9cf7..294e5ac329 100644 --- a/ui/StatusQ/sandbox/main.qml +++ b/ui/StatusQ/sandbox/main.qml @@ -225,11 +225,6 @@ StatusWindow { selected: viewLoader.source.toString().includes(title) onClicked: mainPageView.page(title); } - StatusNavigationListItem { - title: "StatusAccountSelector" - selected: viewLoader.source.toString().includes(title) - onClicked: mainPageView.page(title); - } StatusNavigationListItem { title: "StatusColorSelector" selected: viewLoader.source.toString().includes(title) diff --git a/ui/StatusQ/sandbox/pages/StatusAccountSelectorPage.qml b/ui/StatusQ/sandbox/pages/StatusAccountSelectorPage.qml deleted file mode 100644 index 93888df502..0000000000 --- a/ui/StatusQ/sandbox/pages/StatusAccountSelectorPage.qml +++ /dev/null @@ -1,67 +0,0 @@ -import QtQuick 2.14 -import QtQuick.Controls 2.14 -import QtQuick.Layouts 1.14 - -import StatusQ.Core 0.1 -import StatusQ.Core.Theme 0.1 -import StatusQ.Controls 0.1 -import StatusQ.Popups 0.1 - -Column { - spacing: 8 - - StatusAccountSelector { - id: selector1 - width: 300 - accounts: accountsModel - } - - ListModel { - id: accountsModel - - ListElement { - name: "Pascal" - address: "0x1234567891011" - path: "" - color: "red" - publicKey: "" - walletType: "generated" - isChat: "" - currencyBalance: "1199.02" - assets: [] - } - ListElement { - name: "Boris" - address: "0x123" - path: "" - color: "red" - publicKey: "" - walletType: "generated" - isChat: "" - currencyBalance: "42.42" - assets: [] - } - ListElement { - name: "Alexandra" - address: "0x123" - path: "" - color: "yellow" - publicKey: "" - walletType: "generated" - isChat: "" - currencyBalance: "0" - assets: [] - } - ListElement { - name: "Khushboo" - address: "0x123" - path: "" - color: "blue" - publicKey: "" - walletType: "watch" // Will be automatically filtered by StatusAccountSelector - isChat: "" - currencyBalance: "0" - assets: [] - } - } -} diff --git a/ui/StatusQ/sandbox/qml.qrc b/ui/StatusQ/sandbox/qml.qrc index 5f8d76b1f1..bb40e4500b 100644 --- a/ui/StatusQ/sandbox/qml.qrc +++ b/ui/StatusQ/sandbox/qml.qrc @@ -42,7 +42,6 @@ images/SRToken.png images/StatusPunks.png images/SuperRareCommunityBanner.png - pages/StatusAccountSelectorPage.qml pages/StatusAddressPage.qml pages/StatusCardPage.qml pages/StatusChatCommandButtonPage.qml diff --git a/ui/StatusQ/src/StatusQ/Controls/StatusAccountSelector.qml b/ui/StatusQ/src/StatusQ/Controls/StatusAccountSelector.qml deleted file mode 100644 index abf1afe6b3..0000000000 --- a/ui/StatusQ/src/StatusQ/Controls/StatusAccountSelector.qml +++ /dev/null @@ -1,287 +0,0 @@ -import QtQuick 2.13 -import QtQuick.Controls 2.13 -import QtQuick.Layouts 1.13 -import QtQml.Models 2.14 - -import StatusQ.Core 0.1 -import StatusQ.Core.Theme 0.1 -import StatusQ.Core.Utils 0.1 -import StatusQ.Controls 0.1 - -import SortFilterProxyModel 0.2 - -Item { - id: root - - property string label: qsTr("Choose account") - property bool showAccountDetails: !!selectedAccount - property var accounts - property var selectedAccount - property string currency: "USD" - - // set to asset symbol to display asset's balance top right - // NOTE: if this asset is not selected as a wallet token in the UI, then - // nothing will be displayed - property string showBalanceForAssetSymbol: "" - property var assetFound - property double minRequiredAssetBalance: 0 - property int dropdownWidth: width - property int chainId: 0 - property bool isValid: true - property bool readOnly: false - - - property var assetBalanceTextFn: function (foundValue) { - return qsTr("Balance: %1").arg(parseFloat(foundValue) === 0.0 ? Qt.locale().zeroDigit - : LocaleUtils.numberToLocaleString(foundValue)) - } - - readonly property string watchWalletType: "watch" - - enum Type { - Address, - Contact, - Account - } - - function validate() { - if (showBalanceForAssetSymbol == "" || minRequiredAssetBalance == 0 || !assetFound) { - return root.isValid - } - root.isValid = assetFound.totalBalance.amount >= minRequiredAssetBalance - return root.isValid - } - - implicitWidth: 448 - implicitHeight: comboBox.height + - (selectedAccountDetails.visible ? selectedAccountDetails.height + selectedAccountDetails.anchors.topMargin - : 0) - - onSelectedAccountChanged: { - if (!selectedAccount) { - return - } - if (selectedAccount.color) { - d.selectedIconColor = Utils.getThemeAccountColor(selectedAccount.color, Theme.palette.userCustomizationColors) || Theme.palette.userCustomizationColors[0] - } - if (selectedAccount.name) { - d.selectedText = selectedAccount.name - } - if (selectedAccount.address) { - textSelectedAddress.text = selectedAccount.address - } - if (selectedAccount.currencyBalance) { - textSelectedAddressFiatBalance.text = LocaleUtils.currencyAmountToLocaleString(selectedAccount.currencyBalance) - } - if (selectedAccount.assets && showBalanceForAssetSymbol) { - assetFound = Utils.findAssetByChainAndSymbol(root.chainId, selectedAccount.assets, showBalanceForAssetSymbol) - if (!assetFound) { - console.warn("Cannot find asset '", showBalanceForAssetSymbol, "'. Ensure this asset has been added to the token list.") - } - } - if (!selectedAccount.type) { - selectedAccount.type = StatusAccountSelector.Type.Account - } - validate() - } - - onAssetFoundChanged: { - if (!assetFound) { - return - } - txtAssetBalance.text = root.assetBalanceTextFn(assetFound.totalBalance.amount) - txtAssetSymbol.text = " " + assetFound.symbol - } - - QtObject { - id: d - property color selectedIconColor: "transparent" - property string selectedText: "" - } - - StatusBaseText { - id: txtAssetBalance - visible: root.assetFound !== undefined - anchors.bottom: comboBox.top - anchors.bottomMargin: -18 - anchors.right: txtAssetSymbol.left - anchors.left: comboBox.left - anchors.leftMargin: comboBox.width / 2.5 - - color: !root.isValid ? Theme.palette.dangerColor1 : Theme.palette.baseColor1 - elide: Text.ElideRight - font.pixelSize: 13 - horizontalAlignment: Text.AlignRight - height: 18 - - StatusToolTip { - enabled: txtAssetBalance.truncated - id: assetTooltip - text: txtAssetBalance.text - } - - MouseArea { - enabled: txtAssetBalance.truncated - anchors.fill: parent - hoverEnabled: enabled - onEntered: assetTooltip.visible = true - onExited: assetTooltip.visible = false - } - } - - StatusBaseText { - id: txtAssetSymbol - visible: txtAssetBalance.visible - anchors.top: txtAssetBalance.top - anchors.right: parent.right - - color: txtAssetBalance.color - font.pixelSize: 13 - height: txtAssetBalance.height - } - - StatusComboBox { - id: comboBox - - label: root.label - width: parent.width - - model: SortFilterProxyModel { - sourceModel: !!root.accounts ? root.accounts : null - filters: [ - ValueFilter { - roleName: "walletType" - value: root.watchWalletType - inverted: true - } - ] - } - contentItem: RowLayout { - spacing: 8 - - StatusIcon { - Layout.alignment: Qt.AlignVCenter - Layout.preferredWidth: 20 - Layout.preferredHeight: 20 - icon: "filled-account" - color: d.selectedIconColor - } - - StatusBaseText { - elide: Text.ElideRight - Layout.fillWidth: true - Layout.fillHeight: true - font.pixelSize: 15 - verticalAlignment: Text.AlignVCenter - color: Theme.palette.directColor1 - text: d.selectedText - } - } - - delegate: StatusItemDelegate { - highlighted: index === comboBox.control.highlightedIndex - width: comboBox.width - padding: 16 - - onClicked: { - // WARNING: Settings comboBox value from delegate is wrong. - // ComboBox must have a single role as "value" - // This should be refactored later. Probably roleValue should be 'address'. - // All other needed values should be retrived from model by the user of component. - root.selectedAccount = { address, name, color: model.color, assets, currencyBalance }; - } - - Component.onCompleted: { - // WARNING: Same here, this is wrong, check comment above. - if (!root.selectedAccount && index === 0) { - root.selectedAccount = { address, name, color: model.color, assets, currencyBalance } - } - } - - contentItem: RowLayout { - spacing: 0 - - StatusIcon { - id: iconImg - Layout.preferredWidth: 20 - Layout.preferredHeight: 20 - icon: "filled-account" - color: Utils.getThemeAccountColor(model.color, Theme.palette.userCustomizationColors) || - Theme.palette.userCustomizationColors[0] - } - - ColumnLayout { - id: column - Layout.fillWidth: true - Layout.leftMargin: 14 - Layout.rightMargin: 8 - spacing: 0 - - StatusBaseText { - id: accountName - Layout.fillWidth: true - text: model.name - elide: Text.ElideRight - font.pixelSize: 15 - color: Theme.palette.directColor1 - } - - StatusBaseText { - id: accountAddress - Layout.fillWidth: true - Layout.maximumWidth: 80 - text: address - elide: Text.ElideMiddle - color: Theme.palette.baseColor1 - font.pixelSize: 12 - } - } - StatusBaseText { - id: txtFiatBalance - Layout.rightMargin: 4 - font.pixelSize: 15 - text: LocaleUtils.currencyAmountToLocaleString(currencyBalance, {noSymbol: true}) - color: Theme.palette.directColor1 - } - StatusBaseText { - id: fiatCurrencySymbol - font.pixelSize: 15 - color: Theme.palette.baseColor1 - text: root.currency.toUpperCase() - } - } - } - } - - RowLayout { - id: selectedAccountDetails - visible: root.showAccountDetails - anchors.top: comboBox.bottom - anchors.topMargin: 8 - anchors.left: parent.left - anchors.leftMargin: 2 - anchors.right: parent.right - anchors.rightMargin: 4 - - spacing: 2 - - StatusBaseText { - id: textSelectedAddress - Layout.maximumWidth: 80 - font.pixelSize: 12 - elide: Text.ElideMiddle - color: Theme.palette.baseColor1 - } - StatusBaseText { - font.pixelSize: 12 - color: Theme.palette.baseColor1 - text: "•" - } - StatusBaseText { - id: textSelectedAddressFiatBalance - Layout.fillWidth: true - font.pixelSize: 12 - color: Theme.palette.baseColor1 - } - } -} diff --git a/ui/StatusQ/src/StatusQ/Controls/qmldir b/ui/StatusQ/src/StatusQ/Controls/qmldir index fbe513a953..fc505dcccd 100644 --- a/ui/StatusQ/src/StatusQ/Controls/qmldir +++ b/ui/StatusQ/src/StatusQ/Controls/qmldir @@ -1,66 +1,65 @@ module StatusQ.Controls -StatusAccountSelector 0.1 StatusAccountSelector.qml +StatusActivityCenterButton 0.1 StatusActivityCenterButton.qml +StatusAmountInput 0.1 StatusAmountInput.qml +StatusBackButton 0.1 StatusBackButton.qml StatusBanner 0.1 StatusBanner.qml +StatusBaseButton 0.1 StatusBaseButton.qml +StatusBaseInput 0.1 StatusBaseInput.qml +StatusBlockProgressBar 0.1 StatusBlockProgressBar.qml +StatusButton 0.1 StatusButton.qml +StatusButtonRow 0.1 StatusButtonRow.qml StatusChatCommandButton 0.1 StatusChatCommandButton.qml StatusChatInfoButton 0.1 StatusChatInfoButton.qml StatusChatListCategoryItemButton 0.1 StatusChatListCategoryItemButton.qml -StatusClearButton 0.1 StatusClearButton.qml -StatusColorSelector 0.1 StatusColorSelector.qml -StatusIconTabButton 0.1 StatusIconTabButton.qml -StatusIdenticonRing 0.1 StatusIdenticonRing.qml -StatusItemPicker 0.1 StatusItemPicker.qml -StatusNavigationButton 0.1 StatusNavigationButton.qml -StatusNavBarTabButton 0.1 StatusNavBarTabButton.qml -StatusTabBarIconButton 0.1 StatusTabBarIconButton.qml -StatusToolTip 0.1 StatusToolTip.qml -StatusBaseButton 0.1 StatusBaseButton.qml -StatusButton 0.1 StatusButton.qml -StatusButtonRow 0.1 StatusButtonRow.qml -StatusFlatButton 0.1 StatusFlatButton.qml -StatusRoundButton 0.1 StatusRoundButton.qml -StatusFlatRoundButton 0.1 StatusFlatRoundButton.qml -StatusCommunityTag 0.1 StatusCommunityTag.qml -StatusSwitch 0.1 StatusSwitch.qml -StatusRadioButton 0.1 StatusRadioButton.qml StatusCheckBox 0.1 StatusCheckBox.qml -StatusSlider 0.1 StatusSlider.qml -StatusLabeledSlider 0.1 StatusLabeledSlider.qml -StatusSelect 0.1 StatusSelect.qml -StatusBaseInput 0.1 StatusBaseInput.qml +StatusCircularProgressBar 0.1 StatusCircularProgressBar.qml +StatusClearButton 0.1 StatusClearButton.qml +StatusColorRadioButton 0.1 StatusColorRadioButton.qml +StatusColorSelector 0.1 StatusColorSelector.qml +StatusColorSelectorGrid 0.1 StatusColorSelectorGrid.qml +StatusComboBox 0.1 StatusComboBox.qml +StatusCommunityTag 0.1 StatusCommunityTag.qml +StatusDropdown 0.1 StatusDropdown.qml +StatusFlatButton 0.1 StatusFlatButton.qml +StatusFlatRoundButton 0.1 StatusFlatRoundButton.qml +StatusIconSwitch 0.1 StatusIconSwitch.qml +StatusIconTabButton 0.1 StatusIconTabButton.qml +StatusIconTextButton 0.1 StatusIconTextButton.qml +StatusIdenticonRing 0.1 StatusIdenticonRing.qml +StatusImageCrop 0.1 StatusImageCrop.qml +StatusImageSelector 0.1 StatusImageSelector.qml StatusInput 0.1 StatusInput.qml -StatusAmountInput 0.1 StatusAmountInput.qml +StatusItemDelegate 0.1 StatusItemDelegate.qml +StatusItemPicker 0.1 StatusItemPicker.qml +StatusLabeledSlider 0.1 StatusLabeledSlider.qml +StatusLinkText 0.1 StatusLinkText.qml +StatusNavBarTabButton 0.1 StatusNavBarTabButton.qml +StatusNavigationButton 0.1 StatusNavigationButton.qml +StatusPasswordInput 0.1 StatusPasswordInput.qml +StatusPasswordStrengthIndicator 0.1 StatusPasswordStrengthIndicator.qml StatusPickerButton 0.1 StatusPickerButton.qml StatusPinInput 0.1 StatusPinInput.qml StatusProgressBar 0.1 StatusProgressBar.qml -StatusPasswordStrengthIndicator 0.1 StatusPasswordStrengthIndicator.qml -StatusSwitchTabButton 0.1 StatusSwitchTabButton.qml -StatusSwitchTabBar 0.1 StatusSwitchTabBar.qml +StatusRadioButton 0.1 StatusRadioButton.qml +StatusRoundButton 0.1 StatusRoundButton.qml +StatusScrollBar 0.1 StatusScrollBar.qml +StatusSeedPhraseInput 0.1 StatusSeedPhraseInput.qml +StatusSelect 0.1 StatusSelect.qml StatusSelectableText 0.1 StatusSelectableText.qml +StatusSlider 0.1 StatusSlider.qml +StatusSwitch 0.1 StatusSwitch.qml +StatusSwitchTabBar 0.1 StatusSwitchTabBar.qml +StatusSwitchTabButton 0.1 StatusSwitchTabButton.qml StatusTabBar 0.1 StatusTabBar.qml +StatusTabBarIconButton 0.1 StatusTabBarIconButton.qml StatusTabButton 0.1 StatusTabButton.qml StatusTagItem 0.1 StatusTagItem.qml -StatusTokenInlineSelector 0.1 StatusTokenInlineSelector.qml -StatusWalletColorButton 0.1 StatusWalletColorButton.qml -StatusWalletColorSelect 0.1 StatusWalletColorSelect.qml -StatusColorSelectorGrid 0.1 StatusColorSelectorGrid.qml -StatusSeedPhraseInput 0.1 StatusSeedPhraseInput.qml -StatusImageCrop 0.1 StatusImageCrop.qml -StatusActivityCenterButton 0.1 StatusActivityCenterButton.qml -StatusDropdown 0.1 StatusDropdown.qml -StatusIconTextButton 0.1 StatusIconTextButton.qml -StatusScrollBar 0.1 StatusScrollBar.qml -StatusComboBox 0.1 StatusComboBox.qml -StatusItemDelegate 0.1 StatusItemDelegate.qml StatusTextArea 0.1 StatusTextArea.qml StatusTextField 0.1 StatusTextField.qml -StatusBackButton 0.1 StatusBackButton.qml -StatusPasswordInput 0.1 StatusPasswordInput.qml StatusTextWithLoadingState 0.1 StatusTextWithLoadingState.qml -StatusLinkText 0.1 StatusLinkText.qml -StatusImageSelector 0.1 StatusImageSelector.qml -StatusColorRadioButton 0.1 StatusColorRadioButton.qml -StatusBlockProgressBar 0.1 StatusBlockProgressBar.qml +StatusTokenInlineSelector 0.1 StatusTokenInlineSelector.qml +StatusToolTip 0.1 StatusToolTip.qml +StatusWalletColorButton 0.1 StatusWalletColorButton.qml +StatusWalletColorSelect 0.1 StatusWalletColorSelect.qml StatusWarningBox 0.1 StatusWarningBox.qml -StatusIconSwitch 0.1 StatusIconSwitch.qml -StatusCircularProgressBar 0.1 StatusCircularProgressBar.qml diff --git a/ui/StatusQ/src/statusq.qrc b/ui/StatusQ/src/statusq.qrc index b14093a45e..d24b5d6220 100644 --- a/ui/StatusQ/src/statusq.qrc +++ b/ui/StatusQ/src/statusq.qrc @@ -72,10 +72,10 @@ StatusQ/Components/private/chart/ChartCanvas.qml StatusQ/Components/private/chart/Library/Animator.qml StatusQ/Components/private/chart/Library/Chart.bundle.js - StatusQ/Components/private/chart/Library/chartjs-plugin-crosshair.js - StatusQ/Components/private/chart/Library/chartjs-plugin-datalabels.js StatusQ/Components/private/chart/Library/Library.js StatusQ/Components/private/chart/Library/Polyfills.js + StatusQ/Components/private/chart/Library/chartjs-plugin-crosshair.js + StatusQ/Components/private/chart/Library/chartjs-plugin-datalabels.js StatusQ/Components/private/qmldir StatusQ/Components/private/qwebchannel/helpers.js StatusQ/Components/private/qwebchannel/qwebchannel.js @@ -90,8 +90,8 @@ StatusQ/Components/private/statusMessage/StatusSticker.qml StatusQ/Components/private/statusMessage/StatusTextMessage.qml StatusQ/Components/qmldir - StatusQ/Controls/StatusAccountSelector.qml StatusQ/Controls/StatusActivityCenterButton.qml + StatusQ/Controls/StatusAmountInput.qml StatusQ/Controls/StatusBackButton.qml StatusQ/Controls/StatusBanner.qml StatusQ/Controls/StatusBaseButton.qml @@ -120,7 +120,6 @@ StatusQ/Controls/StatusImageCrop.qml StatusQ/Controls/StatusImageSelector.qml StatusQ/Controls/StatusInput.qml - StatusQ/Controls/StatusAmountInput.qml StatusQ/Controls/StatusItemDelegate.qml StatusQ/Controls/StatusItemPicker.qml StatusQ/Controls/StatusLabeledSlider.qml @@ -184,8 +183,8 @@ StatusQ/Core/StatusModalHeaderSettings.qml StatusQ/Core/StatusProfileImageSettings.qml StatusQ/Core/StatusRollArea.qml - StatusQ/Core/StatusSharedUpdateTimer.qml StatusQ/Core/StatusScrollView.qml + StatusQ/Core/StatusSharedUpdateTimer.qml StatusQ/Core/StatusTooltipSettings.qml StatusQ/Core/Theme/StatusColors.qml StatusQ/Core/Theme/StatusDarkTheme.qml @@ -254,7 +253,7 @@ StatusQ/Popups/statusModal/StatusImageWithTitle.qml StatusQ/Popups/statusModal/StatusModalFooter.qml StatusQ/Popups/statusModal/StatusModalHeader.qml - StatusQ/Validators/qmldir StatusQ/Validators/AmountValidator.qml + StatusQ/Validators/qmldir diff --git a/ui/imports/shared/controls/AddressInput.qml b/ui/imports/shared/controls/AddressInput.qml deleted file mode 100644 index f599e8c3cd..0000000000 --- a/ui/imports/shared/controls/AddressInput.qml +++ /dev/null @@ -1,96 +0,0 @@ -import QtQuick 2.13 -import QtQuick.Controls 2.13 -import QtQuick.Layouts 1.13 -import QtGraphicalEffects 1.13 - -import utils 1.0 -import "." - -Item { - id: root - - property var contactsStore - - property string validationError: "Error" - property string ensAsyncValidationError: qsTr("ENS Username not found") - property alias input: contactFieldAndList.chatKey - property string selectedAddress - property bool isValid: false - property alias isPending: contactFieldAndList.loading - property bool isResolvedAddress: false - property int parentWidth - property bool addContactEnabled: true - property alias wrongInputValidationError: contactFieldAndList.wrongInputValidationError - property alias ownAddressError: contactFieldAndList.ownAddressError - - implicitHeight: contactFieldAndList.chatKey.height - - onSelectedAddressChanged: validate() - - function resetInternal() { - selectedAddress = "" - contactFieldAndList.chatKey.resetInternal() - metrics.text = "" - isValid = false - isPending = false - isResolvedAddress = false - } - - function validate() { - let isValidEns = Utils.isValidEns(input.text) - let isValidAddress = Utils.isValidAddress(selectedAddress) - let isValid = (isValidEns && !isResolvedAddress) || isPending || isValidAddress - contactFieldAndList.chatKey.validationError = "" - if (!isValid && input.text !== "") { - contactFieldAndList.chatKey.validationError = isResolvedAddress ? ensAsyncValidationError : validationError - } - root.isValid = isValid - return isValid - } - - ContactsListAndSearch { - id: contactFieldAndList - width: parent.width - showContactList: false - addContactEnabled: root.addContactEnabled - - contactsStore: root.contactsStore - - onUserClicked: function (isContact, pubKey, ensName, address) { - chatKey.text = address - } - searchResultsWidth: parentWidth - chatKey.customHeight: 56 - chatKey.onFocusChanged: { - root.validate() - if (chatKey.text !== "" && Utils.isValidAddress(metrics.text)) { - if (chatKey.focus) { - chatKey.text = metrics.text - } else { - chatKey.text = metrics.elidedText - } - } - } - chatKey.onTextChanged: { - metrics.text = chatKey.text - if (Utils.isValidAddress(chatKey.text)) { - root.selectedAddress = chatKey.text - } else { - root.selectedAddress = "" - } - } - TextMetrics { - id: metrics - elideWidth: 97 - elide: Text.ElideMiddle - } - } -} - - - -/*##^## -Designer { - D{i:0;autoSize:true;height:480;width:640} -} -##^##*/ diff --git a/ui/imports/shared/controls/ContactSelector.qml b/ui/imports/shared/controls/ContactSelector.qml deleted file mode 100644 index 6d3c3653f2..0000000000 --- a/ui/imports/shared/controls/ContactSelector.qml +++ /dev/null @@ -1,202 +0,0 @@ -import QtQuick 2.13 -import QtQuick.Controls 2.13 -import QtQuick.Layouts 1.13 -import QtGraphicalEffects 1.13 - -import StatusQ.Core 0.1 -import StatusQ.Core.Theme 0.1 -import StatusQ.Controls 0.1 -import StatusQ.Components 0.1 - -import utils 1.0 - -import "../views" -import "../panels" -import "./" - -Item { - id: root - property var contactsStore - property var selectedContact - property int dropdownWidth: width - property string validationError: qsTr("Please select a contact") - property bool isValid: false - property alias isPending: ensResolver.isPending - - property bool readOnly: false - property bool isResolvedAddress: false - property string selectAContact: qsTr("Select a contact") - property string noEnsAddressMessage: qsTr("Contact does not have an ENS address. Please send a transaction in chat.") - - function resolveEns() { - if (selectedContact.ensVerified) { - root.isResolvedAddress = false - ensResolver.resolveEns(selectedContact.alias) - } - } - - implicitHeight: comboBox.implicitHeight - - Component.onCompleted: { - if (root.readOnly) { - return - } - root.selectedContact = { alias: selectAContact } - } - - onSelectedContactChanged: validate() - - function validate() { - if (!selectedContact) { - return root.isValid - } - let isValidAddress = Utils.isValidAddress(selectedContact.address) - let isDefaultValue = selectedContact.alias === selectAContact - let isValid = (selectedContact.ensVerified && isValidAddress) || isPending || isValidAddress - comboBox.validationError = "" - if (!isValid && !isDefaultValue && - ( - !selectedContact.ensVerified || - (selectedContact.ensVerified && isResolvedAddress) - ) - ) { - comboBox.validationError = !selectedContact.ensVerified ? noEnsAddressMessage : validationError - } - root.isValid = isValid - return isValid - } - - Input { - id: inpReadOnly - visible: root.readOnly - width: parent.width - text: (root.selectedContact && root.selectedContact.alias) ? root.selectedContact.alias : qsTr("No contact selected") - textField.leftPadding: 14 - textField.topPadding: 18 - textField.bottomPadding: 18 - textField.verticalAlignment: TextField.AlignVCenter - textField.font.pixelSize: 15 - textField.color: Style.current.secondaryText - readOnly: true - validationErrorAlignment: TextEdit.AlignRight - validationErrorTopMargin: 8 - customHeight: 56 - } - - StatusComboBox { - id: comboBox - label: "" - model: root.contactsStore.myContactsModel - width: parent.width - visible: !root.readOnly - - control.popup.width: dropdownWidth - control.padding: 14 - - enabled: control.count > 0 - - contentItem: RowLayout { - spacing: 4 - - StatusSmartIdenticon { - Layout.alignment: Qt.AlignVCenter - asset.width: (!!selectedContact && !!selectedContact.displayIcon) ? 32 : 0 - asset.height: 32 - asset.isImage: true - asset.name: (!!selectedContact && !!selectedContact.displayIcon) ? selectedContact.displayIcon : "" - active: !!selectedContact && !!selectedContact.thumbnailImage - } - StatusBaseText { - id: selectedTextField - Layout.alignment: Qt.AlignVCenter - visible: comboBox.control.count > 0 - text: !!selectedContact ? selectedContact.alias : "" - font.pixelSize: 15 - height: 22 - verticalAlignment: Text.AlignVCenter - color: Theme.palette.directColor1 - } - StatusBaseText { - Layout.alignment: Qt.AlignVCenter - visible: comboBox.control.count == 0 - text: qsTr("You don’t have any contacts yet") - font.pixelSize: 13 - color: Theme.palette.baseColor1 - } - } - - delegate: StatusItemDelegate { - id: itemContainer - - readonly property var currentContact: Utils.getContactDetailsAsJson(pubKey) - - highlighted: index === comboBox.control.highlightedIndex - width: parent.width - - onClicked: { - root.selectedContact = itemContainer.currentContact - } - - contentItem: RowLayout { - spacing: 12 - - StatusSmartIdenticon { - asset.isImage: true - asset.name: currentContact.thumbnailImage - } - ColumnLayout { - Layout.fillWidth: true - - StatusBaseText { - Layout.fillWidth: true - text: currentContact.alias - font.pixelSize: 15 - color: Theme.palette.directColor1 - } - - RowLayout { - Layout.fillWidth: true - - StatusBaseText { - Layout.fillWidth: true - Layout.alignment: Qt.AlignVCenter - text: currentContact.name + " • " - visible: currentContact.ensVerified - color: Theme.palette.baseColor1 - font.pixelSize: 12 - } - StatusBaseText { - Layout.fillWidth: true - Layout.alignment: Qt.AlignVCenter - Layout.maximumWidth: 85 - text: currentContact.publicKey - elide: Text.ElideMiddle - color: Theme.palette.baseColor1 - font.pixelSize: 12 - } - } - } - } - } - - } - - EnsResolver { - id: ensResolver - anchors.top: comboBox.bottom - anchors.right: comboBox.right - anchors.topMargin: Style.current.halfPadding - debounceDelay: 0 - onResolved: { - root.isResolvedAddress = true - var selectedContact = root.selectedContact - selectedContact.address = resolvedAddress - root.selectedContact = selectedContact - } - onIsPendingChanged: { - if (isPending) { - root.selectedContact.address = "" - } - } - } -} diff --git a/ui/imports/shared/controls/ContactsListAndSearch.qml b/ui/imports/shared/controls/ContactsListAndSearch.qml deleted file mode 100644 index 2a41265bcf..0000000000 --- a/ui/imports/shared/controls/ContactsListAndSearch.qml +++ /dev/null @@ -1,247 +0,0 @@ -import QtQuick 2.14 -import QtQuick.Layouts 1.4 -import QtGraphicalEffects 1.14 - -import StatusQ.Controls 0.1 -import StatusQ.Core.Backpressure 0.1 -import StatusQ.Core.Theme 0.1 - -import utils 1.0 -import shared.stores 1.0 - -import "../" -import "../views" -import "../panels" -import "../status" -import "." - -Item { - id: root - - property var rootStore - property var contactsStore - property var community - - property string validationError: "" - property string successMessage: "" - property alias chatKey: chatKey - property alias existingContacts: existingContacts - property alias noContactsRect: noContactsRect - property string pubKey : "" - property int searchResultsWidth : 0 - property alias loading : searchResults.loading - property string ensUsername : "" - property bool showCheckbox: false - property bool showContactList: true - property bool showSearch: true - property var pubKeys: ([]) - property bool hideCommunityMembers: false - property bool addContactEnabled: true - property string wrongInputValidationError: qsTr("Enter a valid chat key or ENS username"); - property string ownAddressError: qsTr("Can't chat with yourself"); - - readonly property var resolveENS: Backpressure.debounce(root, 500, function (ensName) { - noContactsRect.visible = false - searchResults.loading = true - searchResults.showProfileNotFoundMessage = false - mainModule.resolveENS(ensName, "") - }); - - function validate() { - if (!Utils.isChatKey(chatKey.text) && !Utils.isValidETHNamePrefix(chatKey.text)) { - root.validationError = wrongInputValidationError - pubKey = "" - ensUsername = ""; - } else if (RootStore.userProfileInst.pubKey === chatKey.text) { - root.validationError = ownAddressError; - } else { - root.validationError = ""; - } - return root.validationError === ""; - } - - signal userClicked(string pubKey, bool isAddedContact, string name, string address) - - implicitWidth: column.implicitWidth - implicitHeight: column.implicitHeight - - ColumnLayout { - id: column - anchors.fill: parent - spacing: Style.current.smallPadding - - Input { - id: chatKey - - property bool hasValidSearchResult: false - - placeholderText: qsTr("Enter ENS username or chat key") - visible: showSearch - textField.anchors.rightMargin: clearBtn.width + Style.current.padding + 2 - - Layout.fillWidth: true - Layout.preferredHeight: visible ? implicitHeight : 0 - Keys.onReleased: { - successMessage = ""; - searchResults.pubKey = ""; - root.validationError = ""; - searchResults.showProfileNotFoundMessage = false; - if (chatKey.text !== "") { - if (!validate()) { - noContactsRect.visible = false; - return; - } - - chatKey.text = chatKey.text.trim(); - - if (Utils.isChatKey(chatKey.text)) { - pubKey = chatKey.text; - let contactDetails = Utils.getContactDetailsAsJson(pubKey); - if (!contactDetails.isContact) { - searchResults.username = contactDetails.alias; - searchResults.userAlias = Utils.compactAddress(pubKey, 4); - searchResults.pubKey = pubKey; - } - noContactsRect.visible = false; - return; - } - - chatKey.hasValidSearchResult = false - Qt.callLater(resolveENS, chatKey.text); - } else { - root.validationError = ""; - } - } - - Connections { - target: mainModule - function onResolvedENS(resolvedPubKey: string, resolvedAddress: string, uuid: string) { - chatKey.hasValidSearchResult = false - if (chatKey.text == "") { - ensUsername.text = ""; - pubKey = ""; - } else if(resolvedPubKey == ""){ - ensUsername.text = ""; - searchResults.pubKey = pubKey = ""; - searchResults.address = ""; - searchResults.showProfileNotFoundMessage = root.showContactList - } else { - if (userProfile.pubKey === resolvedPubKey) { - root.validationError = ownAddressError; - } else { - chatKey.hasValidSearchResult = true - searchResults.username = chatKey.text.trim() - let userAlias = globalUtils.generateAlias(resolvedPubKey) - userAlias = userAlias.length > 20 ? userAlias.substring(0, 19) + "..." : userAlias - searchResults.userAlias = userAlias + " • " + Utils.compactAddress(resolvedPubKey, 4) - searchResults.pubKey = pubKey = resolvedPubKey; - searchResults.address = resolvedAddress; - } - searchResults.showProfileNotFoundMessage = false - } - searchResults.loading = false; - noContactsRect.visible = pubKey === "" && - ensUsername.text === "" && - root.contactsStore.myContactsModel.count === 0 && - !profileNotFoundMessage.visible - } - } - - StatusFlatRoundButton { - id: clearBtn - width: 20 - height: 20 - anchors.right: parent.right - anchors.rightMargin: Style.current.padding - anchors.verticalCenter: parent.verticalCenter - icon.name: "clear" - visible: chatKey.text !== "" && !chatKey.readOnly - icon.width: 20 - icon.height: 20 - type: StatusFlatRoundButton.Type.Tertiary - color: "transparent" - onClicked: { - chatKey.text = ""; - chatKey.forceActiveFocus(Qt.MouseFocusReason); - searchResults.showProfileNotFoundMessage = false; - searchResults.pubKey = pubKey = ""; - noContactsRect.visible = false; - searchResults.loading = false; - root.validationError = ""; - chatKey.hasValidSearchResult = false - } - } - } - - StyledText { - id: message - text: root.validationError || successMessage - visible: root.validationError !== "" || successMessage !== "" - font.pixelSize: 13 - color: !!root.validationError ? Style.current.danger : Style.current.success - Layout.alignment: Qt.AlignHCenter - Layout.preferredHeight: visible ? contentHeight : 0 - } - - ExistingContacts { - id: existingContacts - - rootStore: root.rootStore - contactsStore: root.contactsStore - communityId: root.community.id - - visible: showContactList - hideCommunityMembers: root.hideCommunityMembers - showCheckbox: root.showCheckbox - filterText: chatKey.text - pubKeys: root.pubKeys - onContactClicked: function (contact) { - if (!contact || typeof contact === "string") { - return - } - const index = root.pubKeys.indexOf(contact.pubKey) - const pubKeysCopy = Object.assign([], root.pubKeys) - if (index === -1) { - pubKeysCopy.push(contact.pubKey) - } else { - pubKeysCopy.splice(index, 1) - } - root.pubKeys = pubKeysCopy - - chatKey.hasValidSearchResult = false - userClicked(contact.pubKey, contact.isContact, contact.alias, contact.address) - } - expanded: !searchResults.loading && pubKey === "" && !searchResults.showProfileNotFoundMessage - Layout.fillWidth: true - } - - SearchResults { - id: searchResults - hasExistingContacts: existingContacts.visible - loading: false - addContactEnabled: root.addContactEnabled - onResultClicked: { - chatKey.hasValidSearchResult = false - userClicked(pubKey, isAddedContact, username, searchResults.address) - if (!validate()) { - return - } - } - onAddToContactsButtonClicked: { - root.contactsStore.addContact(pubKey) - } - Layout.fillWidth: true - Layout.rightMargin: Style.current.padding - } - - Item { - Layout.fillHeight: true - } - } - - NoFriendsRectangle { - id: noContactsRect - visible: showContactList && existingContacts.count === 0 - anchors.centerIn: parent - } -} diff --git a/ui/imports/shared/controls/RecipientSelector.qml b/ui/imports/shared/controls/RecipientSelector.qml deleted file mode 100644 index 7b5b23cf13..0000000000 --- a/ui/imports/shared/controls/RecipientSelector.qml +++ /dev/null @@ -1,262 +0,0 @@ -import QtQuick 2.13 -import QtQuick.Controls 2.13 -import QtQuick.Layouts 1.13 -import QtGraphicalEffects 1.13 - -import StatusQ.Controls 0.1 - -import utils 1.0 - -import "." -import "../panels" - -Item { - id: root - - property var contactsStore - - property var accounts - property int inputWidth: 272 - property int sourceSelectWidth: 150 - property alias label: txtLabel.text - property alias labelFont: txtLabel.font - property alias input: inpAddress.input - // If supplied, additional info will be displayed top-right in danger colour (red) - property alias additionalInfo: txtAddlInfo.text - property var selectedRecipient - property bool readOnly: false - readonly property string addressValidationError: qsTr("Invalid ethereum address") - property alias wrongInputValidationError: inpAddress.wrongInputValidationError - property alias ownAddressError: inpAddress.ownAddressError - property bool isValid: false - property bool isSelectorVisible: true - property bool addContactEnabled: true - property bool isPending: { - switch (selAddressSource.currentValue) { - case RecipientSelector.Type.Address: - return inpAddress.isPending - case RecipientSelector.Type.Contact: - return selContact.isPending - case RecipientSelector.Type.Account: - return false // AccountSelector is never pending - } - return false; - } - - readonly property var sources: [ - { text: qsTr("Address"), value: RecipientSelector.Type.Address, visible: true }, - { text: qsTr("My account"), value: RecipientSelector.Type.Account, visible: true }, - { text: qsTr("Contact"), value: RecipientSelector.Type.Contact, visible: true } - ] - - property var selectedType: RecipientSelector.Type.Address - - enum Type { - Address, - Contact, - Account - } - - function validate() { - switch (selAddressSource.currentValue) { - case RecipientSelector.Type.Address: - root.isValid = inpAddress.isValid - break - case RecipientSelector.Type.Contact: - root.isValid = selContact.isValid - break - case RecipientSelector.Type.Account: - root.isValid = selAccount.isValid - break - } - return root.isValid - } - - function updateAddressComboBox() { - if (selectedType !== undefined) { - selAddressSource.control.currentIndex = selAddressSource.control.indexOfValue(selectedType) - } - if (!selectedRecipient) { - return - } - switch (root.selectedType) { - case RecipientSelector.Type.Address: - inpAddress.input.text = selectedRecipient.name || "" - inpAddress.visible = true - selContact.visible = selAccount.visible = false - if(!!selectedRecipient.address){ - inpAddress.selectedAddress = selectedRecipient.address - } - break - case RecipientSelector.Type.Contact: - selContact.selectedContact = selectedRecipient - // TODO: we shouldn't have to call resolveEns from the outside. - // It should be handled automatically when selectedContact is - // updated, however, handling it on property change causes an - // infinite loop - selContact.resolveEns() - selContact.visible = true - inpAddress.visible = selAccount.visible = false - break - case RecipientSelector.Type.Account: - selAccount.selectedAccount = selectedRecipient - selAccount.visible = true - inpAddress.visible = selContact.visible = false - break - } - } - - onSelectedTypeChanged: { - updateAddressComboBox(); - } - - Component.onCompleted: { - updateAddressComboBox(); - } - - implicitHeight: inpAddress.height + txtLabel.height - - Text { - id: txtLabel - visible: label !== "" - text: qsTr("Recipient") - font.pixelSize: 13 - font.family: Style.current.baseFont.name - font.weight: Font.Medium - color: Style.current.textColor - height: 18 - } - - Text { - id: txtAddlInfo - visible: text !== "" - text: "" - font.pixelSize: 13 - font.family: Style.current.baseFont.name - font.weight: Font.Medium - color: Style.current.danger - height: 18 - anchors.right: parent.right - } - - RowLayout { - anchors.top: txtLabel.bottom - anchors.topMargin: 7 - anchors.left: parent.left - anchors.right: parent.right - spacing: 8 - - AddressInput { - id: inpAddress - - contactsStore: root.contactsStore - - width: root.inputWidth - input.label: "" - input.readOnly: root.readOnly - visible: true - Layout.preferredWidth: selAddressSource.visible ? root.inputWidth : parent.width - Layout.alignment: Qt.AlignTop - Layout.fillWidth: true - validationError: root.addressValidationError - parentWidth: parent.width - addContactEnabled: root.addContactEnabled - onSelectedAddressChanged: { - if (selAddressSource.currentValue !== RecipientSelector.Type.Address) - return - root.selectedRecipient = { address: selectedAddress, type: RecipientSelector.Type.Address } - } - onIsValidChanged: root.validate() - } - - ContactSelector { - id: selContact - contactsStore: root.contactsStore - visible: false - width: root.inputWidth - dropdownWidth: parent.width - readOnly: root.readOnly - Layout.preferredWidth: selAddressSource.visible ? root.inputWidth : parent.width - Layout.alignment: Qt.AlignTop - Layout.fillWidth: true - onSelectedContactChanged: { - if (!selectedContact || !selectedContact.address || selAddressSource.currentValue !== RecipientSelector.Type.Contact) - return; - const { address, name, alias, pubKey, icon, isContact, ensVerified } = selectedContact - root.selectedRecipient = { address, name, alias, pubKey, icon, isContact, ensVerified, type: RecipientSelector.Type.Contact } - } - onIsValidChanged: root.validate() - } - - StatusAccountSelector { - id: selAccount - accounts: root.accounts - visible: false - width: root.inputWidth - dropdownWidth: parent.width - label: "" - Layout.preferredWidth: selAddressSource.visible ? root.inputWidth : parent.width - Layout.alignment: Qt.AlignTop - Layout.fillWidth: true - onSelectedAccountChanged: { - if (!selectedAccount || selAddressSource.currentValue !== RecipientSelector.Type.Account) - return; - const { address, name, color, assets, fiatBalance } = selectedAccount - root.selectedRecipient = { address, name, color, assets, fiatBalance, type: RecipientSelector.Type.Account } - } - onIsValidChanged: root.validate() - } - - StatusComboBox { - id: selAddressSource - visible: isSelectorVisible && !root.readOnly - model: root.sources.filter(source => source.visible) - width: sourceSelectWidth - Layout.preferredWidth: root.sourceSelectWidth - Layout.alignment: Qt.AlignTop - - control.textRole: "text" - control.valueRole: "value" - - onCurrentValueChanged: { - if (root.readOnly) { - return - } - let address, name - switch (currentValue) { - case RecipientSelector.Type.Address: - inpAddress.visible = true - selContact.visible = selAccount.visible = false - root.height = Qt.binding(function() { return inpAddress.height + txtLabel.height }) - root.selectedRecipient = { address: inpAddress.selectedAddress, type: RecipientSelector.Type.Address } - if (root.selectedType !== RecipientSelector.Type.Address) root.selectedType = RecipientSelector.Type.Address - root.isValid = inpAddress.isValid - break; - case RecipientSelector.Type.Contact: - selContact.visible = true - inpAddress.visible = selAccount.visible = false - root.height = Qt.binding(function() { return selContact.height + txtLabel.height }) - let { alias, isContact, ensVerified } = selContact.selectedContact - address = selContact.selectedContact.address - name = selContact.selectedContact.name - root.selectedRecipient = { address, name, alias, isContact, ensVerified, type: RecipientSelector.Type.Contact } - if (root.selectedType !== RecipientSelector.Type.Contact) root.selectedType = RecipientSelector.Type.Contact - root.isValid = selContact.isValid - break; - case RecipientSelector.Type.Account: - selAccount.visible = true - inpAddress.visible = selContact.visible = false - root.height = Qt.binding(function() { return selAccount.height + txtLabel.height }) - const { color, assets, fiatBalance } = selAccount.selectedAccount - address = selAccount.selectedAccount.address - name = selAccount.selectedAccount.name - root.selectedRecipient = { address, name, color, assets, fiatBalance, type: RecipientSelector.Type.Account } - if (root.selectedType !== RecipientSelector.Type.Account) root.selectedType = RecipientSelector.Type.Account - root.isValid = selAccount.isValid - break; - } - } - } - } - -} diff --git a/ui/imports/shared/controls/chat/SendTransactionButton.qml b/ui/imports/shared/controls/chat/SendTransactionButton.qml index 971634332f..01247b33e3 100644 --- a/ui/imports/shared/controls/chat/SendTransactionButton.qml +++ b/ui/imports/shared/controls/chat/SendTransactionButton.qml @@ -11,7 +11,6 @@ Item { property var acc property string fromAddress - property var selectedRecipient property var selectedAsset property string selectedAmount property string selectedFiatAmount diff --git a/ui/imports/shared/controls/qmldir b/ui/imports/shared/controls/qmldir index 76148b3a61..487e424e37 100644 --- a/ui/imports/shared/controls/qmldir +++ b/ui/imports/shared/controls/qmldir @@ -1,20 +1,21 @@ AccountSelector 1.0 AccountSelector.qml AccountSelectorHeader 1.0 AccountSelectorHeader.qml -AddressInput 1.0 AddressInput.qml AmountInput 1.0 AmountInput.qml AssetAndAmountInput 1.0 AssetAndAmountInput.qml AssetDelegate 1.0 AssetDelegate.qml AssetsDetailsHeader 1.0 AssetsDetailsHeader.qml -ContactSelector 1.0 ContactSelector.qml -ContactsListAndSearch 1.0 ContactsListAndSearch.qml +AssetsSectionDelegate 1.0 AssetsSectionDelegate.qml CopyButton 1.0 CopyButton.qml CopyButtonWithCircle 1.0 CopyButtonWithCircle.qml CopyToClipBoardButton 1.0 CopyToClipBoardButton.qml +CountdownPill 1.0 CountdownPill.qml CurrencyAmountInput 1.0 CurrencyAmountInput.qml +DecoratedListItem 1.0 DecoratedListItem.qml EmojiHash 1.0 EmojiHash.qml EmptyShapeRectangleFooterListView 1.0 EmptyShapeRectangleFooterListView.qml ErrorDetails 1.0 ErrorDetails.qml ErrorTag 1.0 ErrorTag.qml +ExpandableTag 1.0 ExpandableTag.qml FoldableHeader 1.0 FoldableHeader.qml FormGroup 1.0 FormGroup.qml GetSyncCodeDesktopInstructions 1.0 GetSyncCodeDesktopInstructions.qml @@ -23,11 +24,13 @@ ImportKeypairInfo 1.0 ImportKeypairInfo.qml InformationTag 1.0 InformationTag.qml InformationTile 1.0 InformationTile.qml Input 1.0 Input.qml -LoadingTokenDelegate 1.0 LoadingTokenDelegate.qml LinkPreviewDebugView 1.0 LinkPreviewDebugView.qml +LoadingTokenDelegate 1.0 LoadingTokenDelegate.qml +MockedKeycardReaderStateSelector 1.0 MockedKeycardReaderStateSelector.qml +MockedKeycardStateSelector 1.0 MockedKeycardStateSelector.qml +Padding 1.0 Padding.qml ProfilePerspectiveSelector 1.0 ProfilePerspectiveSelector.qml RadioButtonSelector 1.0 RadioButtonSelector.qml -RecipientSelector 1.0 RecipientSelector.qml SearchBox 1.0 SearchBox.qml SeedPhraseTextArea 1.0 SeedPhraseTextArea.qml SendToContractWarning 1.0 SendToContractWarning.qml @@ -48,10 +51,3 @@ TransactionDataTile 1.0 TransactionDataTile.qml TransactionDelegate 1.0 TransactionDelegate.qml TransactionDetailsHeader.qml 1.0 TransactionDetailsHeader.qml WalletAccountListItem 1.0 WalletAccountListItem.qml -MockedKeycardReaderStateSelector 1.0 MockedKeycardReaderStateSelector.qml -MockedKeycardStateSelector 1.0 MockedKeycardStateSelector.qml -AssetsSectionDelegate 1.0 AssetsSectionDelegate.qml -ExpandableTag 1.0 ExpandableTag.qml -Padding 1.0 Padding.qml -DecoratedListItem 1.0 DecoratedListItem.qml -CountdownPill 1.0 CountdownPill.qml diff --git a/ui/imports/shared/views/EnsResolver.qml b/ui/imports/shared/views/EnsResolver.qml deleted file mode 100644 index e1809c261c..0000000000 --- a/ui/imports/shared/views/EnsResolver.qml +++ /dev/null @@ -1,57 +0,0 @@ -import QtQuick 2.13 -import QtQuick.Controls 2.13 -import QtQuick.Layouts 1.13 -import QtGraphicalEffects 1.13 - -import StatusQ.Components 0.1 -import StatusQ.Core.Backpressure 0.1 - -import utils 1.0 -import shared.stores 1.0 - -Item { - id: root - property bool isPending: false - readonly property string uuid: Utils.uuid() - property int debounceDelay: 600 - - readonly property var validateAsync: Backpressure.debounce(inpAddress, debounceDelay, function (inputValue) { - root.isPending = true - var name = inputValue.startsWith("@") ? inputValue.substring(1) : inputValue - mainModule.resolveENS(name, uuid) - }); - signal resolved(string resolvedAddress) - - function resolveEns(name) { - if (Utils.isValidEns(name)) { - root.validateAsync(name) - } - } - width: 12 - height: 12 - - Loader { - anchors.fill: parent - sourceComponent: loadingIndicator - active: root.isPending - } - - Component { - id: loadingIndicator - StatusLoadingIndicator { - width: root.width - height: root.height - } - } - - Connections { - target: mainModule - function onResolvedENS(resolvedPubKey: string, resolvedAddress: string, uuid: string) { - if (uuid !== root.uuid) { - return - } - root.isPending = false - root.resolved(resolvedAddress) - } - } -} diff --git a/ui/imports/shared/views/SearchResults.qml b/ui/imports/shared/views/SearchResults.qml deleted file mode 100644 index 0da08110f2..0000000000 --- a/ui/imports/shared/views/SearchResults.qml +++ /dev/null @@ -1,166 +0,0 @@ -import QtQuick 2.13 -import QtQuick.Controls 2.13 -import QtQuick.Layouts 1.13 - -import utils 1.0 -import shared.stores 1.0 - -import StatusQ.Controls 0.1 - -import "../" -import "../status" -import "../panels" -import "./" - -import StatusQ.Components 0.1 - -Item { - id: root - width: parent.width - height: hasExistingContacts ? 64 : 0 - - property bool hasExistingContacts: false - property bool showProfileNotFoundMessage: false - property bool loading: false - property string username: "" - property string userAlias: "" - property string pubKey: "" - property string address: "" - property bool resultClickable: true - property bool addContactEnabled: true - property bool isAddedContact: false - - signal resultClicked(string pubKey, bool isAddedContact, string username) - signal addToContactsButtonClicked(string pubKey) - - function reset() { - hasExistingContacts = false - showProfileNotFoundMessage = false - username = "" - userAlias = "" - pubKey = "" - isAddedContact = false - } - - function isUserAdded() { - return root.pubKey != "" ? Utils.getContactDetailsAsJson(root.pubKey).isContactRequestSent : false - } - - onPubKeyChanged: { - root.isAddedContact = root.isUserAdded() - } - - StyledText { - id: nonContactsLabel - text: qsTr("Non contacts") - anchors.top: parent.top - color: Style.current.secondaryText - font.pixelSize: 15 - visible: root.hasExistingContacts && (root.loading || root.pubKey !== "" || root.showProfileNotFoundMessage) - } - - Loader { - active: root.loading - anchors.horizontalCenter: parent.horizontalCenter - anchors.verticalCenter: parent.verticalCenter - sourceComponent: Component { - LoadingAnimation { - width: 18 - height: 18 - } - } - } - - Rectangle { - id: foundContact - property bool hovered: false - anchors.top: nonContactsLabel.visible ? nonContactsLabel.bottom : parent.top - color: hovered ? Style.current.backgroundHover : Style.current.background - radius: Style.current.radius - width: parent.width - height: 64 - visible: root.pubKey !== "" && !root.loading - - StatusSmartIdenticon { - id: contactIdenticon - anchors.verticalCenter: parent.verticalCenter - anchors.left: parent.left - anchors.leftMargin: Style.current.padding - name: root.username - } - - StyledText { - id: ensUsername - font.pixelSize: 17 - color: Style.current.textColor - anchors.top: contactIdenticon.top - anchors.left: contactIdenticon.right - anchors.leftMargin: Style.current.padding - text: root.username - } - - StyledText { - id: contactAlias - font.pixelSize: 15 - color: Style.current.secondaryText - anchors.top: ensUsername.bottom - anchors.topMargin: 2 - anchors.left: ensUsername.left - text: root.userAlias - } - - MouseArea { - cursorShape: root.resultClickable ? Qt.PointingHandCursor : Qt.ArrowCursor - anchors.fill: parent - hoverEnabled: true - onEntered: foundContact.hovered = true - onExited: foundContact.hovered = false - onClicked: { - if (root.resultClickable) { - root.resultClicked(root.pubKey, root.isAddedContact, root.username) - } - } - } - - StatusFlatRoundButton { - id: addContactBtn - width: 32 - height: 32 - anchors.right: parent.right - anchors.rightMargin: Style.current.padding - anchors.verticalCenter: parent.verticalCenter - icon.width: 24 - icon.height: 24 - icon.name: "add-contact" - backgroundHoverColor: Utils.setColorAlpha(Style.current.buttonHoveredBackgroundColor, 0.2) - visible: addContactEnabled && !isAddedContact && !checkIcon.visible - onClicked: { - root.addToContactsButtonClicked(root.pubKey) - mouse.accepted = false - } - onHoveredChanged: foundContact.hovered = addContactBtn.hovered - } - - SVGImage { - id: checkIcon - source: Style.svg("check-2") - width: 19 - height: 19 - anchors.right: parent.right - anchors.rightMargin: Style.current.smallPadding * 2 - anchors.verticalCenter: parent.verticalCenter - visible: foundContact.hovered && isAddedContact - } - } - - StyledText { - id: profileNotFoundMessage - color: Style.current.secondaryText - visible: root.showProfileNotFoundMessage - font.pixelSize: 15 - anchors.horizontalCenter: parent.horizontalCenter - anchors.verticalCenter: parent.verticalCenter - text: qsTr("No profile found") - } - -} diff --git a/ui/imports/shared/views/chat/AcceptTransactionView.qml b/ui/imports/shared/views/chat/AcceptTransactionView.qml index 69e550dbf6..dc4720ddec 100644 --- a/ui/imports/shared/views/chat/AcceptTransactionView.qml +++ b/ui/imports/shared/views/chat/AcceptTransactionView.qml @@ -22,7 +22,6 @@ Item { property var token property string tokenAmount property string fiatValue - property var selectedRecipient property int state: Constants.addressRequested Separator { diff --git a/ui/imports/shared/views/chat/TransactionBubbleView.qml b/ui/imports/shared/views/chat/TransactionBubbleView.qml index f67863e8ce..688a5502f7 100644 --- a/ui/imports/shared/views/chat/TransactionBubbleView.qml +++ b/ui/imports/shared/views/chat/TransactionBubbleView.qml @@ -55,15 +55,6 @@ Item { } } - property var selectedRecipient: { - return { - address: transactionParamsObject.address, - name: senderDisplayName, - type: RecipientSelector.Type.Contact, - alias: senderDisplayName - } - } - property string tokenAmount: transactionParamsObject.value property string tokenSymbol: token.symbol || "" property string fiatValue: { @@ -211,7 +202,6 @@ Item { token: root.token fiatValue: root.fiatValue tokenAmount: root.tokenAmount - selectedRecipient: root.selectedRecipient } } @@ -223,7 +213,6 @@ Item { selectedAmount: tokenAmount selectedFiatAmount: fiatValue fromAddress: transactionParamsObject.fromAddress - selectedRecipient: root.selectedRecipient onSendTransaction: { // TODO: https://github.com/status-im/status-desktop/issues/6778 console.log("not implemented") diff --git a/ui/imports/shared/views/qmldir b/ui/imports/shared/views/qmldir index e18edc0151..946fa7d575 100644 --- a/ui/imports/shared/views/qmldir +++ b/ui/imports/shared/views/qmldir @@ -3,7 +3,6 @@ AssetsView 1.0 AssetsView.qml AssetsViewAdaptor 1.0 AssetsViewAdaptor.qml ConfirmHideAssetPopup 1.0 ConfirmHideAssetPopup.qml ConfirmHideCommunityAssetsPopup 1.0 ConfirmHideCommunityAssetsPopup.qml -EnsResolver 1.0 EnsResolver.qml ExistingContacts 1.0 ExistingContacts.qml HistoryView 1.0 HistoryView.qml NoFriendsRectangle 1.0 NoFriendsRectangle.qml @@ -11,7 +10,6 @@ PasswordConfirmationView 1.0 PasswordConfirmationView.qml PasswordView 1.0 PasswordView.qml PickedContacts 1.0 PickedContacts.qml ProfileDialogView 1.0 ProfileDialogView.qml -SearchResults 1.0 SearchResults.qml SyncingCodeInstructions 1.0 SyncingCodeInstructions.qml SyncingDeviceView 1.0 SyncingDeviceView.qml SyncingDisplayCode 1.0 SyncingDisplayCode.qml