Insightcn

TanStack Query

Use Insightcn with TanStack Query.

Setup

Install insightcn:

npm install insightcn

Usage

Track Events in Mutations

import { useMutation } from "@tanstack/react-query";
import { captureRegistryEvent } from "@insightcn/sdk";

export function InstallButton({ registryUrl }: { registryUrl: string }) {
  const mutation = useMutation({
    mutationFn: async () => {
      const request = new Request(registryUrl, {
        method: "GET",
        headers: { "user-agent": "node-fetch" },
      });

      await captureRegistryEvent(request, "your-api-key", "installed");
    },
  });

  return (
    <button onClick={() => mutation.mutate()} disabled={mutation.isPending}>
      {mutation.isPending ? "Installing..." : "Install"}
    </button>
  );
}

Custom Hook

// hooks/useRegistryTracker.ts
import { useMutation, useQuery } from "@tanstack/react-query";
import { captureRegistryEvent, generateRegistryRssFeed } from "@insightcn/sdk";

export function useRegistryTracker(apiKey: string) {
  const trackEvent = useMutation({
    mutationFn: async ({
      registryUrl,
      type = "installed",
    }: {
      registryUrl: string;
      type?: "installed" | "viewed" | "downloaded";
    }) => {
      const request = new Request(registryUrl, {
        method: "GET",
        headers: { "user-agent": "node-fetch" },
      });

      await captureRegistryEvent(request, apiKey, type);
    },
  });

  const generateRss = useMutation({
    mutationFn: async (
      options: Parameters<typeof generateRegistryRssFeed>[0]
    ) => {
      return generateRegistryRssFeed(options);
    },
  });

  return { trackEvent, generateRss };
}

Usage in Component

import { useRegistryTracker } from "@/hooks/useRegistryTracker";

export function RegistryTracker() {
  const { trackEvent, generateRss } = useRegistryTracker("your-api-key");

  return (
    <div>
      <button
        onClick={() =>
          trackEvent.mutate({
            registryUrl: "https://your-registry.com/r/ui/button.json",
          })
        }
      >
        Install Button
      </button>
      <button
        onClick={() =>
          generateRss.mutate({
            baseUrl: "https://your-registry.com",
            rss: {
              title: "My Shadcn Registry",
              description: "Custom components for shadcn/ui",
            },
          })
        }
      >
        Generate RSS
      </button>
    </div>
  );
}

On this page