From 1b6c80f84d21b8daa13515fe1194366e1961fe71 Mon Sep 17 00:00:00 2001 From: Joaquin Date: Wed, 7 May 2025 16:56:26 -0700 Subject: [PATCH] feature/fully implemented challenge 1 --- src/public/scripts/calcExchange.js | 3 ++ src/public/scripts/geolocation.js | 55 +++++++++++++++++++++++++++- src/public/scripts/header.js | 0 src/public/svgs/flags/BGN.svg | 5 +++ src/public/svgs/flags/CHF.svg | 9 +++++ src/public/svgs/flags/CZK.svg | 5 +++ src/public/svgs/flags/DKK.svg | 5 +++ src/public/svgs/flags/HKD.svg | 8 +++++ src/public/svgs/flags/HUF.svg | 7 ++++ src/public/svgs/flags/IDR.svg | 4 +++ src/public/svgs/flags/ILS.svg | 14 ++++++++ src/public/svgs/flags/ISK.svg | 12 +++++++ src/public/svgs/flags/KRW.svg | 24 +++++++++++++ src/public/svgs/flags/MYR.svg | 26 ++++++++++++++ src/public/svgs/flags/NOK.svg | 7 ++++ src/public/svgs/flags/NZD.svg | 36 +++++++++++++++++++ src/public/svgs/flags/PHP.svg | 6 ++++ src/public/svgs/flags/PLN.svg | 6 ++++ src/public/svgs/flags/RON.svg | 7 ++++ src/public/svgs/flags/SEK.svg | 4 +++ src/public/svgs/flags/SGD.svg | 13 +++++++ src/public/svgs/flags/THB.svg | 7 ++++ src/public/svgs/flags/TRY.svg | 8 +++++ src/public/svgs/flags/ZAR.svg | 17 +++++++++ src/router/user.js | 46 +++++++++++++++++++++--- src/views/dashboard.ejs | 7 ++++ src/views/partials/header.ejs | 58 +++++++++++++++++++++++++----- 27 files changed, 384 insertions(+), 15 deletions(-) create mode 100644 src/public/scripts/calcExchange.js delete mode 100644 src/public/scripts/header.js create mode 100644 src/public/svgs/flags/BGN.svg create mode 100644 src/public/svgs/flags/CHF.svg create mode 100644 src/public/svgs/flags/CZK.svg create mode 100644 src/public/svgs/flags/DKK.svg create mode 100644 src/public/svgs/flags/HKD.svg create mode 100644 src/public/svgs/flags/HUF.svg create mode 100644 src/public/svgs/flags/IDR.svg create mode 100644 src/public/svgs/flags/ILS.svg create mode 100644 src/public/svgs/flags/ISK.svg create mode 100644 src/public/svgs/flags/KRW.svg create mode 100644 src/public/svgs/flags/MYR.svg create mode 100644 src/public/svgs/flags/NOK.svg create mode 100644 src/public/svgs/flags/NZD.svg create mode 100644 src/public/svgs/flags/PHP.svg create mode 100644 src/public/svgs/flags/PLN.svg create mode 100644 src/public/svgs/flags/RON.svg create mode 100644 src/public/svgs/flags/SEK.svg create mode 100644 src/public/svgs/flags/SGD.svg create mode 100644 src/public/svgs/flags/THB.svg create mode 100644 src/public/svgs/flags/TRY.svg create mode 100644 src/public/svgs/flags/ZAR.svg diff --git a/src/public/scripts/calcExchange.js b/src/public/scripts/calcExchange.js new file mode 100644 index 0000000..29956e8 --- /dev/null +++ b/src/public/scripts/calcExchange.js @@ -0,0 +1,3 @@ +let rate = document.getElementsByClassName("countryButton").value; + +document.getElementById("exchange").innerHTML \ No newline at end of file diff --git a/src/public/scripts/geolocation.js b/src/public/scripts/geolocation.js index 4bdf42a..82c6983 100644 --- a/src/public/scripts/geolocation.js +++ b/src/public/scripts/geolocation.js @@ -4,13 +4,66 @@ function getLocation() { } } +function update(data) { + document.getElementById("loading").style = "display: none"; + document.getElementById("currencyExchange").style = "display: flex"; + + document.getElementById("yourFlag").src = `/static/svgs/flags/${data.data.country}.svg` + document.getElementById("yourFlag").alt = data.data.country; + document.getElementById("flagTag").innerHTML = `(${data.data.country})`; + + document.getElementById("exchangeFlag").src = `/static/svgs/flags/USD.svg`; + document.getElementById("exchangeFlag").alt = "USD"; + document.getElementById("exFlagTag").innerHTML = "(USD)"; + + document.getElementById("dropdown-country-button").value = data.data.toCurrencyRates["USD"]; + + updateExchange(document.getElementById("dropdown-country-button").value); + + const dropdown = document.getElementById("dropdown"); + let countries = Object.keys(data.data.toCurrencyRates); + + countries.forEach(item => { + if (dropdown.querySelector(`button[value="${data.data.toCurrencyRates[item]}"]`)) { + return; + } + + const listItem = document.createElement("li"); + listItem.innerHTML = ``; + + dropdown.appendChild(listItem); + }); + + console.log(data); +} + +function switchButton(clickedButton) { + document.getElementById("dropdown-country-button").value = clickedButton.value; + updateExchange(document.getElementById("dropdown-country-button").value); + + document.getElementById("dropdown-country-button").innerHTML = clickedButton.innerHTML + + ` + + `; +} + +function updateExchange(exRate) { + document.getElementById("exchange1").innerHTML = "$1.00 = $" +`${(1 * exRate).toFixed(2)}`; +} + async function getLatestExchange(position) { let lat = position.coords.latitude; let lon = position.coords.longitude; const res = await fetch(`/exRates/${lat}/${lon}`); const data = await res.json(); - console.log(data); + update(data); } function error(err) { diff --git a/src/public/scripts/header.js b/src/public/scripts/header.js deleted file mode 100644 index e69de29..0000000 diff --git a/src/public/svgs/flags/BGN.svg b/src/public/svgs/flags/BGN.svg new file mode 100644 index 0000000..af2d0d0 --- /dev/null +++ b/src/public/svgs/flags/BGN.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/public/svgs/flags/CHF.svg b/src/public/svgs/flags/CHF.svg new file mode 100644 index 0000000..b42d670 --- /dev/null +++ b/src/public/svgs/flags/CHF.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/public/svgs/flags/CZK.svg b/src/public/svgs/flags/CZK.svg new file mode 100644 index 0000000..7913de3 --- /dev/null +++ b/src/public/svgs/flags/CZK.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/public/svgs/flags/DKK.svg b/src/public/svgs/flags/DKK.svg new file mode 100644 index 0000000..563277f --- /dev/null +++ b/src/public/svgs/flags/DKK.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/public/svgs/flags/HKD.svg b/src/public/svgs/flags/HKD.svg new file mode 100644 index 0000000..4fd55bc --- /dev/null +++ b/src/public/svgs/flags/HKD.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/public/svgs/flags/HUF.svg b/src/public/svgs/flags/HUF.svg new file mode 100644 index 0000000..baddf7f --- /dev/null +++ b/src/public/svgs/flags/HUF.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/public/svgs/flags/IDR.svg b/src/public/svgs/flags/IDR.svg new file mode 100644 index 0000000..3b7c8fc --- /dev/null +++ b/src/public/svgs/flags/IDR.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/public/svgs/flags/ILS.svg b/src/public/svgs/flags/ILS.svg new file mode 100644 index 0000000..f43be7e --- /dev/null +++ b/src/public/svgs/flags/ILS.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/public/svgs/flags/ISK.svg b/src/public/svgs/flags/ISK.svg new file mode 100644 index 0000000..a6588af --- /dev/null +++ b/src/public/svgs/flags/ISK.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/public/svgs/flags/KRW.svg b/src/public/svgs/flags/KRW.svg new file mode 100644 index 0000000..6947eab --- /dev/null +++ b/src/public/svgs/flags/KRW.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/public/svgs/flags/MYR.svg b/src/public/svgs/flags/MYR.svg new file mode 100644 index 0000000..115f864 --- /dev/null +++ b/src/public/svgs/flags/MYR.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/public/svgs/flags/NOK.svg b/src/public/svgs/flags/NOK.svg new file mode 100644 index 0000000..a5f2a15 --- /dev/null +++ b/src/public/svgs/flags/NOK.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/public/svgs/flags/NZD.svg b/src/public/svgs/flags/NZD.svg new file mode 100644 index 0000000..935d8a7 --- /dev/null +++ b/src/public/svgs/flags/NZD.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/public/svgs/flags/PHP.svg b/src/public/svgs/flags/PHP.svg new file mode 100644 index 0000000..b910e24 --- /dev/null +++ b/src/public/svgs/flags/PHP.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/public/svgs/flags/PLN.svg b/src/public/svgs/flags/PLN.svg new file mode 100644 index 0000000..0fa5145 --- /dev/null +++ b/src/public/svgs/flags/PLN.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/public/svgs/flags/RON.svg b/src/public/svgs/flags/RON.svg new file mode 100644 index 0000000..fda0f7b --- /dev/null +++ b/src/public/svgs/flags/RON.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/public/svgs/flags/SEK.svg b/src/public/svgs/flags/SEK.svg new file mode 100644 index 0000000..8ba745a --- /dev/null +++ b/src/public/svgs/flags/SEK.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/public/svgs/flags/SGD.svg b/src/public/svgs/flags/SGD.svg new file mode 100644 index 0000000..c4dd4ac --- /dev/null +++ b/src/public/svgs/flags/SGD.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/public/svgs/flags/THB.svg b/src/public/svgs/flags/THB.svg new file mode 100644 index 0000000..1e93a61 --- /dev/null +++ b/src/public/svgs/flags/THB.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/public/svgs/flags/TRY.svg b/src/public/svgs/flags/TRY.svg new file mode 100644 index 0000000..b96da21 --- /dev/null +++ b/src/public/svgs/flags/TRY.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/public/svgs/flags/ZAR.svg b/src/public/svgs/flags/ZAR.svg new file mode 100644 index 0000000..d563adb --- /dev/null +++ b/src/public/svgs/flags/ZAR.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/router/user.js b/src/router/user.js index 35ef92b..1332e24 100644 --- a/src/router/user.js +++ b/src/router/user.js @@ -11,7 +11,41 @@ module.exports = (middleware, users, plans) => { router.use(middleware); router.get('/home', async (req, res) => { - res.render('dashboard', { user: req.user, location: req.session.country, countriesRates: req.session.rates }); + + + /* + + <% if (countryRates.length == 0) { %> + render loading icon + <% } else { %> + render exchange + <% } %> + + stuff + + + */ + + // if no session with geoData + if (!req.session.geoData) { + req.session.geoData = { + country: null, + toCurrencyRates: [], + }; + } + + res.render('dashboard', { user: req.user, geoData: req.session.geoData }); + return res.status(status.Ok); }); @@ -266,17 +300,19 @@ module.exports = (middleware, users, plans) => { }); router.get("/exRates/:lat/:lon", async (req, res) => { - if (!req.session.rates || Object.keys(req.session.rates).length == 0) { + if (!req.session.geoData.country) { const response = await fetch(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${req.params.lat},${req.params.lon}&result_type=country&key=${process.env.geolocation_api}`); const data = await response.json(); country = data.results[0].formatted_address; let results = await getRates(country); - req.session.rates = results.exRates; - req.session.country = results.abbreviation; + req.session.geoData = { + country: results.abbreviation, + toCurrencyRates: results.exRates + } } - return res.status(status.Ok).send({ rates: req.session.rates }); + return res.status(status.Ok).send({ data: req.session.geoData }); }) return router; diff --git a/src/views/dashboard.ejs b/src/views/dashboard.ejs index be866a1..5bcdd79 100644 --- a/src/views/dashboard.ejs +++ b/src/views/dashboard.ejs @@ -93,6 +93,13 @@ + + + <%- include("./partials/navBar") %> <%- include("./partials/footer") %> \ No newline at end of file diff --git a/src/views/partials/header.ejs b/src/views/partials/header.ejs index e8371ec..f872576 100644 --- a/src/views/partials/header.ejs +++ b/src/views/partials/header.ejs @@ -6,31 +6,71 @@ Flowbite Logo RCalculator - + <% } %>