Use maps for model updates
This commit is contained in:
parent
04f8a74cd8
commit
f4a13cb080
|
@ -43,21 +43,18 @@ function isModelInArray(array, model) {
|
||||||
/**
|
/**
|
||||||
* Synchronizes models from the server with the displayed knockout model table
|
* Synchronizes models from the server with the displayed knockout model table
|
||||||
*/
|
*/
|
||||||
function syncModels(models) {
|
function syncModels(models) {
|
||||||
// remove models from the observable array, which are not in the
|
// remove models from the observable array, which are not in the updated list
|
||||||
// updated list
|
var newModelsMap = new Map(models.map(m => [m.url, m]));
|
||||||
for ( let idx in observableModelsArray()) {
|
observableModelsArray.remove(m => !newModelsMap.get(m.ko_url()));
|
||||||
let model = observableModelsArray()[idx];
|
|
||||||
if (!isModelInArray(models, model)) {
|
var modelsMap = new Map(observableModelsArray().map(m => [m.ko_url(), m]));
|
||||||
observableModelsArray.remove(model);
|
|
||||||
}
|
for (let model of models) {
|
||||||
}
|
const m = modelsMap.get(model.url);
|
||||||
|
|
||||||
// add models to the observable array, which are new in the
|
if (!m) {
|
||||||
// updated list
|
// add models to the observable array, which are new in the updated list
|
||||||
for ( let idx in models) {
|
|
||||||
let model = models[idx];
|
|
||||||
if (!isModelInArray(observableModelsArray(), model)) {
|
|
||||||
model.ko_name = ko.observable(model.name);
|
model.ko_name = ko.observable(model.name);
|
||||||
model.ko_url = ko.observable(model.url);
|
model.ko_url = ko.observable(model.url);
|
||||||
model.ko_online = ko.observable(false);
|
model.ko_online = ko.observable(false);
|
||||||
|
@ -83,32 +80,24 @@ function syncModels(models) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
observableModelsArray.push(model);
|
observableModelsArray.push(model);
|
||||||
}
|
} else {
|
||||||
}
|
// update existing models
|
||||||
|
m.ko_name(model.name);
|
||||||
// update existing models
|
m.ko_url(model.url);
|
||||||
for ( let i in models) {
|
let onlineState = false;
|
||||||
let model = models[i];
|
for ( let i in onlineModels) {
|
||||||
for ( let j in observableModelsArray()) {
|
let onlineModel = onlineModels[i];
|
||||||
let m = observableModelsArray()[j];
|
if (onlineModel.url === model.url) {
|
||||||
if (model.url === m.ko_url()) {
|
onlineState = true;
|
||||||
m.ko_name(model.name);
|
break;
|
||||||
m.ko_url(model.url);
|
|
||||||
let onlineState = false;
|
|
||||||
for ( let i in onlineModels) {
|
|
||||||
let onlineModel = onlineModels[i];
|
|
||||||
if (onlineModel.url === model.url) {
|
|
||||||
onlineState = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
m.ko_online(onlineState);
|
|
||||||
//m.ko_recording_class( (model.online && !model.suspended) ? 'fa fa-circle red' : '');
|
|
||||||
m.swallowEvents = true;
|
|
||||||
m.ko_suspended(model.suspended);
|
|
||||||
m.swallowEvents = false;
|
|
||||||
m.ko_recording(m.ko_online() && !m.ko_suspended());
|
|
||||||
}
|
}
|
||||||
|
m.ko_online(onlineState);
|
||||||
|
//m.ko_recording_class( (model.online && !model.suspended) ? 'fa fa-circle red' : '');
|
||||||
|
m.swallowEvents = true;
|
||||||
|
m.ko_suspended(model.suspended);
|
||||||
|
m.swallowEvents = false;
|
||||||
|
m.ko_recording(m.ko_online() && !m.ko_suspended());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue