blob: 2ec0852090a32531ab35f170c4750136974f30ef (
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
|
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef PAGINATEDRESOURCE_H
#define PAGINATEDRESOURCE_H
#include "abstractresource.h"
#include <QtQml/qqml.h>
#include <QtNetwork/qnetworkreply.h>
#include <QtCore/qjsonobject.h>
class RestAccessManager;
// This class manages a simple paginated Crud resource,
// where the resource is a paginated list of JSON items
class PaginatedResource : public AbstractResource
{
Q_OBJECT
Q_PROPERTY(QList<QJsonObject> data READ data NOTIFY dataUpdated)
Q_PROPERTY(int page READ page WRITE setPage NOTIFY pageUpdated)
Q_PROPERTY(int pages READ pages NOTIFY pageUpdated)
Q_PROPERTY(QString path MEMBER m_path REQUIRED)
QML_ELEMENT
public:
explicit PaginatedResource(QObject* parent = nullptr);
~PaginatedResource() override = default;
QList<QJsonObject> data() const;
// Total number of pages according to the server
int pages() const;
// Current page this resource is on. Changing the page will initiate a refresh.
// The default page is 1
int page() const;
void setPage(int page);
Q_INVOKABLE void refreshCurrentPage();
Q_INVOKABLE void update(const QVariantMap& data, int id);
Q_INVOKABLE void add(const QVariantMap& data);
Q_INVOKABLE void remove(int id);
signals:
void dataUpdated();
void pageUpdated();
private:
void refreshRequestFinished(QNetworkReply* reply);
QList<QJsonObject> m_data;
// The total number of pages as reported by the server responses
int m_pages = 0;
// The default page we request if the user hasn't set otherwise
int m_currentPage = 1;
QString m_path;
};
#endif // PAGINATEDRESOURCE_H
|