@bosonprotocol/react-kit 0.30.0-alpha.1 → 0.30.0-alpha.10

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.
Files changed (240) hide show
  1. package/dist/cjs/components/Loading.js +1 -1
  2. package/dist/cjs/components/Loading.js.map +1 -1
  3. package/dist/cjs/components/modal/components/Commit/OfferVariantView.d.ts.map +1 -1
  4. package/dist/cjs/components/modal/components/Commit/OfferVariantView.js +4 -1
  5. package/dist/cjs/components/modal/components/Commit/OfferVariantView.js.map +1 -1
  6. package/dist/cjs/components/modal/components/Redeem/Confirmation/Confirmation.d.ts.map +1 -1
  7. package/dist/cjs/components/modal/components/Redeem/Confirmation/Confirmation.js +4 -1
  8. package/dist/cjs/components/modal/components/Redeem/Confirmation/Confirmation.js.map +1 -1
  9. package/dist/cjs/components/modal/components/Redeem/RedeemForm/RedeemForm.d.ts +4 -1
  10. package/dist/cjs/components/modal/components/Redeem/RedeemForm/RedeemForm.d.ts.map +1 -1
  11. package/dist/cjs/components/modal/components/Redeem/RedeemForm/RedeemForm.js +13 -2
  12. package/dist/cjs/components/modal/components/Redeem/RedeemForm/RedeemForm.js.map +1 -1
  13. package/dist/cjs/components/modal/components/Redeem/RedeemForm/RedeemFormView.d.ts +2 -1
  14. package/dist/cjs/components/modal/components/Redeem/RedeemForm/RedeemFormView.d.ts.map +1 -1
  15. package/dist/cjs/components/modal/components/Redeem/RedeemForm/RedeemFormView.js +2 -2
  16. package/dist/cjs/components/modal/components/Redeem/RedeemForm/RedeemFormView.js.map +1 -1
  17. package/dist/cjs/components/modal/components/Redeem/RedeemFormModel.d.ts +7 -1
  18. package/dist/cjs/components/modal/components/Redeem/RedeemFormModel.d.ts.map +1 -1
  19. package/dist/cjs/components/modal/components/Redeem/RedeemFormModel.js +6 -0
  20. package/dist/cjs/components/modal/components/Redeem/RedeemFormModel.js.map +1 -1
  21. package/dist/cjs/components/modal/components/Redeem/RedeemNonModal.d.ts.map +1 -1
  22. package/dist/cjs/components/modal/components/Redeem/RedeemNonModal.js +22 -3
  23. package/dist/cjs/components/modal/components/Redeem/RedeemNonModal.js.map +1 -1
  24. package/dist/cjs/components/modal/components/common/OfferFullDescription/DigitalProductData.d.ts.map +1 -1
  25. package/dist/cjs/components/modal/components/common/OfferFullDescription/DigitalProductData.js +41 -13
  26. package/dist/cjs/components/modal/components/common/OfferFullDescription/DigitalProductData.js.map +1 -1
  27. package/dist/cjs/components/modal/components/common/detail/PhygitalProduct.d.ts.map +1 -1
  28. package/dist/cjs/components/modal/components/common/detail/PhygitalProduct.js +48 -33
  29. package/dist/cjs/components/modal/components/common/detail/PhygitalProduct.js.map +1 -1
  30. package/dist/cjs/components/modal/components/common/detail/TokenGatedItem.d.ts.map +1 -1
  31. package/dist/cjs/components/modal/components/common/detail/TokenGatedItem.js +28 -16
  32. package/dist/cjs/components/modal/components/common/detail/TokenGatedItem.js.map +1 -1
  33. package/dist/cjs/components/productCard/ProductCard.d.ts +3 -1
  34. package/dist/cjs/components/productCard/ProductCard.d.ts.map +1 -1
  35. package/dist/cjs/components/productCard/ProductCard.js +14 -2
  36. package/dist/cjs/components/productCard/ProductCard.js.map +1 -1
  37. package/dist/cjs/components/productCard/ProductCard.styles.d.ts +1 -0
  38. package/dist/cjs/components/productCard/ProductCard.styles.d.ts.map +1 -1
  39. package/dist/cjs/components/productCard/ProductCard.styles.js +43 -3
  40. package/dist/cjs/components/productCard/ProductCard.styles.js.map +1 -1
  41. package/dist/cjs/components/tooltip/Tooltip.d.ts +3 -2
  42. package/dist/cjs/components/tooltip/Tooltip.d.ts.map +1 -1
  43. package/dist/cjs/components/tooltip/Tooltip.js.map +1 -1
  44. package/dist/cjs/components/ui/DetailsSummary.js +1 -1
  45. package/dist/cjs/components/ui/DetailsSummary.js.map +1 -1
  46. package/dist/cjs/components/ui/IpfsImage.d.ts +3 -0
  47. package/dist/cjs/components/ui/IpfsImage.d.ts.map +1 -1
  48. package/dist/cjs/components/ui/IpfsImage.js +13 -3
  49. package/dist/cjs/components/ui/IpfsImage.js.map +1 -1
  50. package/dist/cjs/hooks/bundles/useBundleItemsImages.d.ts +10 -0
  51. package/dist/cjs/hooks/bundles/useBundleItemsImages.d.ts.map +1 -0
  52. package/dist/cjs/hooks/bundles/useBundleItemsImages.js +56 -0
  53. package/dist/cjs/hooks/bundles/useBundleItemsImages.js.map +1 -0
  54. package/dist/cjs/hooks/contracts/erc1155/useErc1155Uris.d.ts +11 -0
  55. package/dist/cjs/hooks/contracts/erc1155/useErc1155Uris.d.ts.map +1 -0
  56. package/dist/cjs/hooks/contracts/erc1155/useErc1155Uris.js +37 -0
  57. package/dist/cjs/hooks/contracts/erc1155/useErc1155Uris.js.map +1 -0
  58. package/dist/cjs/hooks/contracts/erc721/useErc721TokenUris.d.ts +11 -0
  59. package/dist/cjs/hooks/contracts/erc721/useErc721TokenUris.d.ts.map +1 -0
  60. package/dist/cjs/hooks/contracts/erc721/useErc721TokenUris.js +37 -0
  61. package/dist/cjs/hooks/contracts/erc721/useErc721TokenUris.js.map +1 -0
  62. package/dist/cjs/hooks/contracts/useGetTokenUriImages.d.ts +10 -0
  63. package/dist/cjs/hooks/contracts/useGetTokenUriImages.d.ts.map +1 -0
  64. package/dist/cjs/hooks/contracts/useGetTokenUriImages.js +103 -0
  65. package/dist/cjs/hooks/contracts/useGetTokenUriImages.js.map +1 -0
  66. package/dist/cjs/hooks/index.d.ts +3 -3
  67. package/dist/cjs/hooks/index.d.ts.map +1 -1
  68. package/dist/cjs/hooks/index.js +3 -3
  69. package/dist/cjs/hooks/index.js.map +1 -1
  70. package/dist/cjs/hooks/transactions/usePendingTransactionsWithContext.d.ts +1 -1
  71. package/dist/cjs/lib/address/address.d.ts +1 -0
  72. package/dist/cjs/lib/address/address.d.ts.map +1 -1
  73. package/dist/cjs/lib/address/address.js +8 -1
  74. package/dist/cjs/lib/address/address.js.map +1 -1
  75. package/dist/cjs/lib/bundle/const.d.ts +19 -5
  76. package/dist/cjs/lib/bundle/const.d.ts.map +1 -1
  77. package/dist/cjs/lib/bundle/const.js +18 -3
  78. package/dist/cjs/lib/bundle/const.js.map +1 -1
  79. package/dist/cjs/lib/ipfs/ipfs.d.ts.map +1 -1
  80. package/dist/cjs/lib/ipfs/ipfs.js +9 -4
  81. package/dist/cjs/lib/ipfs/ipfs.js.map +1 -1
  82. package/dist/cjs/lib/offer/filter.d.ts +3 -0
  83. package/dist/cjs/lib/offer/filter.d.ts.map +1 -1
  84. package/dist/cjs/lib/offer/filter.js +21 -1
  85. package/dist/cjs/lib/offer/filter.js.map +1 -1
  86. package/dist/cjs/lib/offer/getOfferDetails.d.ts.map +1 -1
  87. package/dist/cjs/lib/offer/getOfferDetails.js +21 -9
  88. package/dist/cjs/lib/offer/getOfferDetails.js.map +1 -1
  89. package/dist/esm/components/Loading.js +1 -1
  90. package/dist/esm/components/Loading.js.map +1 -1
  91. package/dist/esm/components/modal/components/Commit/OfferVariantView.d.ts.map +1 -1
  92. package/dist/esm/components/modal/components/Commit/OfferVariantView.js +4 -1
  93. package/dist/esm/components/modal/components/Commit/OfferVariantView.js.map +1 -1
  94. package/dist/esm/components/modal/components/Redeem/Confirmation/Confirmation.d.ts.map +1 -1
  95. package/dist/esm/components/modal/components/Redeem/Confirmation/Confirmation.js +4 -1
  96. package/dist/esm/components/modal/components/Redeem/Confirmation/Confirmation.js.map +1 -1
  97. package/dist/esm/components/modal/components/Redeem/RedeemForm/RedeemForm.d.ts +4 -1
  98. package/dist/esm/components/modal/components/Redeem/RedeemForm/RedeemForm.d.ts.map +1 -1
  99. package/dist/esm/components/modal/components/Redeem/RedeemForm/RedeemForm.js +13 -2
  100. package/dist/esm/components/modal/components/Redeem/RedeemForm/RedeemForm.js.map +1 -1
  101. package/dist/esm/components/modal/components/Redeem/RedeemForm/RedeemFormView.d.ts +2 -1
  102. package/dist/esm/components/modal/components/Redeem/RedeemForm/RedeemFormView.d.ts.map +1 -1
  103. package/dist/esm/components/modal/components/Redeem/RedeemForm/RedeemFormView.js +2 -2
  104. package/dist/esm/components/modal/components/Redeem/RedeemForm/RedeemFormView.js.map +1 -1
  105. package/dist/esm/components/modal/components/Redeem/RedeemFormModel.d.ts +7 -1
  106. package/dist/esm/components/modal/components/Redeem/RedeemFormModel.d.ts.map +1 -1
  107. package/dist/esm/components/modal/components/Redeem/RedeemFormModel.js +6 -0
  108. package/dist/esm/components/modal/components/Redeem/RedeemFormModel.js.map +1 -1
  109. package/dist/esm/components/modal/components/Redeem/RedeemNonModal.d.ts.map +1 -1
  110. package/dist/esm/components/modal/components/Redeem/RedeemNonModal.js +22 -3
  111. package/dist/esm/components/modal/components/Redeem/RedeemNonModal.js.map +1 -1
  112. package/dist/esm/components/modal/components/common/OfferFullDescription/DigitalProductData.d.ts.map +1 -1
  113. package/dist/esm/components/modal/components/common/OfferFullDescription/DigitalProductData.js +44 -11
  114. package/dist/esm/components/modal/components/common/OfferFullDescription/DigitalProductData.js.map +1 -1
  115. package/dist/esm/components/modal/components/common/detail/PhygitalProduct.d.ts.map +1 -1
  116. package/dist/esm/components/modal/components/common/detail/PhygitalProduct.js +40 -26
  117. package/dist/esm/components/modal/components/common/detail/PhygitalProduct.js.map +1 -1
  118. package/dist/esm/components/modal/components/common/detail/TokenGatedItem.d.ts.map +1 -1
  119. package/dist/esm/components/modal/components/common/detail/TokenGatedItem.js +28 -16
  120. package/dist/esm/components/modal/components/common/detail/TokenGatedItem.js.map +1 -1
  121. package/dist/esm/components/productCard/ProductCard.d.ts +3 -1
  122. package/dist/esm/components/productCard/ProductCard.d.ts.map +1 -1
  123. package/dist/esm/components/productCard/ProductCard.js +3 -3
  124. package/dist/esm/components/productCard/ProductCard.js.map +1 -1
  125. package/dist/esm/components/productCard/ProductCard.styles.d.ts +1 -0
  126. package/dist/esm/components/productCard/ProductCard.styles.d.ts.map +1 -1
  127. package/dist/esm/components/productCard/ProductCard.styles.js +42 -2
  128. package/dist/esm/components/productCard/ProductCard.styles.js.map +1 -1
  129. package/dist/esm/components/tooltip/Tooltip.d.ts +3 -2
  130. package/dist/esm/components/tooltip/Tooltip.d.ts.map +1 -1
  131. package/dist/esm/components/tooltip/Tooltip.js.map +1 -1
  132. package/dist/esm/components/ui/DetailsSummary.js +1 -1
  133. package/dist/esm/components/ui/DetailsSummary.js.map +1 -1
  134. package/dist/esm/components/ui/IpfsImage.d.ts +3 -0
  135. package/dist/esm/components/ui/IpfsImage.d.ts.map +1 -1
  136. package/dist/esm/components/ui/IpfsImage.js +14 -4
  137. package/dist/esm/components/ui/IpfsImage.js.map +1 -1
  138. package/dist/esm/hooks/bundles/useBundleItemsImages.d.ts +10 -0
  139. package/dist/esm/hooks/bundles/useBundleItemsImages.d.ts.map +1 -0
  140. package/dist/esm/hooks/bundles/useBundleItemsImages.js +48 -0
  141. package/dist/esm/hooks/bundles/useBundleItemsImages.js.map +1 -0
  142. package/dist/esm/hooks/contracts/erc1155/useErc1155Uris.d.ts +11 -0
  143. package/dist/esm/hooks/contracts/erc1155/useErc1155Uris.d.ts.map +1 -0
  144. package/dist/esm/hooks/contracts/erc1155/useErc1155Uris.js +22 -0
  145. package/dist/esm/hooks/contracts/erc1155/useErc1155Uris.js.map +1 -0
  146. package/dist/esm/hooks/contracts/erc721/useErc721TokenUris.d.ts +11 -0
  147. package/dist/esm/hooks/contracts/erc721/useErc721TokenUris.d.ts.map +1 -0
  148. package/dist/esm/hooks/contracts/erc721/useErc721TokenUris.js +22 -0
  149. package/dist/esm/hooks/contracts/erc721/useErc721TokenUris.js.map +1 -0
  150. package/dist/esm/hooks/contracts/useGetTokenUriImages.d.ts +10 -0
  151. package/dist/esm/hooks/contracts/useGetTokenUriImages.d.ts.map +1 -0
  152. package/dist/esm/hooks/contracts/useGetTokenUriImages.js +90 -0
  153. package/dist/esm/hooks/contracts/useGetTokenUriImages.js.map +1 -0
  154. package/dist/esm/hooks/index.d.ts +3 -3
  155. package/dist/esm/hooks/index.d.ts.map +1 -1
  156. package/dist/esm/hooks/index.js +3 -3
  157. package/dist/esm/hooks/index.js.map +1 -1
  158. package/dist/esm/hooks/transactions/usePendingTransactionsWithContext.d.ts +1 -1
  159. package/dist/esm/lib/address/address.d.ts +1 -0
  160. package/dist/esm/lib/address/address.d.ts.map +1 -1
  161. package/dist/esm/lib/address/address.js +6 -0
  162. package/dist/esm/lib/address/address.js.map +1 -1
  163. package/dist/esm/lib/bundle/const.d.ts +19 -5
  164. package/dist/esm/lib/bundle/const.d.ts.map +1 -1
  165. package/dist/esm/lib/bundle/const.js +17 -2
  166. package/dist/esm/lib/bundle/const.js.map +1 -1
  167. package/dist/esm/lib/ipfs/ipfs.d.ts.map +1 -1
  168. package/dist/esm/lib/ipfs/ipfs.js +9 -4
  169. package/dist/esm/lib/ipfs/ipfs.js.map +1 -1
  170. package/dist/esm/lib/offer/filter.d.ts +3 -0
  171. package/dist/esm/lib/offer/filter.d.ts.map +1 -1
  172. package/dist/esm/lib/offer/filter.js +18 -0
  173. package/dist/esm/lib/offer/filter.js.map +1 -1
  174. package/dist/esm/lib/offer/getOfferDetails.d.ts.map +1 -1
  175. package/dist/esm/lib/offer/getOfferDetails.js +17 -5
  176. package/dist/esm/lib/offer/getOfferDetails.js.map +1 -1
  177. package/package.json +4 -4
  178. package/src/components/Loading.tsx +1 -1
  179. package/src/components/modal/components/Commit/OfferVariantView.tsx +4 -1
  180. package/src/components/modal/components/Redeem/Confirmation/Confirmation.tsx +6 -1
  181. package/src/components/modal/components/Redeem/RedeemForm/RedeemForm.tsx +32 -3
  182. package/src/components/modal/components/Redeem/RedeemForm/RedeemFormView.tsx +5 -1
  183. package/src/components/modal/components/Redeem/RedeemFormModel.ts +7 -1
  184. package/src/components/modal/components/Redeem/RedeemNonModal.tsx +29 -2
  185. package/src/components/modal/components/common/OfferFullDescription/DigitalProductData.tsx +166 -99
  186. package/src/components/modal/components/common/detail/PhygitalProduct.tsx +75 -34
  187. package/src/components/modal/components/common/detail/TokenGatedItem.tsx +27 -15
  188. package/src/components/productCard/ProductCard.styles.ts +43 -2
  189. package/src/components/productCard/ProductCard.tsx +3 -2
  190. package/src/components/tooltip/Tooltip.tsx +3 -2
  191. package/src/components/ui/DetailsSummary.tsx +1 -1
  192. package/src/components/ui/IpfsImage.tsx +19 -4
  193. package/src/components/widgets/commit/CommitWidget.tsx +1 -1
  194. package/src/hooks/bundles/useBundleItemsImages.ts +71 -0
  195. package/src/hooks/contracts/erc1155/useErc1155Uris.ts +52 -0
  196. package/src/hooks/contracts/erc721/useErc721TokenUris.ts +52 -0
  197. package/src/hooks/contracts/useGetTokenUriImages.ts +126 -0
  198. package/src/hooks/index.ts +3 -3
  199. package/src/lib/address/address.ts +8 -1
  200. package/src/lib/bundle/const.ts +20 -3
  201. package/src/lib/ipfs/ipfs.ts +15 -5
  202. package/src/lib/offer/filter.ts +28 -0
  203. package/src/lib/offer/getOfferDetails.ts +30 -16
  204. package/src/stories/widgets/Commit.stories.tsx +3 -3
  205. package/dist/cjs/components/nftItem/NftItemIcon.d.ts +0 -8
  206. package/dist/cjs/components/nftItem/NftItemIcon.d.ts.map +0 -1
  207. package/dist/cjs/components/nftItem/NftItemIcon.js +0 -14
  208. package/dist/cjs/components/nftItem/NftItemIcon.js.map +0 -1
  209. package/dist/cjs/hooks/contracts/erc1155/useErc1155Uri.d.ts +0 -9
  210. package/dist/cjs/hooks/contracts/erc1155/useErc1155Uri.d.ts.map +0 -1
  211. package/dist/cjs/hooks/contracts/erc1155/useErc1155Uri.js +0 -29
  212. package/dist/cjs/hooks/contracts/erc1155/useErc1155Uri.js.map +0 -1
  213. package/dist/cjs/hooks/contracts/erc721/useErc721TokenUri.d.ts +0 -9
  214. package/dist/cjs/hooks/contracts/erc721/useErc721TokenUri.d.ts.map +0 -1
  215. package/dist/cjs/hooks/contracts/erc721/useErc721TokenUri.js +0 -29
  216. package/dist/cjs/hooks/contracts/erc721/useErc721TokenUri.js.map +0 -1
  217. package/dist/cjs/hooks/contracts/useGetTokenUriImage.d.ts +0 -8
  218. package/dist/cjs/hooks/contracts/useGetTokenUriImage.d.ts.map +0 -1
  219. package/dist/cjs/hooks/contracts/useGetTokenUriImage.js +0 -93
  220. package/dist/cjs/hooks/contracts/useGetTokenUriImage.js.map +0 -1
  221. package/dist/esm/components/nftItem/NftItemIcon.d.ts +0 -8
  222. package/dist/esm/components/nftItem/NftItemIcon.d.ts.map +0 -1
  223. package/dist/esm/components/nftItem/NftItemIcon.js +0 -7
  224. package/dist/esm/components/nftItem/NftItemIcon.js.map +0 -1
  225. package/dist/esm/hooks/contracts/erc1155/useErc1155Uri.d.ts +0 -9
  226. package/dist/esm/hooks/contracts/erc1155/useErc1155Uri.d.ts.map +0 -1
  227. package/dist/esm/hooks/contracts/erc1155/useErc1155Uri.js +0 -16
  228. package/dist/esm/hooks/contracts/erc1155/useErc1155Uri.js.map +0 -1
  229. package/dist/esm/hooks/contracts/erc721/useErc721TokenUri.d.ts +0 -9
  230. package/dist/esm/hooks/contracts/erc721/useErc721TokenUri.d.ts.map +0 -1
  231. package/dist/esm/hooks/contracts/erc721/useErc721TokenUri.js +0 -16
  232. package/dist/esm/hooks/contracts/erc721/useErc721TokenUri.js.map +0 -1
  233. package/dist/esm/hooks/contracts/useGetTokenUriImage.d.ts +0 -8
  234. package/dist/esm/hooks/contracts/useGetTokenUriImage.d.ts.map +0 -1
  235. package/dist/esm/hooks/contracts/useGetTokenUriImage.js +0 -80
  236. package/dist/esm/hooks/contracts/useGetTokenUriImage.js.map +0 -1
  237. package/src/components/nftItem/NftItemIcon.tsx +0 -16
  238. package/src/hooks/contracts/erc1155/useErc1155Uri.ts +0 -31
  239. package/src/hooks/contracts/erc721/useErc721TokenUri.ts +0 -31
  240. package/src/hooks/contracts/useGetTokenUriImage.ts +0 -102
@@ -3,16 +3,23 @@ import React from "react";
3
3
  import styled from "styled-components";
4
4
  import { getOfferDetails } from "../../../../../lib/offer/getOfferDetails";
5
5
  import { Offer } from "../../../../../types/offer";
6
- import { NftItemIcon } from "../../../../nftItem/NftItemIcon";
7
6
  import { DetailsSummary } from "../../../../ui/DetailsSummary";
8
7
  import { Grid } from "../../../../ui/Grid";
9
8
  import { Typography } from "../../../../ui/Typography";
10
9
  import DetailTable from "../detail/DetailTable";
11
10
  import { SlickSlider, initialSettings } from "../detail/SlickSlider";
12
11
  import {
12
+ buyerTransferInfoMapping,
13
13
  digitalNftTypeMapping,
14
- digitalTypeMappingDisplay
14
+ digitalTypeMappingDisplay,
15
+ ercTokenMapping
15
16
  } from "../../../../../lib/bundle/const";
17
+ import { useBundleItemsImages } from "../../../../../hooks/bundles/useBundleItemsImages";
18
+ import { useCoreSDKWithContext } from "../../../../../hooks/core-sdk/useCoreSdkWithContext";
19
+ import { isNftItem } from "../../../../../lib/bundle/filter";
20
+ import { isTruthy } from "../../../../../types/helpers";
21
+ import Video from "../../../../ui/Video";
22
+ import IpfsImage from "../../../../ui/IpfsImage";
16
23
 
