Warning, /plasma-mobile/calindori/src/contents/ui/AttendeePicker.qml is written in an unsupported language. File is not indexed.

0001 /*
0002  * SPDX-FileCopyrightText: 2021 Dimitris Kardarakos <dimkard@posteo.net>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 import QtQuick 2.7
0008 import QtQuick.Controls 2.5 as Controls2
0009 import QtQuick.Layouts 1.3
0010 import org.kde.kirigami 2.14 as Kirigami
0011 import org.kde.calindori 0.1 as Calindori
0012 import org.kde.people 1.0 as KPeople
0013 
0014 Kirigami.OverlaySheet {
0015     id: root
0016 
0017     property var selectedPersons: []
0018     property var preEditEmails: []
0019 
0020     signal editorCompleted (var selectedUris)
0021 
0022     header: Kirigami.SearchField {
0023         id: searchField
0024 
0025         topInset: Kirigami.Units.smallSpacing
0026         bottomInset: Kirigami.Units.smallSpacing
0027 
0028         onTextChanged: filterModel.setFilterFixedString(text)
0029     }
0030 
0031 
0032     contentItem: ListView {
0033         id: peopleList
0034 
0035         clip: true
0036 
0037         model: KPeople.PersonsSortFilterProxyModel {
0038             id: filterModel
0039 
0040             filterCaseSensitivity: Qt.CaseInsensitive
0041             requiredProperties: ["email"]
0042 
0043 
0044             Component.onCompleted: {
0045                 sourceModel = personsModel
0046                 sort(0);
0047             }
0048         }
0049 
0050         Kirigami.PlaceholderMessage {
0051             anchors.centerIn: parent
0052             icon.name: "user"
0053             text: i18n("No contacts found")
0054             visible: peopleList.count === 0
0055         }
0056 
0057         delegate: Kirigami.DelegateRecycler {
0058             sourceComponent: contactListDelegate
0059         }
0060 
0061         Component {
0062             id: contactListDelegate
0063 
0064             Kirigami.BasicListItem {
0065                 property var itemEmail: personData && personData.person && personData.person.contactCustomProperty("email")
0066                 checkable: true
0067                 enabled: model && root.preEditEmails.indexOf(itemEmail) === -1
0068                 checked: model && root.selectedPersons && root.selectedPersons.indexOf(model.personUri) >= 0
0069 
0070                 onCheckedChanged: {
0071                     if(!model) {
0072                         return;
0073                     }
0074 
0075                     if(checked) {
0076                         var uris = root.selectedPersons;
0077                         uris.push(model.personUri);
0078                         root.selectedPersons = uris;
0079                     }
0080                     else {
0081                         var uris = root.selectedPersons;
0082                         uris.pop(model.personUri);
0083                         root.selectedPersons = uris;
0084                     }
0085                 }
0086 
0087                 KPeople.PersonData {
0088                         id: personData
0089 
0090                         personUri: model && model.personUri
0091                 }
0092 
0093                 icon: model && model.decoration
0094                 label: model && model.display
0095                 subtitle: itemEmail
0096             }
0097         }
0098 
0099         KPeople.PersonsModel {
0100             id: personsModel
0101         }
0102     }
0103 
0104     footer: RowLayout {
0105         Item {
0106             Layout.fillWidth: true
0107         }
0108 
0109         Controls2.ToolButton {
0110             text: i18n("Add")
0111             icon.name: 'contact-new-symbolic'
0112 
0113             enabled: selectedPersons.length > 0
0114 
0115             onClicked: {
0116                 editorCompleted(root.selectedPersons);
0117                 root.close();
0118             }
0119         }
0120 
0121         Controls2.ToolButton {
0122             text: i18n("Cancel")
0123             icon.name: 'dialog-cancel'
0124 
0125             onClicked: {
0126                 root.close();
0127             }
0128         }
0129     }
0130 }