ForgeTotal.js 5
fr

Total.js 5

Comparer deux listes avec DIFFARR : quoi ajouter, mettre à jour et supprimer

Total.js 5 · total5@0.0.19 utilitiesarraysforms Exécutée avec Total.js 5

DIFFARR(property, saved, submitted) compare deux tableaux d'objets selon une propriété et renvoie un objet avec trois listes :

  • add : les objets de submitted dont la propriété n'est pas dans saved
  • upd : pour les objets présents dans les deux, { db, form } avec l'objet enregistré et l'objet soumis
  • rem : les valeurs de la propriété (pas les objets) des éléments de saved qui ne sont pas dans submitted

C'est l'étape habituelle de l'enregistrement d'une liste modifiable : le formulaire envoie la liste entière et vous devez savoir ce qui a été créé, ce qui a changé et ce qui a été supprimé. Les valeurs sont comparées avec ==, donc 1 et '1' sont le même élément.

controllers/lists.js
const saved = [
	{ id: 1, name: 'Book' },
	{ id: 2, name: 'Pen' },
	{ id: 3, name: 'Lamp' }
];

exports.install = function() {
	ROUTE('POST /sync/', sync);
};

function sync($) {
	const diff = DIFFARR('id', saved, $.body.items);
	$.json({
		add: diff.add,
		update: diff.upd.map(n => ({ id: n.db.id, from: n.db.name, to: n.form.name })),
		remove: diff.rem
	});
}