Use maps for model updates

This commit is contained in:
reusedname 2025-02-21 18:58:14 +05:00
parent 04f8a74cd8
commit f4a13cb080
1 changed files with 28 additions and 39 deletions

View File

@ -44,20 +44,17 @@ function isModelInArray(array, model) {
* Synchronizes models from the server with the displayed knockout model table
*/
function syncModels(models) {
// remove models from the observable array, which are not in the
// updated list
for ( let idx in observableModelsArray()) {
let model = observableModelsArray()[idx];
if (!isModelInArray(models, model)) {
observableModelsArray.remove(model);
}
}
// remove models from the observable array, which are not in the updated list
var newModelsMap = new Map(models.map(m => [m.url, m]));
observableModelsArray.remove(m => !newModelsMap.get(m.ko_url()));
// 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)) {
var modelsMap = new Map(observableModelsArray().map(m => [m.ko_url(), m]));
for (let model of models) {
const m = modelsMap.get(model.url);
if (!m) {
// add models to the observable array, which are new in the updated list
model.ko_name = ko.observable(model.name);
model.ko_url = ko.observable(model.url);
model.ko_online = ko.observable(false);
@ -83,15 +80,8 @@ function syncModels(models) {
}
});
observableModelsArray.push(model);
}
}
} else {
// update existing models
for ( let i in models) {
let model = models[i];
for ( let j in observableModelsArray()) {
let m = observableModelsArray()[j];
if (model.url === m.ko_url()) {
m.ko_name(model.name);
m.ko_url(model.url);
let onlineState = false;
@ -111,7 +101,6 @@ function syncModels(models) {
}
}
}
}
function updateModels() {
try {