Advertisement
Btwonu

router

Nov 25th, 2020
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import { views, compileTemplate } from './views.js';
  2. import { auth, db } from './services.js';
  3.  
  4. // Routing
  5. const router = () => {
  6.   // get main element
  7.   const app = document.getElementById('app');
  8.  
  9.   // register partials
  10.   Handlebars.registerPartial(
  11.     'header',
  12.     compileTemplate('header-template', auth.getData())
  13.   );
  14.   Handlebars.registerPartial('footer', compileTemplate('footer-template'));
  15.  
  16.   // declare routes
  17.   const routesArr = [
  18.     {
  19.       path: '/',
  20.       render: views.home,
  21.     },
  22.     {
  23.       path: '/register',
  24.       render: views.register,
  25.     },
  26.     {
  27.       path: '/login',
  28.       render: views.login,
  29.     },
  30.     {
  31.       path: '/create',
  32.       render: views.create,
  33.     },
  34.   ];
  35.  
  36.   let view = routesArr.find((route) => route.path == location.pathname);
  37.   if (!view)
  38.     view = {
  39.       path: '/',
  40.       render: views.home,
  41.     };
  42.  
  43.   app.innerHTML = view.render();
  44. };
  45.  
  46. // Navigator
  47. function navigateTo(path) {
  48.   history.pushState(null, null, path);
  49.   router();
  50. }
  51.  
  52. // Initialize app function
  53. function initApp() {
  54.   console.log('content loaded');
  55.   // add event listeners to the nav links
  56.   document.body.addEventListener('click', async (e) => {
  57.     if (e.target.matches('[data-link]')) {
  58.       e.preventDefault();
  59.  
  60.       // logo case
  61.       if (e.target.nodeName == 'IMG') {
  62.         // target link wrapping the logo
  63.         navigateTo(e.target.parentElement.href);
  64.         return;
  65.       }
  66.  
  67.       navigateTo(e.target.href);
  68.     }
  69.  
  70.     if (e.target.matches('#login-btn')) {
  71.       e.preventDefault();
  72.       let loginForm = new FormData(document.forms.login);
  73.       let email = loginForm.get('email');
  74.       let password = loginForm.get('password');
  75.  
  76.       let signedIn = await auth.signIn(email, password);
  77.  
  78.       if (signedIn) {
  79.         navigateTo('/');
  80.       }
  81.  
  82.       return;
  83.     }
  84.  
  85.     if (e.target.matches('#register-btn')) {
  86.       e.preventDefault();
  87.       let loginForm = new FormData(document.forms.register);
  88.       let email = loginForm.get('email');
  89.       let password = loginForm.get('password');
  90.       let passConfirmation = loginForm.get('password-confirm');
  91.       let registered = await auth.signUp(email, password, passConfirmation);
  92.  
  93.       if (registered) {
  94.         navigateTo('/');
  95.       }
  96.  
  97.       return;
  98.     }
  99.  
  100.     if (e.target.matches('#logout-btn')) {
  101.       e.preventDefault();
  102.       localStorage.removeItem('auth');
  103.  
  104.       navigateTo('/login');
  105.       return;
  106.     }
  107.  
  108.     if (e.target.matches('#create-btn')) {
  109.       e.preventDefault();
  110.       let createForm = new FormData(document.forms.create);
  111.  
  112.       let name = createForm.get('name');
  113.       let price = createForm.get('price');
  114.       let img = createForm.get('img');
  115.       let description = createForm.get('description');
  116.       let brand = createForm.get('brand');
  117.  
  118.       const shoeObj = {
  119.         name,
  120.         price,
  121.         img,
  122.         description,
  123.         brand,
  124.       };
  125.  
  126.       db.postData('shoes', shoeObj);
  127.  
  128.       console.log(shoeObj);
  129.       return;
  130.     }
  131.   });
  132.  
  133.   // init
  134.   router();
  135. }
  136.  
  137. // dom content loaded
  138. document.addEventListener('DOMContentLoaded', initApp);
  139. // add event listener to the history
  140. window.addEventListener('popstate', router);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement