/ frontend / src / app / utils / utils.js
utils.js
  1  import { differenceInSeconds } from "date-fns";
  2  
  3  export const convertHexToRGB = (hex) => {
  4    // check if it's a rgba
  5    if (hex.match("rgba")) {
  6      let triplet = hex.slice(5).split(",").slice(0, -1).join(",");
  7      return triplet;
  8    }
  9  
 10    let c;
 11    if (/^#([A-Fa-f0-9]{3}){1,2}$/.test(hex)) {
 12      c = hex.substring(1).split("");
 13      if (c.length === 3) {
 14        c = [c[0], c[0], c[1], c[1], c[2], c[2]];
 15      }
 16      c = "0x" + c.join("");
 17  
 18      return [(c >> 16) & 255, (c >> 8) & 255, c & 255].join(",");
 19    }
 20  };
 21  
 22  function currentYPosition(elm) {
 23    if (!window && !elm) return;
 24  
 25    if (elm) return elm.scrollTop;
 26    // Firefox, Chrome, Opera, Safari
 27    if (window.pageYOffset) return window.pageYOffset;
 28    // Internet Explorer 6 - standards mode
 29    if (document.documentElement && document.documentElement.scrollTop)
 30      return document.documentElement.scrollTop;
 31    // Internet Explorer 6, 7 and 8
 32    if (document.body.scrollTop) return document.body.scrollTop;
 33    return 0;
 34  }
 35  
 36  function elmYPosition(elm) {
 37    var y = elm.offsetTop;
 38    var node = elm;
 39    while (node.offsetParent && node.offsetParent !== document.body) {
 40      node = node.offsetParent;
 41      y += node.offsetTop;
 42    }
 43    return y;
 44  }
 45  
 46  export function scrollTo(scrollableElement, elmID) {
 47    var elm = document.getElementById(elmID);
 48  
 49    if (!elmID || !elm) {
 50      return;
 51    }
 52  
 53    var startY = currentYPosition(scrollableElement);
 54    var stopY = elmYPosition(elm);
 55  
 56    var distance = stopY > startY ? stopY - startY : startY - stopY;
 57    if (distance < 100) {
 58      scrollTo(0, stopY);
 59      return;
 60    }
 61    var speed = Math.round(distance / 50);
 62    if (speed >= 20) speed = 20;
 63    var step = Math.round(distance / 25);
 64    var leapY = stopY > startY ? startY + step : startY - step;
 65    var timer = 0;
 66    if (stopY > startY) {
 67      for (var i = startY; i < stopY; i += step) {
 68        setTimeout(
 69          (function (leapY) {
 70            return () => {
 71              scrollableElement.scrollTo(0, leapY);
 72            };
 73          })(leapY),
 74          timer * speed
 75        );
 76        leapY += step;
 77        if (leapY > stopY) leapY = stopY;
 78        timer++;
 79      }
 80      return;
 81    }
 82    for (let i = startY; i > stopY; i -= step) {
 83      setTimeout(
 84        (function (leapY) {
 85          return () => {
 86            scrollableElement.scrollTo(0, leapY);
 87          };
 88        })(leapY),
 89        timer * speed
 90      );
 91      leapY -= step;
 92      if (leapY < stopY) leapY = stopY;
 93      timer++;
 94    }
 95    return false;
 96  }
 97  
 98  export function getTimeDifference(date) {
 99    let difference = differenceInSeconds(new Date(), date);
100  
101    if (difference < 60) return `${Math.floor(difference)} sec`;
102    else if (difference < 3600) return `${Math.floor(difference / 60)} min`;
103    else if (difference < 86400) return `${Math.floor(difference / 3660)} h`;
104    else if (difference < 86400 * 30) return `${Math.floor(difference / 86400)} d`;
105    else if (difference < 86400 * 30 * 12) return `${Math.floor(difference / 86400 / 30)} mon`;
106    else return `${(difference / 86400 / 30 / 12).toFixed(1)} y`;
107  }