UNPKG

@redocly/theme

Version:

Shared UI components lib

67 lines (57 loc) 2.13 kB
import { useMemo } from 'react'; import type { DisplayBanner } from '@redocly/theme/components/Banner/Banner'; import { useThemeHooks } from './use-theme-hooks'; const noop = (): void => {}; const noopLink = (_href: string): void => {}; export type BannerTelemetryActions = { sendBannerViewedMessage: () => void; sendBannerDismissedMessage: () => void; sendBannerLinkClickedMessage: (href: string) => void; }; function getCurrentPageUri(): string { return window.location.href; } export function useBannerTelemetry( displayBanner: DisplayBanner | undefined, ): BannerTelemetryActions { const { useTelemetry } = useThemeHooks(); const telemetry = useTelemetry(); return useMemo(() => { if (!displayBanner) { return { sendBannerViewedMessage: noop, sendBannerDismissedMessage: noop, sendBannerLinkClickedMessage: noopLink, }; } const bannerUri = 'urn:redocly:realm:ui:banner:banner-id'; const payload = { id: 'banner-id' as const, object: 'banner' as const, uri: bannerUri, trackingId: displayBanner.trackingId, hash: displayBanner.hash, color: displayBanner.color, target: displayBanner.target, dismissible: displayBanner.dismissible, }; return { sendBannerViewedMessage: () => { const pageUri = getCurrentPageUri(); const page = { id: pageUri, object: 'page' as const, uri: pageUri }; telemetry.sendBannerViewedMessage([payload, page]); }, sendBannerDismissedMessage: () => { const pageUri = getCurrentPageUri(); const page = { id: pageUri, object: 'page' as const, uri: pageUri }; const { dismissible: _, ...dismissedPayload } = payload; telemetry.sendBannerDismissedMessage([dismissedPayload, page]); }, sendBannerLinkClickedMessage: (href: string) => { const pageUri = getCurrentPageUri(); const page = { id: pageUri, object: 'page' as const, uri: pageUri }; telemetry.sendBannerLinkClickedMessage([{ ...payload, href }, page]); }, }; }, [displayBanner, telemetry]); }