Payment Widget
requestnetwork/payment-widgetFreeComponent
A wallet-connected payment widget for Request Network using pure wagmi
Install it
npx shadcn@latest add https://ui.request.network/r/payment-widget.jsonSource
1"use client";23import { type PropsWithChildren, useState } from "react";4import { Button } from "@/components/ui/button";5import { ConnectionHandler } from "./components/connection-handler";6import { Web3Provider } from "./context/web3-context";7import { PaymentModal } from "./components/payment-modal";8import { PaymentWidgetProvider } from "./context/payment-widget-context/payment-widget-provider";9import type { PaymentWidgetProps } from "./payment-widget.types";10import { ICONS } from "./constants";11import { usePaymentWidgetContext } from "./context/payment-widget-context/use-payment-widget-context";1213function PaymentWidgetInner({ children }: PropsWithChildren) {14 const [isModalOpen, setIsModalOpen] = useState(false);15 const handleModalOpenChange = (open: boolean) => {16 setIsModalOpen(open);17 };1819 const {20 walletAccount,21 paymentConfig: { rnApiClientId, supportedCurrencies },22 } = usePaymentWidgetContext();2324 let isButtonDisabled = false;2526 if (!rnApiClientId || rnApiClientId === "") {27 console.error("PaymentWidget: rnApiClientId is required in paymentConfig");2829 isButtonDisabled = true;30 }3132 if (supportedCurrencies.length === 0) {33 console.error(34 "PaymentWidget: supportedCurrencies is required in paymentConfig",35 );3637 isButtonDisabled = true;38 }3940 return (41 <div className="inline-flex flex-col items-center">42 <Button43 disabled={isButtonDisabled}44 onClick={() => {45 if (isButtonDisabled) return;46 setIsModalOpen(true);47 }}48 variant="ghost"49 className="p-0 h-auto bg-transparent hover:bg-transparent"50 >51 {children || "Pay with crypto"}52 </Button>5354 <div className="flex items-center gap-1 mt-2 text-xs text-muted-foreground">55 {/** biome-ignore lint/performance/noImgElement: This is a ShadCN library, we can't enforce next syntax on everybody */}56 <img57 src={ICONS.requestNetwork}58 alt="Request Network"59 width={10}60 height={10}61 className="flex-shrink-0"62 />63 <span>Powered by Request Network</span>64 </div>6566 {walletAccount !== undefined ? (67 <PaymentModal68 isOpen={isModalOpen}69 handleModalOpenChange={handleModalOpenChange}70 />71 ) : (72 <ConnectionHandler73 isOpen={isModalOpen}74 handleModalOpenChange={handleModalOpenChange}75 paymentModal={76 <PaymentModal77// … truncated
What it pulls in
npm packages
Other registry items
