Advertisement
divanov94

Untitled

Nov 19th, 2020
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const routes = {
  2.     'home': document.getElementById('home-section'),
  3.     'create': document.getElementById('create-section'),
  4.     'details': document.getElementById('details-section'),
  5.     'profile': document.getElementById('profile-section'),
  6. };
  7.  
  8.  
  9. const router = (pathname) => {
  10.    
  11.    
  12.     let [path, id] = pathname.split('/').filter(x => x);
  13.     console.log(path,id);
  14.    
  15.    
  16.     Object.values(routes).forEach(section => section.style.display = "none");
  17.    
  18.     routes[path].style.display = 'block';
  19.  
  20.     switch (path) {
  21.         case 'home':
  22.             renderHomePage();
  23.             break;
  24.         case 'details':
  25.             renderDetailsPage(id);
  26.             break;
  27.     }
  28.  
  29. };
  30.  
  31. function renderDetailsPage(id) {
  32.    
  33.    
  34.     fetch(`https://test-project-9adc2.firebaseio.com/furnitures/${id}.json`)
  35.    
  36.         .then(response => response.json())
  37.         .then(data => {
  38.             let detailsViewElement = document.getElementById('details-view');
  39.             detailsViewElement.innerHTML = `
  40.             <p>Make:  ${data.make}</p>
  41.             <p>Model: ${data.model}</p>
  42.             <p>Year: ${data.year}</p>
  43.             <p>Description: ${data.description}</p>
  44.             <p>Price: ${data.price}</p>
  45.             <p>Material: ${data.material}</p>
  46.         `
  47.         })
  48. }
  49.  
  50. function renderHomePage() {
  51.  
  52.     let furnitureListElement = document.getElementById('furniture-list');
  53.     //get all furnitures
  54.     fetch('https://test-project-9adc2.firebaseio.com/furnitures.json')
  55.         .then(res => res.json())
  56.         .then(data => {
  57.             //use template to render
  58.             let dataHtml = Object.keys(data).map(x => furnitureItemTemplate(x, data[x])).join('')
  59.             //append to dom
  60.             furnitureListElement.innerHTML = dataHtml;
  61.         });
  62.  
  63.  
  64.  
  65. }
  66.  
  67. function redirect(path) {
  68.     history.pushState({}, '', path);
  69.     router(path);
  70. }
  71.  
  72.  
  73. function onRouteChange(e) {
  74.     if (e.target.tagName != 'A') {
  75.         return;
  76.     }
  77.     e.preventDefault();
  78.  
  79.     let url = new URL(e.target.href);
  80.  
  81.  
  82.     redirect(url.pathname);
  83.  
  84.  
  85. }
  86.  
  87. function onCreateSubmit(e) {
  88.  
  89.     e.preventDefault();
  90.     let make = formElement.querySelector('#new-make').value;
  91.     let price = formElement.querySelector('#new-price').value;
  92.     let model = formElement.querySelector('#new-model').value;
  93.     let image = formElement.querySelector('#new-image').value;
  94.     let year = formElement.querySelector('#new-year').value;
  95.     let material = formElement.querySelector('#new-material').value;
  96.     let description = formElement.querySelector('#new-description').value;
  97.  
  98.     let newFurniture = {
  99.         make,
  100.         price,
  101.         model,
  102.         image,
  103.         year,
  104.         material,
  105.         description,
  106.     }
  107.  
  108.     fetch('https://test-project-9adc2.firebaseio.com/furnitures.json', {
  109.         method: "POST",
  110.         headers: {
  111.             'content-type': 'application/json'
  112.         },
  113.         body: JSON.stringify(newFurniture)
  114.     })
  115.         .then(response => response.json())
  116.         .then(data => redirect('home'));
  117.  
  118.  
  119.  
  120. }
  121. document.querySelector('nav').addEventListener('click', onRouteChange);
  122.  
  123. let formElement = document.querySelector('#create-form');
  124. formElement.addEventListener('submit', onCreateSubmit)
  125. router(location.pathname);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement