Qwestive web3 referral
  • OVERVIEW
    • 👋Introduction
  • Setup referral campaign
    • 💻Quick Start
    • Developers: Getting started
    • Implement Tracking
      • Client side Tracking
        • React example
        • Adding welcome popup card
      • Server side Tracking
    • Implement Embedded UI
      • React Example
      • NextJS Example
    • Admin API
  • 💼Use Case
  • 🚀Launch preparation
  • 🤖Bot and Fraud Detection
Powered by GitBook
On this page
  1. Setup referral campaign
  2. Implement Embedded UI

React Example

This page shows how easily EmbedUI can be added to React App with the help of React Context Provider

import React, {
  createContext,
  useContext,
  ReactNode,
  useEffect,
  useState,
} from 'react';

declare global {
  interface Window {
    EmbedUI: any;
  }
}

type TsetAliasEvent = {
  // Here publicKey denotes user's wallet publicKey
  publicKey: string;
};

interface IQwestiveEmbedUIContext {
  isLoading: boolean;
  setAlias?: ({ publicKey }: TsetAliasEvent) => void;
  openPopup?: () => void;
  closePopup?: () => void;
  logout?: () => void;
}

const SDKContext = createContext<IQwestiveEmbedUIContext | null>(null);
/*
  Note: Please update below variables with actual values that are
  available in your project settings page
  
  API KEY refers to the public api key that needs to be used from
  the client-side code and please try to avoid using the secret api
  key from the project settings, which is supposed to be used server-side only.
*/
const QWESTIVE_REFERRAL_PROJECT_ID = "YOUR_PROJECT_ID";
const QWESTIVE_REFERRAL_API_KEY = "YOUR_API_KEY";

function useQwestiveEmbedUIProvider(): IQwestiveEmbedUIContext {
  const [qwestiveMethods, setQwestiveMethods] =
    useState<IQwestiveEmbedUIContext>({
      isLoading: true,
    });  
  
  useEffect(() => {
    if (window.EmbedUI.isInitialized) return;

    const loadEmbedUIMethods = () => {
      try {
        const apiMethods = window?.EmbedUI?.init({
          apiKey: QWESTIVE_REFERRAL_API_KEY,
          projectId: QWESTIVE_REFERRAL_PROJECT_ID,
        });
        setQwestiveMethods({ ...apiMethods, isLoading: false });
        window.EmbedUI.isInitialized = true;
      } catch (e) {
        console.error(
          'Error occurred while loading QwestiveEmbedUI API methods',
        );
        setQwestiveMethods({ isLoading: false });
      }
    };
    window?.EmbedUI?.loadEmbedUI(() => {
      loadEmbedUIMethods();
    });
  }, []);

  return {
    isLoading: qwestiveMethods?.isLoading,
    setAlias: ({ publicKey }: { publicKey: string }) =>
        qwestiveMethods?.setAlias?.({ publicKey }),
    openPopup: qwestiveMethods?.openPopup,
    closePopup: qwestiveMethods?.closePopup,
    logout: qwestiveMethods?.logout,
  };
}

export function QwestiveEmbedUIContextProvider({
  children,
}: {
  children: ReactNode;
}): JSX.Element {
  const scriptContext = useQwestiveEmbedUIProvider();
  return (
    <SDKContext.Provider value={scriptContext}>{children}</SDKContext.Provider>
  );
}

export function useEmbedUISDK(): IQwestiveEmbedUIContext {
  const context = useContext(SDKContext);
  if (!context)
    throw new Error(
      'useEmbedUISDK must be called from within the corresponding ContextProvider'
    );
  return context;
}
PreviousImplement Embedded UINextNextJS Example

Last updated 2 years ago