Эх сурвалжийг харах

[editor] Fetch paginated queries

Johan Ahlen 9 жил өмнө
parent
commit
e10a95b

+ 5 - 1
desktop/core/src/desktop/static/desktop/js/assist/assistHelper.js

@@ -273,6 +273,8 @@
    * @param {string} [options.path]
    * @param {string} [options.query]
    * @param {string} [options.type]
+   * @param {int} [options.page]
+   * @param {int} [options.limit]
    */
   AssistHelper.prototype.searchDocuments = function (options) {
     var self = this;
@@ -281,7 +283,9 @@
       data: {
         uuid: options.uuid,
         text: options.query,
-        type: options.type
+        type: options.type,
+        page: options.page,
+        limit: options.limit
       },
       success: function (data) {
         if (! self.successResponseIsError(data)) {

+ 46 - 2
desktop/libs/notebook/src/notebook/static/notebook/js/notebook.ko.js

@@ -200,14 +200,58 @@
 
     self.errorLoadingQueries = ko.observable(false);
     self.loadingQueries = ko.observable(false);
+
+    self.queriesHasErrors = ko.observable(false);
+    self.loadingQueries = ko.observable(false);
+    self.queriesCurrentPage = ko.observable(1);
+    self.queriesTotalPages = ko.observable(1);
     self.queries = ko.observableArray();
 
+    var fetchQueries = function () {
+      if (self.loadingQueries()) {
+        return;
+      }
+      lastQueriesPage = self.queriesCurrentPage();
+      self.loadingQueries(true);
+      self.queriesHasErrors(false);
+      self.getAssistHelper().searchDocuments({
+        successCallback: function (result) {
+          self.queriesTotalPages(Math.ceil(result.count / 25));
+          self.queries(result.children);
+          self.loadingQueries(false);
+          self.queriesHasErrors(false);
+        },
+        errorCallback: function () {
+          self.loadingQueries(false);
+          self.queriesHasErrors(true);
+        },
+        page: self.queriesCurrentPage(),
+        limit: 25,
+        type: 'query-' + self.type()
+      });
+    }
+
+    var lastQueriesPage = 1;
     self.currentQueryTab.subscribe(function (newValue) {
-      if (newValue === 'myQueries') {
-        // Load the queries
+      if (newValue === 'myQueries' && (self.queries().length === 0 || lastQueriesPage !== self.queriesCurrentPage())) {
+        fetchQueries();
       }
     });
 
+    self.prevQueriesPage = function () {
+      if (self.queriesCurrentPage() !== 1) {
+        self.queriesCurrentPage(self.queriesCurrentPage() - 1);
+        fetchQueries();
+      }
+    };
+
+    self.nextQueriesPage = function () {
+      if (self.queriesCurrentPage() !== self.queriesTotalPages()) {
+        self.queriesCurrentPage(self.queriesCurrentPage() + 1);
+        fetchQueries();
+      }
+    };
+
 
     self.isSqlDialect.subscribe(updateDatabases);
     updateDatabases();

+ 23 - 1
desktop/libs/notebook/src/notebook/templates/editor_components.mako

@@ -461,7 +461,29 @@ ${ require.config() }
         </div>
 
         <div class="tab-pane" id="myQueries">
-          Hola?
+          <!-- ko spinner: loadingQueries --><!-- /ko -->
+          <!-- ko if: queriesHasErrors() -->
+          <div class="margin-top-10 margin-left-10" style="font-style: italic">${ _("Error loading queries") }</div>
+          <!-- /ko -->
+          <!-- ko if: ! queriesHasErrors() && ! loadingQueries() && queries().length === 0 -->
+          <div class="margin-top-10 margin-left-10" style="font-style: italic">${ _("Query history is empty") }</div>
+          <!-- /ko -->
+          <!-- ko if: ! queriesHasErrors() && ! loadingQueries() && queries().length > 0 -->
+          <table class="table table-condensed">
+            <tbody data-bind="foreach: queries">
+            <tr>
+              <td><a data-bind="click: function () { console.log($data) }">Click me</a></td>
+            </tr>
+            </tbody>
+          </table>
+          <div class="pagination">
+            <ul>
+              <li data-bind="css: { 'disabled' : queriesCurrentPage() === 1 }"><a href="javascript: void(0);" data-bind="click: prevQueriesPage">${ _("Prev") }</a></li>
+              <li class="active"><span data-bind="text: queriesCurrentPage() + '/' + queriesTotalPages()"></span></li>
+              <li data-bind="css: { 'disabled' : queriesCurrentPage() === queriesTotalPages() }"><a href="javascript: void(0);" data-bind="click: nextQueriesPage">${ _("Next") }</a></li>
+            </ul>
+          </div>
+          <!-- /ko -->
         </div>
       </div>