Skip to content

Commit

Permalink
Fix prices in pending orders
Browse files Browse the repository at this point in the history
  • Loading branch information
samchuk-vlad committed Sep 14, 2023
1 parent 1ac9b90 commit 09a489c
Show file tree
Hide file tree
Showing 7 changed files with 48 additions and 45 deletions.
4 changes: 3 additions & 1 deletion .github/workflows/feature-based.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,9 @@ jobs:
GH_HCAPTCHA_SITE_KEY=3beeddac-2dce-41cc-8e18-338118426c38
GH_AMP_ID=71bf5a46800fedba5e9a01243b988164
GH_OFFCHAIN_SIGNER_URL=https://signer.subsocial.network
GH_CONNECTION_KIND=dev
GH_CONNECTION_KIND=staging
GH_SELLER_CLIENT_ID=${{ secrets.SELLER_CLIENT_ID }}
GH_SELLER_TOKEN_SIGNER=${{ secrets.SELLER_TOKEN_SIGNER }}
tags: |
${{ env.image }}
cache-from: type=local,src=/tmp/.buildx-cache
Expand Down
12 changes: 10 additions & 2 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ ARG GH_APP_BASE_URL
ARG GH_HCAPTCHA_SITE_KEY
ARG GH_AMP_ID
ARG GH_OFFCHAIN_SIGNER_URL
ARG GH_SELLER_CLIENT_ID
ARG GH_SELLER_TOKEN_SIGNER

ENV SUBSTRATE_URL=${GH_SUBSTRATE_URL} \
SUBSTRATE_RPC_URL=${GH_SUBSTRATE_RPC_URL} \
Expand All @@ -24,7 +26,9 @@ ENV SUBSTRATE_URL=${GH_SUBSTRATE_URL} \
HCAPTCHA_SITE_KEY=${GH_HCAPTCHA_SITE_KEY} \
AMP_ID=${GH_AMP_ID} \
OFFCHAIN_SIGNER_URL=${GH_OFFCHAIN_SIGNER_URL} \
CONNECTION_KIND=${GH_CONNECTION_KIND}
CONNECTION_KIND=${GH_CONNECTION_KIND} \
SELLER_CLIENT_ID=${GH_SELLER_CLIENT_ID} \
SELLER_TOKEN_SIGNER=${GH_SELLER_TOKEN_SIGNER}

COPY package.json yarn.lock* ./
RUN yarn install --no-optional
Expand Down Expand Up @@ -54,6 +58,8 @@ ARG GH_APP_BASE_URL
ARG GH_HCAPTCHA_SITE_KEY
ARG GH_AMP_ID
ARG GH_OFFCHAIN_SIGNER_URL
ARG GH_SELLER_CLIENT_ID
ARG GH_SELLER_TOKEN_SIGNER

ENV SUBSTRATE_URL=${GH_SUBSTRATE_URL} \
SUBSTRATE_RPC_URL=${GH_SUBSTRATE_RPC_URL} \
Expand All @@ -65,7 +71,9 @@ ENV SUBSTRATE_URL=${GH_SUBSTRATE_URL} \
APP_BASE_URL=${GH_APP_BASE_URL} \
AMP_ID=${GH_AMP_ID} \
OFFCHAIN_SIGNER_URL=${GH_OFFCHAIN_SIGNER_URL} \
CONNECTION_KIND=${GH_CONNECTION_KIND}
CONNECTION_KIND=${GH_CONNECTION_KIND} \
SELLER_CLIENT_ID=${GH_SELLER_CLIENT_ID} \
SELLER_TOKEN_SIGNER=${GH_SELLER_TOKEN_SIGNER}

WORKDIR /opt/subsocial/app

