ForgeTotal.js 5
it

Total.js 5

Confronta due liste con DIFFARR: cosa aggiungere, aggiornare e rimuovere

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

DIFFARR(property, saved, submitted) confronta due array di oggetti tramite una proprietà e restituisce un oggetto con tre liste:

  • add: gli oggetti di submitted la cui proprietà non è in saved
  • upd: per gli oggetti presenti in entrambi, { db, form } con l'oggetto salvato e quello inviato
  • rem: i valori della proprietà (non gli oggetti) degli elementi di saved che non sono in submitted

È il passaggio usuale quando si salva una lista modificabile: il modulo invia l'intera lista e devi sapere cosa è stato creato, cosa è cambiato e cosa è stato eliminato. I valori vengono confrontati con ==, quindi 1 e '1' sono lo stesso 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
	});
}