@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.
- package/GUDHUB/Auth/Auth.js +137 -0
- package/GUDHUB/Auth/Auth.test.js +15 -0
- package/GUDHUB/Managers/ChunksManager/ChunksManager.js +80 -0
- package/GUDHUB/Managers/ChunksManager/ChunksManager.test.js +46 -0
- package/GUDHUB/Managers/DocumentManager/DocumentManager.js +48 -0
- package/GUDHUB/Managers/FileManager/FileManager.js +208 -0
- package/GUDHUB/Managers/FileManager/file_manager.test.js +17 -0
- package/GUDHUB/Managers/managers.js +5 -0
- package/GUDHUB/PipeService/PipeService.js +167 -0
- package/GUDHUB/PipeService/PipeService.test.js +64 -0
- package/GUDHUB/PipeService/utils.js +32 -0
- package/GUDHUB/Processors/AppProcessor/AppProcessor.js +433 -0
- package/GUDHUB/Processors/AppProcessor/AppProcessor.test.js +38 -0
- package/GUDHUB/Processors/AppProcessor/AppProcessorMocks.js +83 -0
- package/GUDHUB/Processors/FieldProcessor/FieldProcessor.js +139 -0
- package/GUDHUB/Processors/FieldProcessor/FieldProcessor.test.js +16 -0
- package/GUDHUB/Processors/FieldProcessor/Untitled-1.json +17 -0
- package/GUDHUB/Processors/FieldProcessor/field_processor.md +85 -0
- package/GUDHUB/Processors/ItemProcessor/ItemProcessor.js +247 -0
- package/GUDHUB/Processors/ItemProcessor/item_processor.md +50 -0
- package/GUDHUB/Processors/processors.js +5 -0
- package/GUDHUB/Storage/Storage.js +115 -0
- package/GUDHUB/Storage/Storage.test.js +112 -0
- package/GUDHUB/Utils/Utils.js +153 -0
- package/GUDHUB/Utils/compare_items_lists_worker/compare_items_lists.worker.js +50 -0
- package/GUDHUB/Utils/filter/filter.js +308 -0
- package/GUDHUB/Utils/filter/filter.test.js +94 -0
- package/GUDHUB/Utils/filter/filterPreparation.js +103 -0
- package/GUDHUB/Utils/filter/group.js +41 -0
- package/GUDHUB/Utils/filter/utils.js +119 -0
- package/GUDHUB/Utils/get_date/get_date.js +90 -0
- package/GUDHUB/Utils/get_date/get_date.test.js +53 -0
- package/GUDHUB/Utils/interpretation/interpretation.js +100 -0
- package/GUDHUB/Utils/json_constructor/json_constructor.js +130 -0
- package/GUDHUB/Utils/json_constructor/json_constructor.test.js +70 -0
- package/GUDHUB/Utils/json_to_items/json_to_items.js +161 -0
- package/GUDHUB/Utils/json_to_items/json_to_items.test.js +85 -0
- package/GUDHUB/Utils/merge_chunks/merge_chunks.js +30 -0
- package/GUDHUB/Utils/merge_compare_items/merge_compare_items.js +316 -0
- package/GUDHUB/Utils/merge_compare_items/merge_compare_items.test.js +632 -0
- package/GUDHUB/Utils/merge_objects/merge_objects.js +120 -0
- package/GUDHUB/Utils/merge_objects/merge_objects.test.js +137 -0
- package/GUDHUB/Utils/nested_list/nested_list.js +38 -0
- package/GUDHUB/Utils/nested_list/nested_list.test.js +70 -0
- package/GUDHUB/Utils/populate_items/populate_items.js +66 -0
- package/GUDHUB/WebSocket/WebSocket.js +136 -0
- package/GUDHUB/config.js +8 -0
- package/GUDHUB/consts.js +1 -0
- package/GUDHUB/gudhub-https-service.js +193 -0
- package/GUDHUB/gudhub.js +477 -0
- package/GUDHUB/gudhub.test.js +218 -0
- package/GUDHUB/utils.js +25 -0
- package/Readme.md +537 -0
- package/fake_server/fake_java_server.js +112 -0
- package/fake_server/fake_server_data/app_132.js +3037 -0
- package/fake_server/fake_server_data/app_16259.js +1152 -0
- package/fake_server/fake_server_data/app_214.js +2057 -0
- package/fake_server/fake_server_data/app_8263.js +4167 -0
- package/fake_server/fake_server_data/chunks_mocks/bcacjbgqorherqmtykrj_8263.js +44561 -0
- package/fake_server/fake_server_data/chunks_mocks/bcjyuoqaewybudfyhir_8263.js +44197 -0
- package/fake_server/fake_server_data/chunks_mocks/tpajkpolmzklodcba_8263.js +44977 -0
- package/fake_server/fake_server_data/fake_server_data.js +111 -0
- package/index.js +3 -0
- package/indexUMD.js +5 -0
- package/package.json +45 -0
- package/umd/library.min.js +186 -0
- package/umd/library.min.js.map +1 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import should from "should";
|
|
2
|
+
import {GudHub} from './../../gudhub.js';
|
|
3
|
+
import {appTemplate} from './AppProcessorMocks.js';
|
|
4
|
+
|
|
5
|
+
describe("APP PROCESSOR", async function() {
|
|
6
|
+
const auth_key = 'Z/lxMHLenEaQTvPjW5U6c3jBDwWFYZrh2F9Kxa3fbt8drvabS2u2lXQ2zI+SRmic';
|
|
7
|
+
const gudhub = new GudHub(auth_key);
|
|
8
|
+
let newAppID = 0;
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
it("GET APP / App name should be 'Aqua-Test'", async function () {
|
|
12
|
+
var app = await gudhub.getApp("16259");
|
|
13
|
+
app.app_name.should.equal('Fish Tank');
|
|
14
|
+
gudhub.storage.getAppsList().length.should.equal(1);
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
// it("CREATE APP / App name should be 'My Application'", async function () {
|
|
19
|
+
// var newApp = await gudhub.createNewApp(appTemplate);
|
|
20
|
+
// newApp.app_name.should.equal('My Application');
|
|
21
|
+
// newAppID = newApp.app_id;
|
|
22
|
+
// gudhub.storage.getAppsList().length.should.equal(2);
|
|
23
|
+
// })
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
// it("DELETE APP / We should receive messege like 'delete application with id=[app_id]'", async function () {
|
|
27
|
+
// var currentApplist = await gudhub.deleteApp(newAppID);
|
|
28
|
+
// currentApplist.length.should.equal(1);
|
|
29
|
+
// gudhub.storage.getAppsList().length.should.equal(1);
|
|
30
|
+
// })
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
// it("GET APP LIST / Should return arey with two apps", async function () {
|
|
34
|
+
// var appList = await gudhub.getAppsList();
|
|
35
|
+
// appList.length.should.equal(2);
|
|
36
|
+
// gudhub.storage.getAppsList().length.should.equal(2);
|
|
37
|
+
// })
|
|
38
|
+
});
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
export const appTemplate = {
|
|
2
|
+
app_name: "My Application",
|
|
3
|
+
icon: {
|
|
4
|
+
"icon_id": "box",
|
|
5
|
+
"icon_color": "ffffff",
|
|
6
|
+
"gradient_up": "00CCF8",
|
|
7
|
+
"gradient_down": "00F8B2"
|
|
8
|
+
},
|
|
9
|
+
privacy: 1,
|
|
10
|
+
views_list: [{
|
|
11
|
+
content: [],
|
|
12
|
+
name: "Main"
|
|
13
|
+
}, {
|
|
14
|
+
content: [],
|
|
15
|
+
name: "Form"
|
|
16
|
+
}],
|
|
17
|
+
items_list: [{
|
|
18
|
+
"item_id": "123",
|
|
19
|
+
"fields": [{
|
|
20
|
+
"field_id": 1,
|
|
21
|
+
"create_field": "newfield1",
|
|
22
|
+
"field_value": "John",
|
|
23
|
+
}, {
|
|
24
|
+
"field_id": 2,
|
|
25
|
+
"create_field": "newfield2",
|
|
26
|
+
"field_value": "Dow",
|
|
27
|
+
}, {
|
|
28
|
+
"field_id": 3,
|
|
29
|
+
"create_field": "newfield3",
|
|
30
|
+
"field_value": "0674346135",
|
|
31
|
+
}, {
|
|
32
|
+
"field_id": 4,
|
|
33
|
+
"create_field": "newfield4",
|
|
34
|
+
"field_value": "",
|
|
35
|
+
}]
|
|
36
|
+
}],
|
|
37
|
+
field_list: [{
|
|
38
|
+
"field_id": 1,
|
|
39
|
+
"create_field": "newfield1",
|
|
40
|
+
"field_name": "First Name",
|
|
41
|
+
"data_id": 0,
|
|
42
|
+
"data_type": "text",
|
|
43
|
+
"file_name": "0"
|
|
44
|
+
}, {
|
|
45
|
+
"field_id": 2,
|
|
46
|
+
"create_field": "newfield2",
|
|
47
|
+
"field_name": "Last Name",
|
|
48
|
+
"data_id": 0,
|
|
49
|
+
"data_type": "text",
|
|
50
|
+
"file_name": "0"
|
|
51
|
+
}, {
|
|
52
|
+
"field_id": 3,
|
|
53
|
+
"create_field": "newfield3",
|
|
54
|
+
"field_name": "Phone",
|
|
55
|
+
"data_id": 0,
|
|
56
|
+
"data_type": "number",
|
|
57
|
+
"file_name": "0"
|
|
58
|
+
}, {
|
|
59
|
+
"field_id": 4,
|
|
60
|
+
"create_field": "newfield4",
|
|
61
|
+
"data_model": {
|
|
62
|
+
"search":"",
|
|
63
|
+
"filter_list": [],
|
|
64
|
+
"table_settings": {
|
|
65
|
+
"columns_to_view": [], /* Array of column settings, wich view in table,*/
|
|
66
|
+
"table_height": '', /* Height of table*/
|
|
67
|
+
"action": "open_item",
|
|
68
|
+
"selected_item": "1"
|
|
69
|
+
},
|
|
70
|
+
"item_update_settings": {
|
|
71
|
+
"show_updating_input": false,
|
|
72
|
+
"field_to_view": 0
|
|
73
|
+
},
|
|
74
|
+
"itself_filter": {
|
|
75
|
+
"active": false,
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
"data_type": "table",
|
|
79
|
+
"field_name": "App",
|
|
80
|
+
"data_id": 0,
|
|
81
|
+
"file_name": "0"
|
|
82
|
+
}]
|
|
83
|
+
};
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
export class FieldProcessor {
|
|
2
|
+
constructor(storage, req, appProcessor, itemProcessor) {
|
|
3
|
+
this.storage = storage;
|
|
4
|
+
this.req = req;
|
|
5
|
+
this.appProcessor = appProcessor;
|
|
6
|
+
this.itemProcessor = itemProcessor;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
deleteFieldApi(field_id) {
|
|
10
|
+
return this.req.post({ url: "/api/app/delete-field", form: { field_id } });
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
async updatedFieldApi(app_id, fieldModel = {}) {
|
|
14
|
+
const app = await this.appProcessor.getApp(app_id);
|
|
15
|
+
const appToUpdate = {
|
|
16
|
+
app_id,
|
|
17
|
+
app_name: app.app_name,
|
|
18
|
+
group_id: app.group_id,
|
|
19
|
+
icon: app.icon,
|
|
20
|
+
field_list: app.field_list.map((field) =>
|
|
21
|
+
field.field_id == fieldModel.field_id
|
|
22
|
+
? { ...field, ...fieldModel }
|
|
23
|
+
: field
|
|
24
|
+
),
|
|
25
|
+
views_list: app.views_list,
|
|
26
|
+
};
|
|
27
|
+
return this.appProcessor.updateApp(appToUpdate);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
setFieldValueApi(app_id, item_id, field_id, field_value) {
|
|
31
|
+
const itemToUpdate = [
|
|
32
|
+
{
|
|
33
|
+
item_id,
|
|
34
|
+
fields: [
|
|
35
|
+
{
|
|
36
|
+
field_id,
|
|
37
|
+
field_value,
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
},
|
|
41
|
+
];
|
|
42
|
+
return this.itemProcessor.updateItems(app_id, itemToUpdate);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
deleteFieldInStorage(app_id, field_id) {
|
|
46
|
+
const app = this.storage.getApp(app_id);
|
|
47
|
+
app.field_list = app.field_list.filter(
|
|
48
|
+
(field) => field.file_id != field_id
|
|
49
|
+
);
|
|
50
|
+
app.items_list = app.items_list.map((item) => {
|
|
51
|
+
item.fields = item.fields.filter((field) => field.field_id != field_id);
|
|
52
|
+
return item;
|
|
53
|
+
});
|
|
54
|
+
this.storage.updateApp(app);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
updateFieldInStorage(app_id, fieldModel) {
|
|
58
|
+
const app = this.storage.getApp(app_id);
|
|
59
|
+
app.field_list = app.field_list.map((field) =>
|
|
60
|
+
field.field_id == fieldModel.field_id
|
|
61
|
+
? { ...field, ...fieldModel }
|
|
62
|
+
: field
|
|
63
|
+
);
|
|
64
|
+
this.storage.updateApp(app);
|
|
65
|
+
return fieldModel;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
//This method was created for setFieldValue()
|
|
69
|
+
//!!!!! 1) Change for each to for
|
|
70
|
+
//!!!!! 2) Stop iteration after value has been found
|
|
71
|
+
updateFieldValue(app_id, item_id, field_id, field_value) {
|
|
72
|
+
const app = this.storage.getApp(app_id);
|
|
73
|
+
app.items_list.forEach((item) => {
|
|
74
|
+
if (item.item_id == item_id) {
|
|
75
|
+
item.fields.forEach((field) => {
|
|
76
|
+
if (field.field_id == field_id) {
|
|
77
|
+
field.field_value = field_value;
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
this.storage.updateApp(app);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
async getField(app_id, field_id) {
|
|
86
|
+
const app = await this.appProcessor.getApp(app_id);
|
|
87
|
+
if(!app) return null
|
|
88
|
+
return app.field_list.find((field) => field.field_id == field_id);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
//!!!!! Shou Be Renamed to getFields() !!!!!!!
|
|
92
|
+
async getFieldModels(app_id) {
|
|
93
|
+
const app = await this.appProcessor.getApp(app_id);
|
|
94
|
+
if(!app) return null
|
|
95
|
+
return app.field_list;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
//!!!!! Shou Be added fieldID argument !!!!!!!
|
|
99
|
+
async updateField(app_id, fieldModel) {
|
|
100
|
+
if (!app_id || !fieldModel) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const newModel = await this.updatedFieldApi(app_id, fieldModel);
|
|
104
|
+
return this.updateFieldInStorage(app_id, newModel);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
async deleteField(app_id, field_id) {
|
|
108
|
+
await this.deleteFieldApi(field_id);
|
|
109
|
+
return this.deleteFieldInStorage(app_id, field_id);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
//this method should alwaise return value if no value we return null
|
|
113
|
+
async getFieldValue(app_id, item_id, field_id) {
|
|
114
|
+
let fieldValue = null;
|
|
115
|
+
const app = await this.appProcessor.getApp(app_id);
|
|
116
|
+
|
|
117
|
+
if (app) {
|
|
118
|
+
const fundedItem = app.items_list.find((item) => item.item_id == item_id);
|
|
119
|
+
if (fundedItem) {
|
|
120
|
+
const fundedField = fundedItem.fields.find(
|
|
121
|
+
(field) => field.field_id == field_id
|
|
122
|
+
);
|
|
123
|
+
if (fundedField) {
|
|
124
|
+
fieldValue = fundedField.field_value;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return fieldValue;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
async setFieldValue(app_id, item_id, field_id, field_value) {
|
|
133
|
+
if (!app_id || !item_id || !field_id) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
await this.setFieldValueApi(app_id, item_id, field_id, field_value);
|
|
137
|
+
this.updateFieldValue(app_id, item_id, field_id, field_value);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import should from "should";
|
|
2
|
+
import {GudHub} from './../../gudhub.js';
|
|
3
|
+
|
|
4
|
+
describe("FIELD PROCESSOR", async function() {
|
|
5
|
+
const auth_key = 'Z/lxMHLenEaQTvPjW5U6c3jBDwWFYZrh2F9Kxa3fbt8drvabS2u2lXQ2zI+SRmic';
|
|
6
|
+
const gudhub = new GudHub(auth_key);
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
it("GET FIELD / should return a field model", async function () {
|
|
10
|
+
var fieldModel = await gudhub.getField(16259, 254055);
|
|
11
|
+
fieldModel.data_type.should.equal('text');
|
|
12
|
+
(typeof fieldModel).should.equal('object');
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"field_id": 505247,
|
|
3
|
+
"data_type": "image",
|
|
4
|
+
"name_space": "thumbnail",
|
|
5
|
+
"field_priority": 0,
|
|
6
|
+
"field_name": "Thumbnail",
|
|
7
|
+
"data_model": {
|
|
8
|
+
"show_field_name": true,
|
|
9
|
+
"image_preview_selected_size": 128,
|
|
10
|
+
"display_mode": "single",
|
|
11
|
+
"image_editor": false,
|
|
12
|
+
"compress": false,
|
|
13
|
+
"quality": "1",
|
|
14
|
+
"table_display_mode": "image",
|
|
15
|
+
"interpretation": []
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Field Processor
|
|
2
|
+
|
|
3
|
+
Field processor is responcible for receiving, updating fields models. Also with field processor you can get and update field values.
|
|
4
|
+
|
|
5
|
+
## getField(app_id, field_id)
|
|
6
|
+
|
|
7
|
+
Method Returns field model from specific App.
|
|
8
|
+
|
|
9
|
+
```js
|
|
10
|
+
import {GudHub} from '@gudhub/gudhub';
|
|
11
|
+
const gudhub = new GudHub(authkey);
|
|
12
|
+
gudhub.getField(app_id, field_id, fieldToCompare);
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Argument Name|Type|Description
|
|
16
|
+
------------ | ------------- | -------------
|
|
17
|
+
*app_id* | `number` | Application ID where we want to get the field model
|
|
18
|
+
*field_id* | `number` | field ID that we want to receive
|
|
19
|
+
|
|
20
|
+
The Method returns field model:
|
|
21
|
+
|
|
22
|
+
```json
|
|
23
|
+
{
|
|
24
|
+
"field_id": 505247,
|
|
25
|
+
"data_type": "image",
|
|
26
|
+
"name_space": "thumbnail",
|
|
27
|
+
"field_priority": 0,
|
|
28
|
+
"field_name": "Thumbnail",
|
|
29
|
+
"data_model": {
|
|
30
|
+
"show_field_name": true,
|
|
31
|
+
"display_mode": "single",
|
|
32
|
+
"image_editor": false,
|
|
33
|
+
"compress": false,
|
|
34
|
+
"quality": "1",
|
|
35
|
+
"table_display_mode": "image",
|
|
36
|
+
"interpretation": []
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## updateField(app_id, fieldModel)
|
|
42
|
+
|
|
43
|
+
With this method you can update field model of specific App
|
|
44
|
+
|
|
45
|
+
```js
|
|
46
|
+
import {GudHub} from '@gudhub/gudhub';
|
|
47
|
+
const gudhub = new GudHub(authkey);
|
|
48
|
+
gudhub.updateField(app_id, fieldModel);
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Argument Name|Type|Description
|
|
52
|
+
------------ | ------------- | -------------
|
|
53
|
+
*app_id* | `number` | Application ID where we want to update the field model
|
|
54
|
+
*fieldModel* | `json` | field model object in json format that you want to update.
|
|
55
|
+
|
|
56
|
+
The Method returns updated field model:
|
|
57
|
+
|
|
58
|
+
```json
|
|
59
|
+
{
|
|
60
|
+
"field_id": 505247,
|
|
61
|
+
"data_type": "image",
|
|
62
|
+
"name_space": "thumbnail",
|
|
63
|
+
"field_priority": 0,
|
|
64
|
+
"field_name": "Thumbnail",
|
|
65
|
+
"data_model": {
|
|
66
|
+
"show_field_name": true,
|
|
67
|
+
"display_mode": "single",
|
|
68
|
+
"image_editor": false,
|
|
69
|
+
"compress": false,
|
|
70
|
+
"quality": "1",
|
|
71
|
+
"table_display_mode": "image",
|
|
72
|
+
"interpretation": []
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## deleteField(app_id, field_id)
|
|
78
|
+
|
|
79
|
+
## getFieldModels(app_id)
|
|
80
|
+
|
|
81
|
+
## getFieldValue(app_id, item_id, field_id)
|
|
82
|
+
|
|
83
|
+
## getInterpretedValue(app_id, item_id, field_id)
|
|
84
|
+
|
|
85
|
+
## setFieldValue(app_id, item_id, field_id, field_value)
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { filterFields } from "../../utils.js";
|
|
2
|
+
|
|
3
|
+
export class ItemProcessor {
|
|
4
|
+
constructor(storage, pipeService, req, appProcessor, util) {
|
|
5
|
+
this.storage = storage;
|
|
6
|
+
this.pipeService = pipeService;
|
|
7
|
+
this.req = req;
|
|
8
|
+
this.appProcessor = appProcessor;
|
|
9
|
+
this.util = util;
|
|
10
|
+
this.itemListeners();
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
async addItemsApi(app_id, itemsList) {
|
|
14
|
+
try {
|
|
15
|
+
const response = await this.req.post({
|
|
16
|
+
url: "/api/items/add",
|
|
17
|
+
form: { items: JSON.stringify(itemsList), app_id },
|
|
18
|
+
});
|
|
19
|
+
return response;
|
|
20
|
+
} catch (err) {
|
|
21
|
+
console.log(err);
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
async updateItemsApi(app_id, itemsList) {
|
|
27
|
+
try {
|
|
28
|
+
const response = await this.req.post({
|
|
29
|
+
url: "/api/items/update",
|
|
30
|
+
form: { items: JSON.stringify(itemsList), app_id },
|
|
31
|
+
});
|
|
32
|
+
return response;
|
|
33
|
+
} catch (err) {
|
|
34
|
+
console.log(err);
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
deleteItemsApi(items_ids) {
|
|
40
|
+
try {
|
|
41
|
+
const response = this.req.post({
|
|
42
|
+
url: "/api/items/delete",
|
|
43
|
+
form: { items_ids: JSON.stringify(items_ids)},
|
|
44
|
+
});
|
|
45
|
+
response.from_apps_list = true;
|
|
46
|
+
return response;
|
|
47
|
+
} catch (err) {
|
|
48
|
+
console.log(err);
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
addItemsToStorage(app_id, items) {
|
|
54
|
+
const app = this.storage.getApp(app_id);
|
|
55
|
+
if (app) {
|
|
56
|
+
items.forEach((item) => {
|
|
57
|
+
app.items_list.push(item);
|
|
58
|
+
this.pipeService.emit("gh_item_update", { app_id }, [item]);
|
|
59
|
+
});
|
|
60
|
+
this.pipeService.emit("gh_items_update", { app_id }, app.items_list);
|
|
61
|
+
this.storage.updateApp(app);
|
|
62
|
+
}
|
|
63
|
+
return app;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
updateItemsInStorage(app_id, items) {
|
|
67
|
+
this.pipeService.emit("gh_items_update", { app_id }, items);
|
|
68
|
+
//-- getting app from storage
|
|
69
|
+
const app = this.storage.getApp(app_id);
|
|
70
|
+
if (app && items) {
|
|
71
|
+
items.forEach((item) => {
|
|
72
|
+
const addressToEmit = { app_id };
|
|
73
|
+
this.pipeService.emit("gh_item_update", addressToEmit, [item]);
|
|
74
|
+
addressToEmit.item_id = item.item_id;
|
|
75
|
+
this.pipeService.emit("gh_item_update", addressToEmit, item);
|
|
76
|
+
//-- Looking for updated item in the main storage according to 'item_id'
|
|
77
|
+
const fundedItem = app.items_list.find(
|
|
78
|
+
(storageItem) => storageItem.item_id == item.item_id
|
|
79
|
+
);
|
|
80
|
+
if (fundedItem) {
|
|
81
|
+
//-- Updating value in existing fields
|
|
82
|
+
item.fields.forEach((field) => {
|
|
83
|
+
const fundedField = fundedItem.fields.find(
|
|
84
|
+
(storageField) => storageField.field_id == field.field_id
|
|
85
|
+
);
|
|
86
|
+
addressToEmit.field_id = field.field_id;
|
|
87
|
+
if (fundedField) {
|
|
88
|
+
//-- Checking if value of existing fields were updated, because we are not sending updates if value didn't changed
|
|
89
|
+
if (fundedField.field_value != field.field_value) {
|
|
90
|
+
fundedField.field_value = field.field_value;
|
|
91
|
+
this.pipeService.emit(
|
|
92
|
+
"gh_value_update",
|
|
93
|
+
addressToEmit,
|
|
94
|
+
field.field_value
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
} else {
|
|
98
|
+
//-- Pushing new fields to the storage (it's when user enters new value)
|
|
99
|
+
fundedItem.fields.push(field);
|
|
100
|
+
this.pipeService.emit(
|
|
101
|
+
"gh_value_update",
|
|
102
|
+
addressToEmit,
|
|
103
|
+
field.field_value
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
return items;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
deleteItemsFromStorage(app_id, itemsForDelete = []) {
|
|
114
|
+
const app = this.storage.getApp(app_id);
|
|
115
|
+
if (app) {
|
|
116
|
+
app.items_list = app.items_list.filter(
|
|
117
|
+
(item) => !itemsForDelete.includes(item.item_id)
|
|
118
|
+
);
|
|
119
|
+
this.pipeService.emit("gh_items_update", { app_id }, app.items_list);
|
|
120
|
+
this.storage.updateApp(app);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
async getItems(app_id, trash = false) {
|
|
125
|
+
const app = await this.appProcessor.getApp(app_id)
|
|
126
|
+
if(!app) return null;
|
|
127
|
+
return trash ? app.items_list : app.items_list.filter(item => !item.trash);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
async addNewItems(app_id, itemsList) {
|
|
131
|
+
const preparedItemsList = itemsList.map((item) => ({
|
|
132
|
+
...item,
|
|
133
|
+
fields: filterFields(item.fields),
|
|
134
|
+
}));
|
|
135
|
+
const newItems = await this.addItemsApi(app_id, preparedItemsList);
|
|
136
|
+
this.addItemsToStorage(app_id, newItems);
|
|
137
|
+
this.pipeService.emit("gh_items_add", { app_id }, newItems);
|
|
138
|
+
return newItems;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
async updateItems(app_id, itemsList) {
|
|
142
|
+
const preparedItemsList = itemsList.map((item) => ({
|
|
143
|
+
...item,
|
|
144
|
+
fields: filterFields(item.fields),
|
|
145
|
+
}));
|
|
146
|
+
const updatedItems = await this.updateItemsApi(app_id, preparedItemsList);
|
|
147
|
+
return this.updateItemsInStorage(app_id, updatedItems);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
async deleteItems(app_id, itemsIds) {
|
|
151
|
+
return this.deleteItemsApi(itemsIds).then(() =>
|
|
152
|
+
this.deleteItemsFromStorage(app_id, itemsIds)
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
itemListeners() {
|
|
157
|
+
this.pipeService.onRoot("gh_items_get", {}, async (event, data) => {
|
|
158
|
+
if(data && data.app_id) {
|
|
159
|
+
const items = await this.getItems(data.app_id);
|
|
160
|
+
if (items) {
|
|
161
|
+
this.pipeService.emit("gh_items_get", data, items);
|
|
162
|
+
} else {
|
|
163
|
+
this.pipeService.emit("gh_items_get", data, []);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
this.pipeService.onRoot("gh_items_add", {}, async (event, data) => {
|
|
169
|
+
if(data && data.app_id && data.items) {
|
|
170
|
+
const items = await this.addNewItems(data.app_id, data.items);
|
|
171
|
+
if (items) {
|
|
172
|
+
this.pipeService.emit("gh_items_add", data, items);
|
|
173
|
+
} else {
|
|
174
|
+
this.pipeService.emit("gh_items_add", data, []);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
this.pipeService.onRoot("gh_items_update", {}, async (event, data) => {
|
|
180
|
+
if(data && data.app_id && data.items) {
|
|
181
|
+
const items = await this.updateItems(data.app_id, data.items);
|
|
182
|
+
if (items) {
|
|
183
|
+
this.pipeService.emit("gh_items_update", data, items);
|
|
184
|
+
} else {
|
|
185
|
+
this.pipeService.emit("gh_items_update", data, []);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
/* ---- FIELD VALUE GET LISTENING ---- */
|
|
191
|
+
this.pipeService.onRoot("gh_item_get", {}, async (event, data) => {
|
|
192
|
+
if(data && data.app_id){
|
|
193
|
+
const items = await this.getItems(data.app_id);
|
|
194
|
+
const item = items.find((item) => item.item_id == data.item_id);
|
|
195
|
+
this.pipeService.emit("gh_item_get", data, item);
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
// GETTING FILTERED ITEM
|
|
200
|
+
/* data = {
|
|
201
|
+
app_id: current appId,
|
|
202
|
+
element_app_id: for reference appId,
|
|
203
|
+
itemsId: current itemId,
|
|
204
|
+
filters_list: filters list,
|
|
205
|
+
field_groupe ?: field group,
|
|
206
|
+
search?: search value,
|
|
207
|
+
}
|
|
208
|
+
*/
|
|
209
|
+
this.pipeService.onRoot(
|
|
210
|
+
"gh_filtered_items_get",
|
|
211
|
+
{},
|
|
212
|
+
|
|
213
|
+
async (event, data) => {
|
|
214
|
+
if(data && data.element_app_id) {
|
|
215
|
+
const items = await this.getItems(data.element_app_id);
|
|
216
|
+
const filteredItems = await this.util.getFilteredItems(
|
|
217
|
+
items,
|
|
218
|
+
data.filters_list,
|
|
219
|
+
data.element_app_id,
|
|
220
|
+
data.app_id,
|
|
221
|
+
data.item_id,
|
|
222
|
+
data.field_groupe,
|
|
223
|
+
data.search,
|
|
224
|
+
data.search_params
|
|
225
|
+
);
|
|
226
|
+
this.pipeService.emit("gh_filtered_items_get", data, filteredItems);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
);
|
|
230
|
+
|
|
231
|
+
this.pipeService.onRoot("gh_filter_items", {}, async (event, data) => {
|
|
232
|
+
if(data && data.items) {
|
|
233
|
+
const filteredItems = await this.util.getFilteredItems(
|
|
234
|
+
data.items,
|
|
235
|
+
data.filters_list,
|
|
236
|
+
data.element_app_id,
|
|
237
|
+
data.app_id,
|
|
238
|
+
data.item_id,
|
|
239
|
+
data.field_groupe,
|
|
240
|
+
data.search,
|
|
241
|
+
data.search_params
|
|
242
|
+
);
|
|
243
|
+
this.pipeService.emit("gh_filter_items", data, filteredItems);
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Item Processor
|
|
2
|
+
|
|
3
|
+
Item Processor is responcible for creating, receiving, updating and deleting items. Please note that you can not delete items from an appliucation. When you delete the items they just murked as deleted.
|
|
4
|
+
|
|
5
|
+
## getItems(app_id, trash)
|
|
6
|
+
|
|
7
|
+
Method Returns items from the app
|
|
8
|
+
|
|
9
|
+
```js
|
|
10
|
+
import {GudHub} from '@gudhub/gudhub';
|
|
11
|
+
const gudhub = new GudHub(authkey);
|
|
12
|
+
gudhub.getItems(app_id, false);
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Argument Name|Type|Description
|
|
16
|
+
------------ | ------------- | -------------
|
|
17
|
+
*app_id* | `number` | Application ID where we want to get the field model
|
|
18
|
+
*trash* | `boolean` | If it's true then it returns deleted items only
|
|
19
|
+
|
|
20
|
+
The Method returns items:
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
[
|
|
25
|
+
{
|
|
26
|
+
index_number: 1,
|
|
27
|
+
item_id: 137,
|
|
28
|
+
last_update: 16777296000,
|
|
29
|
+
fields: [
|
|
30
|
+
{field_id: 199, element_id: 199, field_value: "John", data_id: 580},
|
|
31
|
+
{field_id: 199, element_id: 199, field_value: "Dow", data_id: 580}
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
index_number: 2,
|
|
36
|
+
item_id: 140,
|
|
37
|
+
last_update: 16777312000,
|
|
38
|
+
fields: [
|
|
39
|
+
{field_id: 199, element_id: 199, field_value: "Michael", data_id: 580},
|
|
40
|
+
{field_id: 199, element_id: 199, field_value: "Jeckson", data_id: 580}
|
|
41
|
+
]
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## addNewItems(app_id, itemsList)
|
|
47
|
+
|
|
48
|
+
## updateItems(app_id, itemsList)
|
|
49
|
+
|
|
50
|
+
## deleteItems(app_id, itemsIds)
|