1/*
2 * SPDX-FileCopyrightText: 2021 Dimitris Kardarakos <dimkard@posteo.net>
3 *
4 * SPDX-License-Identifier: GPL-3.0-or-later
5 */
6
7import QtQuick 2.7
8import QtQuick.Controls 2.5 as Controls2
9import QtQuick.Layouts 1.3
10import org.kde.kirigami 2.14 as Kirigami
11import org.kde.calindori 0.1 as Calindori
12import org.kde.people 1.0 as KPeople
13
14Kirigami.OverlaySheet {
15    id: root
16
17    property var selectedPersons: []
18    property var preEditEmails: []
19
20    signal editorCompleted (var selectedUris)
21
22    header: Kirigami.SearchField {
23        id: searchField
24
25        topInset: Kirigami.Units.smallSpacing
26        bottomInset: Kirigami.Units.smallSpacing
27
28        onTextChanged: filterModel.setFilterFixedString(text)
29    }
30
31
32    contentItem: ListView {
33        id: peopleList
34
35        clip: true
36
37        model: KPeople.PersonsSortFilterProxyModel {
38            id: filterModel
39
40            filterCaseSensitivity: Qt.CaseInsensitive
41            requiredProperties: ["email"]
42
43
44            Component.onCompleted: {
45                sourceModel = personsModel
46                sort(0);
47            }
48        }
49
50        Kirigami.PlaceholderMessage {
51            anchors.centerIn: parent
52            icon.name: "user"
53            text: i18n("No contacts found")
54            visible: peopleList.count === 0
55        }
56
57        delegate: Kirigami.DelegateRecycler {
58            sourceComponent: contactListDelegate
59        }
60
61        Component {
62            id: contactListDelegate
63
64            Kirigami.BasicListItem {
65                property var itemEmail: personData && personData.person && personData.person.contactCustomProperty("email")
66                checkable: true
67                enabled: model && root.preEditEmails.indexOf(itemEmail) === -1
68                checked: model && root.selectedPersons && root.selectedPersons.indexOf(model.personUri) >= 0
69
70                onCheckedChanged: {
71                    if(!model) {
72                        return;
73                    }
74
75                    if(checked) {
76                        var uris = root.selectedPersons;
77                        uris.push(model.personUri);
78                        root.selectedPersons = uris;
79                    }
80                    else {
81                        var uris = root.selectedPersons;
82                        uris.pop(model.personUri);
83                        root.selectedPersons = uris;
84                    }
85                }
86
87                KPeople.PersonData {
88                        id: personData
89
90                        personUri: model && model.personUri
91                }
92
93                icon: model && model.decoration
94                label: model && model.display
95                subtitle: itemEmail
96            }
97        }
98
99        KPeople.PersonsModel {
100            id: personsModel
101        }
102    }
103
104    footer: RowLayout {
105        Item {
106            Layout.fillWidth: true
107        }
108
109        Controls2.ToolButton {
110            text: i18n("Add")
111            icon.name: 'contact-new-symbolic'
112
113            enabled: selectedPersons.length > 0
114
115            onClicked: {
116                editorCompleted(root.selectedPersons);
117                root.close();
118            }
119        }
120
121        Controls2.ToolButton {
122            text: i18n("Cancel")
123            icon.name: 'dialog-cancel'
124
125            onClicked: {
126                root.close();
127            }
128        }
129    }
130}
131