2024-08-27 14:35:52 +00:00
|
|
|
import QtQuick 2.15
|
|
|
|
import QtQuick.Controls 2.15
|
2024-02-19 08:40:16 +00:00
|
|
|
|
2024-08-27 14:35:52 +00:00
|
|
|
import StatusQ 0.1
|
2024-02-19 08:40:16 +00:00
|
|
|
import StatusQ.Core 0.1
|
|
|
|
import StatusQ.Core.Utils 0.1 as StatusQUtils
|
|
|
|
import StatusQ.Core.Theme 0.1
|
|
|
|
import StatusQ.Controls 0.1
|
|
|
|
import StatusQ.Popups 0.1
|
|
|
|
|
|
|
|
import AppLayouts.stores 1.0
|
2024-05-22 08:13:39 +00:00
|
|
|
import AppLayouts.Profile.stores 1.0 as ProfileStores
|
2024-02-19 08:40:16 +00:00
|
|
|
import AppLayouts.Wallet.stores 1.0 as WalletStore
|
|
|
|
|
|
|
|
import utils 1.0
|
|
|
|
import shared.views 1.0
|
2024-11-05 18:51:17 +00:00
|
|
|
import shared.popups.send 1.0
|
2024-05-22 08:13:39 +00:00
|
|
|
import shared.stores 1.0 as SharedStores
|
2024-02-19 08:40:16 +00:00
|
|
|
|
|
|
|
import "../controls"
|
|
|
|
import ".."
|
|
|
|
|
|
|
|
StatusModal {
|
|
|
|
id: root
|
|
|
|
|
2024-05-22 08:13:39 +00:00
|
|
|
property SharedStores.NetworkConnectionStore networkConnectionStore
|
|
|
|
property ProfileStores.ContactsStore contactsStore
|
2024-11-05 18:51:17 +00:00
|
|
|
|
|
|
|
signal sendToAddressRequested(string address)
|
2024-02-19 08:40:16 +00:00
|
|
|
|
|
|
|
closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside
|
|
|
|
hasCloseButton: false
|
|
|
|
|
|
|
|
width: d.popupWidth
|
|
|
|
contentHeight: content.height
|
|
|
|
|
|
|
|
onClosed: {
|
|
|
|
root.close()
|
|
|
|
walletSection.activityController.setFilterToAddresses(JSON.stringify([]))
|
|
|
|
walletSection.activityController.updateFilter()
|
|
|
|
}
|
|
|
|
|
|
|
|
function initWithParams(params = {}) {
|
|
|
|
d.name = params.name?? ""
|
|
|
|
d.address = params.address?? Constants.zeroAddress
|
|
|
|
d.ens = params.ens?? ""
|
|
|
|
d.colorId = params.colorId?? ""
|
|
|
|
|
|
|
|
walletSection.activityController.setFilterToAddresses(JSON.stringify([d.address]))
|
|
|
|
walletSection.activityController.updateFilter()
|
|
|
|
}
|
|
|
|
|
|
|
|
QtObject {
|
|
|
|
id: d
|
|
|
|
|
|
|
|
readonly property int popupWidth: 477
|
|
|
|
readonly property int popupHeight: 672
|
|
|
|
readonly property int contentWidth: d.popupWidth - 2 * d.margin
|
|
|
|
readonly property int margin: 24
|
|
|
|
readonly property int radius: 8
|
|
|
|
|
|
|
|
property string name: ""
|
|
|
|
property string address: Constants.zeroAddress
|
|
|
|
property string ens: ""
|
|
|
|
property string colorId: ""
|
|
|
|
|
|
|
|
readonly property string visibleAddress: !!d.ens? d.ens : d.address
|
|
|
|
|
|
|
|
readonly property int yRange: historyView.firstItemOffset
|
|
|
|
readonly property real extendedViewOpacity: {
|
|
|
|
if (historyView.yPosition <= 0) {
|
|
|
|
return 1
|
|
|
|
}
|
|
|
|
|
|
|
|
let op = 1 - historyView.yPosition / d.yRange
|
|
|
|
if (op > 0) {
|
|
|
|
return op
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
readonly property bool showSplitLine: d.extendedViewOpacity === 0
|
|
|
|
}
|
|
|
|
|
|
|
|
component Spacer: Item {
|
|
|
|
width: 1
|
|
|
|
}
|
|
|
|
|
|
|
|
showFooter: false
|
|
|
|
showHeader: false
|
|
|
|
|
|
|
|
Rectangle {
|
|
|
|
id: content
|
|
|
|
width: d.popupWidth
|
|
|
|
height: d.popupHeight
|
|
|
|
color: Theme.palette.statusModal.backgroundColor
|
|
|
|
radius: d.radius
|
|
|
|
|
|
|
|
Item {
|
|
|
|
id: fixedHeader
|
|
|
|
anchors.top: parent.top
|
|
|
|
anchors.left: parent.left
|
|
|
|
implicitWidth: parent.width
|
|
|
|
implicitHeight: childrenRect.height
|
|
|
|
|
|
|
|
Column {
|
|
|
|
anchors.top: parent.top
|
|
|
|
width: parent.width
|
|
|
|
|
|
|
|
Spacer {
|
|
|
|
height: 24
|
|
|
|
}
|
|
|
|
|
|
|
|
SavedAddressesDelegate {
|
|
|
|
id: savedAddress
|
|
|
|
|
|
|
|
implicitHeight: 72
|
|
|
|
implicitWidth: d.contentWidth
|
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
leftPadding: 0
|
|
|
|
border.color: "transparent"
|
|
|
|
|
|
|
|
usage: SavedAddressesDelegate.Usage.Item
|
|
|
|
showButtons: true
|
|
|
|
statusListItemComponentsSlot.spacing: 4
|
|
|
|
|
|
|
|
statusListItemSubTitle.visible: d.extendedViewOpacity !== 1
|
|
|
|
statusListItemSubTitle.opacity: 1 - d.extendedViewOpacity
|
|
|
|
statusListItemSubTitle.customColor: Theme.palette.directColor1
|
|
|
|
statusListItemSubTitle.text: {
|
|
|
|
if (statusListItemSubTitle.visible) {
|
|
|
|
if (!!d.ens) {
|
|
|
|
return d.ens
|
|
|
|
}
|
|
|
|
else {
|
2024-10-03 20:13:01 +00:00
|
|
|
return Utils.richColorText(StatusQUtils.Utils.elideText(d.address,6,4), Theme.palette.directColor1)
|
2024-02-19 08:40:16 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
|
|
|
|
sendButton.visible: d.extendedViewOpacity !== 1
|
|
|
|
sendButton.opacity: 1 - d.extendedViewOpacity
|
|
|
|
sendButton.type: StatusRoundButton.Type.Primary
|
|
|
|
|
|
|
|
asset.width: 72
|
|
|
|
asset.height: 72
|
|
|
|
asset.letterSize: 32
|
|
|
|
bgColor: Theme.palette.statusListItem.backgroundColor
|
|
|
|
|
|
|
|
networkConnectionStore: root.networkConnectionStore
|
|
|
|
|
|
|
|
name: d.name
|
|
|
|
address: d.address
|
|
|
|
ens: d.ens
|
|
|
|
colorId: d.colorId
|
|
|
|
|
|
|
|
statusListItemTitle.font.pixelSize: 22
|
|
|
|
statusListItemTitle.font.bold: Font.Bold
|
|
|
|
|
|
|
|
areTestNetworksEnabled: WalletStore.RootStore.areTestNetworksEnabled
|
|
|
|
|
|
|
|
onAboutToOpenPopup: {
|
|
|
|
root.close()
|
|
|
|
}
|
|
|
|
onOpenSendModal: {
|
2024-11-05 18:51:17 +00:00
|
|
|
root.sendToAddressRequested(recipient)
|
|
|
|
root.close()
|
2024-02-19 08:40:16 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Spacer {
|
|
|
|
height: 20
|
|
|
|
}
|
|
|
|
|
|
|
|
Rectangle {
|
|
|
|
width: parent.width
|
|
|
|
height: 4
|
|
|
|
opacity: 0.5
|
2024-10-15 19:26:12 +00:00
|
|
|
color: d.showSplitLine? Theme.palette.separator : "transparent"
|
2024-02-19 08:40:16 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Item {
|
|
|
|
id: extendedView
|
|
|
|
anchors.top: fixedHeader.bottom
|
|
|
|
anchors.left: parent.left
|
|
|
|
implicitWidth: parent.width
|
|
|
|
implicitHeight: childrenRect.height
|
|
|
|
z: d.extendedViewOpacity === 1? 1 : 0
|
|
|
|
|
|
|
|
Column {
|
|
|
|
anchors.top: parent.top
|
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
width: d.contentWidth
|
|
|
|
|
|
|
|
Rectangle {
|
|
|
|
opacity: d.extendedViewOpacity
|
|
|
|
width: parent.width
|
|
|
|
height: Math.max(addressText.height, copyButton.height) + 24
|
|
|
|
color: "transparent"
|
|
|
|
radius: d.radius
|
|
|
|
border.color: Theme.palette.baseColor5
|
|
|
|
border.width: 1
|
|
|
|
|
|
|
|
StatusBaseText {
|
|
|
|
id: addressText
|
|
|
|
anchors.left: parent.left
|
|
|
|
anchors.right: copyButton.left
|
2024-10-15 19:26:12 +00:00
|
|
|
anchors.rightMargin: Theme.padding
|
|
|
|
anchors.leftMargin: Theme.padding
|
2024-02-19 08:40:16 +00:00
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
2024-10-03 20:13:01 +00:00
|
|
|
text: !!d.ens ? d.ens : d.address
|
2024-02-19 08:40:16 +00:00
|
|
|
wrapMode: Text.WrapAnywhere
|
|
|
|
font.pixelSize: 15
|
|
|
|
color: Theme.palette.directColor1
|
|
|
|
}
|
|
|
|
|
|
|
|
StatusRoundButton {
|
|
|
|
id: copyButton
|
|
|
|
width: 24
|
|
|
|
height: 24
|
|
|
|
anchors.right: parent.right
|
2024-10-15 19:26:12 +00:00
|
|
|
anchors.rightMargin: Theme.padding
|
2024-02-19 08:40:16 +00:00
|
|
|
anchors.top: addressText.top
|
|
|
|
icon.name: "copy"
|
|
|
|
type: StatusRoundButton.Type.Tertiary
|
2024-08-27 14:35:52 +00:00
|
|
|
onClicked: ClipboardUtils.setText(d.visibleAddress)
|
2024-02-19 08:40:16 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Spacer {
|
|
|
|
height: 16
|
|
|
|
}
|
|
|
|
|
|
|
|
StatusButton {
|
|
|
|
opacity: d.extendedViewOpacity
|
|
|
|
width: parent.width
|
|
|
|
radius: d.radius
|
|
|
|
text: qsTr("Send")
|
|
|
|
icon.name: "send"
|
|
|
|
enabled: root.networkConnectionStore.sendBuyBridgeEnabled
|
|
|
|
onClicked: {
|
2024-11-05 18:51:17 +00:00
|
|
|
root.sendToAddressRequested(d.visibleAddress)
|
2024-02-19 08:40:16 +00:00
|
|
|
root.close()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Spacer {
|
|
|
|
height: 32
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
HistoryView {
|
|
|
|
id: historyView
|
|
|
|
anchors.top: fixedHeader.bottom
|
|
|
|
anchors.left: parent.left
|
|
|
|
anchors.bottom: parent.bottom
|
|
|
|
anchors.leftMargin: d.margin
|
|
|
|
width: parent.width - 2 * d.margin
|
|
|
|
|
|
|
|
disableShadowOnScroll: true
|
|
|
|
hideVerticalScrollbar: true
|
|
|
|
displayValues: false
|
|
|
|
firstItemOffset: extendedView.height
|
|
|
|
overview: ({
|
|
|
|
isWatchOnlyAccount: false,
|
|
|
|
mixedcaseAddress: d.address
|
|
|
|
})
|
2024-10-01 15:37:05 +00:00
|
|
|
walletRootStore: WalletStore.RootStore
|
2024-02-19 08:40:16 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|