{"version":3,"file":"modal.cd8a134b.js","sources":["../../../app/frontend/src/assets/images/icons/circle-increase.svg","../../../app/frontend/src/assets/images/icons/circle-decrease.svg","../../../app/frontend/entrypoints/page/home/section/generatives/modal.tsx"],"sourcesContent":["export default \"__VITE_ASSET__bddb73fd__\"","export default \"__VITE_ASSET__19c50bbe__\"","import { Dispatch, SetStateAction, useState, useEffect } from 'react'\nimport { BaseProvider } from '@metamask/providers'\nimport { ethers } from 'ethers'\nimport axios from 'axios'\n\nimport { useRecoilState } from 'recoil'\nimport { pageState } from '../../../../../src/atoms/PageAtom'\nimport { pastPageState } from '../../../../../src/atoms/PastPageAtom'\nimport { useTranslation } from 'react-i18next'\n\nimport IncreaseIcon from '../../../../../src/assets/images/icons/circle-increase.svg'\nimport DecreaseIcon from '../../../../../src/assets/images/icons/circle-decrease.svg'\n\ntype Window = {\n ethereum: BaseProvider\n location: Location\n}\ndeclare let window: Window\n\ntype ContractABI = Array\n\ninterface ContractInterface {\n constant?: boolean\n inputs?: Array\n name?: string\n outputs?: Array\n payable?: boolean\n stateMutability?: 'pure' | 'view' | 'nonpayable' | 'payable'\n type?: 'function' | 'constructor' | 'event' | 'fallback'\n anonymous?: boolean\n}\n\ninterface ABIInput {\n name: string\n type: string\n indexed?: boolean\n}\n\ninterface ABIOutput {\n name: string\n type: string\n}\n\ntype Artist = {\n public_id: string\n display_name: string\n}\n\ntype Generative = {\n public_id: string\n contract_address: string\n name: string\n chain_id: number\n uri: string\n artist: Artist\n}\n\ntype PickupGenerative = {\n abi_uri: string\n mint_func: string\n price: string\n outer_link: string\n cover_image_uri: string\n music_uri: string\n max_supply: number\n total_supply: number\n generative: Generative\n}\n\ntype Props = {\n web3: Web3\n pickupGenerative: PickupGenerative | undefined\n setOpenGenerative: Dispatch>\n}\n\nfunction GenerativeModal(props: Props) {\n const { t } = useTranslation()\n const [, setPage] = useRecoilState(pageState)\n const [, setPastPage] = useRecoilState(pastPageState)\n\n const [unit, setUnit] = useState('ETH')\n const [quantity, setQuantity] = useState(1)\n\n const [contract, setContract] = useState()\n const [isTransaction, setIsTransaction] = useState(false)\n\n useEffect(() => {\n if (!props.pickupGenerative) return\n tokenNetworkUnit()\n }, [props.pickupGenerative])\n\n useEffect(() => {\n return () => {\n setQuantity(1)\n props.setOpenGenerative(undefined)\n }\n }, [])\n\n useEffect(() => {\n if (!props.web3.signer && props.web3.provider) return\n contractInit()\n }, [props.web3, props.web3.provider])\n\n const tokenNetworkUnit = () => {\n switch (props.pickupGenerative?.generative.chain_id) {\n case 1:\n setUnit('ETH')\n break\n case 5:\n setUnit('ETH(Goerli)')\n break\n case 137:\n setUnit('MATIC')\n break\n }\n }\n\n // ネットワークの切り替え\n const changeNetwork = async () => {\n if (!props.web3.signer) return\n\n let chainId = '0x1'\n switch (props.pickupGenerative?.generative.chain_id) {\n case 1:\n chainId = '0x1'\n break\n case 5:\n chainId = '0x5'\n break\n case 137:\n chainId = '0x89'\n break\n }\n return await window.ethereum.request({\n method: 'wallet_switchEthereumChain',\n params: [\n {\n chainId: chainId,\n },\n ],\n })\n }\n\n // コントラクト関係処理\n const fetchAbi = async (): Promise => {\n if (!props.pickupGenerative || !props.pickupGenerative.abi_uri)\n throw new Error('ABIが見つかりません')\n\n let abi: ContractABI = []\n await axios({\n method: 'GET',\n url: props.pickupGenerative.abi_uri,\n })\n .then((response) => {\n abi = response.data\n })\n .catch((error) => {\n console.error('error', error)\n })\n return abi\n }\n\n const contractInit = async () => {\n if (!props.web3.signer || !props.pickupGenerative?.generative.chain_id)\n return\n\n const network = await props.web3.provider.getNetwork()\n if (props.pickupGenerative.generative.chain_id !== network.chainId) {\n await changeNetwork()\n }\n const abi = await fetchAbi()\n\n const generativeContract = new ethers.Contract(\n props.pickupGenerative.generative.contract_address,\n abi,\n props.web3.signer\n )\n\n setContract(generativeContract)\n }\n\n const mint = async (): Promise => {\n if (!props.web3.signer || !props.pickupGenerative || !contract) return\n\n const network = await props.web3.provider.getNetwork()\n\n if (props.pickupGenerative.generative.chain_id !== network.chainId) {\n changeNetwork()\n return alert('ネットワークが異なります')\n }\n\n setIsTransaction(true)\n\n const unitPrice = Number(props.pickupGenerative.price)\n const adjNum = 1000000000\n const quantityPrice = (unitPrice * adjNum * quantity) / adjNum\n const totalEtherValue = ethers.utils.parseEther(quantityPrice.toString())\n\n const tx = await contract[props.pickupGenerative.mint_func](quantity, {\n value: totalEtherValue,\n }).catch((error: Error) => {\n const message = error.message\n if (message.indexOf('caller is not token owner or approved') != -1) {\n alert('出品者が転送を許可していなため購入できませんでした。')\n } else if (message.indexOf('user rejected transaction') != -1) {\n alert('キャンセルしました')\n } else if (message.indexOf('insufficient balance for transfer') != -1) {\n alert('購入に失敗しました')\n } else if (message.indexOf('maxSupply over.') != -1) {\n alert('最大供給量をオーバーしています')\n } else if (message.indexOf('mintLimit over.') != -1) {\n alert('Mint可能な上限数をオーバーしています')\n } else if (message.indexOf('outside the period') != -1) {\n alert('アーリーアクセス期間中です')\n } else if (message.indexOf('execution reverted') != -1) {\n alert('トランザクションエラー')\n } else if (\n message.indexOf('Value sent does not meet price for NFT') != -1\n ) {\n alert('コントラクトに送信した資金額が正しくありません')\n } else if (\n message.indexOf('insufficient funds for gas * price + value') != -1\n ) {\n alert(\n 'ウォレット内の資金が不足しているため購入できません。\\n(購入にはNFT自体の価格に加え、ガス代も必要となります。)'\n )\n }\n setIsTransaction(false)\n })\n\n if (!tx) return\n\n await tx\n .wait()\n .then(() => {\n alert(\n '購入が完了しました!\\nマイミュージックを更新してお聴きいただけます。'\n )\n setPastPage('home')\n setPage('mymusic')\n })\n .catch((error: Error) => {\n alert('購入に失敗しました')\n console.error(error.message)\n })\n setIsTransaction(false)\n }\n\n const isContentScroll = (): boolean => {\n const element = document.querySelector('.content')\n if (!element) return false\n\n if (element.scrollHeight > element.clientHeight) return true\n\n return false\n }\n\n return (\n
\n {\n if (isTransaction)\n return alert('トランザクション完了までお待ちください')\n props.setOpenGenerative(undefined)\n }}\n >
\n\n
\n
\n \n

\n {props.pickupGenerative?.generative.name}\n

\n {\n event.stopPropagation()\n setPastPage('home')\n setPage(\n `artists/${props.pickupGenerative?.generative.artist.public_id}`\n )\n }}\n >\n \n \n {props.pickupGenerative?.generative.artist.display_name}\n \n \n
\n

