React wrapper
Isang provider at dalawang hook sa ibabaw ng TypeScript SDK. Isang client lang ang ini-install nito bawat pahina, kaya hindi dinodoble ng React strict mode ang iyong mga event.
Saan ito nakalathala
@prodantix/react on npm. It wraps @prodantix/sdk, so install both.
I-install
bun add @prodantix/sdk @prodantix/react| Export | What it is |
|---|---|
| ProdantixProvider | Creates the client once per page and provides it |
| useProdantix | The client for the page, or null |
| useMessenger | A handle that opens and closes the widget, or null |
| prodantixConfig | The config when both key and host are present, else null |
| skipReason | Why this mount will send nothing, or null |
| resetProdantixForTest | Clears the once-per-page install, for tests |
Ang provider
I-mount ang ProdantixProvider nang isang beses, malapit sa root. Ginagawa nito ang web client sa unang mount at ginagamit muli pagkatapos, dahil ang paggawa ng pangalawa ay magpa-patch sa History API nang dalawang beses at dodoblehin ang bawat autocaptured na event.
import { ProdantixProvider } from '@prodantix/react';
export const Providers = ({ children }: { children: ReactNode }) => (
<ProdantixProvider
options={{
apiKey: process.env.NEXT_PUBLIC_PRODANTIX_KEY,
host: 'https://eu.api.prodantix.com',
messengerHost: 'https://eu.edge.prodantix.com',
}}
>
{children}
</ProdantixProvider>
);Pagpangalan sa taong naka-sign in
Sinasabi ng person sa provider kung sino ang naka-sign in, bilang prop at hindi tawag, kaya ang sign-in at sign-out ay dumarating sa client bilang mga halagang totoo. May tatlo itong estado at magkaiba ang sinasabi ng bawat isa. Ang undefined ay nangangahulugang hindi pa alam ng surface na ito, dahil naghi-hydrate pa ang auth nito, at walang ginagawa ang provider. Ang isang halaga ay pagkilala: tinatawag ng provider ang identify sa una, at muli sa tuwing nagbabago ang distinctId, dala ang sariling traits ng SDK, ang avatar, email, pangalan at telepono. Ang null ay nangangahulugang sumangguni ang surface sa isang session at walang natagpuan, at nire-reset ng provider ang client kung, at kung lamang, kilala pa ito, na siyang nag-iikot sa anonymous id para hindi na ang taong nag-sign out ang susunod na bisita sa browser na iyon. Ang tuntuning iyon ang nagpapatibay sa sign-out kung saan ang pag-sign out ay isang hard navigation at walang paglipat mula halaga patungong null na naipipinta kailanman. Iyon din ang dahilan kung bakit hindi dapat kailanman kumatawan ang null sa paghihintay: ang taong naka-sign in na nagre-reload ng pahina ay mare-reset bago pa mag-hydrate ang auth. Ang mount na walang kinukunsultang session, isang landing page o isang docs page, ay nagpapasa ng undefined, at ang kulang na prop ay nababasa nang mismong undefined.
import { ProdantixProvider } from '@prodantix/react';
export const Providers = ({ children }: { children: ReactNode }) => {
const { session, status } = useSession();
// undefined while auth hydrates, null once it has resolved to nobody,
// the subject once it has resolved to someone.
const person = status === 'loading' ? undefined : session ? { distinctId: session.sub } : null;
return (
<ProdantixProvider
options={{
apiKey: process.env.NEXT_PUBLIC_PRODANTIX_KEY,
host: 'https://eu.api.prodantix.com',
person,
}}
>
{children}
</ProdantixProvider>
);
};Ang mga hook
Ibinabalik ng useProdantix ang client para sa pahina, o null sa server, bago tumakbo ang effect, at sa labas ng provider. Nagbabalik ang useMessenger ng handle na nagbubukas at nagsasara ng widget, at nananatiling null hangga sa mabasa ang konfigurasyon ng proyekto at sabihin nitong naka-enable.
import { useMessenger, useProdantix } from '@prodantix/react';
export const HelpButton = () => {
const prodantix = useProdantix();
const messenger = useMessenger();
// Both are null until the provider effect has run, so neither is assumed.
return (
<button
onClick={() => {
prodantix?.capture('help.opened');
messenger?.open();
}}
type="button"
>
Get help
</button>
);
};Kapag wala itong ipinapadala
Pareho pa ring naipapadala ang isang app kahit naka-off ang Prodantix, kaya hindi error ang nawawalang key o host. Sinasabi ng prodantixConfig kung nasa lugar ang dalawang halaga, at sinasabi ng skipReason sa isang linya kung bakit walang ipapadala ang isang mount, sa halip na tahimik na bumalik.
import { prodantixConfig, skipReason } from '@prodantix/react';
const env = {
host: process.env.NEXT_PUBLIC_PRODANTIX_HOST,
key: process.env.NEXT_PUBLIC_PRODANTIX_KEY,
};
// null when either value is missing: the app runs with Prodantix switched off.
if (prodantixConfig(env) === null) {
console.warn(skipReason(env, null));
}