UNPKG

@clerk/shared

Version:

Internal package utils used by the Clerk SDKs

57 lines (55 loc) 2.07 kB
const require_contexts = require('../contexts.js'); const require_useOrganizationBase = require('./base/useOrganizationBase.js'); const require_useUser = require('./useUser.js'); let react = require("react"); //#region src/react/hooks/useCheckout.ts /** * @function * * @param [options] - An object containing the configuration for the checkout flow. * * **Required** if the hook is used without a `<CheckoutProvider />` wrapping the component tree. */ const useCheckout = (options) => { const contextOptions = require_contexts.useCheckoutContext(); const { for: forOrganization, planId, planPeriod, seatsQuantity, priceId } = options || contextOptions; const organization = require_useOrganizationBase.useOrganizationBase(); const { isLoaded, user } = require_useUser.useUser(); const clerk = require_contexts.useClerkInstanceContext(); if (user === null && isLoaded) throw new Error("Clerk: Ensure that `useCheckout` is inside a component wrapped with `<Show when=\"signed-in\" />`."); if (isLoaded && forOrganization === "organization" && organization === null) throw new Error("Clerk: Ensure your flow checks for an active organization. Retrieve `orgId` from `useAuth()` and confirm it is defined. For SSR, see: https://clerk.com/docs/reference/backend/types/auth-object#how-to-access-the-auth-object"); const signal = (0, react.useCallback)(() => { return clerk.__experimental_checkout({ planId, planPeriod, for: forOrganization, seatsQuantity, priceId }); }, [ user?.id, organization?.id, planId, planPeriod, forOrganization, seatsQuantity, priceId ]); const subscribe = (0, react.useCallback)((callback) => { if (!clerk.loaded) return () => {}; return clerk.__internal_state.__internal_effect(() => { signal(); callback(); }); }, [ signal, clerk.loaded, clerk.__internal_state ]); const getSnapshot = (0, react.useCallback)(() => { return signal(); }, [signal]); return (0, react.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot); }; //#endregion exports.useCheckout = useCheckout;