Skip to main content

Utilidades y helpers puros

Funciones sin estado de src/app/core/helpers/global/. Las constantes (API_URLS, PAGE_URLS, RESPONSE_CODES, TOKEN_HEADER_KEY, ...) y renderWhatsappMarkup están resumidas en Compartido. Aquí se detallan las funciones. No existen clases base abstractas ni resolvers en core/ ni en shared/.

ArchivoFunciónEn uso
presence.helper.tsPRESENCE_STALE_MS, isPresenceFresh(contact)si, chat-list.component.ts
two-decimals-global-tables.utils.tsformatNumberTwoDecimals, getUtilityFormattedsi, constantes de columnas (reports.constant.ts, player.constant.ts)
global.util.tscalculateSumsi, reports.constant.ts
global.util.tsremoveEmptyOrSpecificFilters, getDifferingProperties, getDifferingPropertiesArray, mapAndTranslateLabels, toBoolean, calculateDaysInRange, getSelectedDateDescriptionTranslatedsin consumidores fuera del propio archivo

isPresenceFresh​

export const PRESENCE_STALE_MS = 90_000;
export function isPresenceFresh(contact?: TicketContact | null): boolean

Decide si un contacto se muestra en línea. lastSeen manda sobre el flag persistido isOnline: un isOnline: true sin refrescar en 90 s se considera desconectado (por ejemplo, tras una caída del backend que nunca bajó la marca). Devuelve false si el contacto es nulo, isOnline es falso, falta lastSeen, lastSeen no es una fecha parseable, o ya pasaron 90 s o más (comparación estricta <).

El umbral es 3 veces el heartbeat del backend (CHAT_CONFIG.PRESENCE_HEARTBEAT_MS = 30_000), que tolera un barrido perdido más desfase de reloj; ambas constantes se anotan una a otra porque viven en repos distintos. Sesgo deliberado hacia "offline": un falso offline es inocuo, un falso online es el bug que esta función evita.

Uso real: features/whaticket/components/chat/chat-list/chat-list.component.ts (isOnline: isPresenceFresh(ticket.contact)); ver Lista de chats y Tiempo real.

Spec: presence.helper.spec.ts (9 casos: 0 ms, 89 s, 91 s, límite exacto, lastSeen ausente, isOnline falso o indefinido, contacto nulo, constante igual a 90 s).

Formateo numérico​

  • formatNumberTwoDecimals(value): parseFloat; si es NaN, vacío, null o undefined devuelve '0.00'; si no, toLocaleString('en-US') con exactamente 2 decimales (separador de miles ,).
  • getUtilityFormatted(value): parseFloat; NaN da '0.00 %'; si no, `${num.toFixed(2)} %`.

Se usan como valueFormatter de columnas de tablas.

global.util.ts​

  • calculateSum(cells): suma parseFloat de cada celda y devuelve toFixed(2). (La tabla ngx-datatable.component.ts tiene su propio método privado calculateSum.)
  • removeEmptyOrSpecificFilters(filters, value?): muta el objeto, eliminando claves undefined, null o iguales a value.
  • getDifferingProperties(a, b): comparación superficial (!==); devuelve las claves de a cuyo valor en b es distinto, con el valor de b.
  • getDifferingPropertiesArray(a, b): diferencia profunda (arrays, objetos y fechas por getTime) devolviendo el valor completo de b en cada propiedad distinta; arrays de distinta longitud se consideran distintos. Útil para construir payloads de PATCH.
  • mapAndTranslateLabels(items, translate): traduce label de cada Select con TranslateService.instant.
  • toBoolean(value): una cadena es true solo si es 'true' sin distinguir mayúsculas; cualquier otro valor pasa por Boolean(...).
  • calculateDaysInRange(range, options) y getSelectedDateDescriptionTranslated(selected, translate): restos de los filtros de fecha de reportes (usan date-fns y TYPE_DATE). Sin consumidores en el CRM.

Sin specs.