import { v4 as uuid } from "uuid" /** * Classe com utiliários comuns para funções genéricas em JavaScript. */ export class JSUtils{ public static isHiddenElement(element: HTMLElement): boolean { const rect = element.getBoundingClientRect(); return !(rect.top > 0 || rect.left > 0 || rect.right > 0); } /** * Método responsável em criar um timer para processar uma determinada função. * * @param callback - Função de callback para processar após o timer. * @param timeout - Valor dos milissegundos desejados para processar a função (o padrão é 300). * * @returns - Retorna um método com controle de timer para processar a função de callback. */ public static debounce(callback: any, timeout: number = 300): any { let timer: any; return (...args: any) => { clearTimeout(timer); timer = setTimeout(() => { callback.apply(this, args); }, timeout); }; } /** * Método responsável por executar uma função e ignorar as outras posteriores até o tempo especificado. * * @param {Function} callback - Função a ser invocada * @param {number} timeout - Quantidade de tempo para aguardar antes de invocar novamente * @param {any} context - O contexto atual * @return {VoidFunction} A função com o debounce */ public static debounceLeading(callback: Function, timeout: number = 300, context?: any): VoidFunction { let timer: NodeJS.Timeout | undefined; return (...args: any) => { if (!timer) { callback.apply((context || this), args); } clearTimeout(timer); timer = setTimeout(() => { timer = undefined; }, timeout); }; } /** * Método responsável em validar se um elemento HTML está com o ellipsis ativo. * * @param element - Elemento HTML que será verificado. * * @returns - Retorna um valor booleando informando se o elemento está com o ellipsis ativo. */ public static isEllipsisActive(element: HTMLElement | any): boolean { if (element == undefined) { return false; } if (element.clientWidth < element.scrollWidth) { const style = element.currentStyle || window.getComputedStyle(element); return style?.textOverflow === 'ellipsis'; } return false; } /** * Método que verifica se uma string está encodada com base64. * * @param str - String que será verificada. * * @returns - Retorna um valor booleando informando se a string está encodada com base64. */ public static isBase64(str: string): boolean { str = (str || '').replaceAll("\n", ""); if (str === '' || str.trim() === ''){ return false; } try { return window.btoa(window.atob(str)) == str; } catch (err) { return false; } } /** * Método responsável em gerar um UUID. * * @returns - Retorna um UUID. */ public static generateUUID(): string { return uuid(); } /** * Substitui caracteres para suas entidades HTML. * * @param source - String a ter os caracteres substituidos. * @returns - Retorna um UUID. */ public static replaceHtmlEntities(source: string) { if (source == undefined) { return source; } return String(source) .replace(/&/g, '&') .replace(//g, '>') .replace(/"/g, '"'); } }