mirror of
https://github.com/status-im/status-desktop.git
synced 2025-02-22 03:28:52 +00:00
Fixing: https://github.com/status-im/status-desktop/issues/9763 Changes: 1. Use int to pass around the supply amount from one component to another 2. Transform the supply amount to localised string when it is displayed to the user.
268 lines
8.2 KiB
QML
268 lines
8.2 KiB
QML
import QtQuick 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.Components 0.1
|
||
|
||
import utils 1.0
|
||
import shared.panels 1.0
|
||
|
||
import AppLayouts.Chat.panels.communities 1.0
|
||
|
||
StatusScrollView {
|
||
id: root
|
||
|
||
property int viewWidth: 560 // by design
|
||
property bool preview: false
|
||
property var holdersModel
|
||
|
||
// Collectible object properties:
|
||
property alias artworkSource: image.source
|
||
property alias symbol: symbolBox.value
|
||
property alias description: descriptionItem.text
|
||
property alias chainName: chainText.text
|
||
property string name
|
||
property int supplyAmount
|
||
property bool infiniteSupply
|
||
property bool transferable
|
||
property bool selfDestruct
|
||
property int chainId
|
||
property string chainIcon
|
||
property int deployState
|
||
property alias accountName: accountBox.value
|
||
|
||
signal mintCollectible(url artworkSource,
|
||
string name,
|
||
string symbol,
|
||
string description,
|
||
int supply,
|
||
bool infiniteSupply,
|
||
bool transferable,
|
||
bool selfDestruct,
|
||
int chainId,
|
||
string accountName)
|
||
|
||
QtObject {
|
||
id: d
|
||
|
||
readonly property int imageSelectorRectSize: 280
|
||
readonly property int iconSize: 20
|
||
}
|
||
|
||
enum DeployState {
|
||
Failed,
|
||
InProgress,
|
||
Deployed
|
||
}
|
||
|
||
contentWidth: mainLayout.width
|
||
contentHeight: mainLayout.height
|
||
padding: 0
|
||
|
||
ColumnLayout {
|
||
id: mainLayout
|
||
|
||
width: root.viewWidth
|
||
spacing: Style.current.padding
|
||
|
||
RowLayout {
|
||
visible: !root.preview && (root.deployState === CommunityCollectibleView.DeployState.InProgress)
|
||
spacing: Style.current.halfPadding
|
||
|
||
StatusDotsLoadingIndicator {}
|
||
|
||
StatusBaseText {
|
||
elide: Text.ElideRight
|
||
font.pixelSize: Theme.primaryTextFontSize
|
||
text: qsTr("Collectible is being minted")
|
||
}
|
||
}
|
||
|
||
Rectangle {
|
||
Layout.preferredHeight: d.imageSelectorRectSize
|
||
Layout.preferredWidth: Layout.preferredHeight
|
||
radius: 8
|
||
color: Theme.palette.baseColor2
|
||
|
||
Image {
|
||
id: image
|
||
|
||
anchors.fill: parent
|
||
fillMode: Image.PreserveAspectFit
|
||
}
|
||
}
|
||
|
||
StatusBaseText {
|
||
id: descriptionItem
|
||
|
||
Layout.fillWidth: true
|
||
wrapMode: TextEdit.WordWrap
|
||
font.pixelSize: Theme.primaryTextFontSize
|
||
lineHeight: 1.2
|
||
}
|
||
|
||
Flow {
|
||
spacing: Style.current.halfPadding
|
||
Layout.fillWidth: true
|
||
|
||
component CustomPreviewBox: Rectangle {
|
||
id: previewBox
|
||
|
||
property string label
|
||
property string value
|
||
property bool leftAlignment: true
|
||
|
||
radius: 8
|
||
border.color: Theme.palette.baseColor2
|
||
color: "transparent"
|
||
implicitWidth: Math.min(boxContent.implicitWidth + Style.current.padding, mainLayout.width)
|
||
implicitHeight: boxContent.implicitHeight + Style.current.padding
|
||
|
||
ColumnLayout {
|
||
id: boxContent
|
||
anchors.centerIn: parent
|
||
spacing: 2
|
||
|
||
StatusBaseText {
|
||
Layout.fillWidth: true
|
||
text: previewBox.label
|
||
elide: Text.ElideRight
|
||
font.pixelSize: 13
|
||
color: Theme.palette.baseColor1
|
||
horizontalAlignment: Text.AlignHCenter
|
||
}
|
||
|
||
StatusBaseText {
|
||
Layout.maximumWidth: mainLayout.width - Style.current.padding
|
||
Layout.alignment: previewBox.leftAlignment ? Qt.AlignLeft : Qt.AlignHCenter
|
||
text: previewBox.value
|
||
elide: Text.ElideRight
|
||
font.pixelSize: Theme.primaryTextFontSize
|
||
color: Theme.palette.directColor1
|
||
horizontalAlignment: previewBox.leftAlignment ? Text.AlignLeft : Text.AlignHCenter
|
||
}
|
||
}
|
||
}
|
||
|
||
CustomPreviewBox {
|
||
label: root.infiniteSupply ? qsTr("Infinite supply") : qsTr("Total")
|
||
value: root.infiniteSupply ? qsTr("Yes") : LocaleUtils.numberToLocaleString(root.supplyAmount)
|
||
leftAlignment: root.infiniteSupply
|
||
}
|
||
|
||
CustomPreviewBox {
|
||
label: qsTr("Transferable")
|
||
value: root.transferable ? qsTr("Yes") : qsTr("No")
|
||
}
|
||
|
||
CustomPreviewBox {
|
||
label: qsTr("Remote self-destruct")
|
||
value: root.selfDestruct ? qsTr("Yes") : qsTr("No")
|
||
}
|
||
|
||
CustomPreviewBox {
|
||
id: symbolBox
|
||
|
||
label: qsTr("Symbol")
|
||
leftAlignment: false
|
||
}
|
||
|
||
CustomPreviewBox {
|
||
id: accountBox
|
||
|
||
label: qsTr("Account")
|
||
leftAlignment: false
|
||
}
|
||
|
||
Rectangle {
|
||
height: symbolBox.height
|
||
width: rowChain.implicitWidth + 2 * Style.current.padding
|
||
border.width: 1
|
||
radius: 8
|
||
border.color: Theme.palette.baseColor2
|
||
color: "transparent"
|
||
|
||
RowLayout {
|
||
id: rowChain
|
||
|
||
anchors.centerIn: parent
|
||
spacing: Style.current.padding
|
||
|
||
SVGImage {
|
||
id: chainIcon
|
||
|
||
Layout.alignment: Qt.AlignVCenter
|
||
height: 24
|
||
width: height
|
||
source: Style.svg(root.chainIcon)
|
||
}
|
||
|
||
StatusBaseText {
|
||
id: chainText
|
||
|
||
Layout.alignment: Qt.AlignVCenter
|
||
font.pixelSize: 13
|
||
font.weight: Font.Medium
|
||
color: Theme.palette.baseColor1
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
RowLayout {
|
||
visible: root.preview
|
||
Layout.fillWidth: true
|
||
|
||
StatusIcon {
|
||
Layout.preferredWidth: d.iconSize
|
||
Layout.preferredHeight: d.iconSize
|
||
Layout.alignment: Qt.AlignTop
|
||
color: Theme.palette.baseColor1
|
||
icon: "info"
|
||
}
|
||
|
||
StatusBaseText {
|
||
Layout.fillWidth: true
|
||
wrapMode: Text.Wrap
|
||
font.pixelSize: Style.current.primaryTextFontSize
|
||
color: Theme.palette.baseColor1
|
||
text: qsTr("Make sure you’re happy with your collectible before minting it as it can’t be edited later")
|
||
}
|
||
}
|
||
|
||
StatusButton {
|
||
visible: root.preview
|
||
Layout.preferredHeight: 44
|
||
Layout.alignment: Qt.AlignHCenter
|
||
Layout.fillWidth: true
|
||
Layout.topMargin: Style.current.halfPadding
|
||
text: qsTr("Mint")
|
||
|
||
onClicked: {
|
||
root.mintCollectible(root.artworkSource,
|
||
root.name,
|
||
root.symbol,
|
||
root.description,
|
||
root.supplyAmount,
|
||
root.infiniteSupply,
|
||
root.transferable,
|
||
root.selfDestruct,
|
||
root.chainId,
|
||
root.accountName)
|
||
}
|
||
}
|
||
|
||
// Disabled until backend is ready (milestone 12)
|
||
TokenHoldersPanel {
|
||
visible: false//!root.preview
|
||
tokenName: root.name
|
||
model: root.holdersModel
|
||
Layout.topMargin: Style.current.padding
|
||
Layout.fillWidth: true
|
||
Layout.fillHeight: true
|
||
}
|
||
}
|
||
}
|