Skip to content

Commit c767ab1

Browse files
committed
Theme overrides
1 parent a1bbbc5 commit c767ab1

14 files changed

Lines changed: 54 additions & 31 deletions

File tree

packages/checkout/sdk/src/widgets/definitions/configurations/theme.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,7 @@ export enum WidgetTheme {
55
LIGHT = 'light',
66
DARK = 'dark',
77
}
8+
9+
export type ThemeOverrides = {
10+
drawerBackground?: string;
11+
};

packages/checkout/sdk/src/widgets/definitions/configurations/widget.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { WidgetTheme } from './theme';
1+
import { ThemeOverrides, WidgetTheme } from './theme';
22

33
/**
44
* Widget Configuration represents the shared configuration options for the Commerce Widgets.
@@ -9,6 +9,7 @@ import { WidgetTheme } from './theme';
99
export type WidgetConfiguration = {
1010
/** The theme of the Commerce Widget (default: "DARK") */
1111
theme?: WidgetTheme;
12+
themeOverrides?: ThemeOverrides;
1213
language?: WidgetLanguage;
1314
walletConnect?: WalletConnectConfig;
1415
};

packages/checkout/widgets-lib/src/components/CoinSelector/CoinSelector.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ type CoinSelectorProps = {
1818
optionsLoading?: boolean;
1919
children?: any;
2020
visible?: boolean;
21-
transparentOverlay: boolean;
21+
drawerBackground: string | undefined;
2222
};
2323

2424
const filterOptions = (filterBy: string, options: CoinSelectorOptionProps[]) => {
@@ -29,7 +29,7 @@ const filterOptions = (filterBy: string, options: CoinSelectorOptionProps[]) =>
2929
};
3030

