Start by installing the Viral Loops package from npm

npm install @viral-loops/widgets

Import the component and the getCampaign function like so:

import { ViralLoopsWidget, getCampaign } from '@viral-loops/widgets/dist/react';

You can access the Viral Loops campaign like this:

const VIRAL_LOOPS_CAMPAIGN_ID = 'iev8dcEBHtsNToNqaCGnXGGCmsc'; // replace with your campaign ID
const campaign = await getCampaign(VIRAL_LOOPS_CAMPAIGN_ID);

To embed the widget inside a React component:

function VLWrapper() {
  const VIRAL_LOOPS_CAMPAIGN_ID = 'iev8dcEBHtsNToNqaCGnXGGCmsc'; // replace with your campaign ID
    return (
        <>
        <ViralLoopsWidget ucid={VIRAL_LOOPS_CAMPAIGN_ID} />
            </>
        );
}

If you wish to embed the widget as a popup you can set popup prop to true:

<ViralLoopsWidget ucid={VIRAL_LOOPS_CAMPAIGN_ID} popup={true}/>

Below you can find a React Component implementation that wraps the Viral Loops widget and binds the user registered in Viral Loops:

// App.jsx

import { useState, useEffect } from 'react';
import logo from './assets/react.svg';
import './App.css';
import { ViralLoopsWidget, getCampaign } from '@viral-loops/widgets/dist/react';

function App() {
    const [vlUser, setVlUser] = useState();

    const VIRAL_LOOPS_CAMPAIGN_ID = 'iev8dcEBHtsNToNqaCGnXGGCmsc'; // replace with your campaign ID

    async function logout() {
        const campaign = await getCampaign(VIRAL_LOOPS_CAMPAIGN_ID);
        campaign?.logout();
        window.location.reload();
    }

    async function bindViralLoopsUser() {
        if (vlUser) return;

        const campaign = await getCampaign(VIRAL_LOOPS_CAMPAIGN_ID);
        const loggedInUser = campaign.getUser();

        if (loggedInUser) {
            console.log('[Viral Loops] user logged in to viral loops is:', loggedInUser);
            setVlUser(loggedInUser);
        } else {
            campaign.on('participation', (vlUser) => {
                console.log('[Viral Loops] user participated to viral loops!', vlUser);
                setVlUser(vlUser);
            });
        }
    }

    useEffect(() => {
        bindViralLoopsUser();
    });

    return (
        <>
            <div className="App">
                <img src={logo} alt="" />
                <h1> The Company Name </h1>

                <div className="card">
                    <ViralLoopsWidget ucid={VIRAL_LOOPS_CAMPAIGN_ID} />

                    {vlUser && (
                        <div>
                            <h2>
                                You're logged in as
                                <span> {vlUser.email} </span>
                            </h2>
                            <p> Invite your friends! (You currently have {vlUser.referralCount} referrals) </p>
                            <button onClick={() => logout()}> Logout </button>
                        </div>
                    )}
                </div>
            </div>
        </>
    );
}