status-desktop/storybook/pages/CommunityPermissionsSetting...

205 lines
6.8 KiB
QML

import QtQuick 2.14
import QtQuick.Controls 2.14
import QtQuick.Layouts 1.14
import StatusQ.Core.Utils 0.1
import AppLayouts.Communities.controls 1.0
import Models 1.0
import utils 1.0
Flickable {
id: root
property var model
property var assetKeys: []
property var collectibleKeys: []
property var channelKeys: []
QtObject {
id: d
property int newType
property string newKey
property string newName
property double newAmount
property string newImageSource
property string newChannelName
property string newChannelIconSource
}
contentWidth: root.width
contentHeight: globalContent.implicitHeight
ColumnLayout {
id: globalContent
spacing: 20
anchors.fill: parent
Repeater {
model: root.model
GroupBox {
title: `Permission ${model.index}`
Layout.preferredHeight: content.implicitHeight + 50
Layout.fillWidth: true
ColumnLayout {
id: content
spacing: 20
anchors.fill: parent
Label {
Layout.leftMargin: 5
text: "Permission State:"
}
ColumnLayout {
Layout.leftMargin: 5
RadioButton {
text: "Active state"
checked: true
onCheckedChanged: if(checked) PermissionsModel.changePermissionState(root.model, model.index, PermissionTypes.State.Approved)
}
RadioButton {
text: "Creating state"
onCheckedChanged: if(checked) PermissionsModel.changePermissionState(root.model, model.index, PermissionTypes.State.AdditionPending)
}
RadioButton {
text: "Editing state"
onCheckedChanged: if(checked) PermissionsModel.changePermissionState(root.model, model.index, PermissionTypes.State.UpdatePending)
}
RadioButton {
text: "Deleting state"
onCheckedChanged: if(checked) PermissionsModel.changePermissionState(root.model, model.index, PermissionTypes.State.RemovalPending)
}
}
Repeater {
model: holdingsListModel
GroupBox {
Layout.fillWidth: true
title: `Who holds [item ${model.index}]`
CommunityPermissionsHoldingItemEditor {
anchors.fill: parent
type: model.type
key: model.key
amountText: model.amount
assetKeys: root.assetKeys
collectibleKeys: root.collectibleKeys
onTypeChanged: model.type = type
onKeyChanged: model.key = key
onAmountTextChanged: model.amount = parseFloat(amountText)
}
}
}
GroupBox {
Layout.fillWidth: true
title: "New holding item"
ColumnLayout {
anchors.fill: parent
CommunityPermissionsHoldingItemEditor {
Layout.fillWidth: true
type: d.newType
key: d.newKey
amountText: d.newAmount
assetKeys: root.assetKeys
collectibleKeys: root.collectibleKeys
onTypeChanged: d.newType = type
onKeyChanged: d.newKey = key
onAmountTextChanged: d.newAmount = parseFloat(amountText)
}
MenuSeparator {
Layout.fillWidth: true
}
Button {
enabled: d.newKey && (d.newAmount || d.newType === Constants.TokenType.ENS)
Layout.fillWidth: true
text: "Add new holding"
onClicked: {
model.holdingsListModel.append({
type: d.newType,
key: d.newKey,
amount: d.newAmount
})
}
}
}
}
MenuSeparator {
Layout.fillWidth: true
}
Label {
text: "Channels"
}
Flow {
Layout.fillWidth: true
Repeater {
id: channelsRepeater
model: root.channelKeys
CheckBox {
text: modelData
checked: ModelUtils.contains(
channelsListModel, "key", modelData)
onToggled: {
const channels = []
const count = channelsRepeater.count
for (let i = 0; i < count; i++) {
const checked = channelsRepeater.itemAt(i).checked
if (checked) {
const key = root.channelKeys[i]
channels.push({ key })
}
}
channelsListModel.clear()
channelsListModel.append(channels)
}
}
}
}
CheckBox {
text: "Permission is private"
checked: model.isPrivate
onToggled: model.isPrivate = checked
}
}
}
}
}
}