Advertisement
Guest User

Untitled

a guest
Dec 7th, 2019
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const API_KEY = '108a8f05027f4f1dbaa17b4c48e4eefa';
  2. const LEAGUE_ID = 2021;
  3. var base_url = "https://api.football-data.org/v2/";
  4. var url_tim = `${base_url}competitions/${LEAGUE_ID}/teams`;
  5. var url_klasemen = `${base_url}competitions/${LEAGUE_ID}/standings`;
  6. var dataTim;
  7.  
  8. var fetchApi = url => {
  9.     return fetch(url, {
  10.         headers: {
  11.             'X-Auth-Token': API_KEY
  12.         }
  13.     });
  14. }
  15.  
  16. // Blok kode yang akan di panggil jika fetch berhasil
  17. function status(response) {
  18.     if (response.status !== 200) {
  19.         console.log("Error : " + response.status);
  20.         // Method reject() akan membuat blok catch terpanggil
  21.         return Promise.reject(new Error(response.statusText));
  22.     } else {
  23.         // Mengubah suatu objek menjadi Promise agar bisa "di-then-kan"
  24.         return Promise.resolve(response);
  25.     }
  26. }
  27.  
  28. // Blok kode untuk memparsing json menjadi array JavaScript
  29. function json(response) {
  30.     return response.json();
  31. }
  32.  
  33. // Blok kode untuk meng-handle kesalahan di blok catch
  34. function error(error) {
  35.     // Parameter error berasal dari Promise.reject()
  36.     console.log("Error : " + error);
  37. }
  38.  
  39. // Blok kode untuk melakukan request data json
  40. function getKlasemen() {
  41.     if ('caches' in window) {
  42.         caches.match(url_klasemen).then(function (response) {
  43.             if (response) {
  44.                 response.json().then(function (data) {
  45.                     resultKlasemen(data);
  46.  
  47.                 });
  48.             }
  49.         });
  50.     }
  51.  
  52.     fetchApi(url_klasemen)
  53.         .then(status)
  54.         .then(json)
  55.         .then(function (data) {
  56.             // console.log(data)
  57.             resultKlasemen(data)
  58.         })
  59.         .catch(error);
  60. }
  61.  
  62. function getTim() {
  63.     var fetchTim = fetchApi(url_tim)
  64.         .then(status)
  65.         .then(json);
  66.     return fetchTim;
  67. }
  68.  
  69. function resultKlasemen(data) {
  70.     var dbklasemenHtml = '';
  71.     var klasemenTitle = `<center style ="font-weight: bold; font-size: 40px;">${data.competition.name}  </center>`;
  72.  
  73.     var str = JSON.stringify(data).replace(/http:/g, 'https:');
  74.     data = JSON.parse(str);
  75.  
  76.     data.standings[0].table.forEach(function (club) {
  77.         dbklasemenHtml += `
  78.                 <tr>
  79.                     <td>${club.position}</td>
  80.                     <td><img class="responsive-img" style="vertical-align:middle"  width="30" height="30" src="${club.team.crestUrl}"> ${club.team.name}</td>
  81.                     <td>${club.playedGames}</td>
  82.                     <td>${club.won}</td>
  83.                     <td>${club.draw}</td>
  84.                     <td>${club.lost}</td>
  85.                     <td>${club.goalsFor}</td>
  86.                     <td>${club.goalsAgainst}</td>
  87.                     <td>${club.goalDifference}</td>
  88.                     <td>${club.points}</td>
  89.                 </tr>
  90.         `
  91.     });
  92.     document.getElementById("klasemen").innerHTML = dbklasemenHtml;
  93.     document.getElementById("klasemenTitle").innerHTML = klasemenTitle;
  94.  
  95. }
  96.  
  97. function getTeams() {
  98.     var teams = getTim();
  99.     teams.then(function (data) {
  100.         var str = JSON.stringify(data).replace(/http:/g, 'https:');
  101.         data = JSON.parse(str);
  102.  
  103.         var dataTim = data;
  104.         var timHtml = '<center><h4><b>Teams</b></h4></center>';
  105.         timHtml = '';
  106.         data.teams.forEach(function (team) {
  107.             timHtml += `
  108.                 <div class="col s12 m6">
  109.                     <div class="card">
  110.              <div class="card-content">
  111.                                 <div class="center"><img width="50" height="50" src="${team.crestUrl}"></div>
  112.                                 <div class="center"><h5>${team.name}</h5></div>
  113.                                 <div class="center">${team.area.name}</div>
  114.                
  115.                                 <div class="card-action center">
  116.                                 <a class="waves-effect waves-light btn" onclick="insertTeamListener(${team.id})">Add to Favorite</a>
  117.                                 </div>
  118.                             </div>
  119.                         </div>
  120.                     </div>
  121.                 </div>
  122.             `;
  123.         })
  124.         document.getElementById("teams").innerHTML = timHtml;
  125.     })
  126. }
  127.  
  128. function getTimFav() {
  129.     var teams = getFavTeams();
  130.     teams.then(function (data) {
  131.  
  132.         dataTim = data;
  133.         var favTimHtml = '';
  134.         data.forEach(function (team) {
  135.             favTimHtml += `
  136.             <div class="col s12 m6">
  137.                     <div class="card">
  138.              <div class="card-content">
  139.                                 <div class="center"><img width="50" height="50" src="${team.crestUrl}"></div>
  140.                                 <div class="center"><h5>${team.name}</h5></div>
  141.                                 <div class="center">${team.area.name}</div>
  142.                
  143.                                 <div class="card-action center">
  144.                                 <a class="waves-effect waves-light btn red" onclick="deleteTeamListener(${team.id})">Delete From Favorite</a>
  145.                                 </div>
  146.                             </div>
  147.                         </div>
  148.                     </div>
  149.                 </div>
  150.             `;
  151.         })
  152.         document.getElementById("timFav").innerHTML = favTimHtml;
  153.     })
  154. }
  155.  
  156. // opereasi database indexedDB
  157. var dbPromise = idb.open('football', 1, upgradeDb => {
  158.     switch (upgradeDb.oldVersion) {
  159.         case 0:
  160.             upgradeDb.createObjectStore('tim', {
  161.                 'keyPath': 'id'
  162.             })
  163.     }
  164. });
  165.  
  166. function insertTeam(tim) {
  167.     dbPromise.then(function (db) {
  168.         var tx = db.transaction('tim', 'readwrite');
  169.         var store = tx.objectStore('tim')
  170.         tim.createAt = new Date().getTime()
  171.         store.put(tim)
  172.         return tx.complete;
  173.  
  174.     }).then(function () {
  175.         M.toast({
  176.             html: `${tim.name} berhasil di simpan`
  177.         })
  178.         console.log("Pertandingan berhasil disimpan");
  179.  
  180.     }).catch(error => {
  181.         console.error("Pertandingan gagal disimpan", error);
  182.  
  183.     });
  184. }
  185.  
  186. function deleteTeam(idTim) {
  187.     dbPromise.then(function (db) {
  188.         var tx = db.transaction('tim', 'readwrite');
  189.         var store = tx.objectStore('tim');
  190.         store.delete(idTim);
  191.         return tx.complete;
  192.     }).then(function () {
  193.         M.toast({
  194.             html: 'Team berhasil dihapus'
  195.         });
  196.         if (Notification.permission === 'granted') {
  197.             navigator.serviceWorker.ready.then(function (registration) {
  198.                 registration.showNotification("Menghapus dari favorit");
  199.             });
  200.         } else {
  201.             console.error("Fitur notifikasi tidak diijinkan");
  202.  
  203.         }
  204.         getTimFav();
  205.     }).catch(error => {
  206.         console.error('Error', error);
  207.  
  208.     });
  209. }
  210.  
  211. var getFavTeams = () => {
  212.     return dbPromise.then(function (db) {
  213.         var tx = db.transaction('tim', 'readonly');
  214.         var store = tx.objectStore('tim');
  215.         return store.getAll();
  216.     })
  217. }
  218.  
  219. //    api.js:220 Uncaught TypeError: Cannot read property 'teams' of undefined
  220. //    at insertTeamListener (api.js:220)
  221. //    at HTMLAnchorElement.onclick ((index):1)
  222. // error nya disini padahal team udh di definisikan
  223.  
  224. var insertTeamListener = idTim => {
  225.     var tim = dataTim.teams.filter(el => el.id == idTim)[0]
  226.     insertTeam(tim);
  227. }
  228.  
  229. var deleteTeamListener = idTim => {
  230.     var conf = confirm("Anda yakin ingin menghapus?")
  231.     if (conf == true) {
  232.         deleteTeam(idTim);
  233.  
  234.  
  235.     }
  236. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement