ForgeTotal.js 5
es

Total.js 5

Compara dos listas con DIFFARR: qué añadir, actualizar y eliminar

Total.js 5 · total5@0.0.19 utilitiesarraysforms Ejecutada con Total.js 5

DIFFARR(property, saved, submitted) compara dos arrays de objetos por una propiedad y devuelve un objeto con tres listas:

  • add: los objetos de submitted cuya propiedad no está en saved
  • upd: para los objetos que están en ambos, { db, form } con el objeto guardado y el enviado
  • rem: los valores de la propiedad (no los objetos) de los elementos de saved que no están en submitted

Es el paso habitual al guardar una lista editable: el formulario envía la lista completa y necesitas saber qué se creó, qué cambió y qué se eliminó. Los valores se comparan con ==, así que 1 y '1' son el mismo elemento.

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
	});
}