We've released new subdomains to power Inbox and Toast. This migration only applies to Inbox and Toast users who applied our old URLs to their Content Security Policy.
interface ICourierProvider {
authorization?: string;
brand?: Brand;
brandId?: string;
onMessage?: (
message?: IInboxMessagePrpeview
) => IInboxMessagePrpeview | undefined;
clientKey?: string;
userId?: string;
userSignature?: string;
wsOptions?: WSOptions;
}
interface WSOptions {
url?: string;
onError?: (error: { message: string; error: Error }) => void;
onClose?: () => void;
connectionTimeout?: number;
}
interface Brand {
inapp?: {
disableCourierFooter?: boolean;
borderRadius?: string;
disableMessageIcon?: boolean;
placement?: "top" | "bottom" | "left" | "right";
emptyState?: {
textColor?: string;
text?: string;
};
icons?: {
bell?: string;
message?: string;
};
toast?: {
borderRadius?: string;
timerAutoClose?: number;
};
};
colors?: {
primary?: string;
secondary?: string;
tertiary?: string;
};
}
There are a few ways to listen for messages and being able react.
- Via Props
import { CourierProvider } from "@trycourier/react-provider";
const MyApp = ({ children }) => {
const handleOnMessage = (messsage: IInboxMessagePreview) => {
console.log(message);
return message;
};
return (
<CourierProvider onMessage={handleOnMessage}>{children}</CourierProvider>
);
};
- Via Transport
You can create a Transport and pass it into CourierProvider.
import { useEffect } from "react";
import { CourierProvider, CourierTransport } from "@trycourier/react-provider";
const courierTransport = new CourierTransport({
clientKey: CLIENT_KEY,
});
const MyApp = ({ children }) => {
useEffect(() => {
courierTransport.intercept((message) => {
console.log(message);
return message;
});
});
return (
<CourierProvider transport={courierTransport}>{children}</CourierProvider>
);
};
- Via useCourier hook
If you don't pass in a transport, we will automatically create one. You can then access the transport via the CourierContext exposed through useCourier.
import { useEffect } from "react";
import { CourierProvider, useCourier } from "@trycourier/react-provider";
const courierTransport = new CourierTransport({
clientKey: CLIENT_KEY,
});
const MyComponent = () => {
const courier = useCourier();
useEffect(() => {
courier.transport.intercept((message) => {
console.log(message);
return message;
});
});
return <div>Hello World</div>;
};
const MyApp = ({ children }) => {
return (
<CourierProvider>
<MyComponent />
</CourierProvider>
);
};
Dark mode is supported by passing "theme.colorMode" to the CourierProvider
import { CourierProvider } from "@trycourier/react-provider";
const MyApp = ({ children }) => {
return (
<CourierProvider thene={{ colorMode: "dark" }}>{children}</CourierProvider>
);
};
You can customize darkmode by passing in variables to the root level theme:
export interface ThemeVariables {
background?: string;
textColor?: string;
titleColor?: string;
structure?: string;
icon?: string;
}```
```tsx
import { CourierProvider } from "@trycourier/react-provider";
const MyApp = ({ children }) => {
return (
<CourierProvider thene={{variables: {
background: "red",
textColor: "blue",
titleColor: "green",
structure: "pink",
icon: "orange"
}}}>{children}</CourierProvider>
);
};