@gudhub/core 1.0.37

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.
Files changed (67) hide show
  1. package/GUDHUB/Auth/Auth.js +137 -0
  2. package/GUDHUB/Auth/Auth.test.js +15 -0
  3. package/GUDHUB/Managers/ChunksManager/ChunksManager.js +80 -0
  4. package/GUDHUB/Managers/ChunksManager/ChunksManager.test.js +46 -0
  5. package/GUDHUB/Managers/DocumentManager/DocumentManager.js +48 -0
  6. package/GUDHUB/Managers/FileManager/FileManager.js +208 -0
  7. package/GUDHUB/Managers/FileManager/file_manager.test.js +17 -0
  8. package/GUDHUB/Managers/managers.js +5 -0
  9. package/GUDHUB/PipeService/PipeService.js +167 -0
  10. package/GUDHUB/PipeService/PipeService.test.js +64 -0
  11. package/GUDHUB/PipeService/utils.js +32 -0
  12. package/GUDHUB/Processors/AppProcessor/AppProcessor.js +433 -0
  13. package/GUDHUB/Processors/AppProcessor/AppProcessor.test.js +38 -0
  14. package/GUDHUB/Processors/AppProcessor/AppProcessorMocks.js +83 -0
  15. package/GUDHUB/Processors/FieldProcessor/FieldProcessor.js +139 -0
  16. package/GUDHUB/Processors/FieldProcessor/FieldProcessor.test.js +16 -0
  17. package/GUDHUB/Processors/FieldProcessor/Untitled-1.json +17 -0
  18. package/GUDHUB/Processors/FieldProcessor/field_processor.md +85 -0
  19. package/GUDHUB/Processors/ItemProcessor/ItemProcessor.js +247 -0
  20. package/GUDHUB/Processors/ItemProcessor/item_processor.md +50 -0
  21. package/GUDHUB/Processors/processors.js +5 -0
  22. package/GUDHUB/Storage/Storage.js +115 -0
  23. package/GUDHUB/Storage/Storage.test.js +112 -0
  24. package/GUDHUB/Utils/Utils.js +153 -0
  25. package/GUDHUB/Utils/compare_items_lists_worker/compare_items_lists.worker.js +50 -0
  26. package/GUDHUB/Utils/filter/filter.js +308 -0
  27. package/GUDHUB/Utils/filter/filter.test.js +94 -0
  28. package/GUDHUB/Utils/filter/filterPreparation.js +103 -0
  29. package/GUDHUB/Utils/filter/group.js +41 -0
  30. package/GUDHUB/Utils/filter/utils.js +119 -0
  31. package/GUDHUB/Utils/get_date/get_date.js +90 -0
  32. package/GUDHUB/Utils/get_date/get_date.test.js +53 -0
  33. package/GUDHUB/Utils/interpretation/interpretation.js +100 -0
  34. package/GUDHUB/Utils/json_constructor/json_constructor.js +130 -0
  35. package/GUDHUB/Utils/json_constructor/json_constructor.test.js +70 -0
  36. package/GUDHUB/Utils/json_to_items/json_to_items.js +161 -0
  37. package/GUDHUB/Utils/json_to_items/json_to_items.test.js +85 -0
  38. package/GUDHUB/Utils/merge_chunks/merge_chunks.js +30 -0
  39. package/GUDHUB/Utils/merge_compare_items/merge_compare_items.js +316 -0
  40. package/GUDHUB/Utils/merge_compare_items/merge_compare_items.test.js +632 -0
  41. package/GUDHUB/Utils/merge_objects/merge_objects.js +120 -0
  42. package/GUDHUB/Utils/merge_objects/merge_objects.test.js +137 -0
  43. package/GUDHUB/Utils/nested_list/nested_list.js +38 -0
  44. package/GUDHUB/Utils/nested_list/nested_list.test.js +70 -0
  45. package/GUDHUB/Utils/populate_items/populate_items.js +66 -0
  46. package/GUDHUB/WebSocket/WebSocket.js +136 -0
  47. package/GUDHUB/config.js +8 -0
  48. package/GUDHUB/consts.js +1 -0
  49. package/GUDHUB/gudhub-https-service.js +193 -0
  50. package/GUDHUB/gudhub.js +477 -0
  51. package/GUDHUB/gudhub.test.js +218 -0
  52. package/GUDHUB/utils.js +25 -0
  53. package/Readme.md +537 -0
  54. package/fake_server/fake_java_server.js +112 -0
  55. package/fake_server/fake_server_data/app_132.js +3037 -0
  56. package/fake_server/fake_server_data/app_16259.js +1152 -0
  57. package/fake_server/fake_server_data/app_214.js +2057 -0
  58. package/fake_server/fake_server_data/app_8263.js +4167 -0
  59. package/fake_server/fake_server_data/chunks_mocks/bcacjbgqorherqmtykrj_8263.js +44561 -0
  60. package/fake_server/fake_server_data/chunks_mocks/bcjyuoqaewybudfyhir_8263.js +44197 -0
  61. package/fake_server/fake_server_data/chunks_mocks/tpajkpolmzklodcba_8263.js +44977 -0
  62. package/fake_server/fake_server_data/fake_server_data.js +111 -0
  63. package/index.js +3 -0
  64. package/indexUMD.js +5 -0
  65. package/package.json +45 -0
  66. package/umd/library.min.js +186 -0
  67. package/umd/library.min.js.map +1 -0
