Project Deep Dive

Recipe Prompter

Developed a recipe search app that leverages the Edamam API for ingredient-based recipe discovery. Users can input ingredients and receive personalized recipe recommendations. The app handles API integration, state management with React hooks, and includes a user-friendly interface for efficient recipe searches.

Challenges & solutions
01

Handling Asynchronous API Requests (Edaman API)

Challenge

The application fetches recipe data from an external API (Edamam) asynchronously using axios.get. One of the challenges was to ensure that the data was properly fetched and managed while displaying loading indicators and handling possible errors.

Solution

The getData function handles the asynchronous request. The loading state (loading variable) is used to show a loading indicator while the request is in progress. Once the data is fetched successfully, it updates the recipes state. In case of an error, an error message is displayed using the alert state.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse tempor, turpis vitae fermentum euismod, risus felis pellentesque lorem, ac finibus lacus odio vitae neque. Quisque in semper neque. Nam in sodales est. Praesent ullamcorper risus eget orci rhoncus elementum ac id augue. Sed lectus leo, faucibus at finibus quis, convallis consectetur ligula. Integer finibus malesuada nulla, vel consectetur elit fringilla in. Nam ornare suscipit purus. Donec mi sapien, feugiat congue convallis ac, accumsan quis quam. Quisque enim eros, feugiat at elit vel, suscipit luctus nibh. Proin sollicitudin et sem nec interdum. Donec egestas quis tellus eget sodales. Nullam elementum interdum tortor, quis venenatis nibh interdum sed. Nullam at purus non libero tempor luctus sit amet quis purus. Donec ac arcu non lectus consequat lobortis.

Phasellus luctus malesuada tristique. In vel nunc eget orci lacinia molestie ultricies et eros. Praesent tellus eros, mattis ac mattis non, condimentum non nisi. Suspendisse commodo, nisl a sollicitudin tincidunt, augue augue feugiat elit, eu aliquet neque lacus ac sapien. Mauris interdum vehicula metus eget aliquam. Duis id consectetur leo. Vestibulum vulputate arcu sed lectus laoreet, porttitor mattis purus elementum. Nulla sodales lectus sit amet dolor sollicitudin faucibus. Vestibulum ultricies finibus tellus, blandit lobortis magna laoreet ac. Proin eu pulvinar lacus. Nunc tristique augue sit amet eros mattis sodales. Duis non nibh a leo dapibus porta ut quis lorem. Aliquam fermentum tellus ante, in mattis ante blandit eu. Proin eu tincidunt enim. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Praesent eu ullamcorper nibh.

Donec bibendum porttitor turpis, vel porta nunc varius sed. Nunc varius velit ut est luctus, a euismod urna egestas. Cras dapibus ipsum lorem, sit amet semper odio blandit ac. Vestibulum feugiat massa ut hendrerit aliquam. Ut pharetra ullamcorper turpis, ut condimentum nulla mollis ut. Suspendisse potenti. Pellentesque quis accumsan sem. Donec lacinia rhoncus egestas. Maecenas gravida eros urna, vitae blandit nisl cursus ut.

Maecenas non consequat dolor. Donec nec augue ex. Vestibulum turpis nulla, facilisis sed sodales ut, aliquam cursus tortor. Ut malesuada nisl eget convallis feugiat. In hac habitasse platea dictumst. Ut luctus lorem et nulla tristique, et pharetra sem semper. Maecenas diam nisi, mollis in nisl nec, euismod sollicitudin eros. Praesent sit amet ex facilisis, suscipit leo ac, auctor libero. Nullam vitae iaculis elit. Nullam id maximus neque. Morbi eget tellus quis quam ornare consectetur. Aenean eu pellentesque massa, vel cursus mi. Nulla a condimentum magna. Pellentesque maximus sollicitudin mattis.

Integer nec dui vehicula, pharetra tellus ac, tempor est. Vestibulum scelerisque felis dui, ac suscipit turpis gravida sed. Donec consectetur, nisi et condimentum bibendum, mauris tortor ultricies odio, nec ultrices purus nunc eu dolor. Donec vestibulum, tellus sit amet lacinia ultricies, justo mi feugiat lacus, a vehicula nibh urna dictum risus. Phasellus eget rhoncus eros. Nulla dignissim ipsum ut placerat feugiat. Donec sed eros in mauris blandit fringilla. Vivamus a risus lacinia, bibendum nisl a, vulputate diam. Cras imperdiet, arcu sed mattis aliquam, lacus quam cursus tellus, quis malesuada diam ante consectetur enim. Quisque ultricies, nisi sit amet tincidunt feugiat, augue lorem blandit mauris, id dictum tortor metus et arcu. Cras vulputate libero vitae quam tristique, sit amet egestas dolor molestie. Phasellus a luctus lorem, sodales vulputate lectus. Mauris porta id nisi ut cursus. Sed sit amet iaculis dolor, aliquam tincidunt sem. Phasellus non neque sed sapien facilisis sagittis nec quis arcu. Aliquam vestibulum tortor et lorem placerat, vel tempus nisi sagittis.

