diff --git a/src/plugins/admin/Funds.tsx b/src/plugins/admin/Funds.tsx index 143cbe6b2..b0a0e6f36 100644 --- a/src/plugins/admin/Funds.tsx +++ b/src/plugins/admin/Funds.tsx @@ -1,12 +1,14 @@ import React, { useEffect, useState } from 'react' +import type { UndefinedOr } from '@devprotocol/util-ts' import StakeInfo from './StakeInfo' import { KYCStatuses } from './Withdrawal' import { ALL_CURRENCIES } from '@constants/memberships' +import CreateClubsVault from './components/CreateClubsVault' import CurrencyMembershipInfo from './CurrencyMembershipInfo' -import NotVerifiedBannerImg from './assets/NotVerifiedBannerImg.svg' const FundsInfo = (props: { + vaultAddress: UndefinedOr propertyAddress: string chainId: number uniqueBeneficiaries: string[] @@ -64,9 +66,103 @@ const FundsInfo = (props: { return ( <> - {/* */} + {/* */}
-

Memberships/NFTs

+

Clubs Vault

+ + {/* */} + {!props.vaultAddress && ( +
+ +
+ )} + + {/* */} + {props.vaultAddress && ( +
+

+ Your withdrawable funds +

+
+

+ $ + {new Intl.NumberFormat(undefined, { + minimumFractionDigits: 2, + maximumFractionDigits: 3, + }).format( + Number( + yourTotalWithdrawableInDollars.reduce( + (prev: string, curr: string) => + String(Number(prev) + Number(curr)), + ), + ) || 0, + )} +

+

+ equivalent tokens +

+
+ {ALL_CURRENCIES.map((curr, id) => ( + + ))} +
+ )} + + {/* */} + {props.vaultAddress && ( +
+

+ Total withdrawable funds +

+
+

+ $ + {new Intl.NumberFormat(undefined, { + minimumFractionDigits: 2, + maximumFractionDigits: 3, + }).format( + Number( + totalWithrawableInDollars.reduce( + (prev: string, curr: string) => + String(Number(prev) + Number(curr)), + ), + ) || 0, + )} +

+

+ equivalent tokens +

+
+ {ALL_CURRENCIES.map((curr, id) => ( + + ))} +
+ )} +
+ + {/* */} +
+

Direct Payments

{/* */}
diff --git a/src/plugins/admin/Withdrawal.tsx b/src/plugins/admin/Withdrawal.tsx index 2bf78b958..227b12282 100644 --- a/src/plugins/admin/Withdrawal.tsx +++ b/src/plugins/admin/Withdrawal.tsx @@ -2,6 +2,7 @@ import React, { useState } from 'react' import KYCInfo from './KYCInfo' import FundsInfo from './Funds' +import type { UndefinedOr } from '@devprotocol/util-ts' export enum KYCStatuses { VERIFIED, @@ -10,6 +11,7 @@ export enum KYCStatuses { } export const Withdrawal = (props: { + vaultAddress: UndefinedOr propertyAddress: string chainId: number uniqueBeneficiaries: string[] @@ -30,6 +32,7 @@ export const Withdrawal = (props: { diff --git a/src/plugins/admin/assets/CreateVault.svg b/src/plugins/admin/assets/CreateVault.svg new file mode 100644 index 000000000..ddf409ff6 --- /dev/null +++ b/src/plugins/admin/assets/CreateVault.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/plugins/admin/components/CreateClubsVault.tsx b/src/plugins/admin/components/CreateClubsVault.tsx new file mode 100644 index 000000000..a10d9080c --- /dev/null +++ b/src/plugins/admin/components/CreateClubsVault.tsx @@ -0,0 +1,42 @@ +import React, { useState } from 'react' + +import CreateVaultSVG from '../assets/CreateVault.svg' + +interface ICreateClubsVaultProps { + isKYCVerified: boolean +} + +const CreateClubsVault = (props: ICreateClubsVaultProps) => { + const [isCreatingVault, setIsCreatingVault] = useState(false) + + const createVault = async () => { + setIsCreatingVault(true) + + // @TODO: add logic to create vault here. + + setIsCreatingVault(false) + } + + return ( + + ) +} + +export default CreateClubsVault diff --git a/src/plugins/admin/funds.astro b/src/plugins/admin/funds.astro index 44e05f082..fc520636c 100644 --- a/src/plugins/admin/funds.astro +++ b/src/plugins/admin/funds.astro @@ -1,11 +1,10 @@ --- -import FundsTeaser from './FundsTeaser.tsx' import { ZeroAddress } from 'ethers' import type { Membership } from '@plugins/memberships' -import { KYCStatuses, Withdrawal } from './Withdrawal' +import { Withdrawal } from './Withdrawal' -const { memberships, chainId, propertyAddress } = Astro.props +const { memberships, chainId, propertyAddress, vaultAddress } = Astro.props let beneficiaries: string[] = memberships.map( (membership: Membership) => membership.fee?.beneficiary ?? ZeroAddress, @@ -22,6 +21,7 @@ const uniqueBeneficiaries = new Array(...new Set(beneficiaries)) chainId={chainId} uniqueBeneficiaries={uniqueBeneficiaries} propertyAddress={propertyAddress} + vaultAddress={vaultAddress} />
diff --git a/src/plugins/admin/index.ts b/src/plugins/admin/index.ts index 83067d30f..ee4550ecc 100644 --- a/src/plugins/admin/index.ts +++ b/src/plugins/admin/index.ts @@ -15,7 +15,7 @@ import { default as Overview } from './overview.astro' export const getPagePaths = (async () => []) satisfies ClubsFunctionGetPagePaths -export const getAdminPaths = (async (_, config) => { +export const getAdminPaths = (async (options, config) => { const membersihpPlugin = config.plugins.find( (plg) => plg.id === 'devprotocol:clubs:simple-memberships', ) @@ -23,6 +23,9 @@ export const getAdminPaths = (async (_, config) => { (membersihpPlugin?.options.find((opt) => opt.key === 'memberships') ?.value as UndefinedOr) ?? [] + const vaultAddress = config.options?.find((option) => option.key === 'vault') + ?.value as UndefinedOr + return [ { paths: ['general'], @@ -52,6 +55,7 @@ export const getAdminPaths = (async (_, config) => { propertyAddress: config.propertyAddress, rpcUrl: config.rpcUrl, chainId: config.chainId, + vaultAddress, }, }, ]