All files / src/app/utils utils.ts

87.09% Statements 54/62
77.5% Branches 31/40
83.33% Functions 10/12
86.44% Lines 51/59

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  12404x 9169x     3235x 510x 510x 5622x   510x     2725x 2725x 6707x 6707x     2725x           3591x     3591x     3591x     3591x     3591x   3591x           14807x 1820x   12987x     12987x                         3891x 3732x     159x 123x       123x 4x     119x 2027x       119x     36x 44x     44x     28x     8x       1444x       70x 70x 205x 125x     70x       12x 12x       12x         6x 6x 6x 6x 6x 6x    
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";
    }
    Iif (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;
    }
 
    if (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) {
            Iif (!areEqual(firstObject[i], secondObject[i])) {
                return false;
            }
        }
        return true;
    }
 
    for (const key in firstObject) {
        Iif (!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 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();
}