mirror of
https://github.com/oceanprotocol/market.git
synced 2024-12-02 05:57:29 +01:00
* wagmi + ethers + web3modal setup * refactor wallet components * fallback providers, more config * kick out useWeb3 * remove all useWeb3 imports * more web3.js usage removal * isAddress utils replacement * restore add token / add network * less accountId changes * web3 legacy tinkering, utils/web3 → utils/wallet * legacy web3 object for ocean.js * graph sync fix, remove custom network switching code * package updates, merge fixes * downgrade to ethers v5 * fix project id * switch to ConnectKit * connectkit theming * add existing chains to wagmi * rewrite getPaymentCollector() * kick out getPaymentCollector completely, use wagmi hooks instead * Revert "kick out getPaymentCollector completely, use wagmi hooks instead" This reverts commit 54c7d1ef1a2dec0b1575a685125ba78336b30f59. * switch getPaymentCollector * calcBaseInGivenDatatokensOut reorg * wip integrate ocean lib 3.0.0 * update orbis components to use wagmi instead of web hooks * more oceanjs integration updates * more refactors * fix build * update ocean lib * fix publish * fix order fixed rate * remove logs * debug and stop infinite cycle orbis connect * fix orbis dm connection * mock use network and fix some more tests * mock wagmi switch network * mock wagmi useProvider createClient and connectKit getDefaultClient * fix jest tests * try storybook fix * cleanups and bump ocean lib * fix order * bump lib to next.5 and add more modal style * bump ocean.js lib to 3.0.0 --------- Co-authored-by: Matthias Kretschmann <m@kretschmann.io>
97 lines
2.7 KiB
TypeScript
97 lines
2.7 KiB
TypeScript
import React, { ReactElement, useCallback, useEffect, useState } from 'react'
|
|
import { useFormikContext } from 'formik'
|
|
import Tabs from '@shared/atoms/Tabs'
|
|
import { FormPublishData } from '../_types'
|
|
import Fixed from './Fixed'
|
|
import Free from './Free'
|
|
import content from '../../../../content/price.json'
|
|
import styles from './index.module.css'
|
|
import { useMarketMetadata } from '@context/MarketMetadata'
|
|
import { useNetwork } from 'wagmi'
|
|
|
|
export default function PricingFields(): ReactElement {
|
|
const { appConfig } = useMarketMetadata()
|
|
const { chain } = useNetwork()
|
|
const { approvedBaseTokens } = useMarketMetadata()
|
|
|
|
// Connect with main publish form
|
|
const { values, setFieldValue } = useFormikContext<FormPublishData>()
|
|
const { pricing } = values
|
|
const { type } = pricing
|
|
|
|
const defaultBaseToken =
|
|
approvedBaseTokens?.find((token) =>
|
|
token.name.toLowerCase().includes('ocean')
|
|
) || approvedBaseTokens?.[0]
|
|
|
|
const isBaseTokenSet = !!approvedBaseTokens?.find(
|
|
(token) => token?.address === values?.pricing?.baseToken?.address
|
|
)
|
|
|
|
useEffect(() => {
|
|
if (!approvedBaseTokens?.length) return
|
|
if (isBaseTokenSet) return
|
|
setFieldValue('pricing.baseToken', defaultBaseToken)
|
|
}, [
|
|
approvedBaseTokens,
|
|
chain?.id,
|
|
defaultBaseToken,
|
|
isBaseTokenSet,
|
|
setFieldValue,
|
|
values.pricing.baseToken
|
|
])
|
|
|
|
// Switch type value upon tab change
|
|
function handleTabChange(tabName: string) {
|
|
const type = tabName.toLowerCase()
|
|
setFieldValue('pricing.type', type)
|
|
setFieldValue('pricing.price', 0)
|
|
setFieldValue('pricing.freeAgreement', false)
|
|
setFieldValue('pricing.baseToken', defaultBaseToken)
|
|
type !== 'free' && setFieldValue('pricing.amountDataToken', 1000)
|
|
}
|
|
|
|
const updateTabs = useCallback(() => {
|
|
return [
|
|
appConfig.allowFixedPricing === 'true'
|
|
? {
|
|
title: content.create.fixed.title,
|
|
content: (
|
|
<Fixed
|
|
approvedBaseTokens={approvedBaseTokens}
|
|
content={content.create.fixed}
|
|
/>
|
|
)
|
|
}
|
|
: undefined,
|
|
|
|
appConfig.allowFreePricing === 'true'
|
|
? {
|
|
title: content.create.free.title,
|
|
content: <Free content={content.create.free} />
|
|
}
|
|
: undefined
|
|
].filter((tab) => tab !== undefined)
|
|
}, [
|
|
appConfig.allowFixedPricing,
|
|
appConfig.allowFreePricing,
|
|
approvedBaseTokens
|
|
])
|
|
|
|
const [tabs, setTabs] = useState(updateTabs())
|
|
|
|
useEffect(() => {
|
|
setTabs(updateTabs())
|
|
}, [updateTabs])
|
|
|
|
return (
|
|
<Tabs
|
|
items={tabs}
|
|
handleTabChange={handleTabChange}
|
|
defaultIndex={type === 'free' ? 1 : 0}
|
|
className={styles.pricing}
|
|
showRadio
|
|
/>
|
|
)
|
|
}
|