3131
export function CoinSelector({
32-
heading, options, defaultTokenImage, optionsLoading, children, onCloseDrawer, visible, transparentOverlay,
32+
heading, options, defaultTokenImage, optionsLoading, children, onCloseDrawer, visible, drawerBackground,
3333
}: CoinSelectorProps) {
3434
const { t } = useTranslation();
3535

@@ -57,7 +57,7 @@ export function CoinSelector({
5757
size="full"
5858
onCloseDrawer={handleCloseDrawer}
5959
visible={visible}
60-
bgOverlaySx={transparentOverlay ? { backgroundColor: 'transparent' } : undefined}
60+
bgOverlaySx={drawerBackground ? { background: drawerBackground } : undefined}
6161
>
6262
<Drawer.Target>
6363
{children}

packages/checkout/widgets-lib/src/components/FormComponents/SelectForm/SelectForm.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {
33
} from '@biom3/react';
44
import { useCallback, useMemo, useState } from 'react';
55
import { Environment } from '@imtbl/config';
6-
import { WidgetTheme } from '@imtbl/checkout-sdk';
6+
import { ThemeOverrides, WidgetTheme } from '@imtbl/checkout-sdk';
77
import { TokenImage } from '../../TokenImage/TokenImage';
88
import { FormControlWrapper } from '../FormControlWrapper/FormControlWrapper';
99
import { CoinSelector } from '../../CoinSelector/CoinSelector';
@@ -26,8 +26,8 @@ interface SelectFormProps {
2626
screen: string;
2727
control: string;
2828
environment?: Environment;
29-
theme?: WidgetTheme,
30-
transparentOverlay: boolean;
29+
theme: WidgetTheme,
30+
themeOverrides: ThemeOverrides,
3131
}
3232

3333
export function SelectForm({
@@ -45,9 +45,9 @@ export function SelectForm({
4545
userJourney,
4646
screen,
4747
control,
48-
transparentOverlay,
4948
environment = Environment.PRODUCTION,
50-
theme = WidgetTheme.DARK,
49+
theme,
50+
themeOverrides,
5151
}: SelectFormProps) {
5252
const { track } = useAnalytics();
5353
const [coinSelectorOpen, setCoinSelectorOpen] = useState<boolean>(false);
@@ -89,7 +89,7 @@ export function SelectForm({
8989
optionsLoading={optionsLoading ?? false}
9090
visible={coinSelectorOpen}
9191
onCloseDrawer={() => setCoinSelectorOpen(false)}
92-
transparentOverlay={transparentOverlay}
92+
drawerBackground={themeOverrides.drawerBackground}
9393
/>
9494
<FormControlWrapper
9595
testId={`${testId}-select-control`}

packages/checkout/widgets-lib/src/components/FormComponents/SelectInput/SelectInput.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Box, OptionKey } from '@biom3/react';
2-
import { WidgetTheme } from '@imtbl/checkout-sdk';
2+
import { ThemeOverrides, WidgetTheme } from '@imtbl/checkout-sdk';
33
import { Environment } from '@imtbl/config';
44
import {
55
inputStyle,
@@ -38,9 +38,9 @@ interface SelectInputProps {
3838
userJourney: UserJourney;
3939
screen: string;
4040
control: string;
41-
transparentOverlay: boolean;
4241
environment?: Environment;
43-
theme?: WidgetTheme;
42+
theme: WidgetTheme;
43+
themeOverrides: ThemeOverrides;
4444
}
4545

4646
export function SelectInput({
@@ -70,9 +70,9 @@ export function SelectInput({
7070
userJourney,
7171
screen,
7272
control,
73-
transparentOverlay,
7473
environment,
7574
theme,
75+
themeOverrides,
7676
}: SelectInputProps) {
7777
return (
7878
<Box sx={selectInputBoxStyle}>
@@ -93,7 +93,7 @@ export function SelectInput({
9393
screen={screen}
9494
environment={environment}
9595
theme={theme}
96-
transparentOverlay={transparentOverlay}
96+
themeOverrides={themeOverrides}
9797
/>
9898
</Box>
9999
<Box sx={inputStyle}>

packages/checkout/widgets-lib/src/lib/withDefaultWidgetConfig.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Environment } from '@imtbl/config';
2-
import { WidgetTheme } from '@imtbl/checkout-sdk';
2+
import { ThemeOverrides, WidgetTheme } from '@imtbl/checkout-sdk';
33
import {
44
DEFAULT_ADD_TOKENS_ENABLED,
55
DEFAULT_BRIDGE_ENABLED,
@@ -11,6 +11,7 @@ import {
1111

1212
export type StrongCheckoutWidgetsConfig = {
1313
theme: WidgetTheme;
14+
themeOverrides: ThemeOverrides;
1415
environment: Environment;
1516
isOnRampEnabled: boolean;
1617
isSwapEnabled: boolean;
@@ -38,9 +39,18 @@ function getValidBoolean(defaultValue: boolean, value?: string): boolean {
3839
}
3940

4041
export const withDefaultWidgetConfigs = (
41-
configs?: any,
42+
configs: {
43+
theme: WidgetTheme | undefined;
44+
themeOverrides: ThemeOverrides | undefined;
45+
environment: Environment;
46+
isOnRampEnabled: boolean;
47+
isSwapEnabled: boolean;
48+
isBridgeEnabled: boolean;
49+
isAddTokensEnabled?: boolean; // TODO: why is this optional?
50+
},
4251
): StrongCheckoutWidgetsConfig => ({
4352
theme: getValidTheme(configs?.theme),
53+
themeOverrides: configs?.themeOverrides ?? {},
4454
environment: getValidEnvironment(configs?.environment),
4555
isOnRampEnabled: getValidBoolean(
4656
DEFAULT_ON_RAMP_ENABLED,

packages/checkout/widgets-lib/src/widgets/BaseWidgetRoot.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ export abstract class Base<T extends WidgetType> implements Widget<T> {
191191
protected strongConfig(): StrongCheckoutWidgetsConfig {
192192
return withDefaultWidgetConfigs({
193193
theme: this.properties.config?.theme,
194+
themeOverrides: this.properties.config?.themeOverrides,
194195
environment: this.checkout.config.environment,
195196
isOnRampEnabled: this.checkout.config.isOnRampEnabled,
196197
isSwapEnabled: this.checkout.config.isSwapEnabled,

packages/checkout/widgets-lib/src/widgets/immutable-commerce/CommerceWidgetRoot.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ export class CommerceWidgetRoot extends Base<WidgetType.IMMUTABLE_COMMERCE> {
4949
else validatedConfig.theme = WidgetTheme.DARK;
5050
}
5151

52+
console.log({ validatedConfig });
53+
5254
// TODO: validate configs for each widget
5355
return {
5456
config: validatedConfig,
@@ -304,6 +306,8 @@ export class CommerceWidgetRoot extends Base<WidgetType.IMMUTABLE_COMMERCE> {
304306

305307
const { t } = i18n;
306308

309+
console.log({ strongConfig: this.strongConfig() });
310+
307311
this.reactRoot.render(
308312
<CustomAnalyticsProvider checkout={this.checkout}>
309313
<ThemeProvider id="checkout-container" config={this.strongConfig()}>

packages/checkout/widgets-lib/src/widgets/swap/SwapWidget.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ export default function SwapWidget({
7171
autoProceed,
7272
direction,
7373
showBackButton,
74-
swapConfig: { customTitle, customSubTitle, transparentOverlay },
74+
swapConfig: { customTitle, customSubTitle },
7575
walletProviderName,
7676
}: SwapWidgetInputs) {
7777
const { t } = useTranslation();
@@ -81,6 +81,7 @@ export default function SwapWidget({
8181

8282
const {
8383
theme,
84+
themeOverrides,
8485
isOnRampEnabled,
8586
isSwapEnabled,
8687
isBridgeEnabled,
@@ -254,6 +255,7 @@ export default function SwapWidget({
254255
{viewState.view.type === SwapWidgetViews.SWAP && (
255256
<SwapCoins
256257
theme={theme}
258+
themeOverrides={themeOverrides}
257259
cancelAutoProceed={cancelAutoProceed}
258260
fromAmount={viewState.view.data?.fromAmount ?? fromAmount}
259261
toAmount={viewState.view.data?.toAmount ?? toAmount}
@@ -262,7 +264,6 @@ export default function SwapWidget({
262264
showBackButton={showBackButton}
263265
title={customTitle ?? t('views.SWAP.header.title')}
264266
subTitle={customSubTitle ?? t('views.SWAP.content.title')}
265-
transparentOverlay={transparentOverlay ?? false}
266267
/>
267268
)}
268269
{viewState.view.type === SwapWidgetViews.IN_PROGRESS && (

packages/checkout/widgets-lib/src/widgets/swap/components/SwapForm.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
Box, ButtCon, Heading, Icon, OptionKey, Tooltip, Body,
77
} from '@biom3/react';
88
import {
9+
ThemeOverrides,
910
TokenInfo,
1011
WidgetTheme,
1112
} from '@imtbl/checkout-sdk';
@@ -77,9 +78,9 @@ let quoteRequest: CancellablePromise<any>;
7778
export interface SwapFromProps {
7879
data?: SwapFormData;
7980
theme: WidgetTheme;
81+
themeOverrides: ThemeOverrides;
8082
cancelAutoProceed: () => void;
8183
subTitle: string;
82-
transparentOverlay: boolean;
8384
}
8485

8586
class PriceImpactError extends Error {
@@ -90,7 +91,7 @@ class PriceImpactError extends Error {
9091
}
9192

9293
export function SwapForm({
93-
data, theme, cancelAutoProceed, subTitle, transparentOverlay,
94+
data, theme, themeOverrides, cancelAutoProceed, subTitle,
9495
}: SwapFromProps) {
9596
const { t } = useTranslation();
9697
const {
@@ -1010,7 +1011,7 @@ export function SwapForm({
10101011
screen="SwapCoins"
10111012
environment={checkout?.config.environment}
10121013
theme={theme}
1013-
transparentOverlay={transparentOverlay}
1014+
themeOverrides={themeOverrides}
10141015
/>
10151016
</Box>
10161017

@@ -1089,7 +1090,7 @@ export function SwapForm({
10891090
screen="SwapCoins"
10901091
environment={checkout?.config.environment}
10911092
theme={theme}
1092-
transparentOverlay={transparentOverlay}
1093+
themeOverrides={themeOverrides}
10931094
/>
10941095
</Box>
10951096
</Box>

0 commit comments

Comments
 (0)