stargaze-studio/contexts/contracts.tsx
name-user1 039b8b424b
Launchpad V2 sync (#34)
* V2 Sync

* v2 sync

* Launchpad V2 sync

* Update trading start time description

* Add explicit_content to CollectionDetails update dependencies

* Minor UI changes

* Update MintPriceMessage interface

* Add symbolState.value to CollectionDetails update dependencies

* Add external_link to Collection Details

* Remove the tab Instantiate from the minter contract dashboard

* Add price check for update_minting_price

* Implement dynamic per address limit check

* Add checks for trading start time

* Update Minter Contract Dashboard Instantiate Tab - 1

* Update Minter Contract Dashboard Instantiate Tab - 2

* Remove Instantiate tab from SG721 Contract Dashboard

* Update whitelist contract helpers

* Update whitelist instantiate fee wrt member limit

Co-authored-by: name-user1 <eray@deuslabs.fi>
Co-authored-by: Serkan Reis <serkanreis@gmail.com>
2022-10-20 19:02:52 -06:00

71 lines
1.9 KiB
TypeScript

import type { UseMinterContractProps } from 'contracts/minter'
import { useMinterContract } from 'contracts/minter'
import type { UseSG721ContractProps } from 'contracts/sg721'
import { useSG721Contract } from 'contracts/sg721'
import type { UseVendingFactoryContractProps } from 'contracts/vendingFactory'
import { useVendingFactoryContract } from 'contracts/vendingFactory'
import type { UseWhiteListContractProps } from 'contracts/whitelist'
import { useWhiteListContract } from 'contracts/whitelist'
import type { ReactNode, VFC } from 'react'
import { Fragment, useEffect } from 'react'
import type { State } from 'zustand'
import create from 'zustand'
/**
* Contracts store type definitions
*/
export interface ContractsStore extends State {
sg721: UseSG721ContractProps | null
minter: UseMinterContractProps | null
whitelist: UseWhiteListContractProps | null
vendingFactory: UseVendingFactoryContractProps | null
}
/**
* Contracts store default values as a separate variable for reusability
*/
export const defaultValues: ContractsStore = {
sg721: null,
minter: null,
whitelist: null,
vendingFactory: null,
}
/**
* Entrypoint for contracts store using {@link defaultValues}
*/
export const useContracts = create<ContractsStore>(() => ({
...defaultValues,
}))
/**
* Contracts store provider to easily mount {@link ContractsSubscription}
* to listen/subscribe to contract changes
*/
export const ContractsProvider = ({ children }: { children: ReactNode }) => {
return (
<>
{children}
<ContractsSubscription />
</>
)
}
const ContractsSubscription: VFC = () => {
const sg721 = useSG721Contract()
const minter = useMinterContract()
const whitelist = useWhiteListContract()
const vendingFactory = useVendingFactoryContract()
useEffect(() => {
useContracts.setState({
sg721,
minter,
whitelist,
vendingFactory,
})
}, [sg721, minter, whitelist, vendingFactory])
return null
}