C-ZLTV / news-api-js-advanced

News API based project for the JavaScript Advanced course.

Home Page:https://vocal-rugelach-86d415.netlify.app/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Newest Hacker News - Cristina Zlatov

BANNER

I build the my third project for the Start2Impact online course. It is a News API and Weather API based project in Vanilla JavaScript.

Table of contents

Overview

The task

The task was to create a News webpage that fetches the newest stories from the Hacker News API.

One of the main requirements was to integrate a Load More button that would fetch ten pieces of news at a time.

I decided to integrate Weather API data and a date into the project for completeness.

Links

My process

As I decided to tackle the most complex part first, fetching the array of IDs from the Hacker News API was my first step.

Then I created a function that fetches a single story given an ID as parameter. The parameter is placed into the fetch URL as a template literal.

At last, in order to fetch ten stories, I created a function with an index parameter. It splits the array of IDs in 50 sub-arrays of 10 IDs using chunk() from Lodash and returns each arrays based on the index provided upon the call.

This function is assigned to a click event listener with a cumulating value as a parameter (currentIndex++). Now, every time the Load More button is clicked, the value of currentIndex++ increases by one, and the event listener displays the corresponding sub-array.

This fetch function calls the displayStories function.

Fetching data from the Weather API follows a similar pattern of actions. Moreover, both calls use Async/Await and Try/Catch for error handling and a displayError function.

The last piece of logic was creating and displaying the Today's Date on the sidebar.

For the designing and styling process I decided on the mobile first approach.

The layout for mobile is straight forward, without any layout choices besides the grid display for the weather. For the desktop I opted for a more traditional sidebar layout made with flex-box.

The entire project was created with Vite.

Built with

  • Semantic HTML5 markup
  • Sass
  • Flex-box
  • Mobile-first workflow
  • JavaScript
  • Fetch API

What I learned or got more details on

Fells like I went to hell and back to get to these four lines of code, but it was all worth it.

I tried so many other intricate ways but I learned that, at the end of the day, the less pretentious the code is the most efficient it is.

const chunkedIds = _.chunk(ids, 10);

let tenStories = await Promise.all(
  chunkedIds[index].map((id) => fetchStory(id))
);

The currentIndex++ refers to index in the example below.

fetchTenStories(currentIndex++);

Author

Acknowledgments

Finally I'd like to thank Start2Impact for inspiring me to take on their course in the first place and making me feel comfortable while learning everything from zero.

About

News API based project for the JavaScript Advanced course.

https://vocal-rugelach-86d415.netlify.app/


Languages

Language:JavaScript 43.6%Language:HTML 25.8%Language:SCSS 16.4%Language:CSS 14.2%