All files / src/app/utils utils.ts

83.95% Statements 68/81
70.83% Branches 34/48
85.71% Functions 12/14
83.11% Lines 64/77

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164  22575x 20189x     2386x 452x 452x 17691x   452x     1934x 1934x 4722x 4722x     1934x           4095x     4095x     4095x     4095x     4095x   4095x           18459x 5306x   13153x 12759x   394x                         5607x 5441x     166x 166x       166x 13x     153x 2031x 1x     152x                                 3142x       85x 85x 235x 140x     85x       12x 12x       12x           33330x         1493x 1493x 1493x 1493x 6471x 6471x 1109x 1109x 1109x 1109x 1109x           1109x     5362x 5362x     1493x       7x 7x 7x 7x 7x 7x    
export function deepCopy<T>(obj: T): T {
  if (obj === null || typeof obj !== 'object') {
    return obj;
  }
 
  if (Array.isArray(obj)) {
    const arrCopy: T[] = [];
    for (const item of obj) {
      arrCopy.push(deepCopy(item));
    }
    return arrCopy as unknown as T;
  }
 
  const objCopy: { [key: string]: T[keyof T] } = {} as { [key: string]: T[keyof T] };
  for (const key in obj) {
    Eif (Object.prototype.hasOwnProperty.call(obj, key)) {
      objCopy[key] = deepCopy((obj as { [key: string]: T[keyof T] })[key]);
    }
  }
  return objCopy as T;
}
 
 
export function getWeekNumber(date: Date): number {
  // Clone the date to avoid modifying the original
  const current = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
 
  // Set the first day of the week to Monday
  const day = current.getUTCDay() === 0 ? 7 : current.getUTCDay(); // Sunday is 7
 
  // Set the current date to the nearest Thursday (current day + 4 - day number)
  current.setUTCDate(current.getUTCDate() + 4 - day);
 
  // Get the year of the adjusted date
  const yearStart = new Date(Date.UTC(current.getUTCFullYear(), 0, 1));
 
  // Calculate the week number
  const weekNumber = Math.ceil((((current.getTime() - yearStart.getTime()) / 86400000) + 1) / 7);
 
  return weekNumber;
}
 
 
 
export function getSeverity(status: string) {
  if (status === "up") {
    return "success";
  }
  if (status === "no data") {
    return "info";
  }
  return "danger";
}
 
function componentToHex(c: number) {
  const hex = Math.round(c).toString(16);
  return hex.length == 1 ? "0" + hex : hex;
}
 
export function rgbToHex(r: number, g: number, b: number) {
  return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b);
}
 
export function areEqual<T>(firstObject: T, secondObject: T): boolean {
  if (firstObject === null || typeof firstObject !== 'object') {
    return firstObject === secondObject;
  }
 
  Eif (Array.isArray(firstObject) && Array.isArray(secondObject)) {
    Iif (firstObject === secondObject) {
      return true;
    }
 
    if (firstObject.length !== secondObject.length) {
      return false;
    }
 
    for (let i = 0; i < firstObject.length; ++i) {
      if (!areEqual(firstObject[i], secondObject[i])) {
        return false;
      }
    }
    return true;
  }
 
  for (const key in firstObject) {
    if (!Object.prototype.hasOwnProperty.call(firstObject, key) || !Object.prototype.hasOwnProperty.call(secondObject, key)) {
      return false;
    }
    if (!areEqual(
      (firstObject as { [key: string]: T[keyof T] })[key],
      (secondObject as { [key: string]: T[keyof T] })[key])) {
      return false;
    }
  }
  return true;
}
 
export function arrayContains<T>(array: T[], object: T) {
  return (array.find(element => areEqual(element, object)) !== undefined);
}
 
export function getDistinctElements<T>(array: T[]): T[] {
  const newArray: T[] = [];
  for (const element of array) {
    if (newArray.every(elem => !areEqual(elem, element))) {
      newArray.push(element);
    }
  }
  return newArray;
}
 
export function findOneAndReplace<T>(array: T[], predicate: (value: T, index: number, obj: T[]) => unknown, obj: T) {
  const foundIndex = array.findIndex(predicate);
  Iif (foundIndex !== -1) {
    array.splice(foundIndex, 1, obj);
  }
  else {
    array.push(obj);
  }
}
 
export function isId(value: string): boolean {
  // ID is hex and 12 characters long
  return (value.match(/[0-9A-Fa-f]{12}/g) !== null);
}
 
 
export function formatPostProcessingSignal(signalId: string): [string, string] {
  let formattedName = "";
  let formattedTooltip = "";
  const splitSignalId = signalId.split(".");
  for (let i = 1; i < splitSignalId.length; i++) {
    const segment = splitSignalId[i];
    if (isId(segment) && i < splitSignalId.length - 1) {
      const nextSegment = splitSignalId[i + 1];
      Eif (isId(nextSegment) && i < splitSignalId.length - 2) {
        formattedName += `${splitSignalId[i + 2]} `;
        formattedTooltip += `${segment}.${nextSegment}.${splitSignalId[i + 2]} `;
        i++;
      }
      else {
        formattedName += `${nextSegment} `;
        formattedTooltip += `${segment}.${nextSegment} `;
      }
      i++;
    }
    else {
      formattedName += `${segment} `;
      formattedTooltip += `${segment} `;
    }
  }
  return [formattedName.trim(), formattedTooltip.trim()];
}
 
export function saveFile(document: Document, blob: Blob, fileName: string) {
    const downloadLink = document.createElement("a");
    const data = window.URL.createObjectURL(blob);
    downloadLink.href = data;
    downloadLink.download = fileName;
    downloadLink.click();
    downloadLink.remove();
}