@gudhub/core 1.1.70 → 1.1.71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -911,10 +911,10 @@ export default function generateModulesList(async_modules_path, file_server_url,
911
911
  },
912
912
  {
913
913
  data_type: 'static_nested_list',
914
- name: 'Static Nested List',
914
+ name: 'Nested Filter',
915
915
  icon: 'scheduling',
916
- js: 'https://gudhub.com/modules/nested-filter/dist/main.js',
917
- css: 'https://gudhub.com/modules/nested-filter/dist/style.css',
916
+ js: 'https://gudhub.com/modules/nested-filter/dist/main.js?t=1',
917
+ css: 'https://gudhub.com/modules/nested-filter/dist/style.css?t=1',
918
918
  type: 'gh_element',
919
919
  technology: 'class'
920
920
  },
@@ -1,5 +1,6 @@
1
1
  import { filterPreparation } from "./filter/filterPreparation.js";
2
2
  import filter from "./filter/filter.js";
3
+ import { mergeFilters } from "./filter/mergeFilters.js";
3
4
  import { jsonToItems } from "./json_to_items/json_to_items.js";
4
5
  import {
5
6
  mergeItems,
@@ -48,6 +49,10 @@ export class Utils {
48
49
  return filter(items, filter_list);
49
50
  }
50
51
 
52
+ mergeFilters(src, dest) {
53
+ return mergeFilters(src, dest);
54
+ }
55
+
51
56
  group(fieldGroup, items) {
52
57
  return group(fieldGroup, items);
53
58
  }
@@ -68,10 +73,7 @@ export class Utils {
68
73
  app_id,
69
74
  item_id
70
75
  );
71
- const itemsList = this.filter(items, [
72
- ...filters_list,
73
- ...modified_filters_list,
74
- ]);
76
+ const itemsList = this.filter(items, modified_filters_list);
75
77
  const newItems = this.group(field_group, itemsList);
76
78
  return newItems
77
79
  .filter((newItem) => {
@@ -1,34 +1,13 @@
1
1
  import { getDate, getDistanceFromLatLonInKm, isSimilarStrings } from "./utils.js";
2
2
 
3
3
  export default function (items, filters) {
4
- const filterAggregate = new Aggregate();
5
- const filterChecker = new Checker();
4
+ const itemsFilter = new ItemsFilter();
6
5
 
7
6
  if (!items || !items.length) {
8
7
  return [];
9
8
  }
10
9
 
11
- return items.filter(function (item) {
12
- return filters
13
- .filter(function (filter) {
14
- return filter.valuesArray.length;
15
- })
16
- .every(function (filter) {
17
- var currField = item.fields.find(function (itemField) {
18
- return filter.field_id == itemField.field_id;
19
- });
20
-
21
- filterAggregate
22
- .setStrategy(filter.search_type)
23
- .setEntity(
24
- currField && currField.field_value != undefined
25
- ? currField.field_value
26
- : null
27
- )
28
- .setFilterValues(filter.valuesArray);
29
- return filterChecker.check(filterAggregate);
30
- });
31
- });
10
+ return itemsFilter.filter(filters, items);
32
11
  }
33
12
 
34
13
  class Checker {
@@ -326,3 +305,67 @@ class Aggregate {
326
305
  return this._checkOption;
327
306
  }
328
307
  }
308
+
309
+ class ItemsFilter {
310
+ constructor() {
311
+
312
+ }
313
+
314
+ filter(filters, items) {
315
+
316
+ const filteredItems = [];
317
+ const activeFilters = filters.filter(function (filter) {
318
+ return filter.valuesArray.length;
319
+ });
320
+
321
+ for(let item of items) {
322
+ let result = true;
323
+
324
+ for(let i = 0; i < activeFilters.length; i++) {
325
+ const filter = activeFilters[i];
326
+
327
+ const currField = item.fields.find(function (itemField) {
328
+ return filter.field_id == itemField.field_id;
329
+ });
330
+
331
+ const filterAggregate = new Aggregate();
332
+ const filterChecker = new Checker();
333
+
334
+ filterAggregate
335
+ .setStrategy(filter.search_type)
336
+ .setEntity(
337
+ currField && currField.field_value != undefined
338
+ ? currField.field_value
339
+ : null
340
+ )
341
+ .setFilterValues(filter.valuesArray);
342
+
343
+ switch(filter.boolean_strategy) {
344
+ case 'and':
345
+ result = result && filterChecker.check(filterAggregate);
346
+ break;
347
+
348
+ case 'or':
349
+ result = result || filterChecker.check(filterAggregate);
350
+ break;
351
+
352
+ default:
353
+ result = result && filterChecker.check(filterAggregate);
354
+ }
355
+
356
+ }
357
+
358
+ if(result) {
359
+ filteredItems.push(item);
360
+ }
361
+ }
362
+
363
+ if(filteredItems.length || filters.length && !filteredItems.length) {
364
+ return filteredItems;
365
+ }
366
+ else {
367
+ return items;
368
+ }
369
+
370
+ }
371
+ }
@@ -1,6 +1,8 @@
1
1
  import should from 'should';
2
2
  import {GudHub} from './../../gudhub.js';
3
3
 
4
+ import { app_8263 } from '../../../fake_server/fake_server_data/app_8263.js';
5
+
4
6
 
5
7
 
6
8
  describe('Filter', function() {
@@ -9,6 +11,64 @@ import {GudHub} from './../../gudhub.js';
9
11
  it('Should return one Item', function(){
10
12
  gudhub.filter(items, filters).length.should.equal(1);
11
13
  });
14
+
15
+ it('FILTER AND / should return items matching first AND second filter', function() {
16
+ const filters = [
17
+ {
18
+ "field_id": 96606,
19
+ "data_type": "text",
20
+ "valuesArray": [
21
+ "Dothan"
22
+ ],
23
+ "search_type": "contain_or",
24
+ "boolean_strategy": "and",
25
+ "selected_search_option_variable": "Value"
26
+ },
27
+
28
+ {
29
+ "field_id": 96608,
30
+ "data_type": "phone",
31
+ "valuesArray": [
32
+ "677"
33
+ ],
34
+ "search_type": "contain_or",
35
+ "boolean_strategy": "and",
36
+ "selected_search_option_variable": "Value"
37
+ }
38
+ ];
39
+
40
+ const filteredItems = gudhub.filter(app_8263.items_list, filters);
41
+ filteredItems.length.should.equal(1);
42
+ });
43
+
44
+ it('FILTER OR / should return items matching first OR second filter', function() {
45
+ const filters = [
46
+ {
47
+ "field_id": 96606,
48
+ "data_type": "text",
49
+ "valuesArray": [
50
+ "Distributors"
51
+ ],
52
+ "search_type": "contain_or",
53
+ "boolean_strategy": "and",
54
+ "selected_search_option_variable": "Value"
55
+ },
56
+
57
+ {
58
+ "field_id": 96608,
59
+ "data_type": "phone",
60
+ "valuesArray": [
61
+ "353"
62
+ ],
63
+ "search_type": "contain_or",
64
+ "boolean_strategy": "or",
65
+ "selected_search_option_variable": "Value"
66
+ }
67
+ ];
68
+
69
+ const filteredItems = gudhub.filter(app_8263.items_list, filters);
70
+ filteredItems.length.should.equal(8);
71
+ });
12
72
 
13
73
  });
14
74
 
@@ -55,6 +55,8 @@ export async function filterPreparation(
55
55
  if (filters_list) {
56
56
  for (const filter of filters_list) {
57
57
  if (filter) {
58
+ // ---------------------- WARNING !!! -------------------------------
59
+ // Should be fixed: modification of filters_list valuesArray
58
60
  switch (filter.input_type) {
59
61
  case "variable":
60
62
  const functionName =
@@ -0,0 +1,32 @@
1
+ export function mergeFilters(srcFilters, destFilters) {
2
+ const mergedFieldIds = [];
3
+ let filters = [];
4
+
5
+ if(srcFilters.length > 0) {
6
+ srcFilters.forEach(filter => {
7
+ filters.push(filter);
8
+ });
9
+ } else {
10
+ filters = destFilters;
11
+ }
12
+
13
+ if(filters.length > 0) {
14
+
15
+ filters.forEach((filter, index) => {
16
+ for(let i = 0; i < destFilters.length; i++) {
17
+ if(filter.field_id == destFilters[i].field_id) {
18
+ mergedFieldIds.push(filter.field_id);
19
+ filters[index] = gudhub.mergeObjects(destFilters[i], filter);
20
+ }
21
+ }
22
+ });
23
+
24
+ for(let k = 0; k < destFilters.length; k++) {
25
+ if(!mergedFieldIds.includes(destFilters[k].field_id)) {
26
+ filters.push(destFilters[k]);
27
+ }
28
+ }
29
+
30
+ }
31
+ return filters;
32
+ }
package/GUDHUB/gudhub.js CHANGED
@@ -176,6 +176,11 @@ export class GudHub {
176
176
  return this.util.filter(items, filter_list);
177
177
  }
178
178
 
179
+ //============ MERGE FILTERS ==========//
180
+ mergeFilters(source, destination) {
181
+ return this.util.mergeFilters(source, destination);
182
+ }
183
+
179
184
  //============ GROUP ==========//
180
185
  group(fieldGroup, items) {
181
186
  return this.util.group(fieldGroup, items);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gudhub/core",
3
- "version": "1.1.70",
3
+ "version": "1.1.71",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {