Skip to content

AccessTime Widget

A React package that provides a plug-and-play subscription button and card, making it easy to integrate AccessTime subscriptions into your app.

Installation

npm install @accesstimeio/accesstime-widget wagmi @tanstack/react-query

Features

  • Provides subscription UI components.
  • No need to manually write contract calls.
  • Fully customizable via props and styles.

This package simplifies subscription integration for React applications.

Setup

Since this package relies on Wagmi, you must wrap your app in a WagmiConfig provider:

providers.tsx
import React, { useState } from "react";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { Config, WagmiProvider } from "wagmi";
import { AccessTimeProvider } from "@accesstimeio/accesstime-widget";
 
import { wagmiConfig } from "./wagmi-config";
 
function Providers({ children }) {
  const [config] = useState<Config>(wagmiConfig);
  const [client] = useState<QueryClient>(new QueryClient());
 
  return (
    <WagmiProvider config={config}>
      <QueryClientProvider client={client}>
        <AccessTimeProvider
          colorMode={"light"}
          wagmiConfig={config}
        >
          {children}
        </AccessTimeProvider>
      </QueryClientProvider>
    </WagmiProvider>
  )
}

Components

SubscriptionCard

import React from "react";
import { SubscriptionCard } from "@accesstimeio/accesstime-widget";
import { useModal } from "connectkit";
import { useSwitchChain } from "wagmi";
 
function Page() {
  const { openProfile } = useModal();
  const { switchChain } = useSwitchChain();
 
  return (
    <SubscriptionCard
      accessTime={"0xAccessTimeAddress"}
      chainId={8453}
      packageId={"0"} // if package module activated, u have to pass id of package
      config={{
        box: {
          type: "backgroundImage",
          backgroundImage: "https://background-image-url",
          icon: undefined,
        },
        button: {
          showTimeInformation: true,
          text: undefined,
        }
      }}
      classNames={{}}
      styles={{}}
      onConnectWallet={() => openProfile()}
      onSwitchNetwork={() => switchChain({ chainId: 8453 })} // switchChain.chainId should be same as chainId
      onSubscription={(transactionHash) => console.log("SubscriptionCard.onSubscription", transactionHash)}
    />
  )
}

SubscriptionButton

import React from "react";
import { SubscriptionButton } from "@accesstimeio/accesstime-widget";
import { useModal } from "connectkit";
import { useSwitchChain } from "wagmi";
 
function Page() {
  const { openProfile } = useModal();
  const { switchChain } = useSwitchChain();
 
  return (
    <SubscriptionButton
      accessTime={"0xAccessTimeAddress"}
      chainId={8453}
      packageId={"0"} // if package module activated, u have to pass id of package
      config={{
        showTimeInformation: true,
        text: undefined,
      }}
      onConnectWallet={() => openProfile()}
      onSwitchNetwork={() => switchChain({ chainId: 8453 })} // switchChain.chainId should be same as chainId
      onSubscription={(transactionHash) => console.log("SubscriptionButton.onSubscription", transactionHash)}
      onTimeAmount={(timeAmount) => console.log("SubscriptionButton.onTimeAmount", timeAmount)}
    />
  )
}

Hooks

useAccessTime

import React from "react";
import { useAccessTime } from "@accesstimeio/accesstime-widget";
 
function Page() {
  const {
    loading,
    loadingDetails,
    error,
    errorDetails,
    walletConnection,
    walletConnectionDetails,
    contractDetails,
    contractAPIDetails,
    subscribe,
    subscribePackage
  } = useAccessTime(
    8453, // blockchain network id
    "0xAccessTimeAddress",
  );
}