{"version":3,"file":"StakePreviewModal.vue_vue_type_script_setup_true_lang-721dca06.js","sources":["../../src/components/contextual/pages/pool/staking/StakeSummary.vue","../../src/components/contextual/pages/pool/staking/composables/useStakePreview.ts","../../src/components/contextual/pages/pool/staking/StakePreview.vue","../../src/components/contextual/pages/pool/staking/StakePreviewModal.vue"],"sourcesContent":["\n\n\n","import { ApprovalAction } from '@/composables/approvals/types';\nimport useNumbers, { FNumFormats } from '@/composables/useNumbers';\nimport { fiatValueOf } from '@/composables/usePoolHelpers';\nimport useTransactions from '@/composables/useTransactions';\nimport { usePoolStaking } from '@/providers/local/pool-staking.provider';\nimport { useTokens } from '@/providers/tokens.provider';\nimport { bnum, trackLoading } from '@/lib/utils';\nimport { AnyPool } from '@/services/pool/types';\nimport { TransactionActionInfo } from '@/types/transactions';\nimport {\n TransactionReceipt,\n TransactionResponse,\n} from '@ethersproject/abstract-provider';\nimport { getAddress } from '@ethersproject/address';\nimport { useI18n } from 'vue-i18n';\nimport useTokenApprovalActions from '@/composables/approvals/useTokenApprovalActions';\n\n/**\n * TYPES\n */\nexport type StakeAction = 'stake' | 'unstake' | 'restake';\nexport type StakePreviewProps = {\n pool: AnyPool;\n action: StakeAction;\n};\n\nexport function useStakePreview(props: StakePreviewProps, emit) {\n /**\n * STATE\n */\n const isLoadingApprovalsForGauge = ref(false);\n const isActionConfirmed = ref(false);\n const confirmationReceipt = ref();\n const stakeActions = ref([]);\n\n /**\n * COMPOSABLES\n */\n const { balanceFor, refetchBalances } = useTokens();\n const { fNum } = useNumbers();\n const { t } = useI18n();\n const { addTransaction } = useTransactions();\n const { getTokenApprovalActions } = useTokenApprovalActions();\n const {\n isLoading: isPoolStakingLoading,\n stake,\n unstake,\n stakedShares,\n refetchAllPoolStakingData,\n preferentialGaugeAddress,\n } = usePoolStaking();\n\n // Staked or unstaked shares depending on action type.\n const currentShares =\n props.action === 'stake'\n ? balanceFor(getAddress(props.pool.address))\n : stakedShares.value;\n\n const stakeAction = {\n label: t('stake'),\n loadingLabel: t('staking.staking'),\n confirmingLabel: t('confirming'),\n action: () => txWithNotification(stake, 'stake'),\n stepTooltip: t('staking.stakeTooltip'),\n };\n\n const unstakeAction = {\n label: t('unstake'),\n loadingLabel: t('staking.unstaking'),\n confirmingLabel: t('confirming'),\n action: () => txWithNotification(unstake, 'unstake'),\n stepTooltip:\n props.action === 'restake'\n ? t('staking.restakeTooltip')\n : t('staking.unstakeTooltip'),\n };\n\n /**\n * COMPUTED\n */\n const isStakeAndZero = computed(\n () =>\n props.action === 'stake' &&\n (currentShares === '0' || currentShares === '')\n );\n\n const totalUserPoolSharePct = ref(\n bnum(\n bnum(stakedShares.value).plus(balanceFor(getAddress(props.pool.address)))\n )\n .div(props.pool.totalShares)\n .toString()\n );\n\n const amountsToApprove = computed(() => [\n {\n address: props.pool.address,\n amount: currentShares,\n },\n ]);\n\n const isLoading = computed(\n () => isLoadingApprovalsForGauge.value || isPoolStakingLoading.value\n );\n\n /**\n * METHODS\n */\n async function txWithNotification(\n action: () => Promise,\n actionType: StakeAction\n ) {\n try {\n const tx = await action();\n addTransaction({\n id: tx.hash,\n type: 'tx',\n action: actionType,\n summary: t(`transactionSummary.${actionType}`, {\n pool: props.pool.symbol,\n amount: fNum(\n fiatValueOf(props.pool, currentShares),\n FNumFormats.fiat\n ),\n }),\n details: {\n total: fNum(fiatValueOf(props.pool, currentShares), FNumFormats.fiat),\n pool: props.pool,\n },\n });\n return tx;\n } catch (error) {\n throw new Error(`Failed create ${actionType} transaction`, {\n cause: error,\n });\n }\n }\n\n async function loadApprovalsForGauge() {\n const approvalActions = await trackLoading(async () => {\n if (!preferentialGaugeAddress.value) return;\n\n return await getTokenApprovalActions({\n amountsToApprove: amountsToApprove.value,\n spender: preferentialGaugeAddress.value,\n actionType: ApprovalAction.Staking,\n });\n }, isLoadingApprovalsForGauge);\n\n if (approvalActions) stakeActions.value.unshift(...approvalActions);\n }\n\n async function handleSuccess(receipt: TransactionReceipt) {\n isActionConfirmed.value = true;\n confirmationReceipt.value = receipt;\n await Promise.all([refetchBalances(), refetchAllPoolStakingData()]);\n emit('success');\n }\n\n function handleClose() {\n isActionConfirmed.value = false;\n confirmationReceipt.value = undefined;\n emit('close');\n }\n\n /**\n * WATCHERS\n */\n watch(\n () => props.action,\n () => {\n if (props.action === 'stake') stakeActions.value = [stakeAction];\n if (props.action === 'unstake') {\n stakeActions.value = [unstakeAction];\n }\n if (props.action === 'restake')\n stakeActions.value = [unstakeAction, stakeAction];\n },\n { immediate: true }\n );\n\n watch(preferentialGaugeAddress, async () => {\n if (props.action === 'unstake') return;\n await loadApprovalsForGauge();\n });\n\n /**\n * LIFECYCLE\n */\n onBeforeMount(async () => {\n if (props.action !== 'unstake') await loadApprovalsForGauge();\n });\n\n return {\n //state\n isActionConfirmed,\n confirmationReceipt,\n isLoading,\n currentShares,\n stakeActions,\n totalUserPoolSharePct,\n //methods\n handleSuccess,\n handleClose,\n isStakeAndZero,\n };\n}\n","\n\n\n","\n\n\n"],"names":["fNum","useNumbers","useStakePreview","props","emit","isLoadingApprovalsForGauge","ref","isActionConfirmed","confirmationReceipt","stakeActions","balanceFor","refetchBalances","useTokens","t","useI18n","addTransaction","useTransactions","getTokenApprovalActions","useTokenApprovalActions","isPoolStakingLoading","stake","unstake","stakedShares","refetchAllPoolStakingData","preferentialGaugeAddress","usePoolStaking","currentShares","getAddress","stakeAction","txWithNotification","unstakeAction","isStakeAndZero","computed","totalUserPoolSharePct","bnum","amountsToApprove","isLoading","action","actionType","tx","fiatValueOf","FNumFormats","error","loadApprovalsForGauge","approvalActions","trackLoading","ApprovalAction","handleSuccess","receipt","handleClose","watch","onBeforeMount","getToken","isMismatchedNetwork","useWeb3","assetRowWidth","tokensListExclBpt","showFireworks","setCurrentPool","onMounted","newPool"],"mappings":"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"}