Warning, /network/tokodon/src/content/ui/SearchView.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2023 Carl Schwan <carl@carlschwan.eu>
0002 // SPDX-License-Identifier: GPL-3.0-or-later
0003
0004 import QtQuick
0005 import QtQuick.Controls 2 as QQC2
0006 import QtQuick.Layouts
0007 import Qt.labs.qmlmodels 1.0
0008 import org.kde.kirigami 2 as Kirigami
0009 import org.kde.kirigamiaddons.delegates 1 as Delegates
0010 import org.kde.kirigamiaddons.components 1 as KirigamiComponents
0011 import org.kde.tokodon
0012 import './StatusDelegate'
0013
0014 ListView {
0015 id: root
0016
0017 required property string text
0018
0019 signal itemSelected
0020
0021 onTextChanged: if (text.length === 0) {
0022 searchModel.clear();
0023 }
0024
0025 model: SearchModel {
0026 id: searchModel
0027 }
0028
0029 section {
0030 property: "type"
0031 delegate: Kirigami.ListSectionHeader {
0032 text: searchModel.labelForType(section)
0033 width: parent.width
0034 }
0035 }
0036
0037 Kirigami.PlaceholderMessage {
0038 text: i18n("Loading...")
0039 visible: searchModel.loading
0040 icon.name: "system-search"
0041 anchors.centerIn: parent
0042 width: parent.width - Kirigami.Units.gridUnit * 4
0043 }
0044
0045 Kirigami.PlaceholderMessage {
0046 text: i18n("No search results")
0047 visible: root.count === 0 && root.text.length > 2 && !searchModel.loading && searchModel.loaded
0048 icon.name: "system-search"
0049 anchors.centerIn: parent
0050 width: parent.width - Kirigami.Units.gridUnit * 4
0051 }
0052
0053 Kirigami.PlaceholderMessage {
0054 text: i18n("Search for users, tags and posts")
0055 visible: root.count === 0 && !searchModel.loading && !searchModel.loaded
0056 icon.name: "system-search"
0057 anchors.centerIn: parent
0058 width: parent.width - Kirigami.Units.gridUnit * 4
0059 }
0060
0061 delegate: DelegateChooser {
0062 role: "type"
0063 DelegateChoice {
0064 roleValue: SearchModel.Account
0065
0066 Delegates.RoundedItemDelegate {
0067 id: accountDelegate
0068
0069 required property var authorIdentity
0070
0071 width: ListView.view.width
0072 text: accountDelegate.authorIdentity.displayName
0073
0074 onClicked: {
0075 Navigation.openAccount(accountDelegate.authorIdentity.id);
0076 root.itemSelected();
0077 }
0078
0079 contentItem: RowLayout {
0080 KirigamiComponents.Avatar {
0081 Layout.alignment: Qt.AlignTop
0082 Layout.rowSpan: 5
0083 source: accountDelegate.authorIdentity.avatarUrl
0084 cache: true
0085 name: accountDelegate.authorIdentity.displayName
0086 }
0087
0088 ColumnLayout {
0089 spacing: 0
0090
0091 Layout.fillWidth: true
0092 Layout.bottomMargin: Kirigami.Units.smallSpacing
0093 Layout.leftMargin: Kirigami.Units.largeSpacing
0094
0095 Kirigami.Heading {
0096 id: heading
0097
0098 level: 5
0099 text: accountDelegate.text
0100 textFormat: Text.RichText
0101 type: Kirigami.Heading.Type.Primary
0102 color: Kirigami.Theme.textColor
0103 verticalAlignment: Text.AlignTop
0104
0105 Layout.fillWidth: true
0106 }
0107
0108 Kirigami.Heading {
0109 level: 5
0110 elide: Text.ElideRight
0111 color: Kirigami.Theme.disabledTextColor
0112 text: `@${accountDelegate.authorIdentity.account}`
0113 verticalAlignment: Text.AlignTop
0114
0115 Layout.fillWidth: true
0116 }
0117 }
0118 }
0119 }
0120 }
0121
0122 DelegateChoice {
0123 roleValue: SearchModel.Status
0124 StatusDelegate {
0125 x: Kirigami.Units.smallSpacing
0126 width: ListView.view.width - Kirigami.Units.smallSpacing * 2
0127 secondary: true
0128 showSeparator: true
0129 showInteractionButton: false
0130
0131 leftPadding: 0
0132 rightPadding: 0
0133 topPadding: Kirigami.Units.smallSpacing
0134 bottomPadding: Kirigami.Units.smallSpacing
0135 }
0136 }
0137
0138 DelegateChoice {
0139 roleValue: SearchModel.Hashtag
0140
0141 Delegates.RoundedItemDelegate {
0142 id: delegate
0143
0144 required property string id
0145
0146 text: "#" + id
0147 Accessible.description: i18n("Hashtag")
0148
0149 onClicked: {
0150 Navigation.openTag(id);
0151 root.itemSelected();
0152 }
0153
0154 contentItem: ColumnLayout {
0155 Layout.fillWidth: true
0156 Layout.bottomMargin: Kirigami.Units.smallSpacing
0157 Layout.leftMargin: Kirigami.Units.largeSpacing
0158 spacing: 0
0159 Kirigami.Heading {
0160 id: heading
0161 level: 5
0162 text: delegate.text
0163 type: Kirigami.Heading.Type.Primary
0164 color: Kirigami.Theme.textColor
0165 verticalAlignment: Text.AlignTop
0166 }
0167 }
0168 }
0169 }
0170 }
0171 }