@mojito-inc/secondary-market
Version:
Mojito secondary market is the platform to purchase NFT.
2 lines (1 loc) • 18.9 kB
JavaScript
import{jsx as i}from"react/jsx-runtime";import{useState as e,useMemo as r,useCallback as o,useEffect as t}from"react";import{useAuth as l,useOffer as a}from"@mojito-inc/core-service";import{ProviderType as n,Currency as d,CryptoCurrency as s,TaxEstimateType as u}from"../interface/index.js";import{useTokenDetails as c}from"../hooks/useTokenDetails.js";import{buyerBalance as m,acceptOfferSolana as v,acceptOfferApproval as p}from"../utils/acceptOfferContract.utils.js";import{checkApproval as f,approveToken as g,waitForApproval as y}from"../utils/listItemContract.utils.js";import{useTax as w}from"../hooks/useTax.js";import{useSupportedCurrency as A}from"../hooks/useSupportedCurrency.js";import{getFee as h}from"../utils/getFee.utils.js";import{onSwitchNetwork as O}from"../utils/switchNetwork.utils.js";import"@mui/material/Stack";import"@mui/material/Modal";import"@mui/material/Divider";import"@mui/material/Grid";import"@mui/material/Button";import"@mui/material/Typography";import"@mui/material/Box";import"@mui/material/styles";import"html-react-parser";import"../component/VideoWithImageCard.js";import"@mui/material/Tooltip";import"@mui/icons-material/InfoOutlined";import"@mui/icons-material/KeyboardArrowDown";import"@mui/material/Select";import"@mui/material/TextField";import"@mui/material/MenuItem";import"@mui/icons-material/ImportExport";import"@mui/icons-material/Warning";import"@mui/icons-material/CheckCircleOutline";import"@mui/icons-material/ErrorOutline";import"@mui/material/Checkbox";import"@mui/icons-material/ContentCopy";import{truncateAddress as b}from"../utils/truncateAddress.utils.js";import"@mui/icons-material/KeyboardArrowUp";import"@mui/icons-material/HelpOutline";import"@mui/material/IconButton";import"@mui/icons-material/FavoriteBorder";import"@mui/icons-material/Favorite";import"@mui/icons-material/FileCopyOutlined";import"moment";import"@mui/material/Pagination";import"@mui/material/PaginationItem";import"@mui/material";import"@mui/material/Table";import"@mui/material/TableCell";import"@mui/material/TableHead";import"@mui/material/TableBody";import"@mui/material/TableRow";import"@mui/material/TableContainer";import"@mui/icons-material/OpenInNew";import"@mui/material/Skeleton";import"@mui/material/CardActions";import"@mui/material/Card";import"@mui/material/CardContent";import"@mui/icons-material/RemoveCircleOutline";import"@mui/icons-material/SellOutlined";import"@mui/icons-material/AttachMoneyOutlined";import"@mui/icons-material/Send";import"@mui/icons-material/NewReleases";import"@mui/icons-material/CancelScheduleSend";import"@mui/icons-material/HourglassDisabledOutlined";import"@mui/icons-material/CallMissedOutlined";import"@mui/icons-material/MoveToInboxOutlined";import"@mui/icons-material/CheckCircleOutlineOutlined";import"@mui/icons-material/BorderColorOutlined";import"@mui/icons-material/Twitter";import"@mui/icons-material/MoreVert";import"../constant/index.js";import"@mui/material/useMediaQuery";import"@mui/material/CircularProgress";import"react-player";import"@mui/icons-material/Pause";import"@mui/icons-material/PlayArrow";import"../_virtual/_tslib.js";import"@mui/material/Tab";import"@mui/material/Tabs";import"@mui/material/Menu";import"@mui/material/ListItem";import"@mui/material/List";import"@mui/icons-material/Close";import"@mui/material/ListItemText";import"@mui/icons-material/CheckRounded";import"@mui/icons-material/FiberManualRecord";import"@mui/icons-material/Refresh";import"../component/RenderIf.js";import"@mui/icons-material/AccountBalanceWallet";import"@mui/material/Breadcrumbs";import"@mui/icons-material/ArrowForward";import j from"../layout/AcceptAndRejectOfferLayout.js";import"@mui/material/InputAdornment";import"@mui/icons-material/Search";import"@mui/icons-material/FilterList";import"../provider/CollectionFilterProvider.js";import"@mui/material/Accordion";import"@mui/material/AccordionSummary";import"@mui/material/AccordionDetails";import"@mui/material/FormControlLabel";import"@mui/icons-material/ExitToAppOutlined";import{getValidURL as C}from"../utils/getValidURL.utils.js";import{calculatePercentageDifference as k}from"../utils/calculateDifference.utils.js";import{useTokenOffer as I}from"../hooks/useTokenOffer.js";import{rejectOfferSolana as P}from"../utils/rejectOfferContract.utils.js";import{truncateDecimal as D}from"../utils/truncateDecimal.utils.js";import{getTraitsDescription as T}from"../utils/traits.utils.js";import S from"../hooks/useSolanaWalletPolling.js";import{useSentry as F}from"../provider/SentryProvider.js";const R=({open:R,image:x,config:M,tokenDetails:$,orderId:L,isRejectOffer:E,tokenDetailsData:N,walletDetails:B,isPDP:U,customRPCUrl:H,mediaCardAttributes:V,onClickViewItem:W,onCloseModal:K,onClickBackToMarketPlace:_,onConnectWallet:G,onRefetchBalance:q,onHandleApiSessionExpired:Q})=>{var z,J,X,Y,Z,ii,ei,ri,oi,ti,li,ai,ni,di,si,ui,ci,mi,vi,pi,fi,gi,yi,wi,Ai,hi;const[Oi,bi]=e(E?"Reject Offer":"Accept Offer"),{addCaptureExceptionForSentry:ji,addExtraLogsForSentry:Ci}=F(),[ki,Ii]=e(""),{sessionStatus:Pi}=l(),[Di,Ti]=e({loading:!1,success:!1}),[Si,Fi]=e(""),[Ri,xi]=e(""),[Mi,$i]=e(""),{checkForMismatchWalletAddress:Li}=S(),{getSignatureForOfferApproval:Ei,acceptOffer:Ni,rejectOffer:Bi,initiateRejectOffer:Ui}=a(),Hi=r((()=>[{label:E?"Reject Offer":"Accept Offer",value:E?"Reject Offer":"Accept Offer"},{label:"Confirmation",value:"Confirmation"}]),[E]),Vi=r((()=>(null==B?void 0:B.providerType)===n.METAMASK),[null==B?void 0:B.providerType]),Wi=r((()=>{var i;return{orgId:M.orgId,contractAddress:$.contractAddress,itemId:$.itemId,onChainTokenID:$.onChainTokenID,currency:null!==(i=null==M?void 0:M.currency)&&void 0!==i?i:d.USD}}),[M,$]),Ki=r((()=>"ethereum"===B.walletType),[B.walletType]),_i=r((()=>"solana"===(null==B?void 0:B.walletType)),[B.walletType]),Gi=r((()=>_i?"VIN":"ETH"),[_i]),qi=r((()=>Object.assign(Object.assign({},Wi),{cryptoCurrencyCode:null!=Gi?Gi:s.ETH})),[Gi,Wi]),{tokenData:Qi,networkData:zi,detailsLoading:Ji,isNetworkLoading:Xi,isPriceLoading:Yi,reFetchAPI:Zi}=c(qi,R,N),{taxData:ie}=w(M.orgId,u.ACCEPT_OFFER,$.itemId,R),{supportedCurrencyData:ee,currencyLoading:re}=A(Wi,R),{offerData:oe,offerLoading:te,offerRefetch:le}=I(null==M?void 0:M.orgId,null!==(z=null==Qi?void 0:Qi.nftTokenId)&&void 0!==z?z:"",!!B.walletAddress,M.currency),ae=r((()=>{const i=null==oe?void 0:oe.filter((i=>(null==i?void 0:i.id)===L));return null==i?void 0:i[0]}),[oe,L]),ne=r((()=>{const i=null==zi?void 0:zi.filter((i=>i.id===(null==Qi?void 0:Qi.networkID)));return null==i?void 0:i[0]}),[zi,Qi]),de=r((()=>{var i,e;return(null===(i=null==Qi?void 0:Qi.tokenOwnerAddress)||void 0===i?void 0:i.toLowerCase())===(null===(e=null==B?void 0:B.walletAddress)||void 0===e?void 0:e.toLowerCase())}),[Qi,null==B?void 0:B.walletAddress]),se=r((()=>"PENDING"===(null==ae?void 0:ae.offerStatus)&&de),[ae,de]),ue=r((()=>{var i,e,r;if(_i){const r=null===(e=null===(i=null==Qi?void 0:Qi.metadata)||void 0===i?void 0:i.attributes)||void 0===e?void 0:e.find((i=>{var e;return"winery"===(null===(e=i.traitType)||void 0===e?void 0:e.toLowerCase())}));return r?T(r.value):""}return null===(r=null==Qi?void 0:Qi.artist)||void 0===r?void 0:r.artistName}),[null===(J=null==Qi?void 0:Qi.artist)||void 0===J?void 0:J.artistName,_i,null===(X=null==Qi?void 0:Qi.metadata)||void 0===X?void 0:X.attributes]),ce=o(((i={},e={})=>{Object.keys(i).length>0&&i.key&&Ci(i.key,i.value),Object.keys(e).length>0&&e.exception&&ji(e.exception,e.hint)}),[ji,Ci]),me=o((i=>{$i(i)}),[$i]);t((()=>{"Expired"===Pi&&(K(),null==Q||Q())}),[Q,K,Pi]),t((()=>{R&&(Zi(),le())}),[R,le,Zi]),t((()=>{R&&(Ii(""),Ti({loading:!1,success:!1}),bi(E?"Reject Offer":"Accept Offer"),(null==B?void 0:B.walletAddress)||xi("Connect your wallet to complete process"),(null==B?void 0:B.walletAddress)&&xi(""))}),[R,null==B?void 0:B.walletAddress,E]),t((()=>{var i,e;R&&(ne&&(null==ne?void 0:ne.chainID)!==(null===(i=null==B?void 0:B.networkDetails)||void 0===i?void 0:i.chainID)&&(null==B?void 0:B.walletAddress)&&Fi(null==ne?void 0:ne.name),ne&&(null==ne?void 0:ne.chainID)===(null===(e=null==B?void 0:B.networkDetails)||void 0===e?void 0:e.chainID)&&Fi(""))}),[R,ne,null===(Y=null==B?void 0:B.networkDetails)||void 0===Y?void 0:Y.chainID,null==B?void 0:B.walletAddress]);const ve=r((()=>{const i=null==ee?void 0:ee.filter((i=>{var e,r;return i.symbol===(null===(r=null===(e=null==ae?void 0:ae.price)||void 0===e?void 0:e[1])||void 0===r?void 0:r.unit)}));return null==i?void 0:i[0]}),[ee,ae]),pe=r((()=>{var i,e;if(ie){const r=null!==(e=null!==(i=ie.commissionFee)&&void 0!==i?i:0+ie.royaltyFee)&&void 0!==e?e:0;return null!=r?r:0}return 0}),[ie]),fe=o((i=>{var e,r;if(ie){return i-(h(i,pe,!1,!0)+h(i,null!==(e=null==ie?void 0:ie.platformFee)&&void 0!==e?e:0,!1,!0)+h(i,null!==(r=null==ie?void 0:ie.taxPercentage)&&void 0!==r?r:0,!1,!0))}return 0}),[ie,pe]),ge=r((()=>{var i;if(pe&&(null==ae?void 0:ae.price[0].value)){const e=h(+(null!==(i=ae.price[1].value)&&void 0!==i?i:"0"),pe,!1),r=h(e,Number(null==ae?void 0:ae.price[0].value),!0);return{cryptoPrice:e,title:`Creator Earnings (${pe}%)`,usdPrice:r}}return{cryptoPrice:0,title:"Creator Earnings (0%)",usdPrice:0}}),[ae,pe]),ye=r((()=>{var i;if((null==ie?void 0:ie.platformFee)&&(null==ae?void 0:ae.price[0].value)){const e=h(+(null!==(i=ae.price[1].value)&&void 0!==i?i:"0"),null==ie?void 0:ie.platformFee,!1),r=h(e,Number(null==ae?void 0:ae.price[0].value),!0);return{cryptoPrice:e,title:`Service Fee (${null==ie?void 0:ie.platformFee}%)`,usdPrice:r}}return{cryptoPrice:0,title:"Service Fee (0%)",usdPrice:0}}),[ae,ie]),we=o((async(i,e)=>{var r,o;try{if(null===(r=null==ve?void 0:ve.network)||void 0===r?void 0:r.wethAddress){const r=await m(i,null===(o=null==ve?void 0:ve.network)||void 0===o?void 0:o.wethAddress,B.provider,B.networkDetails.chainID);return r&&+r>e?(Ii(""),!0):(Ii(`Buyer do not have sufficient ${null==ve?void 0:ve.symbol} to execute this order. Please reject or try again later.`),!1)}return!1}catch(i){return Ii(`Buyer do not have sufficient ${null==ve?void 0:ve.symbol} to execute this order. Please reject or try again later.`),!1}}),[ve,null==B?void 0:B.provider,null===(Z=null==B?void 0:B.networkDetails)||void 0===Z?void 0:Z.chainID]),Ae=o((async()=>{var i,e,r,o;try{Ti(Object.assign(Object.assign({},Di),{loading:!0})),bi("Confirmation");const t=await Li(null==B?void 0:B.walletAddress,null==B?void 0:B.providerType,ce);if(!(null==t?void 0:t.isMismatched))return Ii(`The initially connected wallet has been changed. Please switch back to the wallet \n (${b(null==B?void 0:B.walletAddress)}) to continue.`),void Ti({success:!1,loading:!1});const l=await Ei({orgId:M.orgId,orderId:L},{fetchPolicy:"no-cache"}),{walletAddress:a,balance:n,provider:d,providerType:s,networkDetails:{chainID:u}}=B,c=await v(a,n,d,s,me,u,null===(e=null===(i=l.data)||void 0===i?void 0:i.getSignatureForOfferApproval)||void 0===e?void 0:e.bubblegumParams,H,ce);if(c&&!c.error||(Ti({loading:!1,success:!1}),$i(""),Ii((null==c?void 0:c.error)||"Something went wrong")),null==c?void 0:c.success)try{await Ni({orgId:M.orgId,orderId:null!==(r=null==ae?void 0:ae.id)&&void 0!==r?r:"",transactionHash:null===(o=c.response)||void 0===o?void 0:o.hash})}catch(i){}finally{Ti({loading:!1,success:!0})}}catch(i){Ti({loading:!1,success:!1}),ce({key:"Additional Data",value:{path:"Error Inside an Accept Offer function catch block - 325"}},{exception:i}),$i(""),Ii((null==i?void 0:i.message)||"An error was encountered while processing your payment")}}),[M.orgId,L,Di,null==ae?void 0:ae.id,B,H,Ni,Ei,me,Li,ce]),he=o((async i=>{var e,r,o,t;try{if(Ki){Ti(Object.assign(Object.assign({},Di),{loading:!0}));const l=await Ei({orgId:M.orgId,orderId:L});if((null===(r=null===(e=l.data)||void 0===e?void 0:e.getSignatureForOfferApproval)||void 0===r?void 0:r.proofOfApproval)&&ae&&ie&&ve&&Qi){const e=await p({tokenId:String(null==Qi?void 0:Qi.tokenId),price:null==ae?void 0:ae.price[1].value,buyerAddress:null==ae?void 0:ae.buyerAddress,contractAddress:null==Qi?void 0:Qi.contractAddress,proofOfApproval:null===(o=l.data)||void 0===o?void 0:o.getSignatureForOfferApproval.proofOfApproval,random:null==ae?void 0:ae.id,quantity:1,tax:null==ie?void 0:ie.taxPercentage,expiryDate:null==ae?void 0:ae.expiryDate,marketPlaceContractAddress:null==ve?void 0:ve.secondaryMarketplaceContractAddress,networkContractAddress:null===(t=null==ve?void 0:ve.network)||void 0===t?void 0:t.wethAddress,provider:i});e?(await Ni({orgId:M.orgId,orderId:null==ae?void 0:ae.id,transactionHash:e}),Ti(Object.assign(Object.assign({},Di),{loading:!1,success:!0}))):(Ti(Object.assign(Object.assign({},Di),{loading:!1})),Ii("An error was encountered while processing your payment"))}}_i&&await Ae()}catch(i){Ti(Object.assign(Object.assign({},Di),{loading:!1})),Ii((null==i?void 0:i.message)||"An error was encountered while processing your payment")}}),[ae,M,ve,ie,Di,Qi,L,Ki,_i,Ae,Ni,Ei]),Oe=o((async()=>{var i,e,r,o,t,l;try{Ti({loading:!0,success:!1}),bi("Confirmation");const a=await Li(null==B?void 0:B.walletAddress,null==B?void 0:B.providerType,ce);if(!(null==a?void 0:a.isMismatched))return Ii(`The initially connected wallet has been changed. Please switch back to the wallet \n (${b(null==B?void 0:B.walletAddress)}) to continue.`),void Ti({success:!1,loading:!1});const n=await Ui({orgId:M.orgId,orderId:L,walletAddress:null==B?void 0:B.walletAddress},{fetchPolicy:"no-cache"}),{walletAddress:d,balance:s,provider:u,providerType:c,networkDetails:{chainID:m}}=B,v=await P(d,s,u,c,me,m,null!==(r=null===(e=null===(i=null==n?void 0:n.data)||void 0===i?void 0:i.initiateRejectOffer)||void 0===e?void 0:e.mintAccount)&&void 0!==r?r:"",null===(o=null==n?void 0:n.data)||void 0===o?void 0:o.initiateRejectOffer,H,ce);if(v&&!v.error||(Ti({loading:!1,success:!1}),me(""),Ii((null==v?void 0:v.error)||"Something went wrong")),null==v?void 0:v.success)try{await Bi({orgId:M.orgId,orderId:L,signature:null===(t=v.response)||void 0===t?void 0:t.hash,walletAddress:d,currency:null!==(l=M.currency)&&void 0!==l?l:"USD"})}catch(i){}finally{Ti({loading:!1,success:!0})}}catch(i){Ti({success:!1,loading:!1}),me(""),ce({key:"Additional Data",value:{path:"Error Inside an Reject offer function catch block - 480"}},{exception:i}),Ii((null==i?void 0:i.message)||"An error was encountered while processing your payment")}}),[M.orgId,M.currency,L,B,H,Ui,Bi,me,Li,ce]),be=o((async()=>{try{Ki&&(Ti(Object.assign(Object.assign({},Di),{loading:!0})),await Bi({orgId:M.orgId,orderId:L}),Ti(Object.assign(Object.assign({},Di),{loading:!1,success:!0}))),_i&&await Oe()}catch(i){Ti(Object.assign(Object.assign({},Di),{loading:!1})),Ii((null==i?void 0:i.message)||"An error was encountered while processing your payment")}}),[Di,Ki,_i,M.orgId,L,Oe,Bi]),je=o((async i=>{var e;try{if(!(null==B?void 0:B.walletAddress))return void G();if("Retry"===i)return Ii(""),void bi(E?"Reject Offer":"Accept Offer");if("View Account"!==i&&"View Item"!==i||(Ii(""),Ti({success:!1,loading:!1}),bi(E?"Reject Offer":"Accept Offer"),null==q||q(!0),W()),"Reject Offer"===i&&be(),"Accept Offer"===i&&ae){if(Ti(Object.assign(Object.assign({},Di),{loading:!0})),Ki){if(await we(null==ae?void 0:ae.buyerAddress,null==ae?void 0:ae.price[1].value)&&Qi&&ve){let i=null;i=(null==B?void 0:B.providerType)===n.EMAIL?null===(e=null==B?void 0:B.provider)||void 0===e?void 0:e.provider:null==B?void 0:B.provider;if(await f({tokenContractAddress:null==Qi?void 0:Qi.contractAddress,contractName:null==Qi?void 0:Qi.tokenType,marketPlaceContractAddress:null==ve?void 0:ve.secondaryMarketplaceContractAddress,provider:i}))he(i);else{const e=await g({tokenContractAddress:null==Qi?void 0:Qi.contractAddress,contractName:null==Qi?void 0:Qi.tokenType,marketPlaceContractAddress:null==ve?void 0:ve.secondaryMarketplaceContractAddress,provider:i});if(null==e?void 0:e.status){await y(null==e?void 0:e.message)&&he(i)}else Ti(Object.assign(Object.assign({},Di),{loading:!1})),Ii(null==e?void 0:e.message)}}}_i&&he(null)}}catch(i){Ti(Object.assign(Object.assign({},Di),{loading:!1})),Ii((null==i?void 0:i.message)||"An error was encountered while processing your payment")}}),[Qi,ae,ve,Di,null==B?void 0:B.walletAddress,null==B?void 0:B.provider,null==B?void 0:B.providerType,E,Ki,_i,be,we,he,W,G,q]),Ce=o((async()=>{if(ne){Fi(""),Ti(Object.assign(Object.assign({},Di),{loading:!0}));const i=await O(null==ne?void 0:ne.chainID,Vi,B.provider);Ti(Object.assign(Object.assign({},Di),{loading:!1})),Ii(null==i?void 0:i.message)}}),[Vi,B.provider,Di,ne]),ke=o((()=>{Di.loading||(K(),_&&"Confirmation"===Oi&&!ki&&(Ii(""),Ti({success:!1,loading:!1}),bi(E?"Reject Offer":"Accept Offer"),_(),null==q||q(!0)))}),[Oi,E,Di,ki,_,K,q]);return i(j,{open:R,image:x,tokenDetails:{tokenImage:C((null==Qi?void 0:Qi.mediaSourceURL)||(null===(ii=null==Qi?void 0:Qi.metadata)||void 0===ii?void 0:ii.image)||""),tokenName:(null===(ei=null==Qi?void 0:Qi.metadata)||void 0===ei?void 0:ei.name)||"",tokenArtistName:ue||"",thumbnail:null===(ri=null==Qi?void 0:Qi.metadata)||void 0===ri?void 0:ri.image},walletType:null==B?void 0:B.walletType,breadCrumbs:Hi,selectedBreadCrumbs:Oi,error:ki,progress:Di,contractProgressMessage:Mi,price:{totalPrice:`${fe((null===(ti=null===(oi=null==ae?void 0:ae.price)||void 0===oi?void 0:oi[1])||void 0===ti?void 0:ti.value)||0)} ${null==ve?void 0:ve.symbol}`,usd:fe((null===(ai=null===(li=null==ae?void 0:ae.price)||void 0===li?void 0:li[0])||void 0===ai?void 0:ai.value)||0)},listPricePercentage:k(null!==(ui=null===(si=null===(di=null===(ni=null==Qi?void 0:Qi.price)||void 0===ni?void 0:ni.buyNowPrice)||void 0===di?void 0:di[1])||void 0===si?void 0:si.value)&&void 0!==ui?ui:0,(null===(mi=null===(ci=null==ae?void 0:ae.price)||void 0===ci?void 0:ci[1])||void 0===mi?void 0:mi.value)||0),isValidOffer:se,isRejectOffer:E,switchNetwork:Si,isPDP:U,mediaCardAttributes:Object.assign(Object.assign({},V),{customThumbnail:(null==V?void 0:V.customThumbnail)||(null===(vi=null==Qi?void 0:Qi.metadata)||void 0===vi?void 0:vi.image)}),walletConnection:Ri,isLoading:Ji||re||te||Yi||Xi,fiatCurrency:M.currency,creatorFee:{cryptoPrice:`${D(null==ge?void 0:ge.cryptoPrice)} ${Gi}`,title:null==ge?void 0:ge.title,usdPrice:`${D(null==ge?void 0:ge.usdPrice)} ${null!==(pi=M.currency)&&void 0!==pi?pi:"USD"}`},serviceFee:{cryptoPrice:`${D(null==ye?void 0:ye.cryptoPrice)} ${Gi}`,title:null==ye?void 0:ye.title,usdPrice:`${D(null==ye?void 0:ye.usdPrice)} ${null!==(fi=M.currency)&&void 0!==fi?fi:"USD"}`},totalOffer:{title:"Offer Price",cryptoPrice:`${D(null===(yi=null===(gi=null==ae?void 0:ae.price)||void 0===gi?void 0:gi[1])||void 0===yi?void 0:yi.value)} ${Gi}`,usdPrice:`${D(null===(Ai=null===(wi=null==ae?void 0:ae.price)||void 0===wi?void 0:wi[0])||void 0===Ai?void 0:Ai.value)} ${null!==(hi=M.currency)&&void 0!==hi?hi:"USD"}`},onClickConnectWallet:G,onClickAcceptOrRejectOffer:je,onClickSwitchNetwork:Ce,onCloseModal:ke})};export{R as default};