Files
LesRecettesDePapis/public/assets/js/advanced-search.js
2026-04-03 10:43:55 +02:00

111 lines
3.7 KiB
JavaScript

document.addEventListener('DOMContentLoaded', function(){
let searchInput = "";
let tagsId = [];
let ingredientsId = [];
function buildCards( data ){
if( Array.isArray( data ) ){
data = Object.assign({}, data );
}
document.getElementById( "recetteList" ).innerHTML = '';
for( const [key, recette] of Object.entries( data ) ) {
let HTML_CONTENT = `<a class="recette-icone" href="<?php V::routeUrl( 'recettes->show', $recette->slug ); ?>">
<img class="recette-preview-image" src="random-recette.jpg">
<div class="recette-icone-content">
<h3>${recette.titre_recette}</h3>
<ul>
<li>Temps de préparation : ${recette.temps_de_preparation}</li>
<li>Nombre d'ingrédients : data.nb_ing</li>
</ul>
</div>
</a>`
document.getElementById("recetteList").innerHTML += HTML_CONTENT;
}
}
function advancedSearch(){
let form = new FormData();
form.append( "title", searchInput );
form.append( "tagsId", tagsId );
form.append( "ingredientsId", ingredientsId );
const XML = new XMLHttpRequest();
XML.open( "POST", '/api/recettes/list' );
XML.onreadystatechange = function ( e ) {
if( XML.status === 200 && XML.readyState === XMLHttpRequest.DONE ) {
try {
console.log( XML.response );
let response = JSON.parse(XML.response);
console.log( "Reponse parsé" );
buildCards( response.data );
} catch( e ) {
console.log( "Ce n'est pas un fichier JSON" );
}
}
}
XML.send( form );
}
const INGREDIENTSLIST = document.getElementById( 'ingredientsList' );
for( let item of INGREDIENTSLIST.getElementsByTagName( 'li' ) ){
item.addEventListener( 'click', function(){
let ingredientId = Number( item.getAttribute( 'data-ingredient-id' ) );
let index = ingredientsId.indexOf( ingredientId );
if( index > -1 ) {
ingredientsId.splice( index, 1 );
item.classList.add( 'tag-unselected' );
item.classList.remove( 'tag-selected' );
} else {
ingredientsId.push( ingredientId );
item.classList.add( 'tag-selected' );
item.classList.remove( 'tag-unselected' );
}
advancedSearch();
});
}
const TAGSLIST = document.getElementById( 'tagsList' );
for( let item of TAGSLIST.getElementsByTagName( 'li' ) ){
item.addEventListener( 'click', function(){
let tagId = Number( item.getAttribute( 'data-tag-id' ) );
let index = tagsId.indexOf( tagId );
if( index > -1 ) {
tagsId.splice( index, 1 );
item.classList.add( 'tag-unselected' );
item.classList.remove( 'tag-selected' );
} else {
tagsId.push( tagId );
item.classList.add( 'tag-selected' );
item.classList.remove( 'tag-unselected' );
}
advancedSearch();
});
}
const SEARCHBAR = document.getElementById( 'searchForm' );
searchInput = new URLSearchParams(document.location.search).get("s");
console.log( searchInput );
if( searchInput !== "" ) {
advancedSearch();
}
SEARCHBAR.onsubmit = function( e ){
e.preventDefault();
searchInput = document.getElementById( 'searchFormField' ).value;
advancedSearch();
}
});