@toutix/whitelabel
Version:
Toutix whitelabel React container components
397 lines (270 loc) • 10.1 kB
Markdown
# Event Listing Component
The `EventListPageContainer` component provides a complete event listing solution with built-in filtering, search, pagination, and responsive design.
It automatically handles data fetching and state management using the **Toutix Whitelabel SDK**.
## Frontend Integration
### Folder Structure
```
app/
└── events/
├── EventListClient.jsx # Client component
└── page.jsx # Main /events route
```
### Install
```bash
npm install @toutix/whitelabel
```
### Run
```bash
npm run dev
```
Visit [http://localhost:3000/events](http://localhost:3000/events)
You’ll see the Toutix event listing embedded into your site.
## Next.js Integration
This example shows how to integrate Toutix Event List in a Next.js application:
* Create the client component with SDK initialization
* Create the page route to render the component
* Handle loading states during initialization
* Access at `/events` route in your Next.js app
### Create `EventListClient.jsx`
This component initializes the whitelabel SDK and renders the event list.
```jsx
"use client";
import React, { useEffect, useState } from 'react';
import { EventListPageContainer, initWhiteLabel } from '@toutix/whitelabel';
import '@toutix/whitelabel/dist/index.css';
export default function EventListClient() {
const [isLoaded, setIsLoaded] = useState(false);
useEffect(() => {
initWhiteLabel({
baseUrl: '<YOUR_BASE_URL>',
whiteLabelToken: '<YOUR_WHITELABEL_TOKEN>',
stripePublicKey: '<YOUR_STRIPE_PUBLIC_KEY>',
googleMapsApiKey: '<YOUR_GOOGLE_MAPS_API_KEY>',
});
setIsLoaded(true);
}, []);
if (!isLoaded) return <div>Loading events...</div>;
return <EventListPageContainer />;
}
```
### Create `page.jsx`
This links your route `/events` to the component above.
```jsx
import EventListClient from "./EventListClient";
export default function Page() {
return <EventListClient />;
}
```
## `initWhiteLabel()` Options
| Option | Description |
| -------------------- | ------------------------------------------------------------------------------------------------------------ |
| **baseUrl** | Base API URL of your Toutix environment or backend (e.g., [https://api.toutix.com](https://api.toutix.com)). |
| **whiteLabelToken** | Token returned from the Toutix initialize API; identifies your tenant. |
| **stripePublicKey** | Your public Stripe key for checkout and payments. |
| **googleMapsApiKey** | Google Maps key used to enable location and map components. |
## Best Practices
> **Always call the initialize API on your backend — never expose your private key to the frontend.**
* Pass only the **whiteLabelToken** to the client when calling `initWhiteLabel()`.
* Test the integration in a staging environment first.
* Include error handling for network requests and token initialization.
* Implement loading states while the SDK initializes.
* Ensure your Stripe and Google Maps API keys are valid and properly configured.
# Single Event Page
The **Single Event Page** dynamically loads and displays event details using the `SingleEventPageContainer` from the Toutix SDK.
It initializes the SDK and fetches specific event data based on the URL parameter.
## Frontend Integration
### Folder Structure
```
app/
└── events/
└── [id]/
├── SingleEventClient.jsx # Client component
└── page.jsx # Dynamic route
```
### Install
```bash
npm install @toutix/whitelabel
```
### Run
```bash
npm run dev
```
Visit [http://localhost:3000/events/eventId](http://localhost:3000/events/eventId)
You’ll see the Toutix single event page embedded into your site.
## Next.js Integration
This example shows how to integrate Toutix Single Event Page in a Next.js application:
* Create dynamic route with `[id]` parameter
* Create client component with SDK initialization
* Pass `eventId` from URL params to component
* Handle loading states during initialization
* Access at `/events/[id]` route in your Next.js app
### Create `SingleEventClient.jsx`
This component initializes the whitelabel SDK and renders the single event page.
```jsx
"use client";
import React, { useEffect, useState } from 'react';
import { SingleEventPageContainer, initWhiteLabel } from '@toutix/whitelabel';
import '@toutix/whitelabel/dist/index.css';
export default function SingleEventClient({ eventId }) {
const [isLoading, setIsLoading] = useState(false);
useEffect(() => {
initWhiteLabel({
baseUrl: '<YOUR_BASE_URL>',
whiteLabelToken: '<YOUR_WHITELABEL_TOKEN>',
stripePublicKey: '<YOUR_STRIPE_PUBLIC_KEY>',
googleMapsApiKey: '<YOUR_GOOGLE_MAPS_API_KEY>',
});
setIsLoading(true);
}, []);
if (!isLoading) return <div>Loading event...</div>;
return <SingleEventPageContainer eventId={eventId} />;
}
```
### Create `page.jsx`
This links your route `/events/[id]` to the component above.
```jsx
import SingleEventClient from './SingleEventClient';
export default function Page({ params }) {
return <SingleEventClient eventId={params.id} />;
}
```
## Folder Structure
Create the following folder structure in your Next.js project:
```
app/
└── events/
└── [id]/
├── page.jsx # Dynamic route file (/events/[id])
└── SingleEventClient.jsx # Client component initializing Toutix
```
The page will be accessible at **host/events/[id]**
(e.g., [http://localhost:3000/events/123](http://localhost:3000/events/123))
## How It Works
1. User visits `/events/[id]` (e.g., `/events/123`).
2. `SingleEventClient` runs in the browser and initializes Toutix with your keys.
3. `SingleEventPageContainer` automatically fetches and displays that specific event’s details.
## Best Practices
* 🗝 **Keep all keys and tokens in environment variables** (`.env.local`) instead of hardcoding them.
* 🔁 Use the same `whiteLabelToken` creation flow described in the Event Listing setup (`/whitelabel/api-keys/initialize`).
* ⚙️ This setup works seamlessly with **Next.js 13+ and 14+ App Router**.
# Payment Success Component
The **PaymentSuccess** component confirms successful payments using the Toutix Whitelabel SDK.
It reads payment details from the URL and renders a confirmation interface powered by `PaymentSuccessPageContainer`.
## Frontend Integration
### Folder Structure
```
app/
└── payment-success/
├── PaymentSuccessClient.jsx # Client component
└── page.jsx # Main route
```
### Install
```bash
npm install @toutix/whitelabel
```
### Run
```bash
npm run dev
```
Visit [http://localhost:3000/payment-success](http://localhost:3000/payment-success)
You’ll see the Toutix payment success page embedded into your site.
## Next.js Integration
This example shows how to integrate Toutix Payment Success Page in a Next.js application:
* Create `payment-success` route
* Create client component with SDK initialization
* Extract payment parameters from URL search params
* Handle loading states during initialization
* Access at `/payment-success` route in your Next.js app
### Create `PaymentSuccessClient.jsx`
This component initializes the whitelabel SDK and renders the payment success page.
```jsx
"use client";
import React, { useEffect, useState } from 'react';
import { PaymentSuccessPageContainer, initWhiteLabel } from '@toutix/whitelabel';
import { useSearchParams } from 'next/navigation';
import '@toutix/whitelabel/dist/index.css';
export default function PaymentSuccessClient() {
const [isLoaded, setIsLoaded] = useState(false);
const searchParams = useSearchParams();
useEffect(() => {
initWhiteLabel({
baseUrl: '<YOUR_BASE_URL>',
whiteLabelToken: '<YOUR_WHITELABEL_TOKEN>',
stripePublicKey: '<YOUR_STRIPE_PUBLIC_KEY>',
googleMapsApiKey: '<YOUR_GOOGLE_MAPS_API_KEY>',
});
setIsLoaded(true);
}, []);
if (!isLoaded) return <div>Loading payment success...</div>;
const paymentIntent = searchParams.get('payment_intent') || '';
const paymentRecordId = searchParams.get('payment_record_id') || '';
return (
<PaymentSuccessPageContainer
paymentIntent={paymentIntent}
paymentRecordId={paymentRecordId}
/>
);
}
```
### Create `page.jsx`
This links your route `/payment-success` to the component above.
```jsx
import PaymentSuccessClient from './PaymentSuccessClient';
export default function Page() {
return <PaymentSuccessClient />;
}
```
## Folder Structure
Create the following folder structure in your Next.js project:
```
app/
└── payment-success/
├── page.jsx # Main route file (/payment-success)
└── PaymentSuccessClient.jsx # Client component for initializing Toutix
```
The page will be accessible at **host/payment-success**
(e.g., [http://localhost:3000/payment-success](http://localhost:3000/payment-success))
## How It Works
1. User completes checkout and is redirected to `/payment-success`.
Example:
```
/payment-success?payment_intent=pi_12345&payment_record_id=rec_6789
```
2. `PaymentSuccess` component reads `payment_intent` and `payment_record_id` from the URL parameters.
3. `initWhiteLabel()` sets up the Toutix SDK.
4. `PaymentSuccessPageContainer` fetches and displays the payment confirmation details.
## Best Practices
* 🔐 Always keep your keys and tokens in **environment variables** (`.env.local`).
* 💳 `paymentIntent` and `paymentRecordId` are automatically passed from Stripe/Toutix after payment.
* ⚙️ Works with **Next.js 13+ / 14+ App Router**.
* 🎨 You can customize your loading state or container class if needed.