aboutsummaryrefslogtreecommitdiff
path: root/kodereviewer/qml/CommentPage.qml
blob: c63aac563f6c05fbe8add664520fdb6229ba8179 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
pragma ComponentBehavior: Bound
import QtQuick
import QtCore
import QtQuick.Controls as QQC2
import QtQuick.Layouts

import org.kde.kirigami as Kirigami
import org.kde.kirigamiaddons.formcard as FormCard
import org.kde.kirigamiaddons.components as KirigamiComponents
import org.deprecated.kodereviewer 1.0


Kirigami.ScrollablePage {
    id: root

    property PullRequest pullRequest
    property NetworkManager connection

    Kirigami.Theme.colorSet: Kirigami.Theme.View
    Kirigami.Theme.inherit: false

    title: pullRequest ? `#${pullRequest.number}` : ""

    actions: commonActions

    property string comment: ""

    onPullRequestChanged: comment = ""

    Timer {
        // Ten minutes?
        id: getCommentsTimer
        interval: 1000 * 60 * 10
        running: false
        repeat: true
        triggeredOnStart: true
        onTriggered: {
            console.log("Getting comments from timer")
            root.connection.getPullRequestComments(root.pullRequest.number)
        }
    }

    // Delay getCommentsTimer for 2s
    Timer {
        id: delayTimer
        interval: 1000 * 2
        running: false
        repeat: false
        onTriggered: {
            getCommentsTimer.restart()
        }
    }

    Loader {
        id: commentModelLoader
        active: !!root.pullRequest
        sourceComponent: CommentModel {
            id: commentModel
            pullRequest: root.pullRequest

            onPullRequestChanged: getCommentsTimer.restart()
        }
        onActiveChanged: console.log("active? " + active + " pull request: " + root.pullRequest)
    }

    Kirigami.CardsListView {
        id: commentsListView
        Layout.fillWidth: true
        Layout.fillHeight: true
        visible: !!root.pullRequest
        model: commentModelLoader.item

        signal quote(string a)

        delegate: CommentDelegate {
            onQuote: (quote) => {
                if (root.comment.length > 0)
                    root.comment += "\n\n"
                root.comment += quote
            }
        }


        footerPositioning: ListView.InlineFooter

        footer: Item {
            id: rootFooter
            anchors.left: parent.left
            anchors.right: parent.right
            height: footerLayout.implicitHeight

            RowLayout {
                id: footerLayout
                anchors.fill: parent
                anchors.topMargin: Kirigami.Units.largeSpacing * 2

                MarkdownTextArea {
                    id: newCommentTextArea
                    Layout.fillWidth: true
                    text: root.comment
                }
                QQC2.Button {
                    icon.name: "document-send-symbolic"
                    enabled: newCommentTextArea.text != ''
                    Layout.fillHeight: true

                    onClicked: {
                        if (newCommentTextArea.text == '') {
                            return
                        }

                        root.connection.createComment(root.pullRequest.number, newCommentTextArea.text)
                        root.comment = ''
                        delayTimer.restart()
                    }
                }
            }
        }
    }
}