diff --git a/packages/backend/src/api/controllers/UserController.ts b/packages/backend/src/api/controllers/UserController.ts index d23965361..0a7cfeb03 100644 --- a/packages/backend/src/api/controllers/UserController.ts +++ b/packages/backend/src/api/controllers/UserController.ts @@ -77,6 +77,18 @@ export class UserController { return { type: 'redirect', url: '/users/recover' } } + const registeredUser = + await this.userRegistrationEventRepository.findByStarkKey( + context.user.starkKey + ) + + if (registeredUser) { + return { + type: 'redirect', + url: `/users/${context.user.starkKey.toString()}`, + } + } + const content = renderUserRegisterPage({ context, exchangeAddress: this.exchangeAddress, @@ -286,7 +298,8 @@ export class UserController { ): Promise { const context = await this.pageContextService.getPageContext(givenUser) const collateralAsset = this.pageContextService.getCollateralAsset(context) - const [userAssets, userStatistics] = await Promise.all([ + const [registeredUser, userAssets, userStatistics] = await Promise.all([ + this.userRegistrationEventRepository.findByStarkKey(starkKey), this.preprocessedAssetHistoryRepository.getCurrentByStarkKeyPaginated( starkKey, pagination, @@ -301,7 +314,6 @@ export class UserController { message: `User with starkKey ${starkKey.toString()} not found`, } } - const assetDetailsMap = await this.assetDetailsService.getAssetDetailsMap({ userAssets: userAssets, }) @@ -318,6 +330,7 @@ export class UserController { const content = renderUserAssetsPage({ context, starkKey, + ethereumAddress: registeredUser?.ethAddress, assets, ...pagination, total: userStatistics.assetCount, diff --git a/packages/frontend/src/preview/routes.ts b/packages/frontend/src/preview/routes.ts index e0521ff15..cf269a8ab 100644 --- a/packages/frontend/src/preview/routes.ts +++ b/packages/frontend/src/preview/routes.ts @@ -582,6 +582,7 @@ const routes: Route[] = [ ctx.body = renderUserAssetsPage({ context, starkKey: StarkKey.fake(), + ethereumAddress: undefined, assets: repeat(visible, randomUserAssetEntry), limit, offset, diff --git a/packages/frontend/src/scripts/keys/starkKeyRegistration.ts b/packages/frontend/src/scripts/keys/starkKeyRegistration.ts index 0e38f1868..bdc604714 100644 --- a/packages/frontend/src/scripts/keys/starkKeyRegistration.ts +++ b/packages/frontend/src/scripts/keys/starkKeyRegistration.ts @@ -36,6 +36,6 @@ export function initStarkKeyRegistration() { EthereumAddress(exchangeAddress) ) - window.location.reload() + window.location.href = `/users/${starkKey.toString()}` }) } diff --git a/packages/frontend/src/view/pages/user/UserAssetsPage.tsx b/packages/frontend/src/view/pages/user/UserAssetsPage.tsx index d4bd0c758..6c7275394 100644 --- a/packages/frontend/src/view/pages/user/UserAssetsPage.tsx +++ b/packages/frontend/src/view/pages/user/UserAssetsPage.tsx @@ -1,5 +1,5 @@ import { PageContext } from '@explorer/shared' -import { StarkKey } from '@explorer/types' +import { EthereumAddress, StarkKey } from '@explorer/types' import React from 'react' import { ContentWrapper } from '../../components/page/ContentWrapper' @@ -13,6 +13,7 @@ import { UserPageTitle } from './components/UserPageTitle' interface UserAssetsPageProps { context: PageContext starkKey: StarkKey + ethereumAddress: EthereumAddress | undefined assets: UserAssetEntry[] limit: number offset: number @@ -25,6 +26,7 @@ export function renderUserAssetsPage(props: UserAssetsPageProps) { function UserAssetsPage(props: UserAssetsPageProps) { const common = getAssetsTableProps(props.starkKey) + const isMine = props.context.user?.starkKey === props.starkKey return ( diff --git a/packages/frontend/src/view/pages/user/UserPage.tsx b/packages/frontend/src/view/pages/user/UserPage.tsx index 3b66078c9..03aa544b1 100644 --- a/packages/frontend/src/view/pages/user/UserPage.tsx +++ b/packages/frontend/src/view/pages/user/UserPage.tsx @@ -96,6 +96,7 @@ function UserPage(props: UserPageProps) { - props.tradingMode === 'perpetual' - ? `/forced/new/${ - entry.vaultOrPositionId - }/${entry.asset.hashOrId.toString()}` - : `/forced/new/${entry.vaultOrPositionId}` + const isUserRegistered = !!props.ethereumAddress const escapeHatchElem = (entry: UserAssetEntry) => entry.action === 'WITHDRAW' ? ( - + ESCAPE ) : ( @@ -79,7 +77,11 @@ export function UserAssetsTable(props: UserAssetsTableProps) { (!props.isFrozen ? ( {entry.action} @@ -93,3 +95,29 @@ export function UserAssetsTable(props: UserAssetsTableProps) { /> ) } + +function getEscapeHatchLink( + vaultOrPositionId: string, + isUserRegistered: boolean +) { + if (!isUserRegistered) { + return '/users/register' + } + return `/escape/${vaultOrPositionId}` +} + +function getForcedActionLink( + tradingMode: TradingMode, + entry: UserAssetEntry, + isUserRegistered: boolean +) { + if (!isUserRegistered) { + return '/users/register' + } + + return tradingMode === 'perpetual' + ? `/forced/new/${ + entry.vaultOrPositionId + }/${entry.asset.hashOrId.toString()}` + : `/forced/new/${entry.vaultOrPositionId}` +}