-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.js.map
1 lines (1 loc) · 13.3 KB
/
app.js.map
1
{"mappings":"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","sources":["public/js/index.js","public/js/login.js","public/js/alerts.js","public/js/utils/useFetch.js","public/js/utils/timeout.js","public/js/updateSettings.js","public/js/leaflet.js","public/js/stripe.js"],"sourcesContent":["/* eslint-disable */\nimport 'core-js/stable';\nimport 'regenerator-runtime/runtime.js';\n\nimport { login, logout } from './login';\nimport { updateSettings, previewPhoto } from './updateSettings';\nimport { displayMap } from './leaflet';\nimport { bookTour } from './stripe';\n\n///////// ELEMENTS /////////\nconst loginFormEl = document.querySelector('.form--login');\nconst userDataFormEl = document.querySelector('.form-user-data');\nconst passwordFormEl = document.querySelector('.form-password');\nconst mapEl = document.querySelector('#map');\nconst logoutBtn = document.querySelector('.nav__el--logout');\nconst bookTourBtn = document.querySelector('#book-tour');\n\n//////// DELEGATION //////////\n// Login\nif (loginFormEl) {\n const handleSubmit = e => {\n e.preventDefault();\n\n const email = e.target.email?.value;\n const password = e.target.password?.value;\n\n login(email, password);\n\n loginFormEl.reset();\n };\n\n loginFormEl.addEventListener('submit', handleSubmit);\n}\n\n// Logout\nif (logoutBtn) logoutBtn.addEventListener('click', logout);\n\n// Update user data\nif (userDataFormEl) {\n let userPhotoUrl;\n document.querySelector('#photo').addEventListener('change', function(e) {\n const [file] = e.target.files;\n if (file && file.type.startsWith('image')) {\n const userPhoto = document.querySelector('.form__user-photo');\n userPhotoUrl = URL.createObjectURL(file);\n userPhoto.src = userPhotoUrl;\n }\n });\n\n userDataFormEl.addEventListener('submit', async e => {\n e.preventDefault();\n const submitBtn = document.querySelector('#form-user-data__submit-btn');\n submitBtn.textContent = 'Loading...';\n\n const form = new FormData();\n\n form.append('name', document.querySelector('#name').value);\n form.append('email', document.querySelector('#email').value);\n form.append('photo', document.querySelector('#photo').files[0]);\n\n const isSuccessful = await updateSettings(form, 'data');\n\n if (isSuccessful && userPhotoUrl) {\n document.querySelector('.nav__user-img').src = userPhotoUrl;\n }\n submitBtn.textContent = 'Save Settings';\n });\n}\n\n// Update password\nif (passwordFormEl) {\n passwordFormEl.addEventListener('submit', async e => {\n e.preventDefault();\n const submitBtn = document.querySelector('.password-submit-btn');\n submitBtn.textContent = 'Submitting...';\n\n const passwordCurrent = document.querySelector('#password-current').value;\n const password = document.querySelector('#password').value;\n const passwordConfirm = document.querySelector('#password-confirm').value;\n\n await updateSettings(\n { passwordCurrent, password, passwordConfirm },\n 'password'\n );\n submitBtn.textContent = 'Save password';\n });\n}\n\n// Map\nif (mapEl) {\n const locations = JSON.parse(\n document.querySelector('#map').dataset.locations\n );\n\n displayMap(locations);\n}\n\n// Book Tour\nif (bookTourBtn) {\n bookTourBtn.addEventListener('click', e => {\n bookTourBtn.textContent = 'Processing...';\n bookTour(e.target.dataset['tourId']);\n });\n}\n","/* eslint-disable */\nimport { showAlert } from './alerts';\nimport { useFetch } from './utils/useFetch';\n\nexport const login = async (email, password) => {\n try {\n const baseUrl = location.origin;\n const res = await useFetch(`/api/v1/users/login`, {\n email,\n password\n });\n\n showAlert('success', 'Loggin in successfully');\n setTimeout(location.assign('/'), 1000);\n } catch (err) {\n showAlert('error', err.message);\n }\n};\n\nexport const logout = async () => {\n try {\n const res = await useFetch('/api/v1/users/logout');\n\n if (res.status === 'success') location.assign('/');\n } catch (err) {\n showAlert('error', 'Logout unsuccessful, please try again!');\n }\n};\n","export function hideAlert() {\n const el = document.querySelector('.alert');\n\n el?.parentElement.removeChild(el);\n}\n\nexport function showAlert(type, message) {\n hideAlert();\n\n const markup = `<div class=\"alert alert--${type}\">${message}</div>`;\n\n document.querySelector('body').insertAdjacentHTML('afterbegin', markup);\n\n window.setTimeout(hideAlert, 5000);\n}\n","import { timeout } from './timeout';\n\nconst REQUEST_TIMEOUT_SEC = 5;\n\nexport const useFetch = async (url, uploadData = null) => {\n try {\n const req = uploadData\n ? fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(uploadData)\n })\n : fetch(url);\n\n const res = await Promise.race([req, timeout(REQUEST_TIMEOUT_SEC)]);\n const data = await res.json();\n\n if (!res.ok) {\n throw data;\n }\n\n return data;\n } catch (err) {\n if (err.message === 'Failed to fetch')\n err.message = `Unable to reach the server. Please check your internet connection...`;\n throw err;\n }\n};\n","export const timeout = sec =>\n new Promise((_, reject) => {\n setTimeout(\n () => reject(Error(`Request timed out. Please try again later...`)),\n sec * 1000\n );\n });\n","import axios from 'axios';\nimport { showAlert } from './alerts';\n\nexport async function updateSettings(data, type) {\n try {\n const query =\n type == 'data'\n ? '/api/v1/users/updateMe'\n : '/api/v1/users/updateMyPassword';\n const url = `${location.origin}${query}`;\n const res = await axios({\n url,\n method: 'PATCH',\n data\n });\n\n if (res.data.status === 'success') {\n showAlert('success', `${type.toUpperCase()} updated successfully`);\n }\n\n return res.data.status === 'success';\n } catch (err) {\n showAlert('error', err.response.data.message);\n }\n}\n","export function displayMap(locations) {\n // Create map\n var map = L.map('map', {\n // Center is irrelevant here. As we will be setting 'bounds' later on based on locations\n center: [0, 0],\n // Zoom is irrelevant here. As we will be setting 'bounds' later on based on locations\n zoom: 0,\n // Zoom controls removed here. As default is 'topleft' which is outside of our skewed 'map box'\n zoomControl: false,\n // Remove the annoying zoom with scroll wheel\n scrollWheelZoom: false\n });\n\n // Add tile layer, else you cannot see the map\n L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {\n maxZoom: 19,\n attribution:\n '© <a href=\"http://www.openstreetmap.org/copyright\">OpenStreetMap</a>'\n }).addTo(map);\n\n // Change Zoom controls to top right of map div\n L.control\n .zoom({\n position: 'topright'\n })\n .addTo(map);\n\n // Customize the icon for the 'markers'\n const myIcon = L.icon({\n classname: 'marker',\n iconUrl: '/img/pin.png',\n iconSize: [32, 40],\n iconAnchor: [16, 40],\n popupAnchor: [0, -30]\n });\n\n // Create markers and popups for locations\n locations.forEach(loc => {\n // 1) get lat lng coordinates\n loc.latLng = [loc.coordinates[1], loc.coordinates[0]];\n // 2) create marker\n loc.marker = L.marker(loc.latLng, { icon: myIcon, className: 'marker' });\n // 3) create popup content and popup\n loc.popupContent = `Day ${loc.day}: ${loc.description}`;\n loc.popup = L.popup(loc.latLng, {\n content: loc.popupContent,\n // These settings keep all popups open. The default is to have one open at a time, change on click\n autoClose: false,\n closeOnClick: false\n });\n\n // 4) add markers and popups to the map\n loc.marker.addTo(map);\n loc.marker.bindPopup(loc.popup).openPopup();\n });\n\n // Setting map to automatically fit all markers\n // 1) set bounds\n const bounds = L.latLngBounds(locations.map(loc => loc.latLng));\n map.fitBounds(bounds);\n\n // 2) Set Zoom level to not be too close and to not be covered my 'masked' skewed shape\n const boundsZoom = map.getBoundsZoom(bounds);\n map.setZoom(boundsZoom > 14 ? 13 : boundsZoom - 1);\n}\n","import axios from 'axios';\n\nexport const bookTour = async tourId => {\n const res = await axios.get(`/api/v1/bookings/checkout-session/${tourId}`);\n location.assign(res.data.session.url);\n};\n"],"names":[],"version":3,"file":"app.js.map","sourceRoot":"/"}