Warning, /network/tokodon/src/content/ui/ModerationTools/ReportToolPage.qml is written in an unsupported language. File is not indexed.

0001 // SPDX-FileCopyrightText: 2023 Rishi Kumar <rsi.dev17@gmail.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 org.kde.kirigami 2 as Kirigami
0006 import QtQuick.Controls 2 as QQC2
0007 import QtQuick.Layouts
0008 import org.kde.tokodon
0009 import org.kde.kirigamiaddons.delegates 1 as Delegates
0010 import org.kde.kirigamiaddons.components 1 as KirigamiComponents
0011 
0012 import "../StatusDelegate"
0013 
0014 Kirigami.ScrollablePage {
0015     title: i18n("Accounts Tool Page")
0016     id: root
0017 
0018     header: ColumnLayout {
0019         id: comboboxColumn
0020         spacing: 0
0021         Layout.fillWidth: true
0022         RowLayout {
0023             id: filterOptions
0024             Layout.topMargin: Kirigami.Units.largeSpacing
0025             Layout.bottomMargin: Kirigami.Units.largeSpacing
0026             Layout.leftMargin: Kirigami.Units.largeSpacing * 5
0027             Layout.rightMargin: Kirigami.Units.largeSpacing * 5
0028             Layout.fillWidth: true
0029 
0030             ColumnLayout {
0031                 Kirigami.Heading {
0032                     level: 4
0033                     text: i18nc("@info:Combobox to choose Report Status", "Report Status")
0034                     type: Kirigami.Heading.Type.Primary
0035                     horizontalAlignment: Text.AlignHCenter
0036                     Layout.fillWidth: true
0037                 }
0038                 QQC2.ComboBox {
0039                     id: reportStatusCombobox
0040                     Layout.fillWidth: true
0041                     Layout.leftMargin: Kirigami.Units.largeSpacing
0042                     Layout.rightMargin: Kirigami.Units.largeSpacing
0043                     model: [
0044                         {
0045                             display: i18nc("@info:Filter out unresolved reports", "Unresolved"),
0046                             value: ""
0047                         },
0048                         {
0049                             display: i18nc("@info:Filter out resolved reports", "Resolved"),
0050                             value: "resolved"
0051                         },
0052                     ]
0053                     textRole: "display"
0054                     valueRole: "value"
0055                     Component.onCompleted: reportStatusCombobox.currentIndex = reportStatusCombobox.indexOfValue(reportView.model.moderationStatus);
0056                     onCurrentIndexChanged: reportView.model.moderationStatus = model[currentIndex].value
0057                 }
0058             }
0059 
0060             ColumnLayout {
0061                 Kirigami.Heading {
0062                     level: 4
0063                     text: i18nc("@info:Combobox to choose the origin of report", "Report Origin")
0064                     type: Kirigami.Heading.Type.Primary
0065                     horizontalAlignment: Text.AlignHCenter
0066 
0067                     Layout.fillWidth: true
0068                 }
0069                 QQC2.ComboBox {
0070                     id: originCombobox
0071                     Layout.fillWidth: true
0072                     Layout.leftMargin: Kirigami.Units.largeSpacing
0073                     Layout.rightMargin: Kirigami.Units.largeSpacing
0074                     model: [
0075                         {
0076                             display: i18nc("@info:Filter out accounts with any origin", "All"),
0077                             value: ""
0078                         },
0079                         {
0080                             display: i18nc("@info:Filter out accounts with local origin", "Local"),
0081                             value: "local"
0082                         },
0083                         {
0084                             display: i18nc("@info:Filter out accounts with remote origin", "Remote"),
0085                             value: "remote"
0086                         },
0087                     ]
0088                     textRole: "display"
0089                     valueRole: "value"
0090                     Component.onCompleted: originCombobox.currentIndex = originCombobox.indexOfValue(reportView.model.origin);
0091                     onCurrentIndexChanged: reportView.model.origin = model[currentIndex].value
0092                 }
0093             }
0094         }
0095         Kirigami.Separator {
0096             Layout.fillWidth: true
0097         }
0098     }
0099 
0100     ListView {
0101         id: reportView
0102         model: ReportToolModel{}
0103 
0104         delegate: Delegates.RoundedItemDelegate {
0105             id: delegate
0106 
0107             required property int index
0108             required property var reportInfo
0109             visible: (delegate.reportInfo) !== null
0110 
0111             //hide the report if we get a {} response
0112             Component.onCompleted: {
0113                 if ((delegate.reportInfo) === null)
0114                 {
0115                     delegate.implicitHeight = 0
0116                 }
0117             }
0118 
0119             implicitWidth: ListView.view.width
0120             Layout.fillWidth: true
0121 
0122             onClicked: applicationWindow().pageStack.layers.push("./MainReportToolPage.qml", {
0123                 reportInfo: delegate.reportInfo,
0124                 index: delegate.index,
0125                 model: reportView.model
0126                 })
0127 
0128             contentItem: Kirigami.FlexColumn {
0129                 spacing: 0
0130 
0131                 RowLayout {
0132                     spacing: 0
0133                     Layout.fillWidth: true
0134                     InlineIdentityInfo {
0135                         identity: delegate.reportInfo.targetAccount.userLevelIdentity
0136                         secondary: false
0137                         admin: true
0138                         ip: delegate.reportInfo.targetAccount.ip
0139                     }
0140                     Kirigami.Heading {
0141                         level: 3
0142                         text: delegate.reportInfo.targetAccount.loginStatus
0143                         type: Kirigami.Heading.Type.Secondary
0144                         elide: Text.ElideRight
0145                     }
0146                 }
0147                 RowLayout {
0148                     spacing: 0
0149                     Layout.fillWidth: true
0150                     ColumnLayout {
0151                         spacing: 0
0152 
0153                         Kirigami.Heading {
0154                             level: 5
0155                             text: i18n("Reported By:")
0156                             type: Kirigami.Heading.Type.Primary
0157                             elide: Text.ElideRight
0158                             Layout.alignment: Qt.AlignLeft
0159                             Layout.leftMargin: Kirigami.Units.smallSpacing
0160                         }
0161 
0162                         RowLayout {
0163                             spacing: 0
0164                             Layout.alignment: Qt.AlignLeft
0165                             Layout.rightMargin: Kirigami.Units.largeSpacing * 3
0166                             Item {
0167                                 Layout.preferredWidth: height
0168                                 Layout.preferredHeight: Kirigami.Units.gridUnit * 2
0169 
0170                                 KirigamiComponents.Avatar {
0171                                     id: avatar
0172                                     anchors.fill: parent
0173                                     anchors.margins: Kirigami.Units.smallSpacing
0174                                     source: delegate.reportInfo.filedAccount.userLevelIdentity.avatarUrl
0175                                     cache: true
0176                                     name: delegate.reportInfo.filedAccount.userLevelIdentity.displayName
0177                                     implicitWidth: avatar.width
0178                                     implicitHeight: avatar.height
0179                                     Layout.rightMargin: Kirigami.Units.smallSpacing * 3
0180                                 }
0181                             }
0182                             Kirigami.Heading {
0183                                 level: 4
0184                                 text: delegate.reportInfo.filedAccount.userLevelIdentity.account
0185                                 type: Kirigami.Heading.Type.Secondary
0186                                 elide: Text.ElideRight
0187                                 Layout.alignment: Qt.AlignRight
0188                                 Layout.minimumWidth: Kirigami.Units.gridUnit * 4
0189                             }
0190                         }
0191                     }
0192                     ColumnLayout {
0193                         spacing: 0
0194                         Layout.alignment: Qt.AlignLeft
0195                         Layout.topMargin: Kirigami.Units.largeSpacing * 2
0196                         Kirigami.Heading {
0197                             level: 5
0198                             text: delegate.reportInfo.comment
0199                             type: Kirigami.Heading.Type.Secondary
0200                             elide: Text.ElideRight
0201                             maximumLineCount: 1
0202                             wrapMode: Text.Wrap
0203                             Layout.fillWidth: true
0204                             clip: true
0205                             Layout.rightMargin: Kirigami.Units.largeSpacing * 10
0206                         }
0207                         RowLayout {
0208                             Layout.fillWidth: true
0209                             Kirigami.Icon {
0210                                 source: `comment-symbolic`
0211                                 color: Kirigami.Theme.disabledTextColor
0212                                 Layout.preferredHeight: Kirigami.Units.largeSpacing * 2
0213                                 Layout.preferredWidth: Kirigami.Units.largeSpacing * 2
0214                             }
0215                             Kirigami.Heading {
0216                                 level: 5
0217                                 text: delegate.reportInfo.statusCount
0218                                 type: Kirigami.Heading.Type.Secondary
0219                                 elide: Text.ElideRight
0220                             }
0221                             Kirigami.Icon {
0222                                 source: `camera-web-symbolic`
0223                                 color: Kirigami.Theme.disabledTextColor
0224                                 Layout.preferredHeight: Kirigami.Units.largeSpacing * 2
0225                                 Layout.preferredWidth: Kirigami.Units.largeSpacing * 2
0226                             }
0227                             Kirigami.Heading {
0228                                 level: 5
0229                                 text: delegate.reportInfo.mediaAttachmentCount
0230                                 type: Kirigami.Heading.Type.Secondary
0231                                 elide: Text.ElideRight
0232                             }
0233                         }
0234                     }
0235                     ColumnLayout {
0236                         spacing: 0
0237 
0238                         Kirigami.Heading {
0239                             level: 5
0240                             text: i18n("Assigned Account:")
0241                             type: Kirigami.Heading.Type.Primary
0242                             elide: Text.ElideRight
0243                             Layout.alignment: Qt.AlignLeft
0244                         }
0245                         RowLayout {
0246                             spacing: 0
0247                             Layout.alignment: Qt.AlignRight
0248                             Layout.fillWidth: true
0249                             Item {
0250                                 Layout.preferredWidth: height
0251                                 Layout.preferredHeight: Kirigami.Units.gridUnit * 2
0252 
0253                                 KirigamiComponents.Avatar {
0254                                     anchors.fill: parent
0255                                     visible: delegate.reportInfo.assignedModerator
0256                                     anchors.margins: Kirigami.Units.smallSpacing
0257                                     source: delegate.reportInfo.assignedModerator ?  delegate.reportInfo.assignedAccount.userLevelIdentity.avatarUrl : ''
0258                                     name: delegate.reportInfo.assignedModerator ? delegate.reportInfo.assignedAccount.userLevelIdentity.displayName : ''
0259                                     implicitWidth: avatar.width
0260                                     implicitHeight: avatar.height
0261                                 }
0262                             }
0263                             Kirigami.Heading {
0264                                 level: 4
0265                                 text: delegate.reportInfo.assignedModerator ? delegate.reportInfo.assignedAccount.userLevelIdentity.account : i18nc("@info: No account assigned to the report","N/A")
0266                                 type: Kirigami.Heading.Type.Secondary
0267                                 elide: Text.ElideRight
0268                                 Layout.alignment: Qt.AlignRight
0269                             }
0270                         }
0271                     }
0272                 }
0273                 Kirigami.Separator {
0274                     Layout.fillWidth: true
0275                 }
0276 
0277                 QQC2.ProgressBar {
0278                     visible: reportView.model.loading && (index == reportView.count - 1)
0279                     indeterminate: true
0280                     padding: Kirigami.Units.largeSpacing * 2
0281                     Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
0282                     Layout.topMargin: Kirigami.Units.largeSpacing
0283                     Layout.bottomMargin: Kirigami.Units.largeSpacing
0284                     Layout.leftMargin: Kirigami.Units.largeSpacing
0285                     Layout.rightMargin: Kirigami.Units.largeSpacing
0286                 }
0287             }
0288         }
0289         QQC2.ProgressBar {
0290             visible: reportView.model.loading && reportView.count === 0
0291             anchors.centerIn: parent
0292             indeterminate: true
0293         }
0294         Kirigami.PlaceholderMessage {
0295             anchors.centerIn: parent
0296             text: i18n("No reports found")
0297             visible: reportView.count === 0 && !reportView.model.loading
0298             width: parent.width - Kirigami.Units.gridUnit * 4
0299         }
0300     }
0301 }
0302 
0303