Skip to content
Lockerverse SDK
Esc
↑↓navigate↵open⌘Jpreview
On this page

Payment component

Render native Lockerverse checkout for a catalog selection.

import { LockerversePayment } from "@lockerverse/react/payment";
import "@lockerverse/react/payment.css";

Required properties

Property Type Description
widget UseLockerverseWidgetResult Result from useLockerverseWidget
selection LockerversePaymentSelectionItem[] Products to quote and pay

Payment properties

type LockerversePaymentProps = {
  widget: UseLockerverseWidgetResult;
  selection: LockerversePaymentSelectionItem[];
  branding?: {
    accentColor?: string;
    imageUrl?: string | null;
    name: string;
  };
  metadata?: Record<string, string>;
  initialCustomFieldValues?: Record<string, boolean | string | string[]>;
  style?: LockerverseStyle;
  theme?: "dark" | "light";
  resumePayment?: {
    connectedAccountId: string | null;
    paymentReference: string;
  } | null;
  onPaymentComplete?: (payment: LockerversePaymentCompletion) => void;
  onPaymentRecoveryChange?: (recovery: LockerversePaymentRecovery | null) => void;
  onPaymentUncertain?: (payment: LockerversePaymentUncertain) => void;
};

The component also accepts <section> properties and className. See Theming for the shared typed CSS tokens.

Completion

import type { LockerversePaymentCompletion } from "@lockerverse/react/payment";

const widget = useLockerverseWidget({
  communitySlug: "your-community",
  widgetSlug: "your-widget",
});

const handlePaymentComplete = (payment: LockerversePaymentCompletion) => {
  const admissionItems = payment.lineItems?.filter(
    (item) => item.fulfillmentType === "event_admission"
  );
  console.info("Payment complete; admission item count", admissionItems?.length ?? 0);
};

<LockerversePayment
  onPaymentComplete={handlePaymentComplete}
  selection={selection}
  widget={widget}
/>

Use onPaymentComplete as the confirmed success signal. A direct completion includes the normalized customer email and authoritative lineItems. A completion recovered after reload has null for both fields.

Recovery

Store onPaymentRecoveryChange and pass it back through resumePayment after reload. Keep onPaymentUncertain unresolved.

Prefill custom fields

Pass configured field IDs to initialCustomFieldValues:

<LockerversePayment
  widget={widget}
  selection={selection}
  initialCustomFieldValues={{
    field_muw2q7vx_sf7r94: "Autographed basketball",
  }}
/>

The form reads these values when a checkout form starts. Buyers can edit them; parent re-renders and price refreshes do not overwrite their edits. To apply a new set of initial values, start a new form with a new React key. This also resets the other form inputs.

Text and textarea fields take strings. A checkbox takes a boolean. Radio and select fields take an option ID. Checkboxes and multi-select fields take arrays of option IDs. Unknown fields, wrong value types, and unknown options are ignored. Only fields for the selected products are used. Required-field validation and server validation still apply.

LockerverseDonateLauncher accepts the same property. For live control over individual values and a custom submission flow, use the payment primitives with the Core SDK.

Last updated on October 15, 2026

Was this page helpful?