@@ -0,0 +1,308 @@
1
+ import { getDate, getDistanceFromLatLonInKm, isSimilarStrings } from "./utils.js";
2
+
3
+ export default function (items, filters) {
4
+ const filterAggregate = new Aggregate();
5
+ const filterChecker = new Checker();
6
+
7
+ if (!items || !items.length) {
8
+ return [];
9
+ }
10
+
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
+ });
32
+ }
33
+
34
+ class Checker {
35
+ changeBehavior(checkOption) {
36
+ switch (checkOption) {
37
+ case "contain_or":
38
+ this._checkFn = function (data, filtersValues) {
39
+ return filtersValues.some((_filter) =>
40
+ data.some((_dataItem) => _dataItem.indexOf(_filter) !== -1)
41
+ );
42
+ };
43
+ break;
44
+ case "contain_and":
45
+ this._checkFn = function (data, filtersValues) {
46
+ return filtersValues.every((_filter) =>
47
+ data.some((_dataItem) => _dataItem.indexOf(_filter) !== -1)
48
+ );
49
+ };
50
+ break;
51
+ case "not_contain_or":
52
+ this._checkFn = function (data, filtersValues) {
53
+ return filtersValues.some((_filter) =>
54
+ data.every((_dataItem) => _dataItem.indexOf(_filter) === -1)
55
+ );
56
+ };
57
+ break;
58
+ case "not_contain_and":
59
+ this._checkFn = function (data, filtersValues) {
60
+ return filtersValues.every((_filter) =>
61
+ data.every((_dataItem) => _dataItem.indexOf(_filter) === -1)
62
+ );
63
+ };
64
+ break;
65
+ case "equal_or":
66
+ this._checkFn = function (data, filtersValues) {
67
+ if (!data.length) return false;
68
+ return data.some((_dataItem) =>
69
+ filtersValues.some((_filter) => _dataItem == _filter)
70
+ );
71
+ };
72
+ break;
73
+ case "equal_and":
74
+ this._checkFn = function (data, filtersValues) {
75
+ if (!data.length) return false;
76
+
77
+ let filtersValuesSet = new Set(filtersValues);
78
+ while (data.length && filtersValuesSet.size) {
79
+ let dataValue = data.pop();
80
+ if (filtersValuesSet.has(dataValue)) {
81
+ filtersValuesSet.delete(dataValue);
82
+ }
83
+ }
84
+ return !filtersValuesSet.size;
85
+ };
86
+ break;
87
+ case "not_equal_or":
88
+ this._checkFn = function (data, filtersValues) {
89
+ if (!data.length) return true;
90
+ let filtersValuesSet = new Set(filtersValues);
91
+ while (data.length && filtersValuesSet.size) {
92
+ let dataValue = data.pop();
93
+ if (!filtersValuesSet.has(dataValue)) {
94
+ return true;
95
+ }
96
+ }
97
+ return false;
98
+ };
99
+ break;
100
+ case "not_equal_and":
101
+ this._checkFn = function (data, filtersValues) {
102
+ let filtersValuesSet = new Set(filtersValues);
103
+ while (data.length && filtersValuesSet.size) {
104
+ let dataValue = data.pop();
105
+ if (filtersValuesSet.has(dataValue)) {
106
+ return false;
107
+ }
108
+ }
109
+ return true;
110
+ };
111
+ break;
112
+ case "bigger":
113
+ this._checkFn = function (data, filtersValues) {
114
+ return filtersValues.some((_filter) =>
115
+ data.every((_dataItem) => _dataItem > _filter)
116
+ );
117
+ };
118
+ break;
119
+ case "lower":
120
+ this._checkFn = function (data, filtersValues) {
121
+ return filtersValues.some((_filter) =>
122
+ data.every((_dataItem) => _dataItem < _filter)
123
+ );
124
+ };
125
+ break;
126
+ case "range":
127
+ this._checkFn = function (data, filtersValues) {
128
+ return filtersValues.some((_filter) =>
129
+ data.every(
130
+ (_dataItem) =>
131
+ _filter.start <= _dataItem && _dataItem < _filter.end
132
+ )
133
+ );
134
+ };
135
+ break;
136
+ case "value":
137
+ this._checkFn = function (data, filtersValues) {
138
+ return filtersValues.some((_filter) =>
139
+ data.some((_dataItem) => _dataItem == _filter)
140
+ );
141
+ };
142
+ break;
143
+ case 'search':
144
+ this._checkFn = function (data, filtersValues) {
145
+ return filtersValues.some((_filter) => isSimilarStrings(_filter, data));
146
+ };
147
+ break;
148
+ case "phone_equal_or":
149
+ this._checkFn = function (data, filtersValues) {
150
+ if (!data.length) return false;
151
+ return filtersValues.some((_filter) =>
152
+ data.some(
153
+ (_dataItem) =>
154
+ _dataItem
155
+ .replace(/[^0-9]/g, "")
156
+ .indexOf(_filter.replace(/[^0-9]/g, "")) !== -1
157
+ )
158
+ );
159
+ };
160
+ break;
161
+ case 'distance':
162
+ this._checkFn = function (data, filtersValues) {
163
+ return filtersValues.some((_filter) => data.some((_dataItem) => getDistanceFromLatLonInKm(_filter, _dataItem)));
164
+ };
165
+ break;
166
+ case "date_in":
167
+ case "date_out":
168
+ this._checkFn = function (data, filtersValues) {
169
+ return filtersValues.some((_filter) =>
170
+ data.some((_dataItem) => getDate(_filter, _dataItem))
171
+ );
172
+ };
173
+ break;
174
+ }
175
+ return this;
176
+ }
177
+
178
+ check(aggregate) {
179
+ return this.changeBehavior(aggregate.getCheckOption())._checkFn(
180
+ aggregate.getEntity(),
181
+ aggregate.getFilterValues()
182
+ );
183
+ }
184
+ }
185
+
186
+ class NumberFetchStrategy {
187
+ convert(val) {
188
+ return [Number(val)];
189
+ }
190
+
191
+ convertFilterValue(val) {
192
+ return Number(val);
193
+ }
194
+ }
195
+
196
+ class RangeFetchStrategy extends NumberFetchStrategy {
197
+ convertFilterValue(val) {
198
+ return {
199
+ start: Number(val.split(":")[0]),
200
+ end: Number(val.split(":")[1]),
201
+ };
202
+ }
203
+ }
204
+
205
+ class StringFetchStrategy {
206
+ convert(val) {
207
+ return String(val != null ? val : "")
208
+ .toLowerCase()
209
+ .split(",");
210
+ }
211
+
212
+ convertFilterValue(val) {
213
+ if (val === 0) return "0";
214
+ return String(val || "").toLowerCase();
215
+ }
216
+ }
217
+
218
+ class dateFetchStrategy extends NumberFetchStrategy {
219
+ convertFilterValue(val) {
220
+ const [type, date, match] = val.split(":");
221
+ return {
222
+ type,
223
+ date: Number(date),
224
+ match: !!Number(match),
225
+ };
226
+ }
227
+ }
228
+
229
+ class BooleanFetchStrategy {
230
+ convert(val) {
231
+ return [String(Boolean(val))];
232
+ }
233
+
234
+ convertFilterValue(val) {
235
+ return String(val);
236
+ }
237
+ }
238
+
239
+ class Aggregate {
240
+ constructor() {
241
+ this._strategies = {
242
+ stringStrategy: new StringFetchStrategy(),
243
+ numberStrategy: new NumberFetchStrategy(),
244
+ booleanStrategy: new BooleanFetchStrategy(),
245
+ rangeStrategy: new RangeFetchStrategy(),
246
+ dateStrategy: new dateFetchStrategy(),
247
+ };
248
+ }
249
+
250
+ setStrategy(checkOption) {
251
+ this._checkOption = checkOption;
252
+ switch (checkOption) {
253
+ case "contain_or":
254
+ case "contain_and":
255
+ case "not_contain_or":
256
+ case "not_contain_and":
257
+ case "equal_or":
258
+ case "equal_and":
259
+ case "not_equal_or":
260
+ case "not_equal_and":
261
+ case "phone_equal_or":
262
+ case 'distance':
263
+ case 'search':
264
+ this._currentStrategy = this._strategies.stringStrategy;
265
+ break;
266
+ case "bigger":
267
+ case "lower":
268
+ this._currentStrategy = this._strategies.numberStrategy;
269
+ break;
270
+ case "range":
271
+ this._currentStrategy = this._strategies.rangeStrategy;
272
+ break;
273
+ case "date_in":
274
+ case "date_out":
275
+ this._currentStrategy = this._strategies.dateStrategy;
276
+ break;
277
+ case "value":
278
+ this._currentStrategy = this._strategies.booleanStrategy;
279
+ break;
280
+ }
281
+ return this;
282
+ }
283
+
284
+ setEntity(val) {
285
+ this._entity = this._currentStrategy.convert(val);
286
+ return this;
287
+ }
288
+
289
+ getEntity() {
290
+ return this._entity;
291
+ }
292
+
293
+ setFilterValues(val) {
294
+ let temp = Array.isArray(val) ? val : [val];
295
+ this._filterValues = temp.map((curFilterVal) =>
296
+ this._currentStrategy.convertFilterValue(curFilterVal)
297
+ );
298
+ return this;
299
+ }
300
+
301
+ getFilterValues() {
302
+ return this._filterValues;
303
+ }
304
+
305
+ getCheckOption() {
306
+ return this._checkOption;
307
+ }
308
+ }
@@ -0,0 +1,94 @@
1
+ import should from 'should';
2
+ import {GudHub} from './../../gudhub.js';
3
+
4
+
5
+
6
+ describe('Filter', function() {
7
+ const gudhub = new GudHub();
8
+
9
+ it('Should return one Item', function(){
10
+ gudhub.filter(items, filters).length.should.equal(1);
11
+ });
12
+
13
+ });
14
+
15
+
16
+ var items = [
17
+ {
18
+ "item_id": 987336,
19
+ "index_number": 7,
20
+ "last_update": 1584550861000,
21
+ "fields": [
22
+ {
23
+ "field_id": 228464,
24
+ "element_id": 228464,
25
+ "field_value": "235613",
26
+ "data_id": 5680732
27
+ },
28
+ {
29
+ "field_id": 223754,
30
+ "element_id": 223754,
31
+ "field_value": "666",
32
+ "data_id": 5680729
33
+ },
34
+ {
35
+ "field_id": 223714,
36
+ "element_id": 223714,
37
+ "field_value": "test",
38
+ "data_id": 5680730
39
+ },
40
+ {
41
+ "field_id": 223740,
42
+ "element_id": 223740,
43
+ "field_value": "1",
44
+ "data_id": 5680731
45
+ }
46
+ ]
47
+ },
48
+ {
49
+ "item_id": 1003970,
50
+ "index_number": 8,
51
+ "last_update": 1584707835000,
52
+ "fields": [
53
+ {
54
+ "field_id": 223714,
55
+ "element_id": 223714,
56
+ "field_value": "test",
57
+ "data_id": 5755743
58
+ },
59
+ {
60
+ "field_id": 223740,
61
+ "element_id": 223740,
62
+ "field_value": "2",
63
+ "data_id": 5755745
64
+ },
65
+ {
66
+ "field_id": 223754,
67
+ "element_id": 223754,
68
+ "field_value": "666",
69
+ "data_id": 5755744
70
+ },
71
+ {
72
+ "field_id": 228464,
73
+ "element_id": 228464,
74
+ "field_value": "239375",
75
+ "data_id": 5755746
76
+ }
77
+ ]
78
+ }
79
+ ];
80
+
81
+ var filters = [
82
+ {
83
+ "field_id": 223740,
84
+ "data_type": "radio_button",
85
+ "valuesArray": [
86
+ "2"
87
+ ],
88
+ "search_type": "equal_or",
89
+ "selected_search_option_variable": "Value"
90
+ }
91
+ ];
92
+
93
+ const filterDate = [{"field_id":364453,"data_type":"date","valuesArray":["day:0:1"],"search_type":"date_in","$$hashKey":"object:272","selected_search_option_variable":"Value"}]
94
+ const itemsForFilter = [{"item_id":1612822,"index_number":1,"last_update":1602848634000,"fields":[{"field_id":364453,"element_id":364453,"field_value":"1602810048860","data_id":10023401},{"field_id":363343,"element_id":363343,"field_value":"11","data_id":9801380}]},{"item_id":1612823,"index_number":2,"last_update":1602517283000,"fields":[{"field_id":363343,"element_id":363343,"field_value":"12","data_id":9801381}]},{"item_id":1612824,"index_number":3,"last_update":1602517289000,"fields":[{"field_id":363343,"element_id":363343,"field_value":"21","data_id":9801382}]},{"item_id":1612825,"index_number":4,"last_update":1602516710000,"fields":[{"field_id":363343,"element_id":363343,"field_value":"4","data_id":9801383}]}]
@@ -0,0 +1,103 @@
1
+ export async function filterPreparation(
2
+ filters_list,
3
+ element_app_id,
4
+ current_app_id,
5
+ item_id,
6
+ storage,
7
+ pipeService,
8
+ variables = []
9
+ ) {
10
+ const filterArray = [];
11
+
12
+ const objectMethod = {
13
+ variableMethodcurrent_app() {
14
+ return [current_app_id];
15
+ },
16
+ variableMethodelement_app() {
17
+ return [element_app_id];
18
+ },
19
+
20
+ variableMethodcurrent_item() {
21
+ const currentValue = `${current_app_id}.${item_id}`;
22
+ return [currentValue];
23
+ },
24
+
25
+ variableMethoduser_id() {
26
+ const storage_user = storage.getUser();
27
+ return [storage_user.user_id];
28
+ },
29
+
30
+ variableMethoduser_email(filter) {
31
+ const storage_user = storage.getUser();
32
+ return [storage_user.username];
33
+ },
34
+
35
+ variableMethodtoday(filter) {
36
+ const date = new Date();
37
+ const start_date = new Date(
38
+ date.getFullYear(),
39
+ date.getMonth(),
40
+ date.getDate()
41
+ );
42
+ const end_date = new Date(
43
+ date.getFullYear(),
44
+ date.getMonth(),
45
+ date.getDate() + 1
46
+ );
47
+ const result =
48
+ start_date.valueOf().toString() + ":" + end_date.valueOf().toString();
49
+ return [result];
50
+ },
51
+ variableMethodvariable() {
52
+ return variables;
53
+ },
54
+ };
55
+ if (filters_list) {
56
+ for (const filter of filters_list) {
57
+ if (filter) {
58
+ switch (filter.input_type) {
59
+ case "variable":
60
+ const functionName =
61
+ filter.input_type + "Method" + filter.input_value;
62
+ const func = objectMethod[functionName];
63
+ if (typeof func === "function") {
64
+ filter.valuesArray = func();
65
+ } else {
66
+ filter.valuesArray = objectMethod.variableMethodvariable();
67
+ }
68
+ filterArray.push(filter);
69
+ break;
70
+ case "field":
71
+ const field_value = await fieldMethod({
72
+ app_id: current_app_id,
73
+ item_id: item_id,
74
+ field_id: filter.input_value,
75
+ });
76
+ if(field_value != null){
77
+ filter.valuesArray.push(field_value)
78
+ }
79
+ filterArray.push(filter);
80
+ break;
81
+ default:
82
+ filterArray.push(filter);
83
+ break;
84
+ }
85
+ } else {
86
+ filterArray.push(filter);
87
+ }
88
+ }
89
+ }
90
+
91
+ function fieldMethod(address) {
92
+ return new Promise((resolve) => {
93
+ pipeService
94
+ .on("gh_value_get", address, function ghValueGet(event, field_value) {
95
+ pipeService.destroy("gh_value_get", address, ghValueGet);
96
+ resolve(field_value);
97
+ })
98
+ .emit("gh_value_get", {}, address);
99
+ });
100
+ }
101
+
102
+ return filterArray;
103
+ }
@@ -0,0 +1,41 @@
1
+ export function group(fieldGroup, items) {
2
+ let groupItemList = [];
3
+ let arrayGroupField;
4
+ if (!fieldGroup) {
5
+ groupItemList = items;
6
+ } else {
7
+ arrayGroupField = fieldGroup.split(",");
8
+ }
9
+
10
+ let arrayValue = new Set();
11
+
12
+ if (fieldGroup) {
13
+ items.forEach((item) => {
14
+ let valueField = "";
15
+ arrayGroupField.forEach((fieldToGroup, index) => {
16
+ const findField = item.fields.find((field) => field.field_id == fieldToGroup);
17
+ if (findField) {
18
+ valueField += findField.field_value;
19
+ }
20
+ if (arrayGroupField.length - 1 == index) {
21
+ let itemUnics = findUniqItem(valueField);
22
+ if (itemUnics) {
23
+ groupItemList.push(item);
24
+ }
25
+ }
26
+ });
27
+ });
28
+ }
29
+
30
+ // send field value and check if it's unique
31
+ function findUniqItem(value) {
32
+ const uniqValue = !arrayValue.has(value);
33
+ if (uniqValue) {
34
+ arrayValue.add(value);
35
+ }
36
+ return uniqValue;
37
+ }
38
+
39
+ return groupItemList
40
+
41
+ }
@@ -0,0 +1,119 @@
1
+ import Fuse from "fuse.js";
2
+
3
+ export function getDistanceFromLatLonInKm(coordsFrom, coordsTo) {
4
+ const [lat1, lon1, distance] = coordsFrom.split(':');
5
+ const [lat2, lon2] = coordsTo.split(':');
6
+ const R = 6371; // Radius of the earth in km
7
+ const dLat = deg2rad(lat2 - lat1); // deg2rad below
8
+ const dLon = deg2rad(lon2 - lon1);
9
+ const a =
10
+ Math.sin(dLat / 2) * Math.sin(dLat / 2) +
11
+ Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.sin(dLon / 2) * Math.sin(dLon / 2);
12
+
13
+ const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
14
+
15
+ const distanceBetween = R * c; // Distance in km
16
+
17
+ return Number(distance) >= distanceBetween;
18
+ }
19
+
20
+ function deg2rad(deg) {
21
+ return deg * (Math.PI / 180);
22
+ }
23
+
24
+ export function getDate({ type, date = 0, match = true } = {}, itemTime) {
25
+ if (!itemTime && type) return false;
26
+ const newDate = new Date();
27
+ let result = true;
28
+ switch (type) {
29
+ case "day":
30
+ const filterDayStart = getDateInMs(date);
31
+ const filterDayEnd = getDateInMs(date + 1);
32
+
33
+ result = filterDayStart <= itemTime && itemTime < filterDayEnd;
34
+ break;
35
+
36
+ case "days":
37
+ if (date < 0) {
38
+ const currentDayEnd = getDateInMs(1);
39
+ const startPast7Days = getDateInMs(-6);
40
+
41
+ result = startPast7Days <= itemTime && itemTime < currentDayEnd;
42
+ } else {
43
+ const currentDay = getDateInMs();
44
+ const startNext7Days = getDateInMs(7);
45
+
46
+ result = currentDay <= itemTime && itemTime < startNext7Days;
47
+ }
48
+ break;
49
+
50
+ case "day_week":
51
+ result = date === new Date(itemTime).getDay();
52
+ break;
53
+
54
+ case "week":
55
+ const weekStart = newDate.getDate() - newDate.getDay();
56
+ const weekEnd = weekStart + 6;
57
+ const weekDayStart = newDate.setDate(weekStart + date * 7);
58
+ const weekDayEnd = newDate.setDate(weekEnd + date * 7);
59
+
60
+ const [sunday, saturday] = getWeek(weekDayStart, weekDayEnd);
61
+
62
+ result = sunday <= itemTime && itemTime <= saturday;
63
+ break;
64
+
65
+ case "month":
66
+ if (newDate.getFullYear() !== new Date(itemTime).getFullYear())
67
+ return false;
68
+
69
+ const month = newDate.getMonth() + date;
70
+
71
+ result = month === new Date(itemTime).getMonth();
72
+ break;
73
+
74
+ case "year":
75
+ const year = newDate.getFullYear() + date;
76
+
77
+ result = year === new Date(itemTime).getFullYear();
78
+ break;
79
+
80
+ default:
81
+ return true;
82
+ }
83
+ return match ? result : !result;
84
+ }
85
+
86
+ function getWeek(start, end) {
87
+ return [new Date(start), new Date(end)];
88
+ }
89
+
90
+ function getDateInMs(date = 0) {
91
+ const currentDay = new Date();
92
+ return new Date(
93
+ currentDay.getFullYear(),
94
+ currentDay.getMonth(),
95
+ currentDay.getDate() + date
96
+ ).valueOf();
97
+ }
98
+
99
+ export function searchValue(items, filter) {
100
+ if (!items || !items.length) return;
101
+
102
+ if (filter) {
103
+ return items.filter((item) =>
104
+ item.fields.find(
105
+ (field) =>
106
+ field.index_value &&
107
+ field.index_value.toLowerCase().indexOf(filter.toLowerCase()) !== -1
108
+ )
109
+ );
110
+ }
111
+ return items;
112
+ }
113
+
114
+ const fuse = new Fuse([]);
115
+
116
+ export function isSimilarStrings(str1, strArray) {
117
+ fuse.setCollection(strArray);
118
+ return Boolean(fuse.search(str1).length);
119
+ }