Populate Items
This is the method that allows to populate items and to update the item with data from another one. In addition, it significantly optimize the work with the server.
Name | Type | Description |
---|---|---|
items | array |
array of items that will be upgraded |
model | array |
item model by that items are updated |
keep_data | boolean |
optional argument that shows whether fields, that will not be updated, will be erased |
model
model is an array of objects that contains source data for updating item fields. It has such view:
model = [{
"field_id" : 228464,
"field_value" : "example 1"
},
{
"field_id" : 228464,
"field_value" : "example 2"
}]
Each object contains two properties:
Name | Type | Description |
---|---|---|
field_id | number |
ID by that the fields will be updated |
field_value | string |
value to be added to a certain field instead of the existing one |
keep_data
Thanks to keep_data we can adjust the request for the faster and optimal work. The default value is false.
If its value is true, all fields, even those without changes, will be sent to the server. As opposite, if value is false, unchanged fields will be removed from the request. Server will not process extra operations. So, we can regulate the amount of work that we send to the server.
Example
Depending on the value of keep_data, the method will have different objects in the result array.
keep_data is false
In cases when the keep_data is false or have no value:
import GudHub from '@gudhub/core';
const gudhub = await new GudHub();
let items = [{
"item_id": 2987986,
"fields": [{
"field_id": 645884,
"field_value": "Dow",
},
{
"field_id": 645888,
"field_value": "John",
},
{
"field_id": 645889,
"field_value": "384595933",
}],
},
{
"item_id": 2987996,
"fields": [{
"field_id": 645887,
"field_value": "Morison",
},
{
"field_id": 645888,
"field_value": "Johana",
},
{
"field_id": 645889,
"field_value": "2343588",
}]
}
]
let model = [{
"field_id": 645887,
"field_value": "Mikelson",
},
{
"field_id": 645888,
"field_value": "Jonny",
}
]
// populate items
let populatedItems = gudhub.populateItems(items, model)
// displayed full object
populatedItems.forEach(item => {
console.log("item_id:", item.item_id)
console.log(item.fields)
});
Then all fields that have not been changed are deleted or replaced.
[{
"item_id": 2987986,
"fields":[{
"field_id": 645887,
"field_value": "Mikelson"
},
{
"field_id": 645888,
"field_value": "Jonny"
}
]
},
{
"item_id": 2987996,
"fields":[{
"field_id": 645887,
"field_value": "Mikelson"
},
{
"field_id": 645888,
"field_value": "Jonny"
}
]
}]
keep_data is true
If keep_data is true, then all unchanged data is kept in the objects, and all fields that were not in the original element are added to it:
import GudHub from '@gudhub/core';
const gudhub = await new GudHub();
let items = [{
"item_id": 2987986,
"fields": [{
"field_id": 645884,
"field_value": "Dow",
},
{
"field_id": 645888,
"field_value": "John",
},
{
"field_id": 645889,
"field_value": "384595933",
}],
},
{
"item_id": 2987996,
"fields": [{
"field_id": 645887,
"field_value": "Morison",
},
{
"field_id": 645888,
"field_value": "Johana",
},
{
"field_id": 645889,
"field_value": "2343588",
}]
}
]
let model = [{
"field_id": 645887,
"field_value": "Mikelson",
},
{
"field_id": 645888,
"field_value": "Jonny",
}
]
// populate items
let populatedItems = gudhub.populateItems(items, model, true)
// displayed full object
populatedItems.forEach(item => {
console.log("item_id:", item.item_id)
console.log(item.fields)
});
As you can see, the matching fields are updated and the new field is added to the first item, but all source fields are retained:
[{
"item_id": 2987986,
"fields":[{
"field_id": 645884,
"field_value": "Dow"
},
{
"field_id": 645888,
"field_value": "Jonny"
},
{
"field_id": 645889,
"field_value": "384595933"
},
{
"field_id": 645887,
"field_value": "Mikelson"
}
]
},
{
"item_id": 2987996,
"fields":[{
"field_id": 645887,
"field_value": "Mikelson"
},
{
"field_id": 645888,
"field_value": "Jonny"
},
{
"field_id": 645889,
"field_value": "2343588"
}
]
}]