Expand Down
24 changes: 1 addition & 23 deletions src/components/domains/BuyDomainButtons.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
import { randomAsNumber } from '@polkadot/util-crypto'
import {
newLogger,
parseDomain,
SocialRemark,
SocialRemarkDestChainsNameId,
SocialRemarkMessageVersion,
SubSclSource,
} from '@subsocial/utils'
import BN from 'bignumber.js'
import { useEffect, useState } from 'react'
import { useMyAddress } from 'src/components/auth/MyAccountsContext'
import { useBalancesByNetwork } from 'src/components/donate/AmountInput'
import LazyTxButton from 'src/components/donate/LazyTxButton'
Expand All @@ -19,7 +17,6 @@ import {
updatePendingOrder,
} from 'src/components/utils/OffchainUtils'
import TxButton from 'src/components/utils/TxButton'
import { getOrInitSubsocialRpc } from 'src/rpc/initSubsocialRpc'
import { useAppDispatch } from 'src/rtk/app/store'
import {
useCreateReloadPendingOrders,
Expand All @@ -37,7 +34,7 @@ import styles from './index.module.sass'
import { useManageDomainContext } from './manage/ManageDomainProvider'
import { BLOCKS_IN_YEAR } from './utils'

const log = newLogger('DD')
export const log = newLogger('DD')

type BuyByDotTxButtonProps = {
domainName: string
Expand All @@ -46,25 +43,6 @@ type BuyByDotTxButtonProps = {
close: () => void
}

export const useGetDomainPrice = (domain: string) => {
const [price, setPrice] = useState()

useEffect(() => {
const getPrice = async () => {
const subsocialRpc = getOrInitSubsocialRpc()

const { domain: domainPart } = parseDomain(domain)
const price = await subsocialRpc.calculatePrice(domainPart)

setPrice(price)
}

getPrice().catch(err => log.error('Failed to get domain price', err))
}, [domain])

return price
}

export const BuyByDotTxButton = ({
domainName,
className,
Expand Down
3 changes: 1 addition & 2 deletions src/components/domains/EligibleDomainsSection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,10 @@ import { useFetchDomains, useIsReservedWord } from '../../rtk/features/domains/d
import { useIsMyAddress, useMyAccountsContext, useMyAddress } from '../auth/MyAccountsContext'
import { Loading, LocalIcon } from '../utils'
import { MutedDiv, MutedSpan } from '../utils/MutedText'
import { useGetDomainPrice } from './BuyDomainButtons'
import styles from './index.module.sass'
import { useManageDomainContext } from './manage/ManageDomainProvider'
import RegisterDomainButton from './registerDomainModal/RegisterDomainModal'
import { DomainDetails, getTime, ResultContainer } from './utils'
import { DomainDetails, getTime, ResultContainer, useGetDomainPrice } from './utils'

type DomainItemProps = {
domain: string
Expand Down
4 changes: 3 additions & 1 deletion src/components/domains/pendingOrders/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import { useSelectSellerConfig } from 'src/rtk/features/sellerConfig/sellerConfi
import { MutedDiv } from '../../utils/MutedText'
import { DomainSellerKind, useManageDomainContext } from '../manage/ManageDomainProvider'
import RegisterDomainButton from '../registerDomainModal/RegisterDomainModal'
import { getTime } from '../utils'
import { getTime, useGetDomainPrice } from '../utils'
import styles from './Index.module.sass'

type PendingDomainProps = {
Expand All @@ -29,6 +29,7 @@ const PendingDomain = ({ pendingDomain, time }: PendingDomainProps) => {
const sellerConfig = useSelectSellerConfig()
const reloadPendingOrders = useCreateReloadPendingOrders()
const myAddress = useMyAddress()
const domainPrice = useGetDomainPrice(pendingDomain.id)

const { processingDomains } = useManageDomainContext()

Expand Down Expand Up @@ -57,6 +58,7 @@ const PendingDomain = ({ pendingDomain, time }: PendingDomainProps) => {
label={'Continue'}
withPrice={false}
domainSellerKind={destination as DomainSellerKind}
domainPrice={domainPrice}
/>
)

Expand Down
17 changes: 4 additions & 13 deletions src/components/domains/registerDomainModal/RegisterDomainModal.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { Button, Modal, Space, Tag } from 'antd'
import BN from 'bignumber.js'
import clsx from 'clsx'
import { useEffect, useMemo, useState } from 'react'
import { useEffect, useState } from 'react'
import { useIsMyAddress } from 'src/components/auth/MyAccountsContext'
import { SelectAccountInput } from 'src/components/common/inputs/SelectAccountInput'
import { useBalancesByNetwork } from 'src/components/donate/AmountInput'
Expand All @@ -12,6 +11,7 @@ import { FormatBalance, useCreateBalance } from '../../common/balances/Balance'
import { MutedDiv } from '../../utils/MutedText'
import { BuyByDotTxButton, BuyDomainSection } from '../BuyDomainButtons'
import { DomainSellerKind, useManageDomainContext } from '../manage/ManageDomainProvider'
import { useGetPrice } from '../utils'
import styles from './Index.module.sass'

type ModalBodyProps = {
Expand Down Expand Up @@ -175,8 +175,9 @@ const RegisterDomainButton = ({
domainPrice,
}: BuyByDotButtonProps) => {
const sellerConfig = useSelectSellerConfig()
const { domainRegistrationPriceFactor, sellerChain } = sellerConfig || {}
const { sellerChain } = sellerConfig || {}
const { processingDomains } = useManageDomainContext()
const price = useGetPrice(domainSellerKind, domainPrice)

const [open, setOpen] = useState(false)
const { decimal, symbol } = useGetDecimalAndSymbol(sellerChain)
Expand All @@ -185,16 +186,6 @@ const RegisterDomainButton = ({

const isSub = domainSellerKind === 'SUB'

const price = useMemo(() => {
if (isSub) {
return domainPrice
} else {
if (!domainRegistrationPriceFactor || !domainPrice) return '0'

return new BN(domainPrice).multipliedBy(new BN(domainRegistrationPriceFactor)).toString()
}
}, [isSub, domainPrice, domainRegistrationPriceFactor])

const chainProps = isSub ? {} : { decimals: decimal, currency: symbol }

const isProcessingDomain = processingDomains[domainName]
Expand Down
29 changes: 26 additions & 3 deletions src/components/domains/utils.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,13 @@ import BN from 'bignumber.js'
import clsx from 'clsx'
import dayjs from 'dayjs'
import utc from 'dayjs/plugin/utc'
import { FC, HTMLProps, useMemo } from 'react'
import { FC, HTMLProps, useEffect, useMemo, useState } from 'react'
import {
CardWithTitle as InnerCardWithTitle,
CardWithTitleProps,
} from 'src/components/utils/cards/WithTitle'
import config from 'src/config'
import { getOrInitSubsocialRpc } from 'src/rpc/initSubsocialRpc'
import { useCreateRemovePendingOrders } from 'src/rtk/features/domainPendingOrders/pendingOrdersHooks'
import { useCreateUpsertDomains } from 'src/rtk/features/domains/domainHooks'
import { useSelectSellerConfig } from 'src/rtk/features/sellerConfig/sellerConfigHooks'
Expand All @@ -19,6 +20,7 @@ import { useMyAddress } from '../auth/MyAccountsContext'
import { slugifyHandle } from '../urls/helpers'
import { useAddClassNameToRootElement } from '../utils'
import { controlledMessage } from '../utils/Message'
import { log } from './BuyDomainButtons'
import styles from './index.module.sass'
import { DomainSellerKind, useManageDomainContext } from './manage/ManageDomainProvider'

Expand Down Expand Up @@ -174,17 +176,38 @@ export const useFetchNewDomains = (domainName?: string) => {
)
}

export const useGetPrice = (domainPrice: string, domainSellerKind: DomainSellerKind) => {
export const useGetDomainPrice = (domain: string) => {
const [price, setPrice] = useState()

useEffect(() => {
const getPrice = async () => {
const subsocialRpc = getOrInitSubsocialRpc()

const { domain: domainPart } = parseDomain(domain)
const price = await subsocialRpc.calculatePrice(domainPart)

setPrice(price)
}

getPrice().catch(err => log.error('Failed to get domain price', err))
}, [domain])

return price
}

export const useGetPrice = (domainSellerKind: DomainSellerKind, domainPrice?: string) => {
const sellerConfig = useSelectSellerConfig()
const { domainRegistrationPriceFactor } = sellerConfig || {}

const isSub = domainSellerKind === 'SUB'

const price = useMemo(() => {
if (!domainPrice) return '0'

if (isSub) {
return domainPrice
} else {
if (!domainRegistrationPriceFactor || !domainPrice) return '0'
if (!domainRegistrationPriceFactor) return '0'
return new BN(domainPrice).multipliedBy(new BN(domainRegistrationPriceFactor)).toString()
}
}, [isSub, domainPrice, domainRegistrationPriceFactor])
Expand Down

0 comments on commit 09a489c

Please sign in to comment.