Skip to content

Commit b69ff42

Browse files
keithbro-imxJeet
andauthored
feat(checkout): GFI-107: Transfer Widget (#2572)
Co-authored-by: Jeet <jeet.parikh@immutable.com>
1 parent 1b38172 commit b69ff42

File tree

31 files changed

+1056
-17
lines changed

31 files changed

+1056
-17
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@ export * from './widget';
99
export * from './addTokens';
1010
export * from './commerce';
1111
export * from './purchase';
12+
export * from './transfer';
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { WidgetConfiguration } from './widget';
2+
3+
/**
4+
* Transfer Widget Configuration represents the configuration options for the Transfer Widget.
5+
*/
6+
export type TransferWidgetConfiguration = {
7+
} & WidgetConfiguration;

packages/checkout/sdk/src/widgets/definitions/events/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@ export * from './onramp';
99
export * from './commerce';
1010
export * from './addTokens';
1111
export * from './purchase';
12+
export * from './transfer';
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
export enum TransferEventType {
2+
CLOSE_WIDGET = 'close-widget',
3+
REJECTED = 'rejected',
4+
SUCCESS = 'success',
5+
FAILURE = 'failure',
6+
}
7+
8+
/**
9+
* Represents a successful transfer.
10+
*/
11+
export type TransferSuccess = {
12+
transactionHash: string;
13+
};
14+
15+
/**
16+
* Type representing a transfer failure
17+
* @property {string} reason
18+
*/
19+
export type TransferFailed = {
20+
reason: string;
21+
timestamp: number;
22+
};
23+
24+
/**
25+
* Type representing a transfer rejected
26+
* @property {string} reason
27+
*/
28+
export type TransferRejected = {
29+
};

packages/checkout/sdk/src/widgets/definitions/events/widgets.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export enum IMTBLWidgetEvents {
1515
IMTBL_COMMERCE_WIDGET_EVENT = 'imtbl-commerce-widget',
1616
IMTBL_ADD_TOKENS_WIDGET_EVENT = 'imtbl-add-tokens-widget',
1717
IMTBL_PURCHASE_WIDGET_EVENT = 'imtbl-purchase-widget',
18+
IMTBL_TRANSFER_WIDGET_EVENT = 'imtbl-transfer-widget',
1819
}
1920

2021
/**

packages/checkout/sdk/src/widgets/definitions/parameters/commerce.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { OnRampWidgetParams } from './onramp';
88
import { SaleWidgetParams } from './sale';
99
import { AddTokensWidgetParams } from './addTokens';
1010
import { PurchaseWidgetParams } from './purchase';
11+
import { TransferWidgetParams } from './transfer';
1112

1213
export enum CommerceFlowType {
1314
CONNECT = 'CONNECT',
@@ -18,6 +19,7 @@ export enum CommerceFlowType {
1819
ONRAMP = 'ONRAMP',
1920
ADD_TOKENS = 'ADD_TOKENS',
2021
PURCHASE = 'PURCHASE',
22+
TRANSFER = 'TRANSFER',
2123
}
2224

2325
export type CommerceWidgetConnectFlowParams = {
@@ -52,6 +54,10 @@ export type CommerceWidgetPurchaseFlowParams = {
5254
flow: CommerceFlowType.PURCHASE;
5355
} & PurchaseWidgetParams;
5456

57+
export type CommerceWidgetTransferFlowParams = {
58+
flow: CommerceFlowType.TRANSFER;
59+
} & TransferWidgetParams;
60+
5561
export type CommerceWidgetFlowParams =
5662
| CommerceWidgetConnectFlowParams
5763
| CommerceWidgetWalletFlowParams
@@ -60,7 +66,8 @@ export type CommerceWidgetFlowParams =
6066
| CommerceWidgetOnRampFlowParams
6167
| CommerceWidgetSaleFlowParams
6268
| CommerceWidgetAddTokensFlowParams
63-
| CommerceWidgetPurchaseFlowParams;
69+
| CommerceWidgetPurchaseFlowParams
70+
| CommerceWidgetTransferFlowParams;
6471

6572
export type CommerceWidgetParams = {
6673
/** The language to use for the Commerce Widget */

packages/checkout/sdk/src/widgets/definitions/parameters/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export type { AddTokensWidgetParams } from './addTokens';
2+
export type { TransferWidgetParams } from './transfer';
23

34
export * from './connect';
45
export * from './bridge';
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { WidgetLanguage } from '../configurations/widget';
2+
3+
export type TransferWidgetParams = {
4+
/** The language to use for the Purchase widget */
5+
language?: WidgetLanguage;
6+
7+
/** The amount to transfer */
8+
amount?: string;
9+
10+
/** The token address to transfer */
11+
tokenAddress?: `0x${string}` | 'native';
12+
13+
/** The to address to transfer to */
14+
toAddress?: `0x${string}`;
15+
16+
/** Whether to show the back button */
17+
showBackButton?: boolean;
18+
};

packages/checkout/sdk/src/widgets/definitions/types.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ import {
5959
AddTokensWidgetParams,
6060
SaleWidgetParams,
6161
PurchaseWidgetParams,
62+
TransferWidgetParams,
6263
} from './parameters';
6364
import {
6465
BridgeWidgetConfiguration,
@@ -71,8 +72,12 @@ import {
7172
AddTokensWidgetConfiguration,
7273
WidgetTheme,
7374
PurchaseWidgetConfiguration,
75+
TransferWidgetConfiguration,
7476
} from './configurations';
7577
import { WrappedBrowserProvider } from '../../types';
78+
import {
79+
TransferEventType, TransferFailed, TransferRejected, TransferSuccess,
80+
} from './events/transfer';
7681

7782
/**
7883
* Enum representing the list of widget types.
@@ -87,6 +92,7 @@ export enum WidgetType {
8792
IMMUTABLE_COMMERCE = 'immutableCommerce',
8893
ADD_TOKENS = 'addTokens',
8994
PURCHASE = 'purchase',
95+
TRANSFER = 'transfer',
9096
}
9197

9298
/**
@@ -107,6 +113,7 @@ export type WidgetConfigurations = {
107113
[WidgetType.ADD_TOKENS]: AddTokensWidgetConfiguration;
108114
[WidgetType.PURCHASE]: PurchaseWidgetConfiguration;
109115
[WidgetType.IMMUTABLE_COMMERCE]: CommerceWidgetConfiguration;
116+
[WidgetType.TRANSFER]: TransferWidgetConfiguration;
110117
};
111118

112119
// Mapping each widget type to their parameters
@@ -120,6 +127,7 @@ export type WidgetParameters = {
120127
[WidgetType.ADD_TOKENS]: AddTokensWidgetParams;
121128
[WidgetType.PURCHASE]: PurchaseWidgetParams;
122129
[WidgetType.IMMUTABLE_COMMERCE]: CommerceWidgetParams;
130+
[WidgetType.TRANSFER]: TransferWidgetParams;
123131
};
124132

125133
/**
@@ -236,6 +244,14 @@ export type WidgetEventData = {
236244
[PurchaseEventType.FAILURE]: PurchaseFailed;
237245
} & OrchestrationMapping &
238246
ProviderEventMapping;
247+
248+
[WidgetType.TRANSFER]: {
249+
[TransferEventType.CLOSE_WIDGET]: {};
250+
[TransferEventType.SUCCESS]: TransferSuccess;
251+
[TransferEventType.FAILURE]: TransferFailed;
252+
[TransferEventType.REJECTED]: TransferRejected;
253+
} & OrchestrationMapping &
254+
ProviderEventMapping;
239255
};
240256

241257
/**

packages/checkout/widgets-lib/.eslintrc.cjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,5 +69,6 @@ module.exports = {
6969
"jsx-a11y/anchor-has-content": "off",
7070
"jsx-a11y/control-has-associated-label": "off",
7171
"react/jsx-props-no-spreading": "off",
72+
"implicit-arrow-linebreak": "off",
7273
}
7374
}

0 commit comments

Comments
 (0)