Event-Planner / client / src / components / venue-search / table-body.js
table-body.js
Raw
import React, { useState } from "react";
import axios from "axios";

function calcCrow(lat1, lon1, lat2, lon2) 
    {
      var R = 6371; // km
      var dLat = toRad(lat2-lat1);
      var dLon = toRad(lon2-lon1);
      var lat1 = toRad(lat1);
      var lat2 = toRad(lat2);

      var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2); 
      var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
      var d = R * c;
      d = d / 1.609;
      return d.toFixed(1);
    }

// Converts numeric degrees to radians
function toRad(Value) 
    {
        return Value * Math.PI / 180;
    }

const TableBody = ({ tableData, columns }) => {
    const [active, setActive] = useState([]);
    var curr_event = window.localStorage.getItem("curr_event");
    var email = window.localStorage.getItem("email");
    const prev_fav = JSON.parse(window.localStorage.getItem("fav_venues"));
    console.log("prev favs", prev_fav);

    return (
     <tbody>
      {tableData.map((data) => {
        const curr_name = data.name;
        const curr_rating = data.rating;
        const curr_price = data.price_level;
        const curr_lat = data["geometry"]["location"]["lat"];
        const curr_long = data["geometry"]["location"]["lng"];

        var isActive = active.some(element => {
          if (element.name === curr_name) {
            return true;
          } else {
            return false;
          }
        })

        if (isActive === false && prev_fav !== null){
          isActive = prev_fav.some(element => {
            if (element.name === curr_name) {
              return true;
            } else {
              return false;
            }
          })
        }
        
        const handleClick = () => {
          if (isActive){
            const deletedFav = curr_name;

            const config = {
              method: "delete",
              url: "http://localhost:3001/delete-favorite",
              data: {
                  curr_event,
                  email,
                  deletedFav
              },
            };

            axios(config)
            .then((result) => {
              var updated = result.data.updated_favs;
              setActive(updated);
              // update localstorage favs
              localStorage.setItem("fav_venues",JSON.stringify(updated))
              console.log("Fav After Deletion: ", JSON.stringify(updated))
            })
            .catch((error) => {
              console.log(error);
            });
          } else {
            setActive([
              ...active,
              { name: curr_name}
            ]);
            console.log(active)

            const config = {
              method:"post",
              url: "http://localhost:3001/add-favorite",
              data: {
                curr_event,
                email,
                curr_name,
                curr_rating,
                curr_price,
                curr_lat,
                curr_long,
              }
            }
            axios(config)
            .then((result) => {
              var updated = result.data.updated_fav;
              setActive(updated);
              // update localstorage favs
              localStorage.setItem("fav_venues",JSON.stringify(updated))
              console.log("fav_venues after addition", JSON.stringify(updated))
            })
            .catch((error) => {
              console.log(error);
            });
          }
        };
       return (
        <tr key={data.id}>
         {columns.map(({ accessor }) => {
          var tData = data[accessor] ? data[accessor] : "——";
          if (accessor === "price_level"){
            if (Number(tData) === 1){
                tData = "$"
              } else if (Number(tData) === 2) {
                tData = "$$"
              } else {
                tData = "$$$"
              }
          }
          if (accessor === "distance") {
            var user_lat = window.localStorage.getItem("user_lat");
            var user_long = window.localStorage.getItem("user_long");
            tData = calcCrow(user_lat, user_long, curr_lat, curr_long).toString();
            var miles = " miles";
            tData = tData.concat(miles);
          }
          if (accessor === "fav") {
            return <button class = "favbutton" onClick={handleClick}>{ isActive ? "❤️" : "🤍"}</button>
          }
          return <td key={accessor}>{tData}</td>;
        })}
        </tr>
       );
      })}
     </tbody>
    );
   };
   
   export default TableBody;