ForgeTotal.js 5
pt

Total.js 5

Compare duas listas com DIFFARR: o que adicionar, atualizar e remover

Total.js 5 · total5@0.0.19 utilitiesarraysforms Executada com o Total.js 5

DIFFARR(property, saved, submitted) compara dois arrays de objetos por uma propriedade e devolve um objeto com três listas:

  • add: os objetos de submitted cuja propriedade não está em saved
  • upd: para os objetos que estão em ambos, { db, form } com o objeto guardado e o submetido
  • rem: os valores da propriedade (não os objetos) dos elementos de saved que não estão em submitted

É o passo habitual ao guardar uma lista editável: o formulário envia a lista completa e precisa de saber o que foi criado, o que mudou e o que foi eliminado. Os valores são comparados com ==, por isso 1 e '1' são o mesmo 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
	});
}