Add social login customization in ConnectWallet playground (#1966)
* Add social login methods in playground * add PAPER_DEV
This commit is contained in:
@@ -27,11 +27,12 @@ import {
|
||||
useSetIsNetworkConfigModalOpen,
|
||||
} from "hooks/networkConfigModal";
|
||||
import { del, get, set } from "idb-keyval";
|
||||
import React, { useMemo, useState } from "react";
|
||||
import React, { useEffect, useMemo, useState } from "react";
|
||||
import { Heading } from "tw-components";
|
||||
import { ComponentWithChildren } from "types/component-with-children";
|
||||
import { bigNumberReplacer } from "utils/bignumber";
|
||||
import { isBrowser } from "utils/isBrowser";
|
||||
import { isProd } from "constants/rpc";
|
||||
|
||||
const __CACHE_BUSTER = "3.14.40-nightly-1e6f9dcc-20230831023648";
|
||||
|
||||
@@ -106,6 +107,18 @@ export const AppLayout: ComponentWithChildren<AppLayoutProps> = (props) => {
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
if (!isProd) {
|
||||
console.debug("IS_PAPER_DEV");
|
||||
localStorage.setItem("IS_PAPER_DEV", "true");
|
||||
localStorage.setItem(
|
||||
"PAPER_DEV_URL",
|
||||
"http://embedded-wallet.thirdweb-dev.com",
|
||||
);
|
||||
}
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<PersistQueryClientProvider
|
||||
client={queryClient}
|
||||
|
||||
@@ -29,7 +29,11 @@ import estree from "prettier/plugins/estree";
|
||||
import { ClientOnly } from "components/ClientOnly/ClientOnly";
|
||||
import { walletInfoRecord, WalletId } from "./walletInfoRecord";
|
||||
import { getCode } from "./getCode";
|
||||
import { WalletButton } from "./WalletButton";
|
||||
import {
|
||||
RecommendedIconButton,
|
||||
SocialButton,
|
||||
WalletButton,
|
||||
} from "./WalletButton";
|
||||
import {
|
||||
ConnectModalInlinePreview,
|
||||
WelcomeScreen,
|
||||
@@ -97,6 +101,8 @@ export const ConnectWalletPlayground: React.FC<{
|
||||
smartWalletOptions,
|
||||
setSmartWalletOptions,
|
||||
supportedWallets,
|
||||
socialOptions,
|
||||
setSocialOptions,
|
||||
} = usePlaygroundWallets({
|
||||
MetaMask: true,
|
||||
Coinbase: "recommended",
|
||||
@@ -118,6 +124,7 @@ export const ConnectWalletPlayground: React.FC<{
|
||||
return `[${walletIds
|
||||
.map((walletId) => {
|
||||
const recommended = walletInfoRecord[walletId].component.recommended;
|
||||
let walletCode = walletInfoRecord[walletId].code(recommended);
|
||||
|
||||
if (walletId === "Safe") {
|
||||
const personalWalletIds = walletIds.filter((w) => w !== "Safe");
|
||||
@@ -134,7 +141,27 @@ export const ConnectWalletPlayground: React.FC<{
|
||||
})`;
|
||||
}
|
||||
|
||||
const walletCode = walletInfoRecord[walletId].code(recommended);
|
||||
if (walletId === "Email Wallet") {
|
||||
if (!recommended && !socialOptions.length) {
|
||||
walletCode = `embeddedWallet()`;
|
||||
} else {
|
||||
const options: Record<string, any> = {};
|
||||
if (recommended) {
|
||||
options.recommended = true;
|
||||
}
|
||||
if (socialOptions.length) {
|
||||
options.auth = {
|
||||
options: socialOptions,
|
||||
};
|
||||
}
|
||||
|
||||
walletCode = `embeddedWallet(${JSON.stringify(
|
||||
options,
|
||||
null,
|
||||
2,
|
||||
)})`;
|
||||
}
|
||||
}
|
||||
|
||||
return smartWalletOptions.enabled
|
||||
? `smartWallet(${walletCode}, smartWalletOptions)`
|
||||
@@ -208,6 +235,7 @@ export const ConnectWalletPlayground: React.FC<{
|
||||
tosUrl,
|
||||
privacyPolicyUrl,
|
||||
locale,
|
||||
socialOptions,
|
||||
]);
|
||||
|
||||
const welcomeScreenContent = (
|
||||
@@ -353,48 +381,98 @@ export const ConnectWalletPlayground: React.FC<{
|
||||
</Flex>
|
||||
);
|
||||
|
||||
const socialLoginMethods = [
|
||||
{
|
||||
name: "Sign in with Email",
|
||||
key: "email",
|
||||
},
|
||||
{
|
||||
name: "Sign in with Google",
|
||||
key: "google",
|
||||
},
|
||||
{
|
||||
name: "Sign in with Apple",
|
||||
key: "apple",
|
||||
},
|
||||
{
|
||||
name: "Sign in with Facebook",
|
||||
key: "facebook",
|
||||
},
|
||||
] as const;
|
||||
|
||||
const socialLogins = (
|
||||
<>
|
||||
<Heading size="label.md" color="heading">
|
||||
Email & Social Logins
|
||||
</Heading>
|
||||
<Spacer height={3} />
|
||||
<Grid gap={2} flexDir="column" templateColumns="1fr">
|
||||
{/* Email Wallet */}
|
||||
<WalletButton
|
||||
name="Embedded Wallet"
|
||||
subtitle="Email and Google sign in"
|
||||
icon={walletInfoRecord["Email Wallet"].component.meta.iconURL}
|
||||
onRecommendedClick={() => {
|
||||
const current = walletSelection["Email Wallet"];
|
||||
const newState = current === "recommended" ? true : "recommended";
|
||||
<Flex justifyContent={"space-between"}>
|
||||
<Flex gap={3} alignItems="center">
|
||||
<Heading size="label.md" color="heading">
|
||||
Email & Social Logins
|
||||
</Heading>
|
||||
<RecommendedIconButton
|
||||
onClick={() => {
|
||||
const current = walletSelection["Email Wallet"];
|
||||
const newState = current === "recommended" ? true : "recommended";
|
||||
|
||||
if (newState === "recommended") {
|
||||
trackCustomize("recommend-wallet", {
|
||||
walletName: "Embedded Wallet",
|
||||
if (newState === "recommended") {
|
||||
trackCustomize("recommend-wallet", {
|
||||
walletName: "Embedded Wallet",
|
||||
});
|
||||
}
|
||||
|
||||
setWalletSelection({
|
||||
...walletSelection,
|
||||
"Email Wallet":
|
||||
current === "recommended" ? true : "recommended",
|
||||
});
|
||||
}
|
||||
}}
|
||||
isRecommended={walletSelection["Email Wallet"] === "recommended"}
|
||||
/>
|
||||
</Flex>
|
||||
|
||||
setWalletSelection({
|
||||
...walletSelection,
|
||||
"Email Wallet": current === "recommended" ? true : "recommended",
|
||||
});
|
||||
}}
|
||||
recommended={walletSelection["Email Wallet"] === "recommended"}
|
||||
<Switch
|
||||
size="lg"
|
||||
isChecked={!!walletSelection["Email Wallet"]}
|
||||
onSelect={() => {
|
||||
const selected = !walletSelection["Email Wallet"];
|
||||
|
||||
onChange={() => {
|
||||
trackCustomize("wallet", {
|
||||
walletName: "Embedded Wallet",
|
||||
});
|
||||
|
||||
setWalletSelection({
|
||||
...walletSelection,
|
||||
"Email Wallet": selected,
|
||||
"Email Wallet": !walletSelection["Email Wallet"],
|
||||
});
|
||||
}}
|
||||
/>
|
||||
</Flex>
|
||||
|
||||
<Spacer height={3} />
|
||||
<Grid
|
||||
gap={2}
|
||||
flexDir="column"
|
||||
templateColumns="1fr"
|
||||
opacity={walletSelection["Email Wallet"] ? 1 : 0.4}
|
||||
pointerEvents={walletSelection["Email Wallet"] ? "auto" : "none"}
|
||||
>
|
||||
{socialLoginMethods.map((x) => {
|
||||
return (
|
||||
<SocialButton
|
||||
key={x.key}
|
||||
icon={x.key}
|
||||
name={x.name}
|
||||
isSelected={socialOptions.includes(x.key)}
|
||||
onClick={() => {
|
||||
trackCustomize("socialLogin", {
|
||||
option: x.key,
|
||||
});
|
||||
|
||||
// do not allow to unselect all
|
||||
if (socialOptions.length === 1 && socialOptions[0] === x.key) {
|
||||
return;
|
||||
}
|
||||
setSocialOptions(addOrRemoveFromList(socialOptions, x.key));
|
||||
}}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
</Grid>
|
||||
</>
|
||||
);
|
||||
@@ -642,7 +720,10 @@ export const ConnectWalletPlayground: React.FC<{
|
||||
{eoalWallets}
|
||||
<Spacer height={8} />
|
||||
{socialLogins}
|
||||
<Spacer height={10} />
|
||||
|
||||
<Spacer height={5} />
|
||||
<Box borderTop="1px solid" borderColor="borderColor" />
|
||||
<Spacer height={5} />
|
||||
|
||||
{/* Guest Mode */}
|
||||
<SwitchFormItem
|
||||
@@ -1184,3 +1265,10 @@ function CustomTab(props: {
|
||||
</Button>
|
||||
);
|
||||
}
|
||||
|
||||
function addOrRemoveFromList<T>(list: T[], item: T) {
|
||||
if (list.includes(item)) {
|
||||
return list.filter((x) => x !== item);
|
||||
}
|
||||
return [...list, item];
|
||||
}
|
||||
|
||||
@@ -68,27 +68,105 @@ export function WalletButton(props: {
|
||||
</Flex>
|
||||
</Flex>
|
||||
|
||||
<Tooltip
|
||||
hasArrow
|
||||
label={props.recommended ? "Recommended" : "Not Recommended"}
|
||||
placement="top"
|
||||
>
|
||||
<Flex
|
||||
justifyContent="center"
|
||||
alignItems="center"
|
||||
onClick={props.onRecommendedClick}
|
||||
cursor="pointer"
|
||||
role="button"
|
||||
aria-label="Toggle Recommended"
|
||||
>
|
||||
<Icon
|
||||
as={props.recommended ? AiFillStar : AiOutlineStar}
|
||||
w={4}
|
||||
h={4}
|
||||
color={props.recommended ? "blue.500" : "faded"}
|
||||
/>
|
||||
</Flex>
|
||||
</Tooltip>
|
||||
<RecommendedIconButton
|
||||
onClick={props.onRecommendedClick}
|
||||
isRecommended={props.recommended}
|
||||
/>
|
||||
</Flex>
|
||||
);
|
||||
}
|
||||
|
||||
export function RecommendedIconButton(props: {
|
||||
isRecommended?: boolean;
|
||||
onClick?: () => void;
|
||||
}) {
|
||||
return (
|
||||
<Tooltip
|
||||
hasArrow
|
||||
label={props.isRecommended ? "Recommended" : "Not Recommended"}
|
||||
placement="top"
|
||||
>
|
||||
<Flex
|
||||
justifyContent="center"
|
||||
alignItems="center"
|
||||
onClick={props.onClick}
|
||||
cursor="pointer"
|
||||
role="button"
|
||||
aria-label="Toggle Recommended"
|
||||
>
|
||||
<Icon
|
||||
as={props.isRecommended ? AiFillStar : AiOutlineStar}
|
||||
w={4}
|
||||
h={4}
|
||||
color={props.isRecommended ? "blue.500" : "faded"}
|
||||
/>
|
||||
</Flex>
|
||||
</Tooltip>
|
||||
);
|
||||
}
|
||||
|
||||
export function SocialButton(props: {
|
||||
name: string;
|
||||
icon: "email" | "google" | "facebook" | "apple";
|
||||
onClick: () => void;
|
||||
isSelected: boolean;
|
||||
}) {
|
||||
return (
|
||||
<Flex
|
||||
borderRadius="lg"
|
||||
border="1px solid transparent"
|
||||
bg={props.isSelected ? "hsl(215.88deg 100% 60% / 15%)" : "inputBg"}
|
||||
_hover={
|
||||
!props.isSelected
|
||||
? {
|
||||
bg: "inputBg",
|
||||
borderColor: "borderColor",
|
||||
}
|
||||
: {
|
||||
borderColor: "blue.500",
|
||||
}
|
||||
}
|
||||
transition="background 100ms ease, border-color 100ms ease"
|
||||
alignItems="center"
|
||||
userSelect={"none"}
|
||||
pr={1}
|
||||
gap={1}
|
||||
>
|
||||
<Flex
|
||||
gap={3}
|
||||
alignItems="center"
|
||||
flexGrow={1}
|
||||
p={2}
|
||||
onClick={props.onClick}
|
||||
cursor="pointer"
|
||||
>
|
||||
<Image
|
||||
width={7}
|
||||
height={7}
|
||||
alt={props.name}
|
||||
src={socialIconMap[props.icon]}
|
||||
/>
|
||||
|
||||
<Text fontWeight={500} fontSize={14} color={"heading"}>
|
||||
{props.name}
|
||||
</Text>
|
||||
</Flex>
|
||||
</Flex>
|
||||
);
|
||||
}
|
||||
|
||||
export const googleIconUri =
|
||||
"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI3MDUuNiIgaGVpZ2h0PSI3MjAiIHZpZXdCb3g9IjAgMCAxODYuNjkgMTkwLjUiIHhtbG5zOnY9Imh0dHBzOi8vdmVjdGEuaW8vbmFubyI+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTE4NC41ODMgNzY1LjE3MSkiPjxwYXRoIGNsaXAtcGF0aD0ibm9uZSIgbWFzaz0ibm9uZSIgZD0iTS0xMDg5LjMzMy02ODcuMjM5djM2Ljg4OGg1MS4yNjJjLTIuMjUxIDExLjg2My05LjAwNiAyMS45MDgtMTkuMTM3IDI4LjY2MmwzMC45MTMgMjMuOTg2YzE4LjAxMS0xNi42MjUgMjguNDAyLTQxLjA0NCAyOC40MDItNzAuMDUyIDAtNi43NTQtLjYwNi0xMy4yNDktMS43MzItMTkuNDgzeiIgZmlsbD0iIzQyODVmNCIvPjxwYXRoIGNsaXAtcGF0aD0ibm9uZSIgbWFzaz0ibm9uZSIgZD0iTS0xMTQyLjcxNC02NTEuNzkxbC02Ljk3MiA1LjMzNy0yNC42NzkgMTkuMjIzaDBjMTUuNjczIDMxLjA4NiA0Ny43OTYgNTIuNTYxIDg1LjAzIDUyLjU2MSAyNS43MTcgMCA0Ny4yNzgtOC40ODYgNjMuMDM4LTIzLjAzM2wtMzAuOTEzLTIzLjk4NmMtOC40ODYgNS43MTUtMTkuMzEgOS4xNzktMzIuMTI1IDkuMTc5LTI0Ljc2NSAwLTQ1LjgwNi0xNi43MTItNTMuMzQtMzkuMjI2eiIgZmlsbD0iIzM0YTg1MyIvPjxwYXRoIGNsaXAtcGF0aD0ibm9uZSIgbWFzaz0ibm9uZSIgZD0iTS0xMTc0LjM2NS03MTIuNjFjLTYuNDk0IDEyLjgxNS0xMC4yMTcgMjcuMjc2LTEwLjIxNyA0Mi42ODlzMy43MjMgMjkuODc0IDEwLjIxNyA0Mi42ODljMCAuMDg2IDMxLjY5My0yNC41OTIgMzEuNjkzLTI0LjU5Mi0xLjkwNS01LjcxNS0zLjAzMS0xMS43NzYtMy4wMzEtMTguMDk4czEuMTI2LTEyLjM4MyAzLjAzMS0xOC4wOTh6IiBmaWxsPSIjZmJiYzA1Ii8+PHBhdGggZD0iTS0xMDg5LjMzMy03MjcuMjQ0YzE0LjAyOCAwIDI2LjQ5NyA0Ljg0OSAzNi40NTUgMTQuMjAxbDI3LjI3Ni0yNy4yNzZjLTE2LjUzOS0xNS40MTMtMzguMDEzLTI0Ljg1Mi02My43MzEtMjQuODUyLTM3LjIzNCAwLTY5LjM1OSAyMS4zODgtODUuMDMyIDUyLjU2MWwzMS42OTIgMjQuNTkyYzcuNTMzLTIyLjUxNCAyOC41NzUtMzkuMjI2IDUzLjM0LTM5LjIyNnoiIGZpbGw9IiNlYTQzMzUiIGNsaXAtcGF0aD0ibm9uZSIgbWFzaz0ibm9uZSIvPjwvZz48L3N2Zz4=";
|
||||
export const facebookIconUri =
|
||||
"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGRhdGEtbmFtZT0iRWJlbmUgMSIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgaWQ9ImZhY2Vib29rLWxvZ28tMjAxOSI+PHBhdGggZmlsbD0iIzE4NzdmMiIgZD0iTTEwMjQsNTEyQzEwMjQsMjI5LjIzMDE2LDc5NC43Njk3OCwwLDUxMiwwUzAsMjI5LjIzMDE2LDAsNTEyYzAsMjU1LjU1NCwxODcuMjMxLDQ2Ny4zNzAxMiw0MzIsNTA1Ljc3Nzc3VjY2MEgzMDJWNTEySDQzMlYzOTkuMkM0MzIsMjcwLjg3OTgyLDUwOC40Mzg1NCwyMDAsNjI1LjM4OTIyLDIwMCw2ODEuNDA3NjUsMjAwLDc0MCwyMTAsNzQwLDIxMFYzMzZINjc1LjQzNzEzQzYxMS44MzUwOCwzMzYsNTkyLDM3NS40NjY2Nyw1OTIsNDE1Ljk1NzI4VjUxMkg3MzRMNzExLjMsNjYwSDU5MnYzNTcuNzc3NzdDODM2Ljc2OSw5NzkuMzcwMTIsMTAyNCw3NjcuNTU0LDEwMjQsNTEyWiI+PC9wYXRoPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik03MTEuMyw2NjAsNzM0LDUxMkg1OTJWNDE1Ljk1NzI4QzU5MiwzNzUuNDY2NjcsNjExLjgzNTA4LDMzNiw2NzUuNDM3MTMsMzM2SDc0MFYyMTBzLTU4LjU5MjM1LTEwLTExNC42MTA3OC0xMEM1MDguNDM4NTQsMjAwLDQzMiwyNzAuODc5ODIsNDMyLDM5OS4yVjUxMkgzMDJWNjYwSDQzMnYzNTcuNzc3NzdhNTE3LjM5NjE5LDUxNy4zOTYxOSwwLDAsMCwxNjAsMFY2NjBaIj48L3BhdGg+PC9zdmc+";
|
||||
export const appleIconUri =
|
||||
"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDM4IiBoZWlnaHQ9IjI1MDAiIHZpZXdCb3g9IjAgMCA0OTYuMjU1IDYwOC43MjgiIGlkPSJhcHBsZSI+PHBhdGggZmlsbD0iIzk5OSIgZD0iTTI3My44MSA1Mi45NzNDMzEzLjgwNi4yNTcgMzY5LjQxIDAgMzY5LjQxIDBzOC4yNzEgNDkuNTYyLTMxLjQ2MyA5Ny4zMDZjLTQyLjQyNiA1MC45OC05MC42NDkgNDIuNjM4LTkwLjY0OSA0Mi42MzhzLTkuMDU1LTQwLjA5NCAyNi41MTItODYuOTcxek0yNTIuMzg1IDE3NC42NjJjMjAuNTc2IDAgNTguNzY0LTI4LjI4NCAxMDguNDcxLTI4LjI4NCA4NS41NjIgMCAxMTkuMjIyIDYwLjg4MyAxMTkuMjIyIDYwLjg4M3MtNjUuODMzIDMzLjY1OS02NS44MzMgMTE1LjMzMWMwIDkyLjEzMyA4Mi4wMSAxMjMuODg1IDgyLjAxIDEyMy44ODVzLTU3LjMyOCAxNjEuMzU3LTEzNC43NjIgMTYxLjM1N2MtMzUuNTY1IDAtNjMuMjE1LTIzLjk2Ny0xMDAuNjg4LTIzLjk2Ny0zOC4xODggMC03Ni4wODQgMjQuODYxLTEwMC43NjYgMjQuODYxQzg5LjMzIDYwOC43MyAwIDQ1NS42NjYgMCAzMzIuNjI4YzAtMTIxLjA1MiA3NS42MTItMTg0LjU1NCAxNDYuNTMzLTE4NC41NTQgNDYuMTA1IDAgODEuODgzIDI2LjU4OCAxMDUuODUyIDI2LjU4OHoiPjwvcGF0aD48L3N2Zz4=";
|
||||
export const emailIcon =
|
||||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzM1ODlfODY0OSkiPgo8cmVjdCB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHJ4PSI4IiBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXJfMzU4OV84NjQ5KSIvPgo8cmVjdCB4PSItMSIgeT0iLTEiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIgcng9IjkuOCIgZmlsbD0idXJsKCNwYWludDFfbGluZWFyXzM1ODlfODY0OSkiLz4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAxXzM1ODlfODY0OSkiPgo8cGF0aCBkPSJNMjQgMTQuMjVDMTguNjE3MiAxNC4yNSAxNC4yNSAxOC42MTcyIDE0LjI1IDI0QzE0LjI1IDI5LjM4MjggMTguNjE3MiAzMy43NSAyNCAzMy43NUMyNC44OTg4IDMzLjc1IDI1LjYyNSAzNC40NzYyIDI1LjYyNSAzNS4zNzVDMjUuNjI1IDM2LjI3MzggMjQuODk4OCAzNyAyNCAzN0MxNi44MTk1IDM3IDExIDMxLjE4MDUgMTEgMjRDMTEgMTYuODE5NSAxNi44MTk1IDExIDI0IDExQzMxLjE4MDUgMTEgMzcgMTYuODE5NSAzNyAyNFYyNS42MjVDMzcgMjguMzE2NCAzNC44MTY0IDMwLjUgMzIuMTI1IDMwLjVDMzAuNjM3MSAzMC41IDI5LjMwMTYgMjkuODI5NyAyOC40MDc4IDI4Ljc3ODVDMjcuMjUgMjkuODQ0OSAyNS43MDEyIDMwLjUgMjQgMzAuNUMyMC40MDk4IDMwLjUgMTcuNSAyNy41OTAyIDE3LjUgMjRDMTcuNSAyMC40MDk4IDIwLjQwOTggMTcuNSAyNCAxNy41QzI1LjQxNjggMTcuNSAyNi43MjcgMTcuOTUyIDI3Ljc5MzQgMTguNzIzOEMyOC4wODI4IDE4LjQ2OTkgMjguNDU4NiAxOC4zMTI1IDI4Ljg3NSAxOC4zMTI1QzI5Ljc3MzggMTguMzEyNSAzMC41IDE5LjAzODcgMzAuNSAxOS45Mzc1VjI1LjYyNUMzMC41IDI2LjUyMzggMzEuMjI2MiAyNy4yNSAzMi4xMjUgMjcuMjVDMzMuMDIzOCAyNy4yNSAzMy43NSAyNi41MjM4IDMzLjc1IDI1LjYyNVYyNEMzMy43NSAxOC42MTcyIDI5LjM4MjggMTQuMjUgMjQgMTQuMjVaTTI3LjI1IDI0QzI3LjI1IDIzLjEzOCAyNi45MDc2IDIyLjMxMTQgMjYuMjk4MSAyMS43MDE5QzI1LjY4ODYgMjEuMDkyNCAyNC44NjIgMjAuNzUgMjQgMjAuNzVDMjMuMTM4IDIwLjc1IDIyLjMxMTQgMjEuMDkyNCAyMS43MDE5IDIxLjcwMTlDMjEuMDkyNCAyMi4zMTE0IDIwLjc1IDIzLjEzOCAyMC43NSAyNEMyMC43NSAyNC44NjIgMjEuMDkyNCAyNS42ODg2IDIxLjcwMTkgMjYuMjk4MUMyMi4zMTE0IDI2LjkwNzYgMjMuMTM4IDI3LjI1IDI0IDI3LjI1QzI0Ljg2MiAyNy4yNSAyNS42ODg2IDI2LjkwNzYgMjYuMjk4MSAyNi4yOTgxQzI2LjkwNzYgMjUuNjg4NiAyNy4yNSAyNC44NjIgMjcuMjUgMjRaIiBmaWxsPSJ3aGl0ZSIvPgo8L2c+CjwvZz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8zNTg5Xzg2NDkiIHgxPSIyNS41IiB5MT0iLTYuMjk1NzJlLTA2IiB4Mj0iMzAuMjAxNiIgeTI9IjQ3LjUzNSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjODM1OEJBIi8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzdCMUNGNyIvPgo8L2xpbmVhckdyYWRpZW50Pgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MV9saW5lYXJfMzU4OV84NjQ5IiB4MT0iMjUuNTYyNSIgeTE9Ii0xLjAwMDAxIiB4Mj0iMzAuNDYiIHkyPSI0OC41MTU2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiM4MzU4QkEiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjN0IxQ0Y3Ii8+CjwvbGluZWFyR3JhZGllbnQ+CjxjbGlwUGF0aCBpZD0iY2xpcDBfMzU4OV84NjQ5Ij4KPHJlY3Qgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4IiByeD0iOCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPGNsaXBQYXRoIGlkPSJjbGlwMV8zNTg5Xzg2NDkiPgo8cmVjdCB3aWR0aD0iMjYiIGhlaWdodD0iMjYiIGZpbGw9IndoaXRlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMSAxMSkiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K";
|
||||
|
||||
const socialIconMap = {
|
||||
email: emailIcon,
|
||||
google: googleIconUri,
|
||||
facebook: facebookIconUri,
|
||||
apple: appleIconUri,
|
||||
};
|
||||
|
||||
@@ -1,10 +1,17 @@
|
||||
import { WalletConfig, safeWallet, smartWallet } from "@thirdweb-dev/react";
|
||||
import {
|
||||
WalletConfig,
|
||||
embeddedWallet,
|
||||
safeWallet,
|
||||
smartWallet,
|
||||
} from "@thirdweb-dev/react";
|
||||
import { useState } from "react";
|
||||
import { walletInfoRecord, WalletId } from "./walletInfoRecord";
|
||||
import { isProd } from "constants/rpc";
|
||||
|
||||
type WalletSelection = Record<WalletId, boolean | "recommended">;
|
||||
|
||||
type AuthOption = "google" | "email" | "facebook" | "apple";
|
||||
|
||||
export function usePlaygroundWallets(defaultWalletSelection: WalletSelection) {
|
||||
const [smartWalletOptions, setSmartWalletOptions] = useState({
|
||||
factoryAddress: "0x2e9f5A20c8A7270085F4ed716d58e72dFF8D098f",
|
||||
@@ -12,6 +19,13 @@ export function usePlaygroundWallets(defaultWalletSelection: WalletSelection) {
|
||||
gasless: true,
|
||||
});
|
||||
|
||||
const [socialOptions, setSocialOptions] = useState<AuthOption[]>([
|
||||
"email",
|
||||
"google",
|
||||
"apple",
|
||||
"facebook",
|
||||
]);
|
||||
|
||||
const [walletSelection, setWalletSelection] = useState<
|
||||
Record<WalletId, boolean | "recommended">
|
||||
>(defaultWalletSelection);
|
||||
@@ -19,8 +33,18 @@ export function usePlaygroundWallets(defaultWalletSelection: WalletSelection) {
|
||||
const enabledWallets = Object.entries(walletSelection)
|
||||
.filter((x) => x[1])
|
||||
.map((x) => x[0] as WalletId);
|
||||
|
||||
const supportedWallets: WalletConfig<any>[] = enabledWallets.map(
|
||||
(walletId) => {
|
||||
if (walletId === "Email Wallet") {
|
||||
walletInfoRecord[walletId].component = embeddedWallet({
|
||||
recommended: !!walletSelection[walletId],
|
||||
auth: {
|
||||
options: socialOptions,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// set recommended
|
||||
walletInfoRecord[walletId].component.recommended =
|
||||
walletSelection[walletId] === "recommended";
|
||||
@@ -61,5 +85,7 @@ export function usePlaygroundWallets(defaultWalletSelection: WalletSelection) {
|
||||
supportedWallets,
|
||||
smartWalletOptions,
|
||||
setSmartWalletOptions,
|
||||
socialOptions,
|
||||
setSocialOptions,
|
||||
};
|
||||
}
|
||||
|
||||
+2
-2
@@ -31,9 +31,9 @@
|
||||
"@tanstack/react-query": "^4.35.7",
|
||||
"@tanstack/react-query-persist-client": "^4.35.7",
|
||||
"@tanstack/react-table": "^8.10.7",
|
||||
"@thirdweb-dev/auth": "^4.1.6",
|
||||
"@thirdweb-dev/auth": "0.0.0-dev-8b6ffeb-20231116101855",
|
||||
"@thirdweb-dev/chains": "^0.1.58",
|
||||
"@thirdweb-dev/react": "4.1.5-nightly-9f993dcc-20231116010115",
|
||||
"@thirdweb-dev/react": "0.0.0-dev-8b6ffeb-20231116101855",
|
||||
"@thirdweb-dev/sdk": "^4.0.13",
|
||||
"@thirdweb-dev/service-utils": "^0.4.8",
|
||||
"@vercel/og": "^0.5.20",
|
||||
|
||||
@@ -3628,25 +3628,13 @@
|
||||
resolved "https://registry.yarnpkg.com/@tanstack/table-core/-/table-core-8.10.7.tgz#577e8a635048875de4c9d6d6a3c21d26ff9f9d08"
|
||||
integrity sha512-KQk5OMg5OH6rmbHZxuNROvdI+hKDIUxANaHlV+dPlNN7ED3qYQ/WkpY2qlXww1SIdeMlkIhpN/2L00rof0fXFw==
|
||||
|
||||
"@thirdweb-dev/auth@4.1.7-nightly-9f993dcc-20231116010115":
|
||||
version "4.1.7-nightly-9f993dcc-20231116010115"
|
||||
resolved "https://registry.yarnpkg.com/@thirdweb-dev/auth/-/auth-4.1.7-nightly-9f993dcc-20231116010115.tgz#d16398da1ee8757d3205d07b350c0eb6d8eeccf9"
|
||||
integrity sha512-jTxi23eNRcMZ2awJovqdIbLq5q9kk+w63+bgrWpdPE4xq5LhXR4MKvkUKMcPPf+6v0lg4SlWhpqqgRV+J5l3wA==
|
||||
"@thirdweb-dev/auth@0.0.0-dev-8b6ffeb-20231116101855":
|
||||
version "0.0.0-dev-8b6ffeb-20231116101855"
|
||||
resolved "https://registry.yarnpkg.com/@thirdweb-dev/auth/-/auth-0.0.0-dev-8b6ffeb-20231116101855.tgz#32874a514b90b284138d8450b4b84e1c3a52f2c1"
|
||||
integrity sha512-xHWL63vOBLoYMU7IMOYetVZLVB6SEXd4ajp8D429LBOVJeTbvleAwj4tBHYL9UHagqmN9KEIyqqZswRhZOQpEw==
|
||||
dependencies:
|
||||
"@fastify/cookie" "^9.1.0"
|
||||
"@thirdweb-dev/wallets" "2.1.4-nightly-9f993dcc-20231116010115"
|
||||
cookie "^0.5.0"
|
||||
fastify-type-provider-zod "^1.1.9"
|
||||
uuid "^9.0.1"
|
||||
zod "^3.22.3"
|
||||
|
||||
"@thirdweb-dev/auth@^4.1.6":
|
||||
version "4.1.6"
|
||||
resolved "https://registry.yarnpkg.com/@thirdweb-dev/auth/-/auth-4.1.6.tgz#a9e56b1f72ea1bbf0d229b6e3eac3c2fd0668692"
|
||||
integrity sha512-KUgSlkW3cFNOIjIC1kEFJNOKaIg/CfJPn6XVklNyICdmFKsXgBipqTBu6pQsAxni4d3xD2a4qSXjwuk4gJViYw==
|
||||
dependencies:
|
||||
"@fastify/cookie" "^9.1.0"
|
||||
"@thirdweb-dev/wallets" "2.1.3"
|
||||
"@thirdweb-dev/wallets" "0.0.0-dev-8b6ffeb-20231116101855"
|
||||
cookie "^0.5.0"
|
||||
fastify-type-provider-zod "^1.1.9"
|
||||
uuid "^9.0.1"
|
||||
@@ -3685,25 +3673,25 @@
|
||||
resolved "https://registry.yarnpkg.com/@thirdweb-dev/generated-abis/-/generated-abis-0.0.1.tgz#0d788d6aff0ac08f11e9eeb9ae4c8321845272a8"
|
||||
integrity sha512-vO9/3lSLO8smyyH1QVeYravSTzFwV1nf1C/Im1NBDPdH8//YvcbhtETGGiNfHWpyCvSi0vRYwvf+/7FKdwpDGQ==
|
||||
|
||||
"@thirdweb-dev/react-core@4.1.5-nightly-9f993dcc-20231116010115":
|
||||
version "4.1.5-nightly-9f993dcc-20231116010115"
|
||||
resolved "https://registry.yarnpkg.com/@thirdweb-dev/react-core/-/react-core-4.1.5-nightly-9f993dcc-20231116010115.tgz#73c8121addec67874b10bfe7fd15a0d1aca32250"
|
||||
integrity sha512-V0l5t58bRv4ChVxRG9GTeH1dx2h2MqOqjfg4KfCzZegRm0AuvVJtoLtdaX8N0nQWDdxCc8vQ/j5+7DipCLf41w==
|
||||
"@thirdweb-dev/react-core@0.0.0-dev-8b6ffeb-20231116101855":
|
||||
version "0.0.0-dev-8b6ffeb-20231116101855"
|
||||
resolved "https://registry.yarnpkg.com/@thirdweb-dev/react-core/-/react-core-0.0.0-dev-8b6ffeb-20231116101855.tgz#e5afdc7dde12591e0277a551545348beabab4fb1"
|
||||
integrity sha512-kyK2IwuTOaqBRaMcFTAbx8DjaUCqc/jc4JPdV4FmN/sdAI5hivcVILhT8XX9v8JwF0wjLZFIUHnmIMppAGMitQ==
|
||||
dependencies:
|
||||
"@tanstack/react-query" "^4.33.0"
|
||||
"@thirdweb-dev/auth" "4.1.7-nightly-9f993dcc-20231116010115"
|
||||
"@thirdweb-dev/auth" "0.0.0-dev-8b6ffeb-20231116101855"
|
||||
"@thirdweb-dev/chains" "0.1.58"
|
||||
"@thirdweb-dev/generated-abis" "^0.0.1"
|
||||
"@thirdweb-dev/sdk" "4.0.13"
|
||||
"@thirdweb-dev/storage" "2.0.4"
|
||||
"@thirdweb-dev/wallets" "2.1.4-nightly-9f993dcc-20231116010115"
|
||||
"@thirdweb-dev/wallets" "0.0.0-dev-8b6ffeb-20231116101855"
|
||||
mime "3.0.0"
|
||||
tiny-invariant "^1.2.0"
|
||||
|
||||
"@thirdweb-dev/react@4.1.5-nightly-9f993dcc-20231116010115":
|
||||
version "4.1.5-nightly-9f993dcc-20231116010115"
|
||||
resolved "https://registry.yarnpkg.com/@thirdweb-dev/react/-/react-4.1.5-nightly-9f993dcc-20231116010115.tgz#317324ad7c3133474f326f6b34236ac5b2b6681e"
|
||||
integrity sha512-8TWdvMdlhRZJHpSGJn15C++iakLvBp4TEgOXoqVFUsI56KgVCE5JjDPYtHocwhdZj1HfYaJdI4QtdeEAy8CSFA==
|
||||
"@thirdweb-dev/react@0.0.0-dev-8b6ffeb-20231116101855":
|
||||
version "0.0.0-dev-8b6ffeb-20231116101855"
|
||||
resolved "https://registry.yarnpkg.com/@thirdweb-dev/react/-/react-0.0.0-dev-8b6ffeb-20231116101855.tgz#ef8d98bf3b0699829aa124722e32245eca6f3cd8"
|
||||
integrity sha512-iUcYST8VdxlCg7Lfa+ZU35wIIl2T4ncIBlXGuXEqmpSeO131Ok4Ju3qWwUaqdGZp6gBpChmOHtmmErluI4Ru4w==
|
||||
dependencies:
|
||||
"@emotion/react" "^11.11.1"
|
||||
"@emotion/styled" "^11.11.0"
|
||||
@@ -3718,8 +3706,8 @@
|
||||
"@react-icons/all-files" "^4.1.0"
|
||||
"@tanstack/react-query" "^4.33.0"
|
||||
"@thirdweb-dev/chains" "0.1.58"
|
||||
"@thirdweb-dev/react-core" "4.1.5-nightly-9f993dcc-20231116010115"
|
||||
"@thirdweb-dev/wallets" "2.1.4-nightly-9f993dcc-20231116010115"
|
||||
"@thirdweb-dev/react-core" "0.0.0-dev-8b6ffeb-20231116101855"
|
||||
"@thirdweb-dev/wallets" "0.0.0-dev-8b6ffeb-20231116101855"
|
||||
buffer "^6.0.3"
|
||||
copy-to-clipboard "^3.3.2"
|
||||
detect-browser "^5.3.0"
|
||||
@@ -3766,51 +3754,10 @@
|
||||
form-data "^4.0.0"
|
||||
uuid "^9.0.1"
|
||||
|
||||
"@thirdweb-dev/wallets@2.1.3":
|
||||
version "2.1.3"
|
||||
resolved "https://registry.yarnpkg.com/@thirdweb-dev/wallets/-/wallets-2.1.3.tgz#31b240ee5867ddd2668c38059344a637963a42c8"
|
||||
integrity sha512-peZnRKfy87Q7gWjtg4app5Z/YBf9YfuVQK6Ax9rhv+iCeoRFROqqjtuUF6y7JAHA/5Tp06pcvhA4H1bjJ5/Shg==
|
||||
dependencies:
|
||||
"@account-abstraction/contracts" "^0.5.0"
|
||||
"@account-abstraction/sdk" "^0.5.0"
|
||||
"@account-abstraction/utils" "^0.5.0"
|
||||
"@blocto/sdk" "^0.5.4"
|
||||
"@coinbase/wallet-sdk" "^3.7.1"
|
||||
"@google-cloud/kms" "3.0.1"
|
||||
"@magic-ext/connect" "^6.7.2"
|
||||
"@magic-ext/oauth" "^7.6.2"
|
||||
"@magic-sdk/provider" "^13.6.2"
|
||||
"@metamask/eth-sig-util" "^4.0.0"
|
||||
"@paperxyz/embedded-wallet-service-sdk" "^1.2.5"
|
||||
"@paperxyz/sdk-common-utilities" "^0.1.0"
|
||||
"@safe-global/safe-core-sdk" "^3.3.4"
|
||||
"@safe-global/safe-ethers-adapters" "0.1.0-alpha.17"
|
||||
"@safe-global/safe-ethers-lib" "^1.9.4"
|
||||
"@thirdweb-dev/chains" "0.1.58"
|
||||
"@thirdweb-dev/contracts-js" "1.3.16"
|
||||
"@thirdweb-dev/sdk" "4.0.13"
|
||||
"@walletconnect/core" "^2.9.1"
|
||||
"@walletconnect/ethereum-provider" "^2.9.1"
|
||||
"@walletconnect/jsonrpc-utils" "^1.0.8"
|
||||
"@walletconnect/modal" "^2.6.1"
|
||||
"@walletconnect/types" "^2.9.1"
|
||||
"@walletconnect/utils" "^2.10.2"
|
||||
"@walletconnect/web3wallet" "^1.8.7"
|
||||
asn1.js "5.4.1"
|
||||
bn.js "5.2.0"
|
||||
buffer "^6.0.3"
|
||||
crypto-js "^4.1.1"
|
||||
eth-provider "^0.13.6"
|
||||
ethereumjs-util "^7.1.3"
|
||||
eventemitter3 "^5.0.1"
|
||||
key-encoder "2.0.3"
|
||||
magic-sdk "^13.6.2"
|
||||
web3-core "1.5.2"
|
||||
|
||||
"@thirdweb-dev/[email protected]":
|
||||
version "2.1.4-nightly-9f993dcc-20231116010115"
|
||||
resolved "https://registry.yarnpkg.com/@thirdweb-dev/wallets/-/wallets-2.1.4-nightly-9f993dcc-20231116010115.tgz#e16835fd8150b20f862c19c8d0f53b9590f8ad73"
|
||||
integrity sha512-eX+Z/ZPiJrjJl8gGFDcvZx/YPXGyvj1OMctTNz6Umf3gvnwUoYuQ/v4qNgrVQcUBLzz4g3ptIzTFC93483Hzyw==
|
||||
"@thirdweb-dev/wallets@0.0.0-dev-8b6ffeb-20231116101855":
|
||||
version "0.0.0-dev-8b6ffeb-20231116101855"
|
||||
resolved "https://registry.yarnpkg.com/@thirdweb-dev/wallets/-/wallets-0.0.0-dev-8b6ffeb-20231116101855.tgz#86e3cfab1145b5be64a15fd4a892f9c9dc47db75"
|
||||
integrity sha512-yiJqVGzzKmi1Jy/6I0Yt4pWFOBYOWyX/MgWbOeshnVG/cu+BoCBL0qoaAfqxHyPRpxu/+q7ZJG/boQY2/CiUJw==
|
||||
dependencies:
|
||||
"@account-abstraction/contracts" "^0.5.0"
|
||||
"@account-abstraction/sdk" "^0.5.0"
|
||||
|
||||
Reference in New Issue
Block a user