forked from ScoDoc/ScoDoc
Emmanuel Viennet
8e1cb055f6
- clé étrangère sur Identite dans EntrepriseStageApprentissage - nouveau mécanisme pour le choix d'étudiant via auto-completion (ajout de autoComplete.js-10.2.7) - nouveau point d'API: /etudiants/name/<string:start> (et son test unitaire)
66 lines
2.7 KiB
JavaScript
66 lines
2.7 KiB
JavaScript
|
|
// Mécanisme d'auto-complétion (choix) d'un étudiant
|
|
// Il faut un champs #etudiant (text input) et à coté un champ hidden etudid qui sera rempli.
|
|
// utilise autoComplete.js, source https://tarekraafat.github.io/autoComplete.js
|
|
// EV 2023-06-01
|
|
|
|
function etud_autocomplete_config(with_dept = false) {
|
|
return {
|
|
selector: "#etudiant",
|
|
placeHolder: "Nom...",
|
|
threshold: 3,
|
|
data: {
|
|
src: async (query) => {
|
|
try {
|
|
// Fetch Data from external Source
|
|
const source = await fetch(`/ScoDoc/api/etudiants/name/${query}`);
|
|
// Data should be an array of `Objects` or `Strings`
|
|
const data = await source.json();
|
|
return data;
|
|
} catch (error) {
|
|
return error;
|
|
}
|
|
},
|
|
// Data source 'Object' key to be searched
|
|
keys: ["nom"]
|
|
},
|
|
events: {
|
|
input: {
|
|
selection: (event) => {
|
|
const prenom = sco_capitalize(event.detail.selection.value.prenom);
|
|
const selection = with_dept ? `${event.detail.selection.value.nom} ${prenom} (${event.detail.selection.value.dept_acronym})` : `${event.detail.selection.value.nom} ${prenom}`;
|
|
// store etudid
|
|
const etudidField = document.getElementById('etudid');
|
|
etudidField.value = event.detail.selection.value.id;
|
|
autoCompleteJS.input.value = selection;
|
|
}
|
|
}
|
|
},
|
|
resultsList: {
|
|
element: (list, data) => {
|
|
if (!data.results.length) {
|
|
// Create "No Results" message element
|
|
const message = document.createElement("div");
|
|
// Add class to the created element
|
|
message.setAttribute("class", "no_result");
|
|
// Add message text content
|
|
message.innerHTML = `<span>Pas de résultat pour "${data.query}"</span>`;
|
|
// Append message element to the results list
|
|
list.prepend(message);
|
|
// Efface l'etudid
|
|
const etudidField = document.getElementById('etudid');
|
|
etudidField.value = "";
|
|
}
|
|
},
|
|
noResults: true,
|
|
},
|
|
resultItem: {
|
|
highlight: true,
|
|
element: (item, data) => {
|
|
const prenom = sco_capitalize(data.value.prenom);
|
|
item.innerHTML += with_dept ? ` ${prenom} (${data.value.dept_acronym})` : ` ${prenom}`;
|
|
},
|
|
},
|
|
}
|
|
}
|