@bosonprotocol/react-kit 0.30.0-alpha.5 → 0.30.0-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/modal/components/Redeem/Confirmation/Confirmation.d.ts.map +1 -1
- package/dist/cjs/components/modal/components/Redeem/Confirmation/Confirmation.js +4 -1
- package/dist/cjs/components/modal/components/Redeem/Confirmation/Confirmation.js.map +1 -1
- package/dist/cjs/components/modal/components/Redeem/RedeemForm/RedeemForm.d.ts +3 -1
- package/dist/cjs/components/modal/components/Redeem/RedeemForm/RedeemForm.d.ts.map +1 -1
- package/dist/cjs/components/modal/components/Redeem/RedeemForm/RedeemForm.js +11 -2
- package/dist/cjs/components/modal/components/Redeem/RedeemForm/RedeemForm.js.map +1 -1
- package/dist/cjs/components/modal/components/Redeem/RedeemForm/RedeemFormView.d.ts.map +1 -1
- package/dist/cjs/components/modal/components/Redeem/RedeemForm/RedeemFormView.js +1 -1
- package/dist/cjs/components/modal/components/Redeem/RedeemForm/RedeemFormView.js.map +1 -1
- package/dist/cjs/components/modal/components/Redeem/RedeemFormModel.d.ts +7 -1
- package/dist/cjs/components/modal/components/Redeem/RedeemFormModel.d.ts.map +1 -1
- package/dist/cjs/components/modal/components/Redeem/RedeemFormModel.js +6 -0
- package/dist/cjs/components/modal/components/Redeem/RedeemFormModel.js.map +1 -1
- package/dist/cjs/components/modal/components/Redeem/RedeemNonModal.d.ts.map +1 -1
- package/dist/cjs/components/modal/components/Redeem/RedeemNonModal.js +16 -1
- package/dist/cjs/components/modal/components/Redeem/RedeemNonModal.js.map +1 -1
- package/dist/cjs/lib/bundle/const.d.ts +5 -0
- package/dist/cjs/lib/bundle/const.d.ts.map +1 -1
- package/dist/cjs/lib/bundle/const.js +7 -1
- package/dist/cjs/lib/bundle/const.js.map +1 -1
- package/dist/cjs/lib/offer/filter.d.ts +3 -0
- package/dist/cjs/lib/offer/filter.d.ts.map +1 -1
- package/dist/cjs/lib/offer/filter.js +21 -1
- package/dist/cjs/lib/offer/filter.js.map +1 -1
- package/dist/cjs/lib/offer/getOfferDetails.d.ts.map +1 -1
- package/dist/cjs/lib/offer/getOfferDetails.js +20 -9
- package/dist/cjs/lib/offer/getOfferDetails.js.map +1 -1
- package/dist/esm/components/modal/components/Redeem/Confirmation/Confirmation.d.ts.map +1 -1
- package/dist/esm/components/modal/components/Redeem/Confirmation/Confirmation.js +4 -1
- package/dist/esm/components/modal/components/Redeem/Confirmation/Confirmation.js.map +1 -1
- package/dist/esm/components/modal/components/Redeem/RedeemForm/RedeemForm.d.ts +3 -1
- package/dist/esm/components/modal/components/Redeem/RedeemForm/RedeemForm.d.ts.map +1 -1
- package/dist/esm/components/modal/components/Redeem/RedeemForm/RedeemForm.js +11 -2
- package/dist/esm/components/modal/components/Redeem/RedeemForm/RedeemForm.js.map +1 -1
- package/dist/esm/components/modal/components/Redeem/RedeemForm/RedeemFormView.d.ts.map +1 -1
- package/dist/esm/components/modal/components/Redeem/RedeemForm/RedeemFormView.js +1 -1
- package/dist/esm/components/modal/components/Redeem/RedeemForm/RedeemFormView.js.map +1 -1
- package/dist/esm/components/modal/components/Redeem/RedeemFormModel.d.ts +7 -1
- package/dist/esm/components/modal/components/Redeem/RedeemFormModel.d.ts.map +1 -1
- package/dist/esm/components/modal/components/Redeem/RedeemFormModel.js +6 -0
- package/dist/esm/components/modal/components/Redeem/RedeemFormModel.js.map +1 -1
- package/dist/esm/components/modal/components/Redeem/RedeemNonModal.d.ts.map +1 -1
- package/dist/esm/components/modal/components/Redeem/RedeemNonModal.js +16 -1
- package/dist/esm/components/modal/components/Redeem/RedeemNonModal.js.map +1 -1
- package/dist/esm/lib/bundle/const.d.ts +5 -0
- package/dist/esm/lib/bundle/const.d.ts.map +1 -1
- package/dist/esm/lib/bundle/const.js +6 -0
- package/dist/esm/lib/bundle/const.js.map +1 -1
- package/dist/esm/lib/offer/filter.d.ts +3 -0
- package/dist/esm/lib/offer/filter.d.ts.map +1 -1
- package/dist/esm/lib/offer/filter.js +18 -0
- package/dist/esm/lib/offer/filter.js.map +1 -1
- package/dist/esm/lib/offer/getOfferDetails.d.ts.map +1 -1
- package/dist/esm/lib/offer/getOfferDetails.js +16 -5
- package/dist/esm/lib/offer/getOfferDetails.js.map +1 -1
- package/package.json +4 -4
- package/src/components/modal/components/Redeem/Confirmation/Confirmation.tsx +6 -1
- package/src/components/modal/components/Redeem/RedeemForm/RedeemForm.tsx +20 -2
- package/src/components/modal/components/Redeem/RedeemForm/RedeemFormView.tsx +1 -0
- package/src/components/modal/components/Redeem/RedeemFormModel.ts +7 -1
- package/src/components/modal/components/Redeem/RedeemNonModal.tsx +20 -1
- package/src/lib/bundle/const.ts +6 -0
- package/src/lib/offer/filter.ts +28 -0
- package/src/lib/offer/getOfferDetails.ts +23 -12
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bosonprotocol/react-kit",
|
|
3
3
|
"description": "React toolkit with smart components and hooks for building on top of the Boson Protocol.",
|
|
4
|
-
"version": "0.30.0-alpha.
|
|
4
|
+
"version": "0.30.0-alpha.7",
|
|
5
5
|
"main": "./dist/cjs/index.js",
|
|
6
6
|
"module": "./dist/esm/index.js",
|
|
7
7
|
"types": "./dist/cjs/index.d.ts",
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
"license": "Apache-2.0",
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"@bosonprotocol/chat-sdk": "^1.3.1-alpha.9",
|
|
18
|
-
"@bosonprotocol/core-sdk": "^1.40.2-alpha.
|
|
19
|
-
"@bosonprotocol/ethers-sdk": "^1.14.2-alpha.
|
|
18
|
+
"@bosonprotocol/core-sdk": "^1.40.2-alpha.4",
|
|
19
|
+
"@bosonprotocol/ethers-sdk": "^1.14.2-alpha.4",
|
|
20
20
|
"@bosonprotocol/ipfs-storage": "^1.11.3",
|
|
21
21
|
"@davatar/react": "1.11.1",
|
|
22
22
|
"@ethersproject/units": "5.6.0",
|
|
@@ -170,5 +170,5 @@
|
|
|
170
170
|
"overrides": {
|
|
171
171
|
"typescript": "^5.1.6"
|
|
172
172
|
},
|
|
173
|
-
"gitHead": "
|
|
173
|
+
"gitHead": "6e75e2bd6b1b426bb605a92a2fd31bd82f294f01"
|
|
174
174
|
}
|
|
@@ -134,6 +134,9 @@ export default function Confirmation({
|
|
|
134
134
|
const [zipField] = useField(FormModel.formFields.zip.name);
|
|
135
135
|
const [countryField] = useField(FormModel.formFields.country.name);
|
|
136
136
|
const [emailField] = useField(FormModel.formFields.email.name);
|
|
137
|
+
const [walletAddressField] = useField(
|
|
138
|
+
FormModel.formFields.walletAddress.name
|
|
139
|
+
);
|
|
137
140
|
const [phoneField] = useField(FormModel.formFields.phone.name);
|
|
138
141
|
const redemptionInfo = {
|
|
139
142
|
exchangeId,
|
|
@@ -249,7 +252,8 @@ ${FormModel.formFields.state.placeholder}: ${message.deliveryDetails.state}
|
|
|
249
252
|
${FormModel.formFields.zip.placeholder}: ${message.deliveryDetails.zip}
|
|
250
253
|
${FormModel.formFields.country.placeholder}: ${message.deliveryDetails.country}
|
|
251
254
|
${FormModel.formFields.email.placeholder}: ${message.deliveryDetails.email}
|
|
252
|
-
${FormModel.formFields.phone.placeholder}: ${message.deliveryDetails.phone}
|
|
255
|
+
${FormModel.formFields.phone.placeholder}: ${message.deliveryDetails.phone}
|
|
256
|
+
${FormModel.formFields.walletAddress.placeholder}: ${message.deliveryDetails.walletAddress}`;
|
|
253
257
|
|
|
254
258
|
const newMessage = {
|
|
255
259
|
threadId: {
|
|
@@ -300,6 +304,7 @@ ${FormModel.formFields.phone.placeholder}: ${message.deliveryDetails.phone}`;
|
|
|
300
304
|
<div>{zipField.value}</div>
|
|
301
305
|
<div>{countryField.value}</div>
|
|
302
306
|
<div>{emailField.value}</div>
|
|
307
|
+
<div>{walletAddressField.value}</div>
|
|
303
308
|
<div>{phoneField.value}</div>
|
|
304
309
|
</Grid>
|
|
305
310
|
<Grid flexDirection="row" flexBasis="0">
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
+
import type { Country as CountryCode } from "react-phone-number-input";
|
|
2
3
|
import { useBreakpoints } from "../../../../../hooks/useBreakpoints";
|
|
4
|
+
import { BuyerTransferInfo } from "../../../../../lib/bundle/const";
|
|
5
|
+
import { getHasBuyerTransferInfos } from "../../../../../lib/offer/filter";
|
|
6
|
+
import { Exchange } from "../../../../../types/exchange";
|
|
3
7
|
import { Button } from "../../../../buttons/Button";
|
|
8
|
+
import { CountrySelect } from "../../../../form/CountrySelect";
|
|
4
9
|
import Input from "../../../../form/Input";
|
|
5
10
|
import Phone from "../../../../form/Phone";
|
|
6
11
|
import { Grid } from "../../../../ui/Grid";
|
|
7
12
|
import { Typography } from "../../../../ui/Typography";
|
|
8
13
|
import { FormModel } from "../RedeemFormModel";
|
|
9
|
-
import { CountrySelect } from "../../../../form/CountrySelect";
|
|
10
|
-
import type { Country as CountryCode } from "react-phone-number-input";
|
|
11
14
|
interface Props {
|
|
15
|
+
exchange: Exchange | null;
|
|
12
16
|
isValid: boolean;
|
|
13
17
|
onNextClick: () => void;
|
|
14
18
|
onBackClick: () => void;
|
|
@@ -55,11 +59,17 @@ const fatfMemberCountries: CountryCode[] = [
|
|
|
55
59
|
];
|
|
56
60
|
|
|
57
61
|
export default function RedeemForm({
|
|
62
|
+
exchange,
|
|
58
63
|
isValid,
|
|
59
64
|
onNextClick,
|
|
60
65
|
onBackClick
|
|
61
66
|
}: Props) {
|
|
62
67
|
const { isLteXS } = useBreakpoints();
|
|
68
|
+
const requestBuyerAddress = exchange?.offer
|
|
69
|
+
? getHasBuyerTransferInfos(exchange.offer, [
|
|
70
|
+
BuyerTransferInfo.walletAddress
|
|
71
|
+
])
|
|
72
|
+
: false;
|
|
63
73
|
return (
|
|
64
74
|
<>
|
|
65
75
|
<Typography
|
|
@@ -142,6 +152,14 @@ export default function RedeemForm({
|
|
|
142
152
|
placeholder={FormModel.formFields.email.placeholder}
|
|
143
153
|
/>
|
|
144
154
|
</Grid>
|
|
155
|
+
{requestBuyerAddress && (
|
|
156
|
+
<Grid flexDirection="column" alignItems="flex-start">
|
|
157
|
+
<Input
|
|
158
|
+
name={FormModel.formFields.walletAddress.name}
|
|
159
|
+
placeholder={FormModel.formFields.walletAddress.placeholder}
|
|
160
|
+
/>
|
|
161
|
+
</Grid>
|
|
162
|
+
)}
|
|
145
163
|
<Grid flexDirection="column" alignItems="flex-start">
|
|
146
164
|
<Phone
|
|
147
165
|
name={FormModel.formFields.phone.name}
|
|
@@ -36,6 +36,12 @@ export const FormModel = {
|
|
|
36
36
|
placeholder: "Email",
|
|
37
37
|
mustBeEmail: "This is not an e-mail"
|
|
38
38
|
},
|
|
39
|
+
walletAddress: {
|
|
40
|
+
name: "walletAddress",
|
|
41
|
+
requiredErrorMessage: "This field is required",
|
|
42
|
+
placeholder: "WalletAddress",
|
|
43
|
+
mustBeWalletAddress: "This is not a wallet address"
|
|
44
|
+
},
|
|
39
45
|
phone: {
|
|
40
46
|
name: "phone",
|
|
41
47
|
requiredErrorMessage: "This field is required",
|
|
@@ -44,4 +50,4 @@ export const FormModel = {
|
|
|
44
50
|
}
|
|
45
51
|
} as const;
|
|
46
52
|
|
|
47
|
-
export type FormType = Record<keyof typeof FormModel["formFields"], string>;
|
|
53
|
+
export type FormType = Record<keyof (typeof FormModel)["formFields"], string>;
|
|
@@ -56,6 +56,8 @@ import {
|
|
|
56
56
|
DetailContextProps,
|
|
57
57
|
DetailViewProvider
|
|
58
58
|
} from "../common/detail/DetailViewProvider";
|
|
59
|
+
import { getHasBuyerTransferInfos } from "../../../../lib/offer/filter";
|
|
60
|
+
import { BuyerTransferInfo } from "../../../../lib/bundle/const";
|
|
59
61
|
|
|
60
62
|
const colors = theme.colors.light;
|
|
61
63
|
const UlWithWordBreak = styled.ul`
|
|
@@ -328,6 +330,11 @@ function RedeemNonModal({
|
|
|
328
330
|
const emailPreference =
|
|
329
331
|
exchange?.seller.metadata?.contactPreference ===
|
|
330
332
|
ContactPreference.XMTP_AND_EMAIL;
|
|
333
|
+
const requestBuyerAddress = exchange?.offer
|
|
334
|
+
? getHasBuyerTransferInfos(exchange.offer, [
|
|
335
|
+
BuyerTransferInfo.walletAddress
|
|
336
|
+
])
|
|
337
|
+
: false;
|
|
331
338
|
const validationSchema = useMemo(() => {
|
|
332
339
|
return Yup.object({
|
|
333
340
|
[FormModel.formFields.name.name]: Yup.string()
|
|
@@ -356,11 +363,21 @@ function RedeemNonModal({
|
|
|
356
363
|
.required(FormModel.formFields.email.requiredErrorMessage)
|
|
357
364
|
.email(FormModel.formFields.email.mustBeEmail)
|
|
358
365
|
: Yup.string().trim().email(FormModel.formFields.email.mustBeEmail),
|
|
366
|
+
[FormModel.formFields.walletAddress.name]: requestBuyerAddress
|
|
367
|
+
? Yup.string()
|
|
368
|
+
.trim()
|
|
369
|
+
.required(FormModel.formFields.walletAddress.requiredErrorMessage)
|
|
370
|
+
.test(
|
|
371
|
+
"mustBeAddress",
|
|
372
|
+
FormModel.formFields.walletAddress.mustBeWalletAddress,
|
|
373
|
+
(value) => (value ? ethers.utils.isAddress(value) : true)
|
|
374
|
+
)
|
|
375
|
+
: Yup.string().trim(),
|
|
359
376
|
[FormModel.formFields.phone.name]: Yup.string()
|
|
360
377
|
.trim()
|
|
361
378
|
.required(FormModel.formFields.phone.requiredErrorMessage)
|
|
362
379
|
});
|
|
363
|
-
}, [emailPreference]);
|
|
380
|
+
}, [emailPreference, requestBuyerAddress]);
|
|
364
381
|
type FormType = Yup.InferType<typeof validationSchema>;
|
|
365
382
|
const [{ currentStep }, setStep] = useState<{
|
|
366
383
|
previousStep: ActiveStep[];
|
|
@@ -495,6 +512,7 @@ function RedeemNonModal({
|
|
|
495
512
|
[FormModel.formFields.zip.name]: "",
|
|
496
513
|
[FormModel.formFields.country.name]: "",
|
|
497
514
|
[FormModel.formFields.email.name]: "",
|
|
515
|
+
[FormModel.formFields.walletAddress.name]: "",
|
|
498
516
|
[FormModel.formFields.phone.name]: ""
|
|
499
517
|
}
|
|
500
518
|
}
|
|
@@ -509,6 +527,7 @@ function RedeemNonModal({
|
|
|
509
527
|
!errors[FormModel.formFields.zip.name] &&
|
|
510
528
|
!errors[FormModel.formFields.country.name] &&
|
|
511
529
|
!errors[FormModel.formFields.email.name] &&
|
|
530
|
+
!errors[FormModel.formFields.walletAddress.name] &&
|
|
512
531
|
!errors[FormModel.formFields.phone.name];
|
|
513
532
|
|
|
514
533
|
return (
|
package/src/lib/bundle/const.ts
CHANGED
package/src/lib/offer/filter.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { subgraph } from "@bosonprotocol/core-sdk";
|
|
2
2
|
import type { Offer } from "../../types/offer";
|
|
3
|
+
import { NftItem, isNftItem } from "../bundle/filter";
|
|
4
|
+
import { BUYER_TRANSFER_INFO_KEY, BuyerTransferInfo } from "../bundle/const";
|
|
5
|
+
import { isTruthy } from "../../types/helpers";
|
|
3
6
|
|
|
4
7
|
export type BundleMetadata = Extract<
|
|
5
8
|
Offer["metadata"],
|
|
@@ -30,3 +33,28 @@ export const isProductV1 = (
|
|
|
30
33
|
): offer is ProductV1 =>
|
|
31
34
|
offer.metadata?.__typename === "ProductV1MetadataEntity" ||
|
|
32
35
|
offer.metadata?.type === subgraph.MetadataType.PRODUCT_V1;
|
|
36
|
+
|
|
37
|
+
const getBuyerTransferInfoTerm = (item: NftItem) =>
|
|
38
|
+
item.terms?.find((term) => term.key === BUYER_TRANSFER_INFO_KEY);
|
|
39
|
+
export const getBuyerTransferInfos = (
|
|
40
|
+
offer: Offer | subgraph.OfferFieldsFragment
|
|
41
|
+
): Set<string> => {
|
|
42
|
+
return isBundle(offer)
|
|
43
|
+
? new Set(
|
|
44
|
+
offer.metadata.items
|
|
45
|
+
.filter(isNftItem)
|
|
46
|
+
.map((item) => getBuyerTransferInfoTerm(item)?.value)
|
|
47
|
+
.filter(isTruthy)
|
|
48
|
+
)
|
|
49
|
+
: new Set();
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
export const getHasBuyerTransferInfos = (
|
|
53
|
+
offer: Offer | subgraph.OfferFieldsFragment,
|
|
54
|
+
valuesToFind: BuyerTransferInfo[]
|
|
55
|
+
): boolean => {
|
|
56
|
+
const buyerTransferInfos = getBuyerTransferInfos(offer);
|
|
57
|
+
return valuesToFind.every((buyerTransferInfoValue) => {
|
|
58
|
+
return buyerTransferInfos.has(buyerTransferInfoValue);
|
|
59
|
+
});
|
|
60
|
+
};
|
|
@@ -89,30 +89,41 @@ export const getOfferDetails = (
|
|
|
89
89
|
const animationUrl = getOfferAnimationUrl(offer);
|
|
90
90
|
const shippingInfo = {
|
|
91
91
|
returnPeriodInDays:
|
|
92
|
-
productV1ItemMetadataEntity?.shipping?.returnPeriodInDays
|
|
92
|
+
productV1ItemMetadataEntity?.shipping?.returnPeriodInDays ||
|
|
93
|
+
isProductV1(offer)
|
|
94
|
+
? (offer.metadata as ProductV1Sub).shipping?.returnPeriodInDays
|
|
95
|
+
: undefined,
|
|
93
96
|
shippingTable:
|
|
94
|
-
productV1ItemMetadataEntity?.shipping
|
|
95
|
-
(
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
97
|
+
(productV1ItemMetadataEntity?.shipping || isProductV1(offer)
|
|
98
|
+
? (offer.metadata as ProductV1Sub).shipping
|
|
99
|
+
: undefined
|
|
100
|
+
)?.supportedJurisdictions?.map((jurisdiction: any) => ({
|
|
101
|
+
name: jurisdiction.label,
|
|
102
|
+
value: jurisdiction.deliveryTime
|
|
103
|
+
})) || []
|
|
100
104
|
};
|
|
101
105
|
const description =
|
|
102
106
|
productV1ItemMetadataEntity?.product?.description ||
|
|
103
107
|
offer.metadata?.description ||
|
|
104
108
|
"";
|
|
105
|
-
const artist =
|
|
109
|
+
const artist =
|
|
110
|
+
productV1ItemMetadataEntity?.productV1Seller || isProductV1(offer)
|
|
111
|
+
? (offer.metadata as ProductV1Sub).productV1Seller
|
|
112
|
+
: null;
|
|
106
113
|
const artistDescription =
|
|
107
114
|
artist?.description ||
|
|
108
115
|
productV1ItemMetadataEntity?.product.productV1Seller?.description ||
|
|
109
116
|
"";
|
|
110
117
|
const images =
|
|
111
|
-
productV1ItemMetadataEntity?.product
|
|
112
|
-
(
|
|
113
|
-
|
|
118
|
+
(productV1ItemMetadataEntity?.product || isProductV1(offer)
|
|
119
|
+
? (offer.metadata as ProductV1Sub).product
|
|
120
|
+
: undefined
|
|
121
|
+
)?.visuals_images?.map(({ url }: { url: string }) => url) || [];
|
|
114
122
|
const variantsImages =
|
|
115
|
-
productV1ItemMetadataEntity
|
|
123
|
+
(productV1ItemMetadataEntity || isProductV1(offer)
|
|
124
|
+
? (offer.metadata as ProductV1Sub)
|
|
125
|
+
: undefined
|
|
126
|
+
)?.productOverrides?.visuals_images?.map(
|
|
116
127
|
({ url }: { url: string }) => url
|
|
117
128
|
) || [];
|
|
118
129
|
const bundleItems = isBundle(offer) ? offer.metadata.items : undefined;
|