diff --git a/.github/workflows/cypress-explorer-e2e.yml b/.github/workflows/cypress-explorer-e2e.yml
index f1c5081c3..43633f7a0 100644
--- a/.github/workflows/cypress-explorer-e2e.yml
+++ b/.github/workflows/cypress-explorer-e2e.yml
@@ -98,7 +98,7 @@ jobs:
while read -r file; do
mv "${file}" "$(echo ${file} | sed 's|:|-|g')"
done< <(find /home/runner/.vegacapsule/testnet/logs -type f)
-
+
- uses: actions/upload-artifact@v2
if: ${{ always() }}
with:
diff --git a/apps/trading-e2e/src/integration/market-info.cy.ts b/apps/trading-e2e/src/integration/market-info.cy.ts
index 00ac31d66..b73a04ebb 100644
--- a/apps/trading-e2e/src/integration/market-info.cy.ts
+++ b/apps/trading-e2e/src/integration/market-info.cy.ts
@@ -183,12 +183,12 @@ describe('market info is displayed', { tags: '@smoke' }, () => {
.first()
.should('have.text', 'View governance proposal')
.and('have.attr', 'href')
- .and('contain', '/governance/market-0');
+ .and('contain', '/proposals/market-0');
cy.getByTestId(externalLink)
.eq(1)
.should('have.text', 'Propose a change to market')
.and('have.attr', 'href')
- .and('contain', '/governance/propose/update-market');
+ .and('contain', '/proposals/propose/update-market');
});
afterEach('close toggle', () => {
diff --git a/apps/trading-e2e/src/integration/market-summary.cy.ts b/apps/trading-e2e/src/integration/market-summary.cy.ts
index 165ae225c..f3c7bca86 100644
--- a/apps/trading-e2e/src/integration/market-summary.cy.ts
+++ b/apps/trading-e2e/src/integration/market-summary.cy.ts
@@ -49,7 +49,7 @@ describe('Market proposal notification', { tags: '@smoke' }, () => {
cy.getByTestId('external-link').should(
'have.attr',
'href',
- 'https://stagnet3.token.vega.xyz/governance/123'
+ 'https://stagnet3.token.vega.xyz/proposals/123'
);
});
});
diff --git a/apps/trading-e2e/src/integration/markets.cy.ts b/apps/trading-e2e/src/integration/markets.cy.ts
index c01038e16..0c53bff3c 100644
--- a/apps/trading-e2e/src/integration/markets.cy.ts
+++ b/apps/trading-e2e/src/integration/markets.cy.ts
@@ -106,7 +106,7 @@ describe('markets table', { tags: '@smoke' }, () => {
.and(
'have.attr',
'href',
- 'https://stagnet3.token.vega.xyz/governance/propose/new-market'
+ 'https://stagnet3.token.vega.xyz/proposals/propose/new-market'
);
});
});
diff --git a/apps/trading/components/app-loader/index.tsx b/apps/trading/components/app-loader/index.tsx
index 17844f4ad..ac41da35a 100644
--- a/apps/trading/components/app-loader/index.tsx
+++ b/apps/trading/components/app-loader/index.tsx
@@ -8,8 +8,7 @@ import {
Web3Provider as Web3ProviderInternal,
useWeb3ConnectStore,
} from '@vegaprotocol/web3';
-import { AsyncRenderer, Splash } from '@vegaprotocol/ui-toolkit';
-import { t } from '@vegaprotocol/react-helpers';
+import { AsyncRenderer, Loader } from '@vegaprotocol/ui-toolkit';
interface AppLoaderProps {
children: ReactNode;
@@ -21,10 +20,7 @@ interface AppLoaderProps {
*/
export function AppLoader({ children }: AppLoaderProps) {
return (
- {t('Loading...')}}
- cache={cacheConfig}
- >
+ } cache={cacheConfig}>
{children}
);
diff --git a/apps/trading/components/preloader/preloader.tsx b/apps/trading/components/preloader/preloader.tsx
new file mode 100644
index 000000000..7ae503363
--- /dev/null
+++ b/apps/trading/components/preloader/preloader.tsx
@@ -0,0 +1,22 @@
+import { Loader } from '@vegaprotocol/ui-toolkit';
+
+export const Preloader = () => {
+ return (
+ <>
+
+
+
+
+ >
+ );
+};
+
+export default Preloader;
diff --git a/apps/trading/pages/_app.page.tsx b/apps/trading/pages/_app.page.tsx
index 82ea48e2c..59206bf2e 100644
--- a/apps/trading/pages/_app.page.tsx
+++ b/apps/trading/pages/_app.page.tsx
@@ -1,4 +1,5 @@
import Head from 'next/head';
+import dynamic from 'next/dynamic';
import type { AppProps } from 'next/app';
import { Navbar } from '../components/navbar';
import { t } from '@vegaprotocol/react-helpers';
@@ -22,6 +23,7 @@ import {
} from '@vegaprotocol/environment';
import { AppLoader, Web3Provider } from '../components/app-loader';
import './styles.css';
+import './gen-styles.scss';
import { usePageTitleStore } from '../stores';
import { Footer } from '../components/footer';
import { useEffect, useMemo, useState } from 'react';
@@ -67,7 +69,7 @@ function AppBody({ Component }: AppProps) {
const { VEGA_ENV } = useEnvironment();
return (
- <>
+
{/* Cannot use meta tags in _document.page.tsx see https://nextjs.org/docs/messages/no-document-viewport-meta */}
@@ -76,7 +78,7 @@ function AppBody({ Component }: AppProps) {
-
+
@@ -92,10 +94,17 @@ function AppBody({ Component }: AppProps) {
- >
+
);
}
+const DynamicLoader = dynamic(
+ () => import('../components/preloader/preloader'),
+ {
+ loading: () => <>Loading...>,
+ }
+);
+
function VegaTradingApp(props: AppProps) {
const [mounted, setMounted] = useState(false);
@@ -106,7 +115,9 @@ function VegaTradingApp(props: AppProps) {
setMounted(true);
}, []);
- if (!mounted) return null;
+ if (!mounted) {
+ return
;
+ }
return (
diff --git a/apps/trading/pages/gen-styles.scss b/apps/trading/pages/gen-styles.scss
new file mode 100644
index 000000000..6737f9167
--- /dev/null
+++ b/apps/trading/pages/gen-styles.scss
@@ -0,0 +1,50 @@
+.pre-loader {
+ display: flex;
+ width: 100%;
+ min-height: 100vh;
+ justify-content: center;
+ align-items: center;
+
+ @for $i from 0 through 16 {
+ .loader-item:nth-child(#{$i}) {
+ @if $i % 2 == 0 {
+ animation-delay: #{$i * 50 * random(5)}ms;
+ animation-direction: reverse;
+ } @else {
+ animation-delay: #{$i * -50 * random(5)}ms;
+ animation-direction: alternate;
+ }
+ }
+ }
+ .pre-loader-center {
+ align-items: center;
+ display: flex;
+ flex-direction: column;
+ }
+ .pre-loader-wrapper {
+ width: 50px;
+ height: 50px;
+ display: flex;
+ flex-wrap: wrap;
+ }
+ .loader-item {
+ width: 10px;
+ height: 10px;
+ background: black;
+ animation: flickering 0.4s steps(2, jump-none) alternate infinite;
+ }
+}
+@keyframes flickering {
+ 0% {
+ opacity: 1;
+ }
+ 25% {
+ opacity: 1;
+ }
+ 26% {
+ opacity: 0;
+ }
+ 100% {
+ opacity: 0;
+ }
+}
diff --git a/libs/accounts/src/lib/Accounts.graphql b/libs/accounts/src/lib/Accounts.graphql
index d1a83ed0b..ca7bb9ba3 100644
--- a/libs/accounts/src/lib/Accounts.graphql
+++ b/libs/accounts/src/lib/Accounts.graphql
@@ -31,5 +31,6 @@ subscription AccountEvents($partyId: ID) {
balance
assetId
marketId
+ partyId
}
}
diff --git a/libs/accounts/src/lib/__generated__/Accounts.ts b/libs/accounts/src/lib/__generated__/Accounts.ts
index 0f40e9e85..6246bb756 100644
--- a/libs/accounts/src/lib/__generated__/Accounts.ts
+++ b/libs/accounts/src/lib/__generated__/Accounts.ts
@@ -17,7 +17,7 @@ export type AccountEventsSubscriptionVariables = Types.Exact<{
}>;
-export type AccountEventsSubscription = { __typename?: 'Subscription', accounts: Array<{ __typename?: 'AccountUpdate', type: Types.AccountType, balance: string, assetId: string, marketId?: string | null }> };
+export type AccountEventsSubscription = { __typename?: 'Subscription', accounts: Array<{ __typename?: 'AccountUpdate', type: Types.AccountType, balance: string, assetId: string, marketId?: string | null, partyId: string }> };
export const AccountFieldsFragmentDoc = gql`
fragment AccountFields on AccountBalance {
@@ -83,6 +83,7 @@ export const AccountEventsDocument = gql`
balance
assetId
marketId
+ partyId
}
}
`;
diff --git a/libs/accounts/src/lib/accounts-data-provider.spec.ts b/libs/accounts/src/lib/accounts-data-provider.spec.ts
index 3b695fddd..752cd2dbf 100644
--- a/libs/accounts/src/lib/accounts-data-provider.spec.ts
+++ b/libs/accounts/src/lib/accounts-data-provider.spec.ts
@@ -26,6 +26,7 @@ describe('getId', () => {
balance: '1',
assetId: 'assetId',
marketId: '',
+ partyId: '',
})
);
expect(
@@ -41,6 +42,7 @@ describe('getId', () => {
balance: '1',
assetId: 'assetId',
marketId: 'testId',
+ partyId: 'partyId',
})
);
});
diff --git a/libs/accounts/src/lib/accounts-data-provider.ts b/libs/accounts/src/lib/accounts-data-provider.ts
index e33c844ce..db126049a 100644
--- a/libs/accounts/src/lib/accounts-data-provider.ts
+++ b/libs/accounts/src/lib/accounts-data-provider.ts
@@ -66,6 +66,7 @@ const update = (
balance: delta.balance,
market: delta.marketId ? { id: delta.marketId } : null,
asset: { id: delta.assetId },
+ party: { id: delta.partyId },
});
}
});
@@ -182,6 +183,7 @@ export const accountsDataProvider = makeDerivedDataProvider(
if (asset) {
return {
...account,
+ partyId: account.party?.id,
asset: {
...asset,
},
diff --git a/libs/accounts/src/lib/accounts.mock.ts b/libs/accounts/src/lib/accounts.mock.ts
index 6f205c399..15ab0891b 100644
--- a/libs/accounts/src/lib/accounts.mock.ts
+++ b/libs/accounts/src/lib/accounts.mock.ts
@@ -122,6 +122,7 @@ export const accountEventsSubscription = (
balance: '100000000',
assetId: 'asset-id',
marketId: null,
+ partyId: 'vega-0',
},
],
};
diff --git a/libs/environment/src/hooks/use-links.ts b/libs/environment/src/hooks/use-links.ts
index a2952fb75..1600de413 100644
--- a/libs/environment/src/hooks/use-links.ts
+++ b/libs/environment/src/hooks/use-links.ts
@@ -88,12 +88,12 @@ export const useEtherscanLink = () => {
export const BLOG = 'https://blog.vega.xyz/';
// Token pages
-export const TOKEN_NEW_MARKET_PROPOSAL = '/governance/propose/new-market';
+export const TOKEN_NEW_MARKET_PROPOSAL = '/proposals/propose/new-market';
export const TOKEN_NEW_NETWORK_PARAM_PROPOSAL =
- '/governance/propose/network-parameter';
-export const TOKEN_GOVERNANCE = '/governance';
-export const TOKEN_PROPOSALS = '/governance';
-export const TOKEN_PROPOSAL = '/governance/:id';
+ '/proposals/propose/network-parameter';
+export const TOKEN_GOVERNANCE = '/proposals';
+export const TOKEN_PROPOSALS = '/proposals';
+export const TOKEN_PROPOSAL = '/proposals/:id';
// Explorer pages
export const EXPLORER_TX = '/txs/:hash';
diff --git a/libs/governance/src/lib/proposals-list/use-column-defs.tsx b/libs/governance/src/lib/proposals-list/use-column-defs.tsx
index 88fce616f..9bcdfe9f6 100644
--- a/libs/governance/src/lib/proposals-list/use-column-defs.tsx
+++ b/libs/governance/src/lib/proposals-list/use-column-defs.tsx
@@ -55,7 +55,7 @@ export const useColumnDefs = () => {
const { change } = data?.terms || {};
if (instrumentGuard(change) && VEGA_TOKEN_URL) {
if (data?.id) {
- const link = `${VEGA_TOKEN_URL}/governance/${data.id}`;
+ const link = `${VEGA_TOKEN_URL}/proposals/${data.id}`;
return (
{change.instrument.code}
diff --git a/libs/liquidity/src/lib/liquidity-table.tsx b/libs/liquidity/src/lib/liquidity-table.tsx
index 3209c6b9f..b46952eb9 100644
--- a/libs/liquidity/src/lib/liquidity-table.tsx
+++ b/libs/liquidity/src/lib/liquidity-table.tsx
@@ -43,10 +43,10 @@ export const LiquidityTable = forwardRef(
if (!value) return '-';
return `${addDecimalsFormatNumber(value, assetDecimalPlaces ?? 0, 5)}`;
};
- const stakeToCcySiskasFormatter = ({ value }: ValueFormatterParams) => {
+ const stakeToCcyVolumeFormatter = ({ value }: ValueFormatterParams) => {
if (!value) return '-';
const newValue = new BigNumber(value)
- .times(stakeToCcySiskas ?? 1)
+ .times(Number(stakeToCcySiskas) || 1)
.toString();
return `${addDecimalsFormatNumber(newValue, assetDecimalPlaces ?? 0, 5)}`;
};
@@ -121,7 +121,7 @@ export const LiquidityTable = forwardRef(
headerTooltip={t(
`The liquidity provider's obligation to the market, calculated as the liquidity commitment amount multiplied by the value of the stake_to_ccy_siskas network parameter to convert into units of liquidity volume. The obligation can be met by a combination of LP orders and limit orders on the order book.`
)}
- valueFormatter={stakeToCcySiskasFormatter}
+ valueFormatter={stakeToCcyVolumeFormatter}
/>
(
)}
field="balance"
type="rightAligned"
- valueFormatter={stakeToCcySiskasFormatter}
+ valueFormatter={stakeToCcyVolumeFormatter}
/>
{
+export const Loader = ({
+ size = 'large',
+ forceTheme,
+ preloader,
+}: LoaderProps) => {
const [, forceRender] = useState(false);
useEffect(() => {
- const interval = setInterval(() => {
- forceRender((x) => !x);
- }, 100);
+ const interval = preloader
+ ? undefined
+ : setInterval(() => {
+ forceRender((x) => !x);
+ }, 100);
return () => clearInterval(interval);
- }, []);
+ }, [preloader]);
- const itemClasses = classNames({
+ const itemClasses = classNames('loader-item', {
'dark:bg-white bg-black': !forceTheme,
'bg-white': forceTheme === 'dark',
'bg-black': forceTheme === 'light',
@@ -29,8 +36,11 @@ export const Loader = ({ size = 'large', forceTheme }: LoaderProps) => {
const items = size === 'small' ? 9 : 16;
return (
-
-
+
+
{new Array(items).fill(null).map((_, i) => {
return (