feat: propose network parameter change link (578) (#2174)
* feat: propose network parameter change link (578) * changeg stagnet3 url in trading e2e
This commit is contained in:
parent
1aff7b1437
commit
4b7a513e98
@ -93,7 +93,7 @@ describe('markets table', { tags: '@smoke' }, () => {
|
|||||||
.and(
|
.and(
|
||||||
'have.attr',
|
'have.attr',
|
||||||
'href',
|
'href',
|
||||||
'https://token.fairground.wtf/governance/propose/new-market'
|
'https://stagnet3.token.vega.xyz/governance/propose/new-market'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,17 +1,15 @@
|
|||||||
import { t } from '@vegaprotocol/react-helpers';
|
import { t } from '@vegaprotocol/react-helpers';
|
||||||
import { useEnvironment } from '@vegaprotocol/environment';
|
import {
|
||||||
|
DApp,
|
||||||
|
TOKEN_NEW_MARKET_PROPOSAL,
|
||||||
|
useLinks,
|
||||||
|
} from '@vegaprotocol/environment';
|
||||||
import { ProposalsList } from '@vegaprotocol/governance';
|
import { ProposalsList } from '@vegaprotocol/governance';
|
||||||
import { ExternalLink } from '@vegaprotocol/ui-toolkit';
|
import { ExternalLink } from '@vegaprotocol/ui-toolkit';
|
||||||
import {
|
|
||||||
NEW_PROPOSAL_LINK,
|
|
||||||
TOKEN_DEFAULT_DOMAIN,
|
|
||||||
} from '../../components/constants';
|
|
||||||
|
|
||||||
export const Proposed = () => {
|
export const Proposed = () => {
|
||||||
const { VEGA_TOKEN_URL } = useEnvironment();
|
const tokenLink = useLinks(DApp.Token);
|
||||||
const externalLink = `${
|
const externalLink = tokenLink(TOKEN_NEW_MARKET_PROPOSAL);
|
||||||
VEGA_TOKEN_URL || TOKEN_DEFAULT_DOMAIN
|
|
||||||
}${NEW_PROPOSAL_LINK}`;
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<ProposalsList />
|
<ProposalsList />
|
||||||
|
@ -1,7 +1,2 @@
|
|||||||
export const DEBOUNCE_UPDATE_TIME = 500;
|
export const DEBOUNCE_UPDATE_TIME = 500;
|
||||||
export const EMPTY_MARKET_ID = 'empty';
|
export const EMPTY_MARKET_ID = 'empty';
|
||||||
|
|
||||||
// Token dApp
|
|
||||||
export const TOKEN_DEFAULT_DOMAIN = 'https://token.fairground.wtf';
|
|
||||||
export const GOVERNANCE_LINK = '/governance';
|
|
||||||
export const NEW_PROPOSAL_LINK = '/governance/propose/new-market';
|
|
||||||
|
@ -33,8 +33,11 @@ import type {
|
|||||||
import type { PositionFieldsFragment } from '@vegaprotocol/positions';
|
import type { PositionFieldsFragment } from '@vegaprotocol/positions';
|
||||||
import type { Column, OnCellClickHandler } from './select-market-columns';
|
import type { Column, OnCellClickHandler } from './select-market-columns';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { useLinks } from '../../lib/use-links';
|
import {
|
||||||
import { NEW_PROPOSAL_LINK } from '../constants';
|
DApp,
|
||||||
|
TOKEN_NEW_MARKET_PROPOSAL,
|
||||||
|
useLinks,
|
||||||
|
} from '@vegaprotocol/environment';
|
||||||
|
|
||||||
type Market = MarketWithCandles & MarketWithData;
|
type Market = MarketWithCandles & MarketWithData;
|
||||||
|
|
||||||
@ -95,7 +98,7 @@ export const SelectAllMarketsTableBody = ({
|
|||||||
headers?: Column[];
|
headers?: Column[];
|
||||||
tableColumns?: (market: Market, openVolume?: string) => Column[];
|
tableColumns?: (market: Market, openVolume?: string) => Column[];
|
||||||
}) => {
|
}) => {
|
||||||
const tokenLink = useLinks('token');
|
const tokenLink = useLinks(DApp.Token);
|
||||||
if (!markets) return null;
|
if (!markets) return null;
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
@ -121,7 +124,7 @@ export const SelectAllMarketsTableBody = ({
|
|||||||
) : (
|
) : (
|
||||||
<SelectMarketTableRowSplash colSpan={12}>
|
<SelectMarketTableRowSplash colSpan={12}>
|
||||||
{t('No markets ')}
|
{t('No markets ')}
|
||||||
<ExternalLink href={tokenLink(NEW_PROPOSAL_LINK)}>
|
<ExternalLink href={tokenLink(TOKEN_NEW_MARKET_PROPOSAL)}>
|
||||||
{t('Propose a new market')}
|
{t('Propose a new market')}
|
||||||
</ExternalLink>
|
</ExternalLink>
|
||||||
</SelectMarketTableRowSplash>
|
</SelectMarketTableRowSplash>
|
||||||
|
@ -5,9 +5,16 @@ import { t, useDataProvider } from '@vegaprotocol/react-helpers';
|
|||||||
import { useCallback, useEffect, useMemo } from 'react';
|
import { useCallback, useEffect, useMemo } from 'react';
|
||||||
import { useGlobalStore } from '../../stores';
|
import { useGlobalStore } from '../../stores';
|
||||||
import take from 'lodash/take';
|
import take from 'lodash/take';
|
||||||
import { useLinks } from '../../lib/use-links';
|
|
||||||
import { GOVERNANCE_LINK, NEW_PROPOSAL_LINK } from '../constants';
|
|
||||||
import { activeMarketsProvider } from '@vegaprotocol/market-list';
|
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 = () => {
|
export const WelcomeNoticeDialog = () => {
|
||||||
const [welcomeNoticeDialog, update] = useGlobalStore((store) => [
|
const [welcomeNoticeDialog, update] = useGlobalStore((store) => [
|
||||||
@ -50,8 +57,8 @@ export const WelcomeNoticeDialog = () => {
|
|||||||
proposal.terms.change.instrument.code,
|
proposal.terms.change.instrument.code,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
const tokenLink = useLinks('token');
|
const tokenLink = useLinks(DApp.Token);
|
||||||
const consoleFairgroundLink = useLinks('console-fairground');
|
const consoleFairgroundLink = useLinks(DApp.Console, Networks.TESTNET);
|
||||||
|
|
||||||
const proposedMarkets = useMemo(
|
const proposedMarkets = useMemo(
|
||||||
() =>
|
() =>
|
||||||
@ -65,14 +72,16 @@ export const WelcomeNoticeDialog = () => {
|
|||||||
<div className="pt-1 flex justify-between" key={i}>
|
<div className="pt-1 flex justify-between" key={i}>
|
||||||
<dl>{displayName}</dl>
|
<dl>{displayName}</dl>
|
||||||
<dt>
|
<dt>
|
||||||
<ExternalLink href={tokenLink(`${GOVERNANCE_LINK}/${id}`)}>
|
<ExternalLink
|
||||||
|
href={tokenLink(TOKEN_PROPOSAL.replace(':id', id || ''))}
|
||||||
|
>
|
||||||
{t('View or vote')}
|
{t('View or vote')}
|
||||||
</ExternalLink>
|
</ExternalLink>
|
||||||
</dt>
|
</dt>
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
</dl>
|
</dl>
|
||||||
<ExternalLink href={tokenLink(GOVERNANCE_LINK)}>
|
<ExternalLink href={tokenLink(TOKEN_PROPOSALS)}>
|
||||||
{t('View all proposed markets')}
|
{t('View all proposed markets')}
|
||||||
</ExternalLink>
|
</ExternalLink>
|
||||||
</div>
|
</div>
|
||||||
@ -101,17 +110,20 @@ export const WelcomeNoticeDialog = () => {
|
|||||||
{t(' on Fairground, our Testnet')}
|
{t(' on Fairground, our Testnet')}
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<ExternalLink target="_blank" href={tokenLink(GOVERNANCE_LINK)}>
|
<ExternalLink target="_blank" href={tokenLink(TOKEN_PROPOSALS)}>
|
||||||
{t('View and vote for proposed markets')}
|
{t('View and vote for proposed markets')}
|
||||||
</ExternalLink>
|
</ExternalLink>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<ExternalLink target="_blank" href={tokenLink(NEW_PROPOSAL_LINK)}>
|
<ExternalLink
|
||||||
|
target="_blank"
|
||||||
|
href={tokenLink(TOKEN_NEW_MARKET_PROPOSAL)}
|
||||||
|
>
|
||||||
{t('Propose your own markets')}
|
{t('Propose your own markets')}
|
||||||
</ExternalLink>
|
</ExternalLink>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<ExternalLink target="_blank" href={tokenLink()}>
|
<ExternalLink target="_blank" href={BLOG}>
|
||||||
{t('Read about the mainnet launch')}
|
{t('Read about the mainnet launch')}
|
||||||
</ExternalLink>
|
</ExternalLink>
|
||||||
</li>
|
</li>
|
||||||
|
@ -1,24 +0,0 @@
|
|||||||
import trim from 'lodash/trim';
|
|
||||||
import { Networks, useEnvironment } from '@vegaprotocol/environment';
|
|
||||||
import { useCallback } from 'react';
|
|
||||||
|
|
||||||
type DApp = 'console' | 'console-fairground' | 'token' | 'explorer';
|
|
||||||
export const useLinks = (dapp: DApp) => {
|
|
||||||
const { VEGA_ENV, VEGA_NETWORKS, VEGA_TOKEN_URL, VEGA_EXPLORER_URL } =
|
|
||||||
useEnvironment();
|
|
||||||
|
|
||||||
const urls: { [k in DApp]: string } = {
|
|
||||||
console: (VEGA_NETWORKS && VEGA_NETWORKS[VEGA_ENV]) || '',
|
|
||||||
'console-fairground':
|
|
||||||
(VEGA_NETWORKS && VEGA_NETWORKS[Networks.TESTNET]) || '',
|
|
||||||
token: VEGA_TOKEN_URL || '',
|
|
||||||
explorer: VEGA_EXPLORER_URL || '',
|
|
||||||
};
|
|
||||||
const baseUrl = trim(urls[dapp], '/');
|
|
||||||
|
|
||||||
const link = useCallback(
|
|
||||||
(url?: string) => `${baseUrl}/${trim(url, '/') || ''}`,
|
|
||||||
[baseUrl]
|
|
||||||
);
|
|
||||||
return link;
|
|
||||||
};
|
|
@ -6,9 +6,11 @@ import {
|
|||||||
DropdownMenuContent,
|
DropdownMenuContent,
|
||||||
DropdownMenuItem,
|
DropdownMenuItem,
|
||||||
DropdownMenuTrigger,
|
DropdownMenuTrigger,
|
||||||
|
ExternalLink,
|
||||||
} from '@vegaprotocol/ui-toolkit';
|
} from '@vegaprotocol/ui-toolkit';
|
||||||
import { useEnvironment } from '../../hooks/use-environment';
|
import { useEnvironment } from '../../hooks/use-environment';
|
||||||
import { Networks } from '../../types';
|
import { Networks } from '../../types';
|
||||||
|
import { DApp, TOKEN_NEW_NETWORK_PARAM_PROPOSAL, useLinks } from '../../hooks';
|
||||||
|
|
||||||
export const envNameMapping: Record<Networks, string> = {
|
export const envNameMapping: Record<Networks, string> = {
|
||||||
[Networks.CUSTOM]: t('Custom'),
|
[Networks.CUSTOM]: t('Custom'),
|
||||||
@ -74,6 +76,7 @@ const NetworkLabel = ({
|
|||||||
|
|
||||||
export const NetworkSwitcher = () => {
|
export const NetworkSwitcher = () => {
|
||||||
const { VEGA_ENV, VEGA_NETWORKS } = useEnvironment();
|
const { VEGA_ENV, VEGA_NETWORKS } = useEnvironment();
|
||||||
|
const tokenLink = useLinks(DApp.Token);
|
||||||
const [isOpen, setOpen] = useState(false);
|
const [isOpen, setOpen] = useState(false);
|
||||||
const [isAdvancedView, setAdvancedView] = useState(false);
|
const [isAdvancedView, setAdvancedView] = useState(false);
|
||||||
|
|
||||||
@ -137,6 +140,14 @@ export const NetworkSwitcher = () => {
|
|||||||
))}
|
))}
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
<div
|
||||||
|
className="relative flex items-center justify-between mx-2 py-2 border-t border-neutral-400 pt-2 text-sm"
|
||||||
|
key="propose-network-param"
|
||||||
|
>
|
||||||
|
<ExternalLink href={tokenLink(TOKEN_NEW_NETWORK_PARAM_PROPOSAL)}>
|
||||||
|
{t('Propose a network parameter change')}
|
||||||
|
</ExternalLink>
|
||||||
|
</div>
|
||||||
</DropdownMenuContent>
|
</DropdownMenuContent>
|
||||||
</DropdownMenu>
|
</DropdownMenu>
|
||||||
);
|
);
|
||||||
|
@ -1 +1,2 @@
|
|||||||
export * from './use-environment';
|
export * from './use-environment';
|
||||||
|
export * from './use-links';
|
||||||
|
84
libs/environment/src/hooks/use-links.ts
Normal file
84
libs/environment/src/hooks/use-links.ts
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
import trim from 'lodash/trim';
|
||||||
|
import { useCallback } from 'react';
|
||||||
|
import { Networks } from '../types';
|
||||||
|
import { useEnvironment } from './use-environment';
|
||||||
|
|
||||||
|
type Net = Exclude<Networks, 'CUSTOM' | 'SANDBOX'>;
|
||||||
|
export enum DApp {
|
||||||
|
Explorer = 'Explorer',
|
||||||
|
Console = 'Console',
|
||||||
|
Token = 'Token',
|
||||||
|
}
|
||||||
|
|
||||||
|
type DAppLinks = {
|
||||||
|
[k in Net]: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
const EmptyLinks: DAppLinks = {
|
||||||
|
[Networks.DEVNET]: '',
|
||||||
|
[Networks.STAGNET1]: '',
|
||||||
|
[Networks.STAGNET3]: '',
|
||||||
|
[Networks.TESTNET]: '',
|
||||||
|
[Networks.MAINNET]: '',
|
||||||
|
};
|
||||||
|
|
||||||
|
const ExplorerLinks = {
|
||||||
|
...EmptyLinks,
|
||||||
|
[Networks.TESTNET]: 'https://explorer.fairground.wtf',
|
||||||
|
[Networks.MAINNET]: 'https://explorer.vega.xyz',
|
||||||
|
};
|
||||||
|
|
||||||
|
const ConsoleLinks = {
|
||||||
|
...EmptyLinks,
|
||||||
|
[Networks.STAGNET1]: 'https://stagnet1.console.vega.xyz',
|
||||||
|
[Networks.STAGNET3]: 'https://stagnet3.console.vega.xyz',
|
||||||
|
[Networks.TESTNET]: 'https://console.fairground.wtf',
|
||||||
|
};
|
||||||
|
|
||||||
|
const TokenLinks = {
|
||||||
|
...EmptyLinks,
|
||||||
|
[Networks.DEVNET]: 'https://dev.token.vega.xyz',
|
||||||
|
[Networks.STAGNET3]: 'https://stagnet3.token.vega.xyz',
|
||||||
|
[Networks.TESTNET]: 'https://token.fairground.wtf',
|
||||||
|
[Networks.MAINNET]: 'https://token.vega.xyz',
|
||||||
|
};
|
||||||
|
|
||||||
|
const Links: { [k in DApp]: DAppLinks } = {
|
||||||
|
[DApp.Explorer]: ExplorerLinks,
|
||||||
|
[DApp.Console]: ConsoleLinks,
|
||||||
|
[DApp.Token]: TokenLinks,
|
||||||
|
};
|
||||||
|
|
||||||
|
export const useLinks = (dapp: DApp, network?: Net) => {
|
||||||
|
const { VEGA_ENV, VEGA_EXPLORER_URL, VEGA_TOKEN_URL } = useEnvironment();
|
||||||
|
const fallback = {
|
||||||
|
[DApp.Explorer]: VEGA_EXPLORER_URL,
|
||||||
|
[DApp.Token]: VEGA_TOKEN_URL,
|
||||||
|
};
|
||||||
|
|
||||||
|
let net = network || VEGA_ENV;
|
||||||
|
if (net === Networks.CUSTOM || net === Networks.SANDBOX) {
|
||||||
|
net = Networks.TESTNET;
|
||||||
|
}
|
||||||
|
|
||||||
|
let baseUrl = trim(Links[dapp][net], '/');
|
||||||
|
if (baseUrl.length === 0 && Object.keys(fallback).includes(dapp)) {
|
||||||
|
baseUrl = trim(fallback[dapp as DApp.Explorer | DApp.Token] || '', '/');
|
||||||
|
}
|
||||||
|
|
||||||
|
const link = useCallback(
|
||||||
|
(url?: string) => `${baseUrl}/${trim(url, '/') || ''}`,
|
||||||
|
[baseUrl]
|
||||||
|
);
|
||||||
|
return link;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Vega blog
|
||||||
|
export const BLOG = 'https://blog.vega.xyz/';
|
||||||
|
|
||||||
|
// Token pages
|
||||||
|
export const TOKEN_NEW_MARKET_PROPOSAL = '/governance/propose/new-market';
|
||||||
|
export const TOKEN_NEW_NETWORK_PARAM_PROPOSAL =
|
||||||
|
'/governance/propose/network-parameter';
|
||||||
|
export const TOKEN_PROPOSALS = '/governance';
|
||||||
|
export const TOKEN_PROPOSAL = '/governance/:id';
|
Loading…
Reference in New Issue
Block a user