import { Dialog, ExternalLink } from '@vegaprotocol/ui-toolkit'; import { proposalsListDataProvider } from '@vegaprotocol/governance'; import { Schema as Types } from '@vegaprotocol/types'; import { t, useDataProvider } from '@vegaprotocol/react-helpers'; import { useCallback, useEffect, useMemo } from 'react'; import { useGlobalStore } from '../../stores'; import take from 'lodash/take'; import { activeMarketsProvider } from '@vegaprotocol/market-list'; import { BLOG, DApp, Networks, TOKEN_NEW_MARKET_PROPOSAL, TOKEN_PROPOSAL, TOKEN_PROPOSALS, useLinks, } from '@vegaprotocol/environment'; export const WelcomeNoticeDialog = () => { const [welcomeNoticeDialog, update] = useGlobalStore((store) => [ store.welcomeNoticeDialog, store.update, ]); const onOpenChange = useCallback( (isOpen: boolean) => { update({ welcomeNoticeDialog: isOpen }); }, [update] ); const variables = useMemo(() => { return { proposalType: Types.ProposalType.TYPE_NEW_MARKET, }; }, []); const { data } = useDataProvider({ dataProvider: proposalsListDataProvider, variables, skipUpdates: true, }); const newMarkets = take( (data || []).filter((proposal) => [ Types.ProposalState.STATE_OPEN, Types.ProposalState.STATE_PASSED, Types.ProposalState.STATE_WAITING_FOR_NODE_VOTE, ].includes(proposal.state) ), 3 ).map((proposal) => ({ id: proposal.id, displayName: proposal.terms.change.__typename === 'NewMarket' && proposal.terms.change.instrument.code, })); const tokenLink = useLinks(DApp.Token); const consoleFairgroundLink = useLinks(DApp.Console, Networks.TESTNET); const proposedMarkets = useMemo( () => newMarkets.length > 0 && (

{t('Proposed markets')}

{newMarkets.map(({ displayName, id }, i) => (
{displayName}
{t('View or vote')}
))}
{t('View all proposed markets')}
), [newMarkets, tokenLink] ); return (

{t('Welcome to Console')}

{t( 'Vega mainnet is now live, but markets need to be voted for before the can be traded on. In the meantime:' )}

{proposedMarkets}
); }; export const useWelcomeNoticeDialog = () => { const { update } = useGlobalStore((store) => ({ update: store.update })); const { data } = useDataProvider({ dataProvider: activeMarketsProvider, }); useEffect(() => { if (data?.length === 0) { update({ welcomeNoticeDialog: true }); } }, [data, update]); };