Browse Source

Работа над расширенным поиском

Book Pauk 2 years ago
parent
commit
f132cdfbdf
2 changed files with 21 additions and 5 deletions
  1. 6 3
      client/components/Search/BaseList.js
  2. 15 2
      server/core/DbSearcher.js

+ 6 - 3
client/components/Search/BaseList.js

@@ -113,16 +113,19 @@ export default class BaseList {
     }
 
     selectAuthor(author) {
-        this.search.author = `=${author}`;
+        const search = (this.isExtendedSearch ? this.extSearch : this.search);
+        search.author = `=${author}`;
         this.scrollToTop();
     }
 
     selectSeries(series) {
-        this.search.series = `=${series}`;
+        const search = (this.isExtendedSearch ? this.extSearch : this.search);
+        search.series = `=${series}`;
     }
 
     selectTitle(title) {
-        this.search.title = `=${title}`;
+        const search = (this.isExtendedSearch ? this.extSearch : this.search);
+        search.title = `=${title}`;
     }
 
     async download(book, action) {

+ 15 - 2
server/core/DbSearcher.js

@@ -608,10 +608,23 @@ class DbSearcher {
                     for (const id of @all()) {
                         const row = @unsafeRow(id);
                         if (checkBook(row))
-                            result.push(row.id);
+                            result.push(row);
                     }
 
-                    return new Uint32Array(result);
+                    result.sort((a, b) => {
+                        let cmp = a.author.localeCompare(b.author);
+                        if (cmp === 0 && (a.series || b.series)) {
+                            cmp = (a.series && b.series ? a.series.localeCompare(b.series) : (a.series ? -1 : 1));
+                        }
+                        if (cmp === 0)
+                            cmp = a.serno - b.serno;
+                        if (cmp === 0)
+                            cmp = a.title.localeCompare(b.title);
+
+                        return cmp;
+                    });
+
+                    return new Uint32Array(result.map(row => row.id));
                 `
             });