17
24
  const StyledDetailsSummary = styled(DetailsSummary)`
18
25
  .icon-wrapper {
@@ -26,6 +33,9 @@ const StyledDetailsSummary = styled(DetailsSummary)`
26
33
  const MediaWrapper = styled.div`
27
34
  width: 100%;
28
35
  height: 100%;
36
+ .loading-container {
37
+ padding-top: 100%;
38
+ }
29
39
  `;
30
40
  type DigitalProductDataProps = {
31
41
  offer: Offer;
@@ -36,7 +46,12 @@ export const DigitalProductData: React.FC<DigitalProductDataProps> = ({
36
46
  offer,
37
47
  imagesToShow
38
48
  }) => {
39
- const { nftItems } = getOfferDetails(offer);
49
+ const { bundleItems } = getOfferDetails(offer);
50
+ const { images } = useBundleItemsImages({
51
+ bundleItems,
52
+ coreSDK: useCoreSDKWithContext()
53
+ });
54
+
40
55
  return (
41
56
  <Grid
42
57
  flexDirection="column"
@@ -45,105 +60,157 @@ export const DigitalProductData: React.FC<DigitalProductDataProps> = ({
45
60
  justifyContent="space-between"
46
61
  >
47
62
  <Typography tag="h3">Digital product data</Typography>
48
- {nftItems?.map((nftItem, index) => {
49
- const nftMedia = [
50
- ...(nftItem.image
51
- ? [{ url: nftItem.image, type: "image" } as const]
52
- : []),
53
- ...(nftItem.animationUrl
54
- ? [
55
- {
56
- url: nftItem.animationUrl,
57
- type: "video"
58
- } as const
59
- ]
60
- : [])
61
- ];
62
- const icon = <NftItemIcon nftItem={nftItem} />;
63
- return (
64
- <StyledDetailsSummary
65
- key={nftItem.id}
66
- icon={icon ? <MediaWrapper>{icon}</MediaWrapper> : null}
67
- summaryText={nftItem.name || nftItem.contract || ""}
68
- initiallyOpen={index === 0}
69
- >
70
- <DetailTable
71
- align={false}
72
- noBorder
73
- data={[
74
- ...(nftItem.contract
75
- ? [
76
- {
77
- name: "Contract address",
78
- value: (
79
- <Typography tag="p">{nftItem.contract}</Typography>
80
- )
81
- }
82
- ]
83
- : []),
84
- ...(nftItem.description
85
- ? [
86
- {
87
- name: "Description",
88
- value: (
89
- <Typography tag="p">{nftItem.description}</Typography>
90
- )
91
- }
92
- ]
93
- : []),
94
- ...(nftItem.attributes || []).map((attribute) => ({
95
- name: attribute.displayType || attribute.traitType,
96
- value: (
97
- <Typography tag="p">
98
- {digitalTypeMappingDisplay[
99
- attribute.value as keyof typeof digitalTypeMappingDisplay
63
+ {bundleItems
64
+ ?.map((bundleItem, index) => {
65
+ if (!isNftItem(bundleItem)) {
66
+ return null;
67
+ }
68
+ const nftItem = bundleItem;
69
+ const nftMedia = [
70
+ ...(nftItem.image
71
+ ? [{ url: nftItem.image, type: "image" } as const]
72
+ : []),
73
+ ...(nftItem.animationUrl
74
+ ? [
75
+ {
76
+ url: nftItem.animationUrl,
77
+ type: "video"
78
+ } as const
79
+ ]
80
+ : [])
81
+ ];
82
+ const imageSrc = images?.[index];
83
+ const videoSrc = bundleItem.animationUrl;
84
+ const icon = videoSrc ? (
85
+ <MediaWrapper>
86
+ <Video src={videoSrc} />
87
+ </MediaWrapper>
88
+ ) : imageSrc ? (
89
+ <MediaWrapper>
90
+ <IpfsImage
91
+ src={imageSrc}
92
+ overrides={{ ipfsGateway: "https://ipfs.io/ipfs" }}
93
+ />
94
+ </MediaWrapper>
95
+ ) : (
96
+ <MediaWrapper></MediaWrapper>
97
+ );
98
+ return (
99
+ <StyledDetailsSummary
100
+ key={nftItem.id}
101
+ icon={icon ? <MediaWrapper>{icon}</MediaWrapper> : null}
102
+ summaryText={nftItem.name || nftItem.contract || ""}
103
+ initiallyOpen={index === 0}
104
+ >
105
+ <DetailTable
106
+ align={false}
107
+ noBorder
108
+ data={[
109
+ ...(nftItem.contract
110
+ ? [
111
+ {
112
+ name: "Contract address",
113
+ value: (
114
+ <Typography tag="p">{nftItem.contract}</Typography>
115
+ )
116
+ }
100
117
  ]
101
- ? digitalTypeMappingDisplay[
102
- attribute.value as keyof typeof digitalTypeMappingDisplay
103
- ]
104
- : digitalNftTypeMapping[
105
- attribute.value as keyof typeof digitalNftTypeMapping
118
+ : []),
119
+ ...(nftItem.description
120
+ ? [
121
+ {
122
+ name: "Description",
123
+ value: (
124
+ <Typography tag="p">
125
+ {nftItem.description}
126
+ </Typography>
127
+ )
128
+ }
129
+ ]
130
+ : []),
131
+ ...(nftItem.attributes || []).map((attribute) => ({
132
+ name: attribute.displayType || attribute.traitType,
133
+ value: (
134
+ <Typography tag="p">
135
+ {digitalTypeMappingDisplay[
136
+ attribute.value as keyof typeof digitalTypeMappingDisplay
137
+ ]
138
+ ? digitalTypeMappingDisplay[
139
+ attribute.value as keyof typeof digitalTypeMappingDisplay
106
140
  ]
107
- ? digitalNftTypeMapping[
108
- attribute.value as keyof typeof digitalNftTypeMapping
141
+ : digitalNftTypeMapping[
142
+ attribute.value as keyof typeof digitalNftTypeMapping
143
+ ]
144
+ ? digitalNftTypeMapping[
145
+ attribute.value as keyof typeof digitalNftTypeMapping
146
+ ]
147
+ : attribute.value}
148
+ </Typography>
149
+ )
150
+ })),
151
+ ...(nftItem.tokenIdRange?.min && nftItem.tokenIdRange.max
152
+ ? [
153
+ {
154
+ name:
155
+ nftItem.tokenIdRange?.min ===
156
+ nftItem.tokenIdRange?.max
157
+ ? "Token ID"
158
+ : "Token IDs",
159
+ value:
160
+ nftItem.tokenIdRange?.min ===
161
+ nftItem.tokenIdRange?.max ? (
162
+ <Typography tag="p">
163
+ {nftItem.tokenIdRange?.min}
164
+ </Typography>
165
+ ) : (
166
+ <Typography tag="p">
167
+ {nftItem.tokenIdRange?.min}-
168
+ {nftItem.tokenIdRange?.max}
169
+ </Typography>
170
+ )
171
+ }
172
+ ]
173
+ : []),
174
+ ...(nftItem.terms || []).map((term) => ({
175
+ name: term.displayKey || term.key,
176
+ value: (
177
+ <Typography tag="p">
178
+ {buyerTransferInfoMapping[
179
+ term.value as keyof typeof buyerTransferInfoMapping
180
+ ]
181
+ ? buyerTransferInfoMapping[
182
+ term.value as keyof typeof buyerTransferInfoMapping
109
183
  ]
110
- : attribute.value}
111
- </Typography>
112
- )
113
- })),
114
- ...(nftItem.tokenIdRange?.min && nftItem.tokenIdRange.max
115
- ? [
116
- {
117
- name: "Token IDs",
118
- value: (
119
- <Typography tag="p">
120
- {nftItem.tokenIdRange?.max}-
121
- {nftItem.tokenIdRange?.max}
122
- </Typography>
123
- )
124
- }
125
- ]
126
- : []),
127
- ...(nftItem.terms || []).map((term) => ({
128
- name: term.displayKey || term.key,
129
- value: <Typography tag="p">{term.value}</Typography>
130
- }))
131
- ]}
132
- inheritColor={false}
133
- />
134
- {!!nftMedia.length && (
135
- <div style={{ width: "100%", padding: "0 2rem 1.5rem 2rem" }}>
136
- <SlickSlider
137
- settings={{ ...initialSettings, slidesToShow: imagesToShow }}
138
- mediaFiles={nftMedia}
139
- alignLeft
140
- imageOptimizationOpts={{ height: 500 }}
141
- />
142
- </div>
143
- )}
144
- </StyledDetailsSummary>
145
- );
146
- })}
184
+ : ercTokenMapping[
185
+ term.value as keyof typeof ercTokenMapping
186
+ ]
187
+ ? ercTokenMapping[
188
+ term.value as keyof typeof ercTokenMapping
189
+ ]
190
+ : term.value}
191
+ </Typography>
192
+ )
193
+ }))
194
+ ]}
195
+ inheritColor={false}
196
+ />
197
+ {!!nftMedia.length && (
198
+ <div style={{ width: "100%", padding: "0 2rem 1.5rem 2rem" }}>
199
+ <SlickSlider
200
+ settings={{
201
+ ...initialSettings,
202
+ slidesToShow: imagesToShow
203
+ }}
204
+ mediaFiles={nftMedia}
205
+ alignLeft
206
+ imageOptimizationOpts={{ height: 500 }}
207
+ />
208
+ </div>
209
+ )}
210
+ </StyledDetailsSummary>
211
+ );
212
+ })
213
+ .filter(isTruthy)}
147
214
  </Grid>
148
215
  );
149
216
  };
@@ -1,19 +1,22 @@
1
1
  import { ArrowSquareUpRight } from "phosphor-react";
2
2
  import React, { ReactNode } from "react";
3
3
  import styled from "styled-components";
4
- import { useGetTokenUriImage } from "../../../../../hooks";
4
+ import { useBundleItemsImages } from "../../../../../hooks/bundles/useBundleItemsImages";
5
5
  import { useErc1155Name } from "../../../../../hooks/contracts/erc1155/useErc1155Name";
6
6
  import { useErc721Name } from "../../../../../hooks/contracts/erc721/useErc721Name";
7
7
  import { useCoreSDKWithContext } from "../../../../../hooks/core-sdk/useCoreSdkWithContext";
8
+ import { formatAddress } from "../../../../../lib/address/address";
8
9
  import { isNftItem, isProductV1Item } from "../../../../../lib/bundle/filter";
9
10
  import { getOfferDetails } from "../../../../../lib/offer/getOfferDetails";
11
+ import { theme } from "../../../../../theme";
10
12
  import { Offer } from "../../../../../types/offer";
13
+ import { Tooltip } from "../../../../tooltip/Tooltip";
11
14
  import { Grid } from "../../../../ui/Grid";
12
15
  import IpfsImage from "../../../../ui/IpfsImage";
13
16
  import ThemedButton from "../../../../ui/ThemedButton";
14
17
  import { Typography } from "../../../../ui/Typography";
15
18
  import Video from "../../../../ui/Video";
16
- import { theme } from "../../../../../theme";
19
+ import { digitalTypeMappingDisplay } from "../../../../../lib/bundle/const";
17
20
  const colors = theme.colors.light;
18
21
  const imageSize = "2.5rem";
19
22
 
@@ -23,6 +26,17 @@ const MediaWrapper = styled.div`
23
26
  height: ${imageSize};
24
27
  min-width: ${imageSize};
25
28
  overflow: hidden;
29
+ .loading-container {
30
+ padding-top: 100%;
31
+ }
32
+ `;
33
+ const Pill = styled.div`
34
+ border: 3px solid ${({ theme }) => theme?.colors?.light.accent};
35
+ background: white;
36
+ white-space: nowrap;
37
+ min-width: 9ch;
38
+ box-sizing: content-box;
39
+ text-align: center;
26
40
  `;
27
41
  const ActionText = ({ children }: { children: ReactNode }) => {
28
42
  return <span style={{ fontSize: "0.75rem" }}>{children}</span>;
@@ -50,27 +64,7 @@ export const PhygitalProduct: React.FC<PhygitalProductProps> = ({ offer }) => {
50
64
  },
51
65
  { enabled: !!contracts?.length, coreSDK }
52
66
  );
53
- const { data: ercImages } = useGetTokenUriImage(
54
- {
55
- tokenIds: bundleItems?.map((bundleItem) => {
56
- if (isNftItem(bundleItem)) {
57
- return (
58
- bundleItem.tokenIdRange?.min ??
59
- bundleItem.tokenIdRange?.max ??
60
- bundleItem.tokenId
61
- );
62
- }
63
- return null;
64
- }),
65
- tokenUris: bundleItems?.map((bundleItem) => {
66
- if (isNftItem(bundleItem)) {
67
- return bundleItem.metadataUri;
68
- }
69
- return null;
70
- })
71
- },
72
- { enabled: !!bundleItems?.length }
73
- );
67
+ const { images } = useBundleItemsImages({ bundleItems, coreSDK });
74
68
  return (
75
69
  <Grid flexDirection="column" alignItems="flex-start" gap="1rem">
76
70
  <Typography>
@@ -83,16 +77,22 @@ export const PhygitalProduct: React.FC<PhygitalProductProps> = ({ offer }) => {
83
77
  <Grid as="ul" flexDirection="column" gap="1rem" padding="0">
84
78
  {bundleItems?.map((bundleItem, index) => {
85
79
  let quantity = 1;
86
- let name: string;
80
+ let name: string | ReactNode;
87
81
  let contract: string | undefined | null;
88
82
  let imageSrc: string | undefined | null;
89
83
  let videoSrc: string | undefined | null;
90
84
  let rangeText: JSX.Element | undefined | null;
85
+ let pill: ReactNode | undefined | null;
91
86
  if (isProductV1Item(bundleItem)) {
92
87
  quantity = 1;
93
88
  name = bundleItem.product.title;
94
- imageSrc = bundleItem.product.visuals_images?.[0]?.url;
95
- videoSrc = bundleItem.product.visuals_videos?.[0]?.url;
89
+ imageSrc =
90
+ bundleItem.productOverrides?.visuals_images?.[0]?.url ||
91
+ bundleItem.product.visuals_images?.[0]?.url;
92
+ videoSrc =
93
+ bundleItem.productOverrides?.visuals_videos?.[0]?.url ||
94
+ bundleItem.product.visuals_videos?.[0]?.url;
95
+ pill = <Pill>Physical</Pill>;
96
96
  } else if (isNftItem(bundleItem)) {
97
97
  quantity = bundleItem.quantity || 1;
98
98
  name =
@@ -101,7 +101,22 @@ export const PhygitalProduct: React.FC<PhygitalProductProps> = ({ offer }) => {
101
101
  erc1155Names?.[index] ||
102
102
  "Untitled";
103
103
  contract = bundleItem.contract;
104
- imageSrc = ercImages?.[index] || bundleItem.image;
104
+ if (name === contract && typeof name === "string" && contract) {
105
+ name = (
106
+ <Tooltip
107
+ content={contract}
108
+ maxWidth="none"
109
+ interactive
110
+ hideOnClick={false}
111
+ wrap={false}
112
+ >
113
+ <span style={{ wordBreak: "keep-all" }}>
114
+ {formatAddress(contract)}
115
+ </span>
116
+ </Tooltip>
117
+ );
118
+ }
119
+ imageSrc = images?.[index];
105
120
  videoSrc = bundleItem.animationUrl;
106
121
  rangeText =
107
122
  bundleItem.tokenIdRange?.min ||
@@ -124,6 +139,22 @@ export const PhygitalProduct: React.FC<PhygitalProductProps> = ({ offer }) => {
124
139
  : `IDs: ${bundleItem.tokenIdRange?.min}-${bundleItem.tokenIdRange?.max}`}
125
140
  </span>
126
141
  ) : null;
142
+ const type = bundleItem.attributes?.find(
143
+ (attribute) => attribute.traitType === "type"
144
+ );
145
+ pill =
146
+ type &&
147
+ digitalTypeMappingDisplay[
148
+ type.value as keyof typeof digitalTypeMappingDisplay
149
+ ] ? (
150
+ <Pill>
151
+ {
152
+ digitalTypeMappingDisplay[
153
+ type.value as keyof typeof digitalTypeMappingDisplay
154
+ ]
155
+ }
156
+ </Pill>
157
+ ) : null;
127
158
  } else {
128
159
  name = "Unknown";
129
160
  }
@@ -141,17 +172,27 @@ export const PhygitalProduct: React.FC<PhygitalProductProps> = ({ offer }) => {
141
172
  color: colors.darkGrey
142
173
  }}
143
174
  >
144
- {imageSrc ? (
175
+ {videoSrc ? (
145
176
  <MediaWrapper>
146
- <IpfsImage src={imageSrc} />
177
+ <Video src={videoSrc} />
147
178
  </MediaWrapper>
148
- ) : videoSrc ? (
179
+ ) : imageSrc ? (
149
180
  <MediaWrapper>
150
- <Video src={videoSrc} />
181
+ <IpfsImage
182
+ src={imageSrc}
183
+ overrides={{ ipfsGateway: "https://ipfs.io/ipfs" }}
184
+ />
151
185
  </MediaWrapper>
152
- ) : null}
186
+ ) : (
187
+ <MediaWrapper></MediaWrapper>
188
+ )}
189
+ {pill}
153
190
  <div>{quantity}x</div>
154
- <Grid flexDirection="column" alignItems="flex-start">
191
+ <Grid
192
+ flexDirection="column"
193
+ alignItems="flex-start"
194
+ style={{ wordBreak: "break-all" }}
195
+ >
155
196
  {name} {rangeText}
156
197
  </Grid>
157
198
  {contract && (
@@ -162,7 +203,7 @@ export const PhygitalProduct: React.FC<PhygitalProductProps> = ({ offer }) => {
162
203
  style={{ flex: 0 }}
163
204
  >
164
205
  <ThemedButton size="regular" themeVal="blankSecondary">
165
- <ActionText>Buy</ActionText>{" "}
206
+ <ActionText>Contract</ActionText>{" "}
166
207
  <ArrowSquareUpRight size="16" />
167
208
  </ThemedButton>
168
209
  </a>
@@ -10,12 +10,12 @@ import React, {
10
10
  useState
11
11
  } from "react";
12
12
  import styled from "styled-components";
13
- import { useErc1155Uri } from "../../../../../hooks/contracts/erc1155/useErc1155Uri";
13
+ import { useErc1155Uris } from "../../../../../hooks/contracts/erc1155/useErc1155Uris";
14
14
  import { useErc20ExchangeTokenInfo } from "../../../../../hooks/contracts/erc20/useErc20ExchangeTokenInfo";
15
- import { useErc721TokenUri } from "../../../../../hooks/contracts/erc721/useErc721TokenUri";
15
+ import { useErc721TokenUris } from "../../../../../hooks/contracts/erc721/useErc721TokenUris";
16
16
  import { useCoreSDKWithContext } from "../../../../../hooks/core-sdk/useCoreSdkWithContext";
17
17
  import { nativeOnChain } from "../../../../../lib/const/tokens";
18
- import { useGetTokenUriImage } from "../../../../../hooks/contracts/useGetTokenUriImage";
18
+ import { useGetTokenUriImages } from "../../../../../hooks/contracts/useGetTokenUriImages";
19
19
  import { theme } from "../../../../../theme";
20
20
  import { Offer } from "../../../../../types/offer";
21
21
  import { useConfigContext } from "../../../../config/ConfigContext";
@@ -185,10 +185,15 @@ export const TokenGatedItem = ({
185
185
  coreSDK
186
186
  }
187
187
  );
188
- const { data: erc721TokenUri } = useErc721TokenUri(
188
+ const pairsContractTokens = [
189
189
  {
190
190
  contractAddress: condition?.tokenAddress,
191
191
  tokenIds: [condition?.minTokenId]
192
+ }
193
+ ];
194
+ const { data: erc721TokenUri } = useErc721TokenUris(
195
+ {
196
+ pairsContractTokens
192
197
  },
193
198
  {
194
199
  enabled:
@@ -198,10 +203,9 @@ export const TokenGatedItem = ({
198
203
  coreSDK
199
204
  }
200
205
  );
201
- const { data: erc1155Uri } = useErc1155Uri(
206
+ const { data: erc1155Uri } = useErc1155Uris(
202
207
  {
203
- contractAddress: condition?.tokenAddress,
204
- tokenIds: [condition?.minTokenId]
208
+ pairsContractTokens
205
209
  },
206
210
  {
207
211
  enabled:
@@ -230,17 +234,25 @@ export const TokenGatedItem = ({
230
234
  );
231
235
 
232
236
  const tokenIdForImage = condition?.minTokenId;
233
- const { data: erc721Image } = useGetTokenUriImage(
237
+ const { data: erc721Image } = useGetTokenUriImages(
234
238
  {
235
- tokenUris: erc721TokenUri,
236
- tokenIds: [tokenIdForImage]
239
+ pairsTokenUrisIds: [
240
+ {
241
+ tokenUris: erc721TokenUri?.[0],
242
+ tokenIds: [tokenIdForImage]
243
+ }
244
+ ]
237
245
  },
238
246
  { enabled: !!(erc721TokenUri && erc721TokenUri[0] && tokenIdForImage) }
239
247
  );
240
- const { data: erc1155Image } = useGetTokenUriImage(
248
+ const { data: erc1155Image } = useGetTokenUriImages(
241
249
  {
242
- tokenUris: erc1155Uri,
243
- tokenIds: [tokenIdForImage]
250
+ pairsTokenUrisIds: [
251
+ {
252
+ tokenUris: erc1155Uri?.[0],
253
+ tokenIds: [tokenIdForImage]
254
+ }
255
+ ]
244
256
  },
245
257
  { enabled: !!(erc1155Uri && erc1155Uri[0] && tokenIdForImage) }
246
258
  );
@@ -255,9 +267,9 @@ export const TokenGatedItem = ({
255
267
  currencies={[currency]}
256
268
  />
257
269
  ) : erc721Image ? (
258
- <ErcImage src={erc721Image[0]} alt="erc721" />
270
+ <ErcImage src={erc721Image[0][0]} alt="erc721" />
259
271
  ) : erc1155Image ? (
260
- <ErcImage src={erc1155Image[0]} alt="erc1155" />
272
+ <ErcImage src={erc1155Image[0][0]} alt="erc1155" />
261
273
  ) : null}
262
274
  </>
263
275
  );
@@ -13,6 +13,45 @@ export const ProductCardLabelWrapper = styled.div`
13
13
  z-index: 1;
14
14
  `;
15
15
 
16
+ export const TopLeftRibbon = styled.div`
17
+ --d: 6px; /* folded part */
18
+ position: relative;
19
+ z-index: 1;
20
+ &:before {
21
+ content: attr(data-text);
22
+ font-size: var(--f);
23
+ font-weight: 600;
24
+ /* I : position & coloration */
25
+ position: absolute;
26
+ top: 0;
27
+ left: 0;
28
+ transform: translate(0%, 125%) rotate(-45deg);
29
+ transform-origin: bottom left;
30
+ padding: 5px 35px calc(var(--d) + 5px);
31
+ color: ${({ theme }) => theme?.colors?.light.white};
32
+ background: linear-gradient(rgba(0, 0, 0, 0.5) 0 0) bottom/100% var(--d)
33
+ no-repeat ${({ theme }) => theme?.colors?.light.secondary};
34
+ /* II : clipping */
35
+ clip-path: polygon(
36
+ 0 0,
37
+ 100% 0,
38
+ 100% 100%,
39
+ calc(100% - var(--d)) calc(100% - var(--d)),
40
+ var(--d) calc(100% - var(--d)),
41
+ 0 100%
42
+ );
43
+ /* III : masking */
44
+ -webkit-mask:
45
+ linear-gradient(135deg, transparent calc(50% - var(--d) * 0.707), #fff 0)
46
+ bottom left,
47
+ linear-gradient(-135deg, transparent calc(50% - var(--d) * 0.707), #fff 0)
48
+ bottom right;
49
+ -webkit-mask-size: 300vmax 300vmax;
50
+ -webkit-mask-composite: destination-in;
51
+ mask-composite: intersect;
52
+ }
53
+ `;
54
+
16
55
  export const ProductCardCreator = styled.div`
17
56
  display: flex;
18
57
  flex-direction: column;
@@ -130,8 +169,10 @@ export const ProductCardWrapper = styled.div<{ $isHoverDisabled: boolean }>`
130
169
  ? css`
131
170
  transition: all 300ms ease-in-out;
132
171
  &:hover {
133
- box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.05),
134
- 4px 4px 4px rgba(0, 0, 0, 0.05), 8px 8px 8px rgba(0, 0, 0, 0.05),
172
+ box-shadow:
173
+ 0px 0px 0px rgba(0, 0, 0, 0.05),
174
+ 4px 4px 4px rgba(0, 0, 0, 0.05),
175
+ 8px 8px 8px rgba(0, 0, 0, 0.05),
135
176
  16px 16px 16px rgba(0, 0, 0, 0.05);
136
177
 
137
178
  [data-image-wrapper] {
@@ -11,6 +11,7 @@ import {
11
11
  ProductCardBottomContent,
12
12
  ProductCardCreator,
13
13
  ProductCardCreatorAvatar,
14
+ TopLeftRibbon,
14
15
  ProductCardCreatorName,
15
16
  ProductCardData,
16
17
  ProductCardImageWrapper,
@@ -62,8 +63,8 @@ const Wrapper = ({
62
63
  }
63
64
  return <>{children}</>;
64
65
  };
65
- export const PhygitalLabel = () => {
66
- return <ProductCardLabelWrapper>Phygital</ProductCardLabelWrapper>;
66
+ export const PhygitalLabel = ({ ...rest }) => {
67
+ return <TopLeftRibbon {...rest} data-text="Phygital" />;
67
68
  };
68
69
  export const ProductCard = (props: IProductCard) => {
69
70
  const {