diff --git a/src/components/trade/header/user-menu.tsx b/src/components/trade/header/user-menu.tsx index 6cb6d57a..a838c4d6 100644 --- a/src/components/trade/header/user-menu.tsx +++ b/src/components/trade/header/user-menu.tsx @@ -64,10 +64,13 @@ export function UserMenu() { }, []); async function handleLogout() { - if (authenticated) { - await logout(); + try { + if (authenticated) { + await logout(); + } + } finally { + disconnect(); } - disconnect(); } if (!mounted || !ready || isConnecting) { diff --git a/src/components/trade/mobile/mobile-positions-view.tsx b/src/components/trade/mobile/mobile-positions-view.tsx index d4dc68f2..03f1b362 100644 --- a/src/components/trade/mobile/mobile-positions-view.tsx +++ b/src/components/trade/mobile/mobile-positions-view.tsx @@ -4,7 +4,7 @@ import { useConnection } from "wagmi"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Skeleton } from "@/components/ui/skeleton"; -import { POSITIONS_TABS, UI_TEXT } from "@/config/constants"; +import { HL_ALL_DEXS, POSITIONS_TABS, UI_TEXT } from "@/config/constants"; import { useAccountBalances } from "@/hooks/trade/use-account-balances"; import { cn } from "@/lib/cn"; import { useSubOpenOrders } from "@/lib/hyperliquid/hooks/subscription"; @@ -32,7 +32,7 @@ export function MobilePositionsView({ className }: MobilePositionsViewProps) { const { perpPositions, isLoading: isLoadingState } = useAccountBalances(); const { data: ordersEvent, status: ordersStatus } = useSubOpenOrders( - { user: address ?? "0x0" }, + { user: address ?? "0x0", dex: HL_ALL_DEXS }, { enabled: isConnected && !!address }, ); const openOrders = ordersEvent?.orders; diff --git a/src/components/trade/mobile/mobile-terminal.tsx b/src/components/trade/mobile/mobile-terminal.tsx index 5667d991..17334ff9 100644 --- a/src/components/trade/mobile/mobile-terminal.tsx +++ b/src/components/trade/mobile/mobile-terminal.tsx @@ -1,5 +1,6 @@ import { useMemo, useState } from "react"; import { useConnection } from "wagmi"; +import { HL_ALL_DEXS } from "@/config/constants"; import { useAccountBalances } from "@/hooks/trade/use-account-balances"; import { cn } from "@/lib/cn"; import { useSubOpenOrders } from "@/lib/hyperliquid/hooks/subscription"; @@ -22,7 +23,10 @@ export function MobileTerminal({ className }: Props) { const { address, isConnected } = useConnection(); const { perpPositions } = useAccountBalances(); - const { data: ordersEvent } = useSubOpenOrders({ user: address ?? "0x0" }, { enabled: isConnected && !!address }); + const { data: ordersEvent } = useSubOpenOrders( + { user: address ?? "0x0", dex: HL_ALL_DEXS }, + { enabled: isConnected && !!address }, + ); const openOrders = ordersEvent?.orders; const positionsCount = useMemo(() => { diff --git a/src/components/trade/positions/orders-tab.tsx b/src/components/trade/positions/orders-tab.tsx index 06070fe8..222b69dc 100644 --- a/src/components/trade/positions/orders-tab.tsx +++ b/src/components/trade/positions/orders-tab.tsx @@ -6,7 +6,7 @@ import { Button } from "@/components/ui/button"; import { Checkbox } from "@/components/ui/checkbox"; import { ScrollArea, ScrollBar } from "@/components/ui/scroll-area"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; -import { FALLBACK_VALUE_PLACEHOLDER } from "@/config/constants"; +import { FALLBACK_VALUE_PLACEHOLDER, HL_ALL_DEXS } from "@/config/constants"; import { cn } from "@/lib/cn"; import { formatDateTime, formatToken, formatUSD } from "@/lib/format"; import { useMarkets } from "@/lib/hyperliquid"; @@ -44,7 +44,7 @@ export function OrdersTab() { data: openOrdersEvent, status, error, - } = useSubOpenOrders({ user: address ?? "0x0" }, { enabled: isConnected && !!address }); + } = useSubOpenOrders({ user: address ?? "0x0", dex: HL_ALL_DEXS }, { enabled: isConnected && !!address }); const markets = useMarkets(); const [selectedOrderIds, setSelectedOrderIds] = useState>(() => new Set()); diff --git a/src/components/trade/positions/positions-panel.tsx b/src/components/trade/positions/positions-panel.tsx index 0ce39c94..19a1a98e 100644 --- a/src/components/trade/positions/positions-panel.tsx +++ b/src/components/trade/positions/positions-panel.tsx @@ -26,7 +26,10 @@ export function PositionsPanel() { const { address, isConnected } = useConnection(); const { perpSummary, spotBalances } = useAccountBalances(); const { positions } = useUserPositions(); - const { data: ordersEvent } = useSubOpenOrders({ user: address ?? "0x0" }, { enabled: isConnected && !!address }); + const { data: ordersEvent } = useSubOpenOrders( + { user: address ?? "0x0", dex: HL_ALL_DEXS }, + { enabled: isConnected && !!address }, + ); const { data: twapStatesEvent } = useSubTwapStates( { user: address ?? "0x0", dex: HL_ALL_DEXS }, { enabled: isConnected && !!address }, diff --git a/src/components/trade/tradebox/trade-panel.tsx b/src/components/trade/tradebox/trade-panel.tsx index d9e0b10e..ec7cffda 100644 --- a/src/components/trade/tradebox/trade-panel.tsx +++ b/src/components/trade/tradebox/trade-panel.tsx @@ -31,7 +31,12 @@ import { import type { ActiveDialog } from "@/lib/trade/types"; import { useButtonContent } from "@/lib/trade/use-button-content"; import { perpInput, spotInput, useOrderValidation } from "@/lib/trade/use-order-validation"; -import { useDepositModalActions, useSettingsDialogActions, useSwapModalActions } from "@/stores/use-global-modal-store"; +import { + useDepositModalActions, + useFaucetModalActions, + useSettingsDialogActions, + useSwapModalActions, +} from "@/stores/use-global-modal-store"; import { useMarketOrderSlippageBps, useMarketOrderSlippagePercent } from "@/stores/use-global-settings-store"; import { useLimitPrice, @@ -137,9 +142,12 @@ export function TradePanel() { const [activeDialog, setActiveDialog] = useState>(null); const { open: openDepositModal } = useDepositModalActions(); + const { open: openFaucetModal } = useFaucetModalActions(); const { open: openSettingsDialog } = useSettingsDialogActions(); const { open: openSwapModal } = useSwapModalActions(); + const isTestnet = import.meta.env.VITE_HYPERLIQUID_TESTNET === "true"; + const swapTargetToken = useMemo(() => { if (!market || market.kind !== "builderPerp") return null; @@ -424,8 +432,10 @@ export function TradePanel() { canApprove, side, isSubmitting, + isTestnet, onConnectWallet: () => !authenticated && login(), onDeposit: () => openDepositModal("deposit"), + onFaucet: openFaucetModal, onRegister: handleRegister, onSubmit: handleSubmit, }); diff --git a/src/config/privy.ts b/src/config/privy.ts index 1d715dd7..02e8501e 100644 --- a/src/config/privy.ts +++ b/src/config/privy.ts @@ -2,7 +2,7 @@ import type { PrivyClientConfig } from "@privy-io/react-auth"; import { arbitrum, arbitrumSepolia } from "wagmi/chains"; export const privyConfig: PrivyClientConfig = { - loginMethods: ["google", "wallet"], + loginMethods: ["google", "email", "twitter"], embeddedWallets: { ethereum: { createOnLogin: "users-without-wallets", diff --git a/src/lib/trade/use-button-content.ts b/src/lib/trade/use-button-content.ts index 6e07c7a7..b1047e8c 100644 --- a/src/lib/trade/use-button-content.ts +++ b/src/lib/trade/use-button-content.ts @@ -12,8 +12,10 @@ interface ButtonContentInput { canApprove: boolean; side: Side; isSubmitting: boolean; + isTestnet: boolean; onConnectWallet: () => void; onDeposit: () => void; + onFaucet: () => void; onRegister: () => void; onSubmit: () => void; } @@ -58,8 +60,8 @@ export function useButtonContent(input: ButtonContentInput): ButtonContent { } if (input.availableBalance <= 0) { return { - text: t`Deposit`, - action: input.onDeposit, + text: input.isTestnet ? t`Deposit USDH or use Faucet` : t`Deposit`, + action: input.isTestnet ? input.onFaucet : input.onDeposit, disabled: false, variant: "cyan", }; @@ -79,8 +81,10 @@ export function useButtonContent(input: ButtonContentInput): ButtonContent { isRegistering, input.canApprove, input.isAgentLoading, + input.isTestnet, input.onConnectWallet, input.onDeposit, + input.onFaucet, input.onRegister, input.onSubmit, input.side, diff --git a/src/locales/ar/messages.po b/src/locales/ar/messages.po index d47646af..d25d01b0 100644 --- a/src/locales/ar/messages.po +++ b/src/locales/ar/messages.po @@ -508,6 +508,10 @@ msgstr "" #~ msgid "Deposit on Hyperliquid" #~ msgstr "إيداع في Hyperliquid" +#: src/lib/trade/use-button-content.ts +msgid "Deposit USDH or use Faucet" +msgstr "" + #: src/components/trade/positions/send-dialog.tsx msgid "Destination" msgstr "" diff --git a/src/locales/en/messages.po b/src/locales/en/messages.po index fd7a0bd8..6c76bf10 100644 --- a/src/locales/en/messages.po +++ b/src/locales/en/messages.po @@ -509,6 +509,10 @@ msgstr "Deposit failed" #~ msgid "Deposit on Hyperliquid" #~ msgstr "Deposit on Hyperliquid" +#: src/lib/trade/use-button-content.ts +msgid "Deposit USDH or use Faucet" +msgstr "Deposit USDH or use Faucet" + #: src/components/trade/positions/send-dialog.tsx msgid "Destination" msgstr "Destination" diff --git a/src/locales/es/messages.po b/src/locales/es/messages.po index 90885348..7cd4202a 100644 --- a/src/locales/es/messages.po +++ b/src/locales/es/messages.po @@ -508,6 +508,10 @@ msgstr "" #~ msgid "Deposit on Hyperliquid" #~ msgstr "Depositar en Hyperliquid" +#: src/lib/trade/use-button-content.ts +msgid "Deposit USDH or use Faucet" +msgstr "" + #: src/components/trade/positions/send-dialog.tsx msgid "Destination" msgstr "" diff --git a/src/locales/fr/messages.po b/src/locales/fr/messages.po index d600be9e..9ecfc91b 100644 --- a/src/locales/fr/messages.po +++ b/src/locales/fr/messages.po @@ -508,6 +508,10 @@ msgstr "" #~ msgid "Deposit on Hyperliquid" #~ msgstr "Déposer sur Hyperliquid" +#: src/lib/trade/use-button-content.ts +msgid "Deposit USDH or use Faucet" +msgstr "" + #: src/components/trade/positions/send-dialog.tsx msgid "Destination" msgstr "" diff --git a/src/locales/hi/messages.po b/src/locales/hi/messages.po index 0196085c..9deac9ae 100644 --- a/src/locales/hi/messages.po +++ b/src/locales/hi/messages.po @@ -508,6 +508,10 @@ msgstr "" #~ msgid "Deposit on Hyperliquid" #~ msgstr "Hyperliquid पर जमा करें" +#: src/lib/trade/use-button-content.ts +msgid "Deposit USDH or use Faucet" +msgstr "" + #: src/components/trade/positions/send-dialog.tsx msgid "Destination" msgstr "" diff --git a/src/locales/zh/messages.po b/src/locales/zh/messages.po index f3b7280a..b905a968 100644 --- a/src/locales/zh/messages.po +++ b/src/locales/zh/messages.po @@ -508,6 +508,10 @@ msgstr "" #~ msgid "Deposit on Hyperliquid" #~ msgstr "在 Hyperliquid 存款" +#: src/lib/trade/use-button-content.ts +msgid "Deposit USDH or use Faucet" +msgstr "" + #: src/components/trade/positions/send-dialog.tsx msgid "Destination" msgstr "" diff --git a/src/styles.css b/src/styles.css index 4835db8d..b114e101 100644 --- a/src/styles.css +++ b/src/styles.css @@ -391,6 +391,10 @@ } @layer components { + #privy-dialog input#email-input ~ button { + display: none; + } + .active\:scale-98:active { transform: scale(0.98); }