javascriptfetch-apiselectors-api

Covid-19 error message when country isn't entered isn't matched with API


I'm developing a COVID-19 tracker app so far it works but I'm having issue for when the user search for a country that isn't in the API a error message is suppose to pop up as the else statement, which indeed it does happen. The issue is the message would pop up when a country that's been entered and the API has the info the error message would still pop up. Any advice would help.

let btn = document.getElementById("submit-btn");
//set variable btn to the html button id
        
        btn.addEventListener("click",()=>{
        let text = document.getElementById("input-text").value;
        console.log("button was pressed");
        //added a event once btn is pressed taking the value of what was typed in the form

            fetch('https://api.covid19api.com/summary')
            .then((covidData)=>{
                return covidData.json();
            })
            //
            .then((getData)=>{
                console.log(getData);
                console.log("api was contacted");
                var content = document.querySelector(".api-data"); 

                var box = content.lastElementChild;  
                while (box) { 
                    content.removeChild(box); 
                    box = content.lastElementChild; 
                } 

                var countriesIndex = 0;
                for(var i = 0; i < 185; i++){
                    if(getData.Countries[i].Country.toLowerCase() == text.toLowerCase()){
                        countriesIndex = i;
                        break;
                    }
                    else {
                        var hideData = document.querySelector(".api-data");
                        hideData.style.display = "none";
                        alert("No information for that country")
                        break;
                    }
                }
                let data = document.querySelector(".api-data");
                data.innerHTML = `<div class="data-boxes">
                                <div class="country-index">
                                    <span>Covid-19 Cases in ${getData.Countries[countriesIndex].Country}</span>
                                </div>
                                <div class="total-data">
                                    <div><p>Total Confirmed</p> ${getData.Countries[countriesIndex].TotalConfirmed}</div>
                                    <div><p>Total Deaths</p> ${getData.Countries[countriesIndex].TotalDeaths}</div>
                                    <div><p>Total Recovered</p> ${getData.Countries[countriesIndex].TotalRecovered}</div>
                                </div>
                                <div class="new-data">
                                    <div><p>New Confirmed</p> ${getData.Countries[countriesIndex].NewConfirmed}</div>
                                    <div><p>New Deaths</p> ${getData.Countries[countriesIndex].NewDeaths}</div>
                                    <div><p>New Recovered</p> ${getData.Countries[countriesIndex].NewRecovered}</div>
                                    </div>
                                </div>`;
            })
        })
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://fonts.googleapis.com/css2?family=News+Cycle:wght@400;700&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
    <link rel="stylesheet" href="style.css">
    <title>Document</title>
</head>
<body>
    <div class="container tracker-container">
        <div class="jumbotron jumbotron-fluid">
            <div class="container">
              <h1 class="covid-header">Covid-19 Daily Tracker</h1>
              <p class="covid-description">A daily tracker of the Covid-19 virus, enter the country in the search bar to recieve the report.</p>
              <p class="covid-description">Report is given from the "covid19api" API.</p>
            </div>
          </div>
          <div class="info-box">
          <form>
            <div class="form-row input-row">
              <div class="col-12 form">
                <label for="country-input">Enter country's name</label>
                <input type="text" class="form-control" id="input-text" value="" required>
                <button type="button" class="btn btn-success btn-block" id="submit-btn">Get Statistics</button>
              </div>
            </div>
          </form>
          <div class="api-data">
          </div>
        </div>
        </div>
        
</body>
<script src="tracker.js"></script>
</html>


Solution

  • The else part is replaced. If countriesIndex is not updated from 0 , that means the data is not found.

    Fixed Code:

    let btn = document.getElementById("submit-btn");
    //set variable btn to the html button id
            
            btn.addEventListener("click",()=>{
            let text = document.getElementById("input-text").value;
            console.log("button was pressed");
            //added a event once btn is pressed taking the value of what was typed in the form
    
                fetch('https://api.covid19api.com/summary')
                .then((covidData)=>{
                    return covidData.json();
                })
                //
                .then((getData)=>{
                    console.log(getData);
                    console.log("api was contacted");
                    var content = document.querySelector(".api-data"); 
    
                    var box = content.lastElementChild;  
                    while (box) { 
                        content.removeChild(box); 
                        box = content.lastElementChild; 
                    } 
    
                    var countriesIndex = 0;
                    for(var i = 0; i < 185; i++){
                        if( getData.Countries[i].Country.toLowerCase() == text.toLowerCase()){
                            countriesIndex = i;
                            break;
                        }
                        
                    }
                    if(countriesIndex==0) {
                            var hideData = document.querySelector(".api-data");
                            hideData.style.display = "none";
                            alert("No information for that country")
                        }
                    else{
                    let data = document.querySelector(".api-data");
                    data.innerHTML = `<div class="data-boxes">
                                    <div class="country-index">
                                        <span>Covid-19 Cases in ${getData.Countries[countriesIndex].Country}</span>
                                    </div>
                                    <div class="total-data">
                                        <div><p>Total Confirmed</p> ${getData.Countries[countriesIndex].TotalConfirmed}</div>
                                        <div><p>Total Deaths</p> ${getData.Countries[countriesIndex].TotalDeaths}</div>
                                        <div><p>Total Recovered</p> ${getData.Countries[countriesIndex].TotalRecovered}</div>
                                    </div>
                                    <div class="new-data">
                                        <div><p>New Confirmed</p> ${getData.Countries[countriesIndex].NewConfirmed}</div>
                                        <div><p>New Deaths</p> ${getData.Countries[countriesIndex].NewDeaths}</div>
                                        <div><p>New Recovered</p> ${getData.Countries[countriesIndex].NewRecovered}</div>
                                        </div>
                                    </div>`;
                                    }
                })
            })
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link href="https://fonts.googleapis.com/css2?family=News+Cycle:wght@400;700&display=swap" rel="stylesheet">
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
        <link rel="stylesheet" href="style.css">
        <title>Document</title>
    </head>
    <body>
        <div class="container tracker-container">
            <div class="jumbotron jumbotron-fluid">
                <div class="container">
                  <h1 class="covid-header">Covid-19 Daily Tracker</h1>
                  <p class="covid-description">A daily tracker of the Covid-19 virus, enter the country in the search bar to recieve the report.</p>
                  <p class="covid-description">Report is given from the "covid19api" API.</p>
                </div>
              </div>
              <div class="info-box">
              <form>
                <div class="form-row input-row">
                  <div class="col-12 form">
                    <label for="country-input">Enter country's name</label>
                    <input type="text" class="form-control" id="input-text" value="" required>
                    <button type="button" class="btn btn-success btn-block" id="submit-btn">Get Statistics</button>
                  </div>
                </div>
              </form>
              <div class="api-data">
              </div>
            </div>
            </div>
            
    </body>
    <script src="tracker.js"></script>
    </html>