Browse Source

Улучшение фильтра

Book Pauk 2 years ago
parent
commit
53873910c2
1 changed files with 14 additions and 6 deletions
  1. 14 6
      server/core/DbCreator.js

+ 14 - 6
server/core/DbCreator.js

@@ -70,11 +70,17 @@ class DbCreator {
         callback({recsLoaded});
         callback({recsLoaded});
         let chunkNum = 0;
         let chunkNum = 0;
 
 
-        //фильтр по авторам
+        //фильтр
         const inpxFilter = await this.loadInpxFilter();
         const inpxFilter = await this.loadInpxFilter();
-        let filterAuthor = () => true;
+        let filter = () => true;
         if (inpxFilter) {
         if (inpxFilter) {
-            filterAuthor = (author) => {
+
+            let recFilter = () => true;
+            if (inpxFilter.filter)
+                recFilter = new Function(`'use strict'; return ${inpxFilter.filter}`)();
+
+            filter = (rec) => {
+                let author = rec.author;
                 if (!author)
                 if (!author)
                     author = emptyFieldValue;
                     author = emptyFieldValue;
 
 
@@ -92,7 +98,9 @@ class DbCreator {
                     }
                     }
                 }
                 }
 
 
-                return (!inpxFilter.includeSet || inpxFilter.includeSet.has(author)) && !excluded
+                return recFilter(rec)
+                    && (!inpxFilter.includeSet || inpxFilter.includeSet.has(author))
+                    && !excluded
                 ;
                 ;
             };
             };
         }
         }
@@ -124,8 +132,8 @@ class DbCreator {
         const parsedCallback = async(chunk) => {
         const parsedCallback = async(chunk) => {
             let filtered = false;
             let filtered = false;
             for (const rec of chunk) {
             for (const rec of chunk) {
-                //сначала фильтр по авторам
-                if (!filterAuthor(rec.author)) {
+                //сначала фильтр
+                if (!filter(rec)) {
                     rec.id = 0;
                     rec.id = 0;
                     filtered = true;
                     filtered = true;
                     continue;
                     continue;