発行枚数

\n

\n {props.pickupGenerative?.total_supply.toLocaleString('en-US')}/\n {props.pickupGenerative?.max_supply.toLocaleString('en-US')}\n

\n {/*
\n
\n
\n
\n
\n
*/}\n
\n MINT PRICE  {props.pickupGenerative?.price} {unit}\n
\n {props.pickupGenerative?.mint_func && (\n
\n {\n if (quantity <= 1) return\n setQuantity(quantity - 1)\n }}\n >\n

{quantity}

\n {\n if (\n props.pickupGenerative &&\n quantity >= props.pickupGenerative?.max_supply\n )\n return\n setQuantity(quantity + 1)\n }}\n >\n
\n )}\n
\n {props.pickupGenerative?.mint_func && (\n {\n if (isTransaction) return alert('現在Transaction中です')\n if (props.web3.signer && contract) {\n mint()\n } else if (props.web3.signer && !contract) {\n contractInit()\n } else {\n if (!window.ethereum)\n return alert('MetaMaskをインストールしてください')\n return alert(t('components.modal.notWalletConnected'))\n }\n }}\n className=\"modal-button\"\n >\n {isTransaction ? 'Transaction中' : 'MINTする'}\n \n )}\n\n {props.pickupGenerative?.outer_link && (\n \n \n MintサイトでMINTする\n \n )}\n
\n {\n setPastPage('home')\n setPage('articles/metamask_pc/detail')\n }}\n className=\"article-link\"\n >\n MetaMaskについて\n \n {\n setPastPage('home')\n setPage('others/terms_fan')\n }}\n className=\"article-link\"\n >\n 利用規約\n \n \n \n \n \n )\n}\n\nexport default GenerativeModal\n"],"names":["IncreaseIcon","DecreaseIcon","GenerativeModal","props","t","useTranslation","setPage","useRecoilState","pageState","setPastPage","pastPageState","unit","setUnit","useState","quantity","setQuantity","contract","setContract","isTransaction","setIsTransaction","useEffect","pickupGenerative","tokenNetworkUnit","setOpenGenerative","undefined","web3","signer","provider","contractInit","generative","chain_id","changeNetwork","chainId","window","ethereum","request","method","params","fetchAbi","abi_uri","Error","abi","axios","url","then","response","data","catch","error","network","getNetwork","generativeContract","ethers","contract_address","mint","alert","unitPrice","Number","price","adjNum","quantityPrice","totalEtherValue","toString","tx","mint_func","value","message","indexOf","wait","isContentScroll","element","document","querySelector","scrollHeight","clientHeight","_jsx","_jsxs","backgroundImage","cover_image_uri","name","event","stopPropagation","artist","public_id","display_name","total_supply","toLocaleString","max_supply","outer_link"],"mappings":"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"}