02

State Management for Form Inputs and Alerts

Challenge

Managing the state of the form inputs (ingredient search query) and alerts can be tricky, as you need to ensure that the user is guided correctly throughout the app.

Solution

The query state holds the ingredient input, and the alert state is used for displaying messages (such as errors or instructions). The form ensures that the user is alerted if they submit an empty query, and the alert disappears after 3 seconds due to the useEffect hook.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse tempor, turpis vitae fermentum euismod, risus felis pellentesque lorem, ac finibus lacus odio vitae neque. Quisque in semper neque. Nam in sodales est. Praesent ullamcorper risus eget orci rhoncus elementum ac id augue. Sed lectus leo, faucibus at finibus quis, convallis consectetur ligula. Integer finibus malesuada nulla, vel consectetur elit fringilla in. Nam ornare suscipit purus. Donec mi sapien, feugiat congue convallis ac, accumsan quis quam. Quisque enim eros, feugiat at elit vel, suscipit luctus nibh. Proin sollicitudin et sem nec interdum. Donec egestas quis tellus eget sodales. Nullam elementum interdum tortor, quis venenatis nibh interdum sed. Nullam at purus non libero tempor luctus sit amet quis purus. Donec ac arcu non lectus consequat lobortis.

Phasellus luctus malesuada tristique. In vel nunc eget orci lacinia molestie ultricies et eros. Praesent tellus eros, mattis ac mattis non, condimentum non nisi. Suspendisse commodo, nisl a sollicitudin tincidunt, augue augue feugiat elit, eu aliquet neque lacus ac sapien. Mauris interdum vehicula metus eget aliquam. Duis id consectetur leo. Vestibulum vulputate arcu sed lectus laoreet, porttitor mattis purus elementum. Nulla sodales lectus sit amet dolor sollicitudin faucibus. Vestibulum ultricies finibus tellus, blandit lobortis magna laoreet ac. Proin eu pulvinar lacus. Nunc tristique augue sit amet eros mattis sodales. Duis non nibh a leo dapibus porta ut quis lorem. Aliquam fermentum tellus ante, in mattis ante blandit eu. Proin eu tincidunt enim. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Praesent eu ullamcorper nibh.

Donec bibendum porttitor turpis, vel porta nunc varius sed. Nunc varius velit ut est luctus, a euismod urna egestas. Cras dapibus ipsum lorem, sit amet semper odio blandit ac. Vestibulum feugiat massa ut hendrerit aliquam. Ut pharetra ullamcorper turpis, ut condimentum nulla mollis ut. Suspendisse potenti. Pellentesque quis accumsan sem. Donec lacinia rhoncus egestas. Maecenas gravida eros urna, vitae blandit nisl cursus ut.

Maecenas non consequat dolor. Donec nec augue ex. Vestibulum turpis nulla, facilisis sed sodales ut, aliquam cursus tortor. Ut malesuada nisl eget convallis feugiat. In hac habitasse platea dictumst. Ut luctus lorem et nulla tristique, et pharetra sem semper. Maecenas diam nisi, mollis in nisl nec, euismod sollicitudin eros. Praesent sit amet ex facilisis, suscipit leo ac, auctor libero. Nullam vitae iaculis elit. Nullam id maximus neque. Morbi eget tellus quis quam ornare consectetur. Aenean eu pellentesque massa, vel cursus mi. Nulla a condimentum magna. Pellentesque maximus sollicitudin mattis.

Integer nec dui vehicula, pharetra tellus ac, tempor est. Vestibulum scelerisque felis dui, ac suscipit turpis gravida sed. Donec consectetur, nisi et condimentum bibendum, mauris tortor ultricies odio, nec ultrices purus nunc eu dolor. Donec vestibulum, tellus sit amet lacinia ultricies, justo mi feugiat lacus, a vehicula nibh urna dictum risus. Phasellus eget rhoncus eros. Nulla dignissim ipsum ut placerat feugiat. Donec sed eros in mauris blandit fringilla. Vivamus a risus lacinia, bibendum nisl a, vulputate diam. Cras imperdiet, arcu sed mattis aliquam, lacus quam cursus tellus, quis malesuada diam ante consectetur enim. Quisque ultricies, nisi sit amet tincidunt feugiat, augue lorem blandit mauris, id dictum tortor metus et arcu. Cras vulputate libero vitae quam tristique, sit amet egestas dolor molestie. Phasellus a luctus lorem, sodales vulputate lectus. Mauris porta id nisi ut cursus. Sed sit amet iaculis dolor, aliquam tincidunt sem. Phasellus non neque sed sapien facilisis sagittis nec quis arcu. Aliquam vestibulum tortor et lorem placerat, vel tempus nisi sagittis.

03

Displaying Recipe Details with Overlay

Challenge

