Warning, /network/neochat/src/qml/UserSearchPage.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2024 James Graham <james.h.graham@protonmail.com> 0002 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0003 0004 import QtQuick 0005 import QtQuick.Controls as QQC2 0006 import QtQuick.Layouts 0007 import Qt.labs.qmlmodels 0008 0009 import org.kde.kirigami as Kirigami 0010 import org.kde.kirigamiaddons.delegates as Delegates 0011 import org.kde.kirigamiaddons.labs.components as Components 0012 0013 import org.kde.neochat 0014 0015 /** 0016 * @brief Component for finding users from the public list. 0017 * 0018 * This component is based on a SearchPage and allows the user to enter a search 0019 * term into the input field and then search the room for messages with text that 0020 * matches the input. 0021 * 0022 * @sa SearchPage 0023 */ 0024 SearchPage { 0025 id: root 0026 0027 /** 0028 * @brief The connection for the current local user. 0029 */ 0030 required property NeoChatConnection connection 0031 0032 title: i18nc("@action:title", "Find Your Friends") 0033 0034 Component.onCompleted: focusSearch() 0035 0036 model: UserDirectoryListModel { 0037 id: userSearchModel 0038 connection: root.connection 0039 } 0040 0041 listHeaderDelegate: Delegates.RoundedItemDelegate { 0042 onClicked: _private.openManualUserDialog() 0043 0044 text: i18n("Enter a user ID") 0045 icon.name: "list-add-user" 0046 icon.width: Kirigami.Units.gridUnit * 2 0047 icon.height: Kirigami.Units.gridUnit * 2 0048 } 0049 0050 modelDelegate: Delegates.RoundedItemDelegate { 0051 id: userDelegate 0052 required property string userId 0053 required property string displayName 0054 required property url avatarUrl 0055 required property var directChatExists 0056 0057 text: displayName 0058 0059 onClicked: { 0060 root.connection.openOrCreateDirectChat(userDelegate.userId); 0061 root.closeDialog(); 0062 } 0063 0064 contentItem: RowLayout { 0065 spacing: Kirigami.Units.smallSpacing 0066 0067 Components.Avatar { 0068 Layout.preferredWidth: Kirigami.Units.gridUnit * 2 0069 Layout.preferredHeight: Kirigami.Units.gridUnit * 2 0070 Layout.alignment: Qt.AlignTop 0071 0072 source: userDelegate.avatarUrl 0073 name: userDelegate.displayName 0074 } 0075 Delegates.SubtitleContentItem { 0076 itemDelegate: userDelegate 0077 subtitle: userDelegate.userId 0078 labelItem.textFormat: Text.PlainText 0079 } 0080 QQC2.Label { 0081 visible: userDelegate.directChatExists 0082 text: i18n("Friends") 0083 textFormat: Text.PlainText 0084 color: Kirigami.Theme.positiveTextColor 0085 } 0086 } 0087 } 0088 0089 searchFieldPlaceholder: i18n("Find your friends…") 0090 noSearchPlaceholderMessage: i18n("Enter text to start searching for your friends") 0091 noResultPlaceholderMessage: i18nc("@info:label", "No matches found") 0092 0093 Component { 0094 id: manualUserDialog 0095 ManualUserDialog {} 0096 } 0097 0098 QtObject { 0099 id: _private 0100 function openManualUserDialog() { 0101 let dialog = manualUserDialog.createObject(applicationWindow().overlay, { 0102 connection: root.connection 0103 }); 0104 dialog.accepted.connect(() => { 0105 root.closeDialog(); 0106 }); 0107 dialog.open(); 0108 } 0109 } 0110 }