React Integration
React components and hooks for fdback.io
npm install @fdback.io/sdk reactSetup Provider
Wrap your app with the FdbackProvider:
// app/providers.tsx or app/layout.tsx
import { FdbackProvider } from "@fdback.io/sdk/react";
export function Providers({ children }: { children: React.ReactNode }) {
return (
<FdbackProvider
workspaceId="your-workspace-id"
signEndpoint="/api/fdback/sign"
>
{children}
</FdbackProvider>
);
}FeedbackButton Component
The easiest way to add feedback - a ready-to-use button:
"use client";
import { FeedbackButton } from "@fdback.io/sdk/react";
export function Header() {
const user = useCurrentUser(); // Your auth hook
return (
<FeedbackButton
user={{ email: user.email, name: user.name }}
className="btn btn-primary"
onOpen={(win) => console.log("Opened!", win)}
onError={(err) => console.error(err)}
>
Give Feedback
</FeedbackButton>
);
}useFdbackLogin Hook
For custom implementations with loading and error states:
"use client";
import { useFdbackLogin } from "@fdback.io/sdk/react";
export function CustomFeedback() {
const { login, isLoading, error } = useFdbackLogin();
const handleClick = async () => {
await login(
{ email: "user@example.com", name: "John" },
{ mode: "popup" }
);
};
return (
<button onClick={handleClick} disabled={isLoading}>
{isLoading ? "Opening..." : "Feedback"}
</button>
);
}useFdback Hook
Access the Fdback context directly:
"use client";
import { useFdback } from "@fdback.io/sdk/react";
export function FeedbackStatus() {
const { isOpen, getBoardUrl, workspaceId } = useFdback();
return (
<div>
<p>Workspace: {workspaceId}</p>
<p>Board URL: {getBoardUrl()}</p>
<p>Popup open: {isOpen ? "Yes" : "No"}</p>
</div>
);
}API Reference
| Export | Type | Description |
|---|---|---|
FdbackProvider | Component | Context provider with workspace config |
FeedbackButton | Component | Ready-to-use button with built-in signing |
useFdback | Hook | Access context (client, isOpen, etc.) |
useFdbackLogin | Hook | Login + open with loading/error state |
FdbackProvider Props
interface FdbackProviderProps {
workspaceId: string; // Your workspace ID
signEndpoint?: string; // API endpoint for signing (e.g., "/api/fdback/sign")
baseUrl?: string; // Custom base URL
children: React.ReactNode;
}FeedbackButton Props
interface FeedbackButtonProps {
user: FdbackUser; // User data to sign
mode?: "popup" | "tab" | "redirect"; // How to open (default: "popup")
onOpen?: (window: Window | null) => void;
onError?: (error: Error) => void;
className?: string;
children?: React.ReactNode;
}