Skip to content

Commit 541a4b1

Browse files
feat: introduce supportedProviders option for fiat onramping
1 parent c1f7aaa commit 541a4b1

File tree

4 files changed

+47
-24
lines changed

4 files changed

+47
-24
lines changed

packages/thirdweb/src/react/core/hooks/connection/ConnectButtonProps.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ export type PayUIOptions = Prettify<
9898
currency?: CurrencyMeta["shorthand"];
9999
};
100100
preferredProvider?: FiatProvider;
101+
supportedProviders?: FiatProvider[];
101102
}
102103
| false;
103104

packages/thirdweb/src/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatScreenContent.tsx

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ import { trackPayEvent } from "../../../../../../../analytics/track/pay.js";
44
import type { Chain } from "../../../../../../../chains/types.js";
55
import type { ThirdwebClient } from "../../../../../../../client/client.js";
66
import { NATIVE_TOKEN_ADDRESS } from "../../../../../../../constants/addresses.js";
7-
import type { FiatProvider } from "../../../../../../../pay/utils/commonTypes.js";
7+
import {
8+
type FiatProvider,
9+
FiatProviders,
10+
} from "../../../../../../../pay/utils/commonTypes.js";
811
import {
912
type Theme,
1013
iconSize,
@@ -84,6 +87,15 @@ export function FiatScreenContent(props: {
8487
: undefined,
8588
);
8689

90+
const supportedProviders =
91+
buyWithFiatOptions !== false
92+
? !!buyWithFiatOptions?.supportedProviders?.length &&
93+
(!preferredProvider ||
94+
buyWithFiatOptions.supportedProviders.includes(preferredProvider))
95+
? buyWithFiatOptions?.supportedProviders
96+
: [...FiatProviders]
97+
: [];
98+
8799
const fiatQuoteQuery = useBuyWithFiatQuote(
88100
buyWithFiatOptions !== false && tokenAmount
89101
? {
@@ -159,6 +171,7 @@ export function FiatScreenContent(props: {
159171
</Text>
160172
<Spacer y="lg" />
161173
<Providers
174+
supportedProviders={supportedProviders}
162175
preferredProvider={
163176
preferredProvider || fiatQuoteQuery.data?.provider
164177
}

packages/thirdweb/src/react/web/ui/ConnectWallet/screens/Buy/fiat/Providers.tsx

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
import {
2-
type FiatProvider,
3-
FiatProviders,
4-
} from "../../../../../../../pay/utils/commonTypes.js";
1+
import { type FiatProvider } from "../../../../../../../pay/utils/commonTypes.js";
52
import { Container } from "../../../../components/basic.js";
63
import { Button } from "../../../../components/buttons.js";
7-
import { Link } from "../../../../components/text.js";
4+
import { Link, Text } from "../../../../components/text.js";
5+
import { uppercaseFirstLetter } from "../utils.js";
86
/**
97
* @internal
108
*/
9+
1110
export function Providers(props: {
11+
supportedProviders: FiatProvider[];
1212
preferredProvider?: FiatProvider;
1313
onSelect: (provider: FiatProvider) => void;
1414
}) {
@@ -21,7 +21,7 @@ export function Providers(props: {
2121
alignItems: "flex-start",
2222
}}
2323
>
24-
{FiatProviders.map((provider) => {
24+
{props.supportedProviders.map((provider) => {
2525
return (
2626
<Container
2727
key={provider}
@@ -31,24 +31,29 @@ export function Providers(props: {
3131
justifyContent: "space-between",
3232
}}
3333
>
34-
<Button
35-
fullWidth
36-
onClick={() => props.onSelect(provider)}
37-
variant={"link"}
38-
>
39-
<Link
40-
color={
41-
props.preferredProvider === provider
42-
? "primaryText"
43-
: "secondaryText"
44-
}
45-
size="sm"
46-
hoverColor="primaryText"
34+
{!!props.supportedProviders.length ? (
35+
<Button
36+
fullWidth
37+
onClick={() => props.onSelect(provider)}
38+
variant={"link"}
4739
>
48-
{provider.charAt(0).toUpperCase() +
49-
provider.slice(1).toLowerCase()}
50-
</Link>
51-
</Button>
40+
<Link
41+
color={
42+
props.preferredProvider === provider
43+
? "primaryText"
44+
: "secondaryText"
45+
}
46+
size="sm"
47+
hoverColor="primaryText"
48+
>
49+
{uppercaseFirstLetter(provider)}
50+
</Link>
51+
</Button>
52+
) : (
53+
<Text color="primaryText" size="sm">
54+
{uppercaseFirstLetter(provider)}
55+
</Text>
56+
)}
5257
</Container>
5358
);
5459
})}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
11
export function getBuyTokenAmountFontSize(value: string) {
22
return value.length > 10 ? "26px" : value.length > 6 ? "34px" : "50px";
33
}
4+
5+
export function uppercaseFirstLetter(str: string) {
6+
return str.charAt(0).toUpperCase() + str.slice(1);
7+
}

0 commit comments

Comments
 (0)