Skip to main content

Módulo compartido

src/app/shared/ agrupa lo reutilizable entre features. SharedModule (shared/shared.module.ts) declara y exporta la mayoría; además importa y reexporta SwitchModule y RichTextEditorModule. ConfirmDialogComponent, BootstrapModalComponent y ContactEditModalComponent no están en SharedModule: se declaran directamente en AppModule.

Componentes​

SelectorArchivoUso
shared-content, shared-fullcomponents/layout/content, layout/fullLayouts autenticado y de login (ver Rutas)
shared-header (+ my-account, notifications, search)components/headerBarra superior; header.component.ts avisa si las notificaciones del navegador están bloqueadas
shared-sidebarcomponents/sidebarMenú lateral alimentado por MENU_ITEMS
shared-breadcrumbcomponents/breadcrumbTítulo y migas en cada página
app-connection-status-barcomponents/connection-status-barEstado de ambos sockets
shared-tables-ngx-datatable, shared-tables-ngx-datatable-mobile-cardscomponents/tablesTablas de escritorio y tarjetas para móvil
shared-skeletons-cards-ngx-datatable-mobilecomponents/skeletonsEsqueletos de carga
app-confirm-dialogcomponents/confirm-dialogConfirmaciones (title, message, icon)
app-switchcomponents/switchInterruptor compatible con formularios reactivos
app-rich-text-editorcomponents/rich-text-editorEditor de texto enriquecido (usa el helper de marcado WhatsApp)
app-date-time-pickercomponents/date-time-pickerSelector de fecha y hora
app-audio-playercomponents/audio-playerReproductor de audios del chat
shared-metric-card, shared-apex-chartcomponents/metric-card, apex-chartDashboard
shared-modals-contact-editcomponents/modals/contact-edit-modalEdición de contacto desde el chat
shared-accordions-toogle-panel, shared-feather-icons, svg-icon, tap-to-topvariosUtilidades de UI

Directivas​

Detalle de cada directiva (inputs, comportamiento, uso real) en Directivas compartidas.

DirectivaArchivoDescripción
*appShowWithPermissionshow-with-permission.directive.tsMuestra el contenido solo con el permiso indicado (ver RBAC)
ShowForUserTypesDirectiveshow-for-user-types.directive.tsCondiciona por tipo de usuario
click-out-side, max-characters, only-numbers, only-alphabets, restrict-negative, decimal-input, disable-key-press, required-asterisk, validation-border, custom-badgeshared/directives/Utilidades de formularios y UI

Pipes​

Detalle en Pipes compartidos.

TruncatePipe y WhatsappMarkupPipe están en SharedModule. Otros pipes del directorio: sanitize-html, boolean-to-yes-no, boolean-to-active-inactive, active-descative, status-message, social-network-badge (clases badge bg-facebook / bg-instagram / bg-youtube / bg-tiktok), lowercase, gender, build-client-environment, cashdesk-type y cashdesk-commision-type (estos dos últimos son restos de otro dominio).

Validadores​

Detalle en Validadores de formularios; funciones puras en Utilidades.

shared/validators/: noSpacesValidator, passwordMatch, validatorsAdult, validatorsPhoneNumber, notifyBeforeResolve.

Helpers de core/helpers​

ArchivoContenido
global/global.constant.tsAPI_URLS, PAGE_URLS, API_ENDPOINTS, TOKEN_HEADER_KEY, USER_SESSION, AVAILABLE_LANGUAGES
global/chat-socket.constants.tsSOCKET_EVENTS
global/whatsapp-markup.util.tsrenderWhatsappMarkup(text, { linkify? })
ui/nav.constant.tsMENU_ITEMS del sidebar
ui/ui.constant.tsFormatos de fecha, BUTTON_ACTIONS, configuración de toastr, temas

renderWhatsappMarkup​

Convierte el marcado de WhatsApp a HTML con escape previo (&, <, >): *negrita* a strong, _cursiva_ a em, ~tachado~ a s. La rama feat/meta_connections añade el parámetro { linkify: true }: antes de formatear extrae las URLs http(s)://... a marcadores (\u0000N\u0000), recorta puntuación final (.,;:!?)]}*_~) y las vuelve a insertar como <a href=... target="_blank" rel="noopener noreferrer"> con la URL escapada. Así los asteriscos o guiones bajos dentro de una URL no se interpretan como formato. ChatConversationComponent.renderMessageMarkup usa linkify: true para el texto de mensajes y las leyendas (captions) de medios; renderWhatsappMarkup sin opciones se conserva para otros usos. El estilo de los enlaces (color: inherit, subrayado, word-break: break-all) está en chat-conversation.component.scss. El HTML resultante pasa además por SanitizationService.sanitizeHtml cuando se muestra el texto truncado de un mensaje.