Published on

edamam recipe search api and javascript part 2

Authors
  • avatar
    Name
    James Williams
    Twitter
    About

Diving Deeper: Building a Dynamic Recipe App with Edamam and JavaScript

In the previous part, we laid the foundation for our recipe app by setting up the Edamam API integration and fetching recipe data. Now, let's take our app to the next level by adding dynamic functionality using JavaScript.

1. User Input and Search Functionality

The core of our recipe app is the ability to search for recipes based on user input. We'll use JavaScript to capture user input from a search bar and send it to the Edamam API.

const searchForm = document.querySelector('form');
const searchInput = document.querySelector('#search-input');
const recipeList = document.querySelector('#recipe-list');

searchForm.addEventListener('submit', (event) => {
  event.preventDefault();
  const searchTerm = searchInput.value;
  // Send searchTerm to Edamam API and update recipeList
});

This code snippet captures the user's search term and prepares it for sending to the Edamam API. We'll use this information to fetch relevant recipes and display them dynamically.

2. Displaying Recipe Results

Once we have the recipe data from Edamam, we need to display it in a user-friendly way. We'll use JavaScript to create HTML elements for each recipe and populate them with the relevant information.

function displayRecipes(recipes) {
  recipeList.innerHTML = ''; // Clear previous results
  recipes.forEach(recipe => {
    const recipeItem = document.createElement('li');
    recipeItem.innerHTML = `
      <h3>${recipe.label}</h3>
      <img src="${recipe.image}" alt="${recipe.label}">
      <p>Calories: ${recipe.calories}</p>
    `;
    recipeList.appendChild(recipeItem);
  });
}

This function takes an array of recipes and dynamically creates list items for each recipe, including its name, image, and calorie information.

3. Enhancing User Experience with Filtering and Sorting

To make our app more powerful, we can add filtering and sorting capabilities. Users can filter recipes based on dietary restrictions, cuisine types, or ingredients. Sorting options can allow users to prioritize recipes based on factors like calories, preparation time, or popularity.

const filterOptions = document.querySelectorAll('.filter-option');
const sortOptions = document.querySelectorAll('.sort-option');

filterOptions.forEach(option => {
  option.addEventListener('change', () => {
    // Filter recipes based on selected option
    // Update recipeList with filtered results
  });
});

sortOptions.forEach(option => {
  option.addEventListener('change', () => {
    // Sort recipes based on selected option
    // Update recipeList with sorted results
  });
});

This code snippet sets up event listeners for filter and sort options, allowing users to dynamically refine their search results.

4. Recipe Details View

Finally, we can add a detailed view for each recipe. When a user clicks on a recipe, we can fetch additional information from the Edamam API and display it in a separate section.

recipeList.addEventListener('click', (event) => {
  if (event.target.tagName === 'H3') {
    const recipeId = event.target.parentElement.dataset.recipeId;
    // Fetch detailed recipe information from Edamam API
    // Display recipe details in a separate section
  }
});

This code snippet captures clicks on recipe titles and uses the recipe ID to fetch detailed information from the Edamam API.

By implementing these features, we can create a dynamic and engaging recipe app that provides users with a personalized and interactive experience.