createCommentOverlay
El punto de entrada — sus dos sobrecargas, la instancia que devuelve, y los dos ayudantes a nivel de módulo que la acompañan.
import createCommentOverlay, {
createCommentOverlay as named,
readCommentLinkParam,
DEFAULT_LINK_PARAM,
CommentOverlay,
} from 'helldots';createCommentOverlay es a la vez la exportación por defecto y una con nombre.
La clase, CommentOverlay, también se exporta — rara vez la necesitas como
valor, pero es el tipo con el que anotas una instancia.
Firma
La función tiene dos sobrecargas, discriminadas por autoInit.
// Monta de inmediato (el comportamiento por defecto).
function createCommentOverlay(
options?: CommentOverlayOptions & { autoInit?: true },
): CommentOverlay;
// No se monta nada; recibes un inicializador para llamar cuando quieras.
function createCommentOverlay(
options: CommentOverlayOptions & { autoInit: false },
): () => CommentOverlay;Montar de inmediato
const overlay = createCommentOverlay({
user: { name: 'Ana' },
persistence: 'localStorage',
});Se puede llamar antes de que el documento esté listo — la instancia pospone su
propio trabajo con el DOM hasta DOMContentLoaded. Lo que no es seguro es
llamarlo fuera de un navegador; mira
aplicaciones renderizadas en el servidor.
Posponer el montaje
const init = createCommentOverlay({ autoInit: false, user });
if (session.isStaff) {
const overlay = init();
}Útil cuando el widget solo debe aparecer para un subconjunto de personas, o detrás de un feature flag, sin pagar el montaje mientras tanto.
onReady es el punto seguro
Cuando el documento ya está parseado, el montaje ocurre dentro del
constructor — antes de que createCommentOverlay() haya devuelto nada que
asignar. Por eso onReady recibe la instancia:
createCommentOverlay({
onReady: async (overlay) => {
const { orphaned } = overlay.loadComments(await api.get('/comments'));
if (orphaned) console.info(`${orphaned} comentarios perdieron su elemento`);
},
});Un loadComments() llamado antes no se pierde — los datos se retienen y se
reproducen al montar — pero sus cuentas vuelven a cero, porque todavía no se ha
resuelto nada contra el DOM.
Construir la clase directamente
import { CommentOverlay } from 'helldots';
const overlay = new CommentOverlay({ user: { name: 'Ana' } });El constructor toma Omit<CommentOverlayOptions, 'autoInit'> — la bandera solo
significa algo para la factoría. No hay razón para preferir esto a
createCommentOverlay.
Ayudantes a nivel de módulo
Existen dos exportaciones para poder leer un enlace directo antes de que exista una capa — y traer solo ese comentario.
Propiedad
Tipo
import { readCommentLinkParam } from 'helldots';
const id = readCommentLinkParam();
const solo = id ? [await api.get(`/comments/${id}`)] : [];Pasa el mismo param con el que se configuró el widget si sobrescribiste
linkParam.
Desmontarlo
overlay.cleanup();Elimina el widget por completo — marcadores, barra, listeners, shadow root. Esto es lo que hace seguro el patrón de React bajo un doble montaje de desarrollo, y lo que llamas al cerrar sesión.
useEffect(() => {
const overlay = createCommentOverlay({ user });
return () => overlay.cleanup();
}, [user]);