UNPKG

analytica-frontend-lib

Version:

Repositório público dos componentes utilizados nas plataformas da Analytica Ensino

73 lines (72 loc) 2.13 kB
// src/hooks/useZendesk.ts import { useCallback, useEffect, useState } from "react"; var SCRIPT_ID = "ze-snippet"; var INITIAL_RETRY_MS = 2e3; var MAX_RETRY_MS = 3e4; var POLL_MS = 500; var getZE = () => globalThis.zE; var useZendesk = ({ zendeskKey, enabled = true }) => { const [ready, setReady] = useState(false); useEffect(() => { if (!enabled || !zendeskKey) return; let cancelled = false; let attempt = 0; let retryTimer; let pollTimer; function confirmReady() { const zE = getZE(); if (!zE) return false; zE("messenger:set", "locale", "pt-BR"); if (!cancelled) setReady(true); return true; } function scheduleRetry() { if (cancelled) return; const delay = Math.min(INITIAL_RETRY_MS * 2 ** attempt, MAX_RETRY_MS); attempt += 1; retryTimer = setTimeout(inject, delay); } function handleScriptError() { if (cancelled) return; document.getElementById(SCRIPT_ID)?.remove(); scheduleRetry(); } function inject() { if (cancelled || confirmReady()) return; const existing = document.getElementById( SCRIPT_ID ); if (existing) { existing.addEventListener("error", handleScriptError, { once: true }); return; } const script = document.createElement("script"); script.id = SCRIPT_ID; script.src = `https://static.zdassets.com/ekr/snippet.js?key=${zendeskKey}`; script.async = true; script.addEventListener("error", handleScriptError, { once: true }); document.body.appendChild(script); } inject(); pollTimer = setInterval(() => { if (cancelled) return; if (confirmReady() && pollTimer) clearInterval(pollTimer); }, POLL_MS); return () => { cancelled = true; if (retryTimer) clearTimeout(retryTimer); if (pollTimer) clearInterval(pollTimer); }; }, [zendeskKey, enabled]); const openChat = useCallback(() => { getZE()?.("messenger", "open"); }, []); return { ready, openChat }; }; export { useZendesk }; //# sourceMappingURL=chunk-UTNSYDKE.mjs.map