main.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import './styles/counter.css'
  2. import { Countdown } from './counter.js'
  3. import { fetchObject } from './fetch.js';
  4. import { entrypoint } from './entrypoint.local.js';
  5. // select elements
  6. const main = document.querySelector('#app');
  7. const heading = document.createElement('h1');
  8. const message = document.createElement('div');
  9. message.classList.add('message');
  10. const app = document.createElement('div');
  11. app.classList.add('countdown-timer');
  12. main.appendChild(heading);
  13. main.appendChild(app);
  14. main.appendChild(message);
  15. const api = new fetchObject(entrypoint, main.dataset.id);
  16. constcheckCounter();
  17. // Get the new year
  18. const getEndTime = (counter) => {
  19. return new Date(Date.parse(counter.endTime));
  20. };
  21. const format = (t) => {
  22. return t < 10 ? '0' + t : t;
  23. };
  24. const render = (time) => {
  25. app.innerHTML = `
  26. <div class="count-down">
  27. <div class="timer hidden">
  28. <h2 class="days">${format(time.days)}</h2>
  29. <small>Days</small>
  30. </div>
  31. <div class="timer">
  32. <h2 class="hours">${format(time.hours)}</h2>
  33. <small>Hours</small>
  34. </div>
  35. <div class="timer">
  36. <h2 class="minutes">${format(time.minutes)}</h2>
  37. <small>Minutes</small>
  38. </div>
  39. <div class="timer">
  40. <h2 class="seconds">${format(time.seconds)}</h2>
  41. <small>Seconds</small>
  42. </div>
  43. </div>
  44. `;
  45. };
  46. const showMessage = () => {
  47. message.innerHTML = "Le compteur est terminé";
  48. //app.innerHTML = '';
  49. //heading.style.display = 'none';
  50. };
  51. const hideMessage = () => {
  52. message.innerHTML = '';
  53. heading.style.display = 'block';
  54. };
  55. const complete = () => {
  56. showMessage();
  57. constcheckCounter();
  58. };
  59. const showErrorMessage = (error) => {
  60. message.innerHTML = 'Erreur ' + error.code + ' - ' + error.message;
  61. const buttonRestart = document.createElement('button');
  62. buttonRestart.innerText = "Réessayer";
  63. app.appendChild(buttonRestart);
  64. buttonRestart.addEventListener('click', (e) => {
  65. buttonRestart.remove();
  66. constcheckCounter();
  67. })
  68. }
  69. function constcheckCounter () {
  70. const intervalId = setInterval(async () => {
  71. const counter = await api.getCounter();
  72. if (counter.error) {
  73. clearInterval(intervalId);
  74. showErrorMessage(counter.error);
  75. return;
  76. }
  77. heading.innerText = counter.name;
  78. if (counter.state === 'ready') {
  79. hideMessage();
  80. const period = new Date(counter.minutes * 1000 * 60);
  81. render(Countdown.getTime(period));
  82. } else if (counter.state === 'completed') {
  83. const zero = new Date(0);
  84. showMessage();
  85. render(Countdown.getTime(zero));
  86. } else {
  87. clearInterval(intervalId);
  88. const countdownTimer = new Countdown(
  89. getEndTime(counter),
  90. render,
  91. complete
  92. )
  93. }
  94. }, 1000)
  95. }