avoiding duplicates between selected and suggested (wip)

see comments in store/index.js
This commit is contained in:
Mathieu Jaumotte 2021-05-06 13:16:26 +02:00
parent a536d2780e
commit e1fcc41ace

View File

@ -56,31 +56,43 @@ let getDataPromise = getAccompanyingCourse(id)
}, },
loadSuggestions(state, suggested) { loadSuggestions(state, suggested) {
// les résultats combinent les valeurs suggérées et les valeurs sélectionnées
// si on change de recherche les valeurs sélectionnées doivent restées affichées !
// c'est pq on affiche indépendamment les 2 tableaux,
// mais on veut s'assurer d'enlever les doublons dans le tableau des suggestions
// problème: certaines fonctions javascript ne supportent pas de manipuler les 2 tableaux
// si l'un est un objet virtuel de vue (Proxy)
// [{},{},{}] et [Proxy,Proxy,Proxy]
// a. remplace par les nouvelles valeurs
//state.add_persons.suggested = suggested;
// b.1 réinitialise avec un tableau vide
//state.add_persons.suggested = []; // <== empêche la création du proxy, réinitialiser autrement //state.add_persons.suggested = []; // <== empêche la création du proxy, réinitialiser autrement
// b.2 vide le tableau avec splice
state.add_persons.suggested.splice(0, state.add_persons.suggested.splice(0,
state.add_persons.suggested.length state.add_persons.suggested.length
); );
//console.log('suggestions', state.add_persons.suggested);
console.log('suggestions', state.add_persons.suggested);
// b. pousse les nouvelles valeurs dans le tableau
suggested.forEach(function(item) { suggested.forEach(function(item) {
state.add_persons.suggested.push(item); state.add_persons.suggested.push(item);
}); });
//state.add_persons.suggested = suggested;
console.log('selections', state.add_persons.selected); console.log('selections', state.add_persons.selected);
console.log('suggestions', state.add_persons.suggested); console.log('suggestions', state.add_persons.suggested);
// doublons qd on ré-affiche des suggestions avec certains selected // calcule l'intersection des 2 tableaux
let intersection = state.add_persons.suggested.filter( let intersection = state.add_persons.suggested.filter(
item => state.add_persons.selected.indexOf(item) !== -1 item => state.add_persons.selected.indexOf(item) !== -1
/* //function(item) {let x = state.add_persons.selected.indexOf(item); console.log('indexof', x); return x !== -1; }
function(item) {
let x = state.add_persons.selected.indexOf(item);
console.log('indexof', x);
return x !== -1
}
*/
); );
console.log('intersection', intersection); console.log('intersection', intersection);
// enlève l'intersection des 2 tableaux
state.add_persons.suggested = state.add_persons.suggested.filter(item => item !== intersection); state.add_persons.suggested = state.add_persons.suggested.filter(item => item !== intersection);
}, },
@ -119,6 +131,7 @@ let getDataPromise = getAccompanyingCourse(id)
}, },
setQuery({ commit }, payload) { setQuery({ commit }, payload) {
commit('setQuery', payload); commit('setQuery', payload);
console.log('## action: setquery: payload', payload);
if (payload.query.length >= 3) { if (payload.query.length >= 3) {
searchPersons(payload.query) searchPersons(payload.query)
.then(suggested => new Promise((resolve, reject) => { .then(suggested => new Promise((resolve, reject) => {