2022-07-25 18:07:19 +03:00
|
|
|
import QtQuick 2.14
|
|
|
|
import QtQuick.Controls 2.14
|
|
|
|
import QtQuick.Layouts 1.14
|
2021-09-28 18:04:06 +03:00
|
|
|
|
2022-07-13 15:29:38 +03:00
|
|
|
import StatusQ.Core 0.1
|
|
|
|
|
2021-09-28 18:04:06 +03:00
|
|
|
import utils 1.0
|
2021-10-28 00:27:49 +03:00
|
|
|
import shared.status 1.0
|
2021-12-08 23:20:43 +02:00
|
|
|
import shared.stores 1.0
|
2021-03-31 15:14:09 -04:00
|
|
|
// TODO move Contact into shared to get rid of that import
|
2022-03-08 13:49:33 -05:00
|
|
|
import AppLayouts.Chat.controls 1.0
|
2021-02-08 13:21:23 +01:00
|
|
|
|
|
|
|
Item {
|
|
|
|
id: root
|
2022-01-04 13:06:05 +01:00
|
|
|
|
|
|
|
property var contactsStore
|
2022-01-10 11:44:54 -05:00
|
|
|
property var community
|
2022-01-04 13:06:05 +01:00
|
|
|
|
2021-02-08 13:21:23 +01:00
|
|
|
property string filterText: ""
|
|
|
|
property bool expanded: true
|
2021-03-31 15:14:09 -04:00
|
|
|
property bool showCheckbox: false
|
2021-05-17 11:56:55 +02:00
|
|
|
property bool hideCommunityMembers: false
|
2021-03-31 15:14:09 -04:00
|
|
|
property var pubKeys: ([])
|
2022-07-25 16:22:09 +03:00
|
|
|
|
2022-07-25 18:07:19 +03:00
|
|
|
readonly property alias count: contactListView.count
|
|
|
|
|
2021-02-08 13:21:23 +01:00
|
|
|
signal contactClicked(var contact)
|
|
|
|
|
|
|
|
function matchesAlias(name, filter) {
|
|
|
|
let parts = name.split(" ")
|
|
|
|
return parts.some(p => p.startsWith(filter))
|
|
|
|
}
|
|
|
|
|
2022-07-25 18:07:19 +03:00
|
|
|
implicitWidth: contactListView.implicitWidth + contactListView.margins
|
2022-07-25 16:22:09 +03:00
|
|
|
implicitHeight: visible ? Math.min(contactListView.contentHeight, (expanded ? 320 : 192)) : 0
|
|
|
|
|
2022-07-14 14:03:36 +03:00
|
|
|
StatusListView {
|
|
|
|
id: contactListView
|
2021-02-08 13:21:23 +01:00
|
|
|
anchors.fill: parent
|
2022-07-25 18:07:19 +03:00
|
|
|
rightMargin: 0
|
2022-07-14 14:03:36 +03:00
|
|
|
spacing: 0
|
2021-02-08 13:21:23 +01:00
|
|
|
|
2022-07-14 14:03:36 +03:00
|
|
|
model: root.contactsStore.myContactsModel
|
|
|
|
delegate: Contact {
|
2022-07-25 16:22:09 +03:00
|
|
|
width: contactListView.availableWidth
|
2022-07-14 14:03:36 +03:00
|
|
|
showCheckbox: root.showCheckbox
|
|
|
|
isChecked: root.pubKeys.indexOf(model.pubKey) > -1
|
|
|
|
pubKey: model.pubKey
|
|
|
|
isContact: model.isContact
|
|
|
|
isUser: false
|
|
|
|
name: model.displayName
|
|
|
|
image: model.icon
|
|
|
|
isVisible: {
|
2022-07-25 18:07:19 +03:00
|
|
|
if (isChecked)
|
|
|
|
return true;
|
|
|
|
|
2022-07-14 14:03:36 +03:00
|
|
|
return model.isContact && !model.isBlocked && (root.filterText === "" ||
|
2022-07-25 16:22:09 +03:00
|
|
|
root.matchesAlias(model.alias.toLowerCase(), root.filterText.toLowerCase()) ||
|
|
|
|
model.displayName.toLowerCase().includes(root.filterText.toLowerCase()) ||
|
|
|
|
model.ensName.toLowerCase().includes(root.filterText.toLowerCase()) ||
|
|
|
|
model.localNickname.toLowerCase().includes(root.filterText.toLowerCase()) ||
|
|
|
|
model.pubKey.toLowerCase().includes(root.filterText.toLowerCase())) &&
|
|
|
|
(!root.hideCommunityMembers ||
|
|
|
|
!root.community.hasMember(model.pubKey));
|
2022-07-14 14:03:36 +03:00
|
|
|
}
|
|
|
|
onContactClicked: function () {
|
2022-07-25 16:22:09 +03:00
|
|
|
root.contactClicked(model);
|
2021-02-08 13:21:23 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|