Managing the recipe details overlay and ensuring it appears correctly when the user clicks to view more details for a specific recipe. Solution: The selectedRecipe state is used to control which recipe's details should be shown in the overlay. When the user clicks "View Details," the handleViewDetails function sets the selectedRecipe state to the selected recipe. The overlay is displayed conditionally, and the user can close it by clicking the "X" button, which sets selectedRecipe back to null.

Solution

The selectedRecipe state is used to control which recipe's details should be shown in the overlay. When the user clicks "View Details," the handleViewDetails function sets the selectedRecipe state to the selected recipe. The overlay is displayed conditionally, and the user can close it by clicking the "X" button, which sets selectedRecipe back to null.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse tempor, turpis vitae fermentum euismod, risus felis pellentesque lorem, ac finibus lacus odio vitae neque. Quisque in semper neque. Nam in sodales est. Praesent ullamcorper risus eget orci rhoncus elementum ac id augue. Sed lectus leo, faucibus at finibus quis, convallis consectetur ligula. Integer finibus malesuada nulla, vel consectetur elit fringilla in. Nam ornare suscipit purus. Donec mi sapien, feugiat congue convallis ac, accumsan quis quam. Quisque enim eros, feugiat at elit vel, suscipit luctus nibh. Proin sollicitudin et sem nec interdum. Donec egestas quis tellus eget sodales. Nullam elementum interdum tortor, quis venenatis nibh interdum sed. Nullam at purus non libero tempor luctus sit amet quis purus. Donec ac arcu non lectus consequat lobortis.

Phasellus luctus malesuada tristique. In vel nunc eget orci lacinia molestie ultricies et eros. Praesent tellus eros, mattis ac mattis non, condimentum non nisi. Suspendisse commodo, nisl a sollicitudin tincidunt, augue augue feugiat elit, eu aliquet neque lacus ac sapien. Mauris interdum vehicula metus eget aliquam. Duis id consectetur leo. Vestibulum vulputate arcu sed lectus laoreet, porttitor mattis purus elementum. Nulla sodales lectus sit amet dolor sollicitudin faucibus. Vestibulum ultricies finibus tellus, blandit lobortis magna laoreet ac. Proin eu pulvinar lacus. Nunc tristique augue sit amet eros mattis sodales. Duis non nibh a leo dapibus porta ut quis lorem. Aliquam fermentum tellus ante, in mattis ante blandit eu. Proin eu tincidunt enim. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Praesent eu ullamcorper nibh.

Donec bibendum porttitor turpis, vel porta nunc varius sed. Nunc varius velit ut est luctus, a euismod urna egestas. Cras dapibus ipsum lorem, sit amet semper odio blandit ac. Vestibulum feugiat massa ut hendrerit aliquam. Ut pharetra ullamcorper turpis, ut condimentum nulla mollis ut. Suspendisse potenti. Pellentesque quis accumsan sem. Donec lacinia rhoncus egestas. Maecenas gravida eros urna, vitae blandit nisl cursus ut.

Maecenas non consequat dolor. Donec nec augue ex. Vestibulum turpis nulla, facilisis sed sodales ut, aliquam cursus tortor. Ut malesuada nisl eget convallis feugiat. In hac habitasse platea dictumst. Ut luctus lorem et nulla tristique, et pharetra sem semper. Maecenas diam nisi, mollis in nisl nec, euismod sollicitudin eros. Praesent sit amet ex facilisis, suscipit leo ac, auctor libero. Nullam vitae iaculis elit. Nullam id maximus neque. Morbi eget tellus quis quam ornare consectetur. Aenean eu pellentesque massa, vel cursus mi. Nulla a condimentum magna. Pellentesque maximus sollicitudin mattis.

Integer nec dui vehicula, pharetra tellus ac, tempor est. Vestibulum scelerisque felis dui, ac suscipit turpis gravida sed. Donec consectetur, nisi et condimentum bibendum, mauris tortor ultricies odio, nec ultrices purus nunc eu dolor. Donec vestibulum, tellus sit amet lacinia ultricies, justo mi feugiat lacus, a vehicula nibh urna dictum risus. Phasellus eget rhoncus eros. Nulla dignissim ipsum ut placerat feugiat. Donec sed eros in mauris blandit fringilla. Vivamus a risus lacinia, bibendum nisl a, vulputate diam. Cras imperdiet, arcu sed mattis aliquam, lacus quam cursus tellus, quis malesuada diam ante consectetur enim. Quisque ultricies, nisi sit amet tincidunt feugiat, augue lorem blandit mauris, id dictum tortor metus et arcu. Cras vulputate libero vitae quam tristique, sit amet egestas dolor molestie. Phasellus a luctus lorem, sodales vulputate lectus. Mauris porta id nisi ut cursus. Sed sit amet iaculis dolor, aliquam tincidunt sem. Phasellus non neque sed sapien facilisis sagittis nec quis arcu. Aliquam vestibulum tortor et lorem placerat, vel tempus nisi sagittis.