Hook Examples

Modal Tracking

Track modal interactions to understand user engagement with dialogs, settings panels, and other overlay components.

Implementation

tsx
import { track } from "@databuddy/sdk";
import { useEffect, useRef } from "react";

export function useModalTracking(modalName: string, isOpen: boolean) {
const hasTrackedOpen = useRef(false);

useEffect(() => {
  if (isOpen && !hasTrackedOpen.current) {
    hasTrackedOpen.current = true;
    track("modal_opened", {
      modal_name: modalName,
    });
  } else if (!isOpen && hasTrackedOpen.current) {
    hasTrackedOpen.current = false;
    track("modal_closed", {
      modal_name: modalName,
    });
  }
}, [isOpen, modalName]);
}

Usage

tsx
function SettingsDialog() {
const [isOpen, setIsOpen] = useState(false);
useModalTracking("settings", isOpen);

return (
  <Dialog open={isOpen} onOpenChange={setIsOpen}>
    {/* Dialog content */}
  </Dialog>
);
}

What It Tracks

  • Events:
    • modal_opened: When a modal is opened
    • modal_closed: When a modal is closed
  • Properties:
    • modal_name: Identifier for the modal/dialog

Benefits

  • Engagement Metrics: Understand which modals users interact with most
  • User Flow: Track modal usage patterns in your application
  • Feature Discovery: Identify which features users are exploring

How is this guide?