chore(MembersDropdown): Search behavior adjusted
This commit is contained in:
parent
c290562ce1
commit
6fcb533b68
|
@ -152,12 +152,8 @@ SplitView {
|
||||||
}
|
}
|
||||||
|
|
||||||
expression: {
|
expression: {
|
||||||
membersDropdown.selectedKeys
|
|
||||||
membersDropdown.searchText
|
membersDropdown.searchText
|
||||||
|
|
||||||
if (membersDropdown.selectedKeys.indexOf(model.pubKey) > -1)
|
|
||||||
return true
|
|
||||||
|
|
||||||
const filter = membersDropdown.searchText.toLowerCase()
|
const filter = membersDropdown.searchText.toLowerCase()
|
||||||
return matchesAlias(model.alias.toLowerCase(), filter)
|
return matchesAlias(model.alias.toLowerCase(), filter)
|
||||||
|| model.displayName.toLowerCase().includes(filter)
|
|| model.displayName.toLowerCase().includes(filter)
|
||||||
|
@ -175,7 +171,7 @@ SplitView {
|
||||||
|
|
||||||
onAddButtonClicked: {
|
onAddButtonClicked: {
|
||||||
logs.logEvent("MembersDropdown::addButtonClicked, keys: "
|
logs.logEvent("MembersDropdown::addButtonClicked, keys: "
|
||||||
+ membersDropdown.selectedKeys)
|
+ [...membersDropdown.selectedKeys])
|
||||||
}
|
}
|
||||||
|
|
||||||
Component.onCompleted: open()
|
Component.onCompleted: open()
|
||||||
|
@ -185,7 +181,7 @@ SplitView {
|
||||||
|
|
||||||
LogsAndControlsPanel {
|
LogsAndControlsPanel {
|
||||||
SplitView.minimumHeight: 100
|
SplitView.minimumHeight: 100
|
||||||
SplitView.preferredHeight: 250
|
SplitView.preferredHeight: 320
|
||||||
|
|
||||||
logsView.logText: logs.logText
|
logsView.logText: logs.logText
|
||||||
|
|
||||||
|
@ -343,7 +339,7 @@ SplitView {
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
text: `selected members: ${membersDropdown.selectedKeys}`
|
text: `selected members: ${[...membersDropdown.selectedKeys]}`
|
||||||
wrapMode: Label.Wrap
|
wrapMode: Label.Wrap
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@ import shared.controls.delegates 1.0
|
||||||
StatusDropdown {
|
StatusDropdown {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
property var selectedKeys: []
|
property var selectedKeys: new Set()
|
||||||
property bool forceButtonDisabled: false
|
property bool forceButtonDisabled: false
|
||||||
property int maximumListHeight: 288
|
property int maximumListHeight: 288
|
||||||
|
|
||||||
|
@ -28,6 +28,33 @@ StatusDropdown {
|
||||||
Add, Update
|
Add, Update
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Instantiator {
|
||||||
|
id: selectionChecker
|
||||||
|
|
||||||
|
model: root.model
|
||||||
|
|
||||||
|
property var keys: []
|
||||||
|
|
||||||
|
delegate: QtObject {
|
||||||
|
readonly property string key: model.pubKey
|
||||||
|
}
|
||||||
|
|
||||||
|
readonly property bool allSelected:
|
||||||
|
keys.every(key => root.selectedKeys.has(key))
|
||||||
|
|
||||||
|
onObjectAdded: {
|
||||||
|
const keysCopy = [...keys]
|
||||||
|
keysCopy.splice(index, 0, object.key)
|
||||||
|
keys = keysCopy
|
||||||
|
}
|
||||||
|
|
||||||
|
onObjectRemoved: {
|
||||||
|
const keysCopy = [...keys]
|
||||||
|
keysCopy.splice(index, 1)
|
||||||
|
keys = keysCopy
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
property int mode: MembersDropdown.Mode.Add
|
property int mode: MembersDropdown.Mode.Add
|
||||||
|
|
||||||
signal backButtonClicked
|
signal backButtonClicked
|
||||||
|
@ -145,7 +172,7 @@ StatusDropdown {
|
||||||
text: qsTr("Select all")
|
text: qsTr("Select all")
|
||||||
font.weight: Font.Medium
|
font.weight: Font.Medium
|
||||||
|
|
||||||
checked: root.selectedKeys.length === listView.count
|
checked: selectionChecker.allSelected
|
||||||
|
|
||||||
leftSide: false
|
leftSide: false
|
||||||
size: StatusCheckBox.Size.Small
|
size: StatusCheckBox.Size.Small
|
||||||
|
@ -156,20 +183,15 @@ StatusDropdown {
|
||||||
cursorShape: Qt.PointingHandCursor
|
cursorShape: Qt.PointingHandCursor
|
||||||
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
if (listView.headerItem.checked) {
|
const currentKeys = selectionChecker.keys
|
||||||
root.selectedKeys = []
|
const keysSet = new Set([...root.selectedKeys])
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
const count = root.model.rowCount()
|
if (listView.headerItem.checked)
|
||||||
const keys = []
|
currentKeys.forEach(key => keysSet.delete(key))
|
||||||
|
else
|
||||||
|
currentKeys.forEach(key => keysSet.add(key))
|
||||||
|
|
||||||
for (let i = 0; i < count; i++) {
|
root.selectedKeys = keysSet
|
||||||
const key = ModelUtils.get(root.model, i, "pubKey")
|
|
||||||
keys.push(key)
|
|
||||||
}
|
|
||||||
|
|
||||||
root.selectedKeys = keys
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -188,14 +210,12 @@ StatusDropdown {
|
||||||
color: "transparent"
|
color: "transparent"
|
||||||
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
const index = root.selectedKeys.indexOf(model.pubKey)
|
const selectedKeysCopy = new Set([...root.selectedKeys])
|
||||||
const selectedKeysCopy = Object.assign(
|
|
||||||
[], root.selectedKeys)
|
|
||||||
|
|
||||||
if (index === -1)
|
if (root.selectedKeys.has(model.pubKey))
|
||||||
selectedKeysCopy.push(model.pubKey)
|
selectedKeysCopy.delete(model.pubKey)
|
||||||
else
|
else
|
||||||
selectedKeysCopy.splice(index, 1)
|
selectedKeysCopy.add(model.pubKey)
|
||||||
|
|
||||||
root.selectedKeys = selectedKeysCopy
|
root.selectedKeys = selectedKeysCopy
|
||||||
}
|
}
|
||||||
|
@ -205,7 +225,7 @@ StatusDropdown {
|
||||||
id: contactCheckbox
|
id: contactCheckbox
|
||||||
|
|
||||||
size: StatusCheckBox.Size.Small
|
size: StatusCheckBox.Size.Small
|
||||||
checked: root.selectedKeys.indexOf(model.pubKey) > -1
|
checked: root.selectedKeys.has(model.pubKey)
|
||||||
|
|
||||||
MouseArea {
|
MouseArea {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
@ -246,7 +266,7 @@ StatusDropdown {
|
||||||
return false
|
return false
|
||||||
|
|
||||||
if (root.mode === MembersDropdown.Mode.Add)
|
if (root.mode === MembersDropdown.Mode.Add)
|
||||||
return root.selectedKeys.length > 0
|
return root.selectedKeys.size > 0
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
@ -255,8 +275,8 @@ StatusDropdown {
|
||||||
if (root.mode === MembersDropdown.Mode.Update)
|
if (root.mode === MembersDropdown.Mode.Update)
|
||||||
return qsTr("Update members")
|
return qsTr("Update members")
|
||||||
|
|
||||||
return root.selectedKeys.length > 0
|
return root.selectedKeys.size > 0
|
||||||
? qsTr("Add %n member(s)", "", root.selectedKeys.length)
|
? qsTr("Add %n member(s)", "", root.selectedKeys.size)
|
||||||
: qsTr("Add")
|
: qsTr("Add")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -244,18 +244,17 @@ StatusScrollView {
|
||||||
filters: ExpressionFilter {
|
filters: ExpressionFilter {
|
||||||
id: selectedKeysFilter
|
id: selectedKeysFilter
|
||||||
|
|
||||||
property var keys: []
|
property var keys: new Set()
|
||||||
|
|
||||||
expression: keys.indexOf(model.pubKey) !== -1
|
expression: keys.has(model.pubKey)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onRemoveMemberRequested: {
|
onRemoveMemberRequested: {
|
||||||
const pubKey = ModelUtils.get(membersModel, index, "pubKey")
|
const pubKey = ModelUtils.get(membersModel, index, "pubKey")
|
||||||
const keyIndex = selectedKeysFilter.keys.indexOf(pubKey)
|
|
||||||
|
|
||||||
selectedKeysFilter.keys.splice(keyIndex, 1)
|
selectedKeysFilter.keys.delete(pubKey)
|
||||||
selectedKeysFilter.keys = selectedKeysFilter.keys
|
selectedKeysFilter.keys = new Set([...selectedKeysFilter.keys])
|
||||||
}
|
}
|
||||||
|
|
||||||
onAddAddressesRequested: (addresses_) => {
|
onAddAddressesRequested: (addresses_) => {
|
||||||
|
@ -309,7 +308,7 @@ StatusScrollView {
|
||||||
recipientTypeSelectionDropdown.close()
|
recipientTypeSelectionDropdown.close()
|
||||||
membersDropdown.selectedKeys = selectedKeysFilter.keys
|
membersDropdown.selectedKeys = selectedKeysFilter.keys
|
||||||
|
|
||||||
const hasSelection = selectedKeysFilter.keys.length !== 0
|
const hasSelection = selectedKeysFilter.keys.size !== 0
|
||||||
|
|
||||||
membersDropdown.mode = hasSelection
|
membersDropdown.mode = hasSelection
|
||||||
? MembersDropdown.Mode.Update
|
? MembersDropdown.Mode.Update
|
||||||
|
@ -324,7 +323,7 @@ StatusScrollView {
|
||||||
|
|
||||||
forceButtonDisabled:
|
forceButtonDisabled:
|
||||||
mode === MembersDropdown.Mode.Update &&
|
mode === MembersDropdown.Mode.Update &&
|
||||||
JSON.stringify(selectedKeys) === JSON.stringify(selectedKeysFilter.keys)
|
[...selectedKeys].sort().join() === [...selectedKeysFilter.keys].sort().join()
|
||||||
|
|
||||||
model: SortFilterProxyModel {
|
model: SortFilterProxyModel {
|
||||||
sourceModel: membersModel
|
sourceModel: membersModel
|
||||||
|
@ -338,12 +337,8 @@ StatusScrollView {
|
||||||
}
|
}
|
||||||
|
|
||||||
expression: {
|
expression: {
|
||||||
membersDropdown.selectedKeys
|
|
||||||
membersDropdown.searchText
|
membersDropdown.searchText
|
||||||
|
|
||||||
if (membersDropdown.selectedKeys.indexOf(model.pubKey) > -1)
|
|
||||||
return true
|
|
||||||
|
|
||||||
const filter = membersDropdown.searchText.toLowerCase()
|
const filter = membersDropdown.searchText.toLowerCase()
|
||||||
return matchesAlias(model.alias.toLowerCase(), filter)
|
return matchesAlias(model.alias.toLowerCase(), filter)
|
||||||
|| model.displayName.toLowerCase().includes(filter)
|
|| model.displayName.toLowerCase().includes(filter)
|
||||||
|
@ -394,7 +389,7 @@ StatusScrollView {
|
||||||
const addresses_ = ModelUtils.modelToArray(
|
const addresses_ = ModelUtils.modelToArray(
|
||||||
addresses, ["address"]).map(e => e.address)
|
addresses, ["address"]).map(e => e.address)
|
||||||
|
|
||||||
const pubKeys = selectedKeysFilter.keys
|
const pubKeys = [...selectedKeysFilter.keys]
|
||||||
|
|
||||||
root.airdropClicked(airdropTokens, addresses_, pubKeys)
|
root.airdropClicked(airdropTokens, addresses_, pubKeys)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue