diff --git a/infra/rooch-portal-v2/package.json b/infra/rooch-portal-v2/package.json index 065d89b005..d5d17bf11d 100644 --- a/infra/rooch-portal-v2/package.json +++ b/infra/rooch-portal-v2/package.json @@ -41,8 +41,8 @@ "@mui/x-data-grid": "^7.7.0", "@mui/x-date-pickers": "^7.7.0", "@mui/x-tree-view": "^7.7.0", - "@roochnetwork/rooch-sdk": "^0.2.3", - "@roochnetwork/rooch-sdk-kit": "^0.2.3", + "@roochnetwork/rooch-sdk": "^0.2.4", + "@roochnetwork/rooch-sdk-kit": "^0.2.4", "@tanstack/react-query": "^5.51.11", "@types/react-syntax-highlighter": "^15.5.13", "autoprefixer": "^10.4.19", diff --git a/infra/rooch-portal-v2/src/layouts/components/account-button.tsx b/infra/rooch-portal-v2/src/layouts/components/account-button.tsx index 2fe71d01ca..a22afc41c1 100644 --- a/infra/rooch-portal-v2/src/layouts/components/account-button.tsx +++ b/infra/rooch-portal-v2/src/layouts/components/account-button.tsx @@ -1,9 +1,11 @@ import type { IconButtonProps } from '@mui/material/IconButton'; -import { useWallets, useConnectWallet } from '@roochnetwork/rooch-sdk-kit'; +import { useState } from 'react'; import { Button } from '@mui/material'; +import WalletSelectModal from './wallet-select-modal'; + export type AccountButtonProps = IconButtonProps & { open: boolean; photoURL: string; @@ -11,17 +13,21 @@ export type AccountButtonProps = IconButtonProps & { }; export function AccountButton() { - const wallets = useWallets(); - const { mutateAsync: connectWallet } = useConnectWallet(); + const [showWalletSelectModal, setShowWalletSelectModal] = useState(false); return ( - + <> + + {showWalletSelectModal && ( + setShowWalletSelectModal(false)} /> + )} + ); } diff --git a/infra/rooch-portal-v2/src/layouts/components/account-drawer.tsx b/infra/rooch-portal-v2/src/layouts/components/account-drawer.tsx index 9375e083fb..f23d9aa39a 100644 --- a/infra/rooch-portal-v2/src/layouts/components/account-drawer.tsx +++ b/infra/rooch-portal-v2/src/layouts/components/account-drawer.tsx @@ -3,12 +3,7 @@ import type { IconButtonProps } from '@mui/material/IconButton'; import { useState, useCallback } from 'react'; -import { - useWallets, - useWalletStore, - useConnectWallet, - useCurrentAddress, -} from '@roochnetwork/rooch-sdk-kit'; +import { useWallets, useWalletStore, useCurrentAddress } from '@roochnetwork/rooch-sdk-kit'; import Box from '@mui/material/Box'; import { Button } from '@mui/material'; @@ -26,6 +21,7 @@ import { Iconify } from 'src/components/iconify'; import { Scrollbar } from 'src/components/scrollbar'; import { AnimateAvatar } from 'src/components/animate'; +import WalletSelectModal from './wallet-select-modal'; import { DisconnectButton } from './disconnect-button'; export type AccountDrawerProps = IconButtonProps & {}; @@ -34,11 +30,12 @@ export function AccountDrawer() { const theme = useTheme(); const wallets = useWallets(); const currentAddress = useCurrentAddress(); - const { mutateAsync: connectWallet } = useConnectWallet(); const connectionStatus = useWalletStore((state) => state.connectionStatus); const [open, setOpen] = useState(false); + const [showWalletSelectModal, setShowWalletSelectModal] = useState(false); + const handleOpenDrawer = useCallback(() => { setOpen(true); }, []); @@ -72,7 +69,7 @@ export function AccountDrawer() { handleOpenDrawer(); return; } - await connectWallet({ wallet: wallets[0] }); + setShowWalletSelectModal(true); }} > {connectionStatus === 'connected' @@ -80,6 +77,10 @@ export function AccountDrawer() { : 'Connect Wallet'} + {showWalletSelectModal && ( + setShowWalletSelectModal(false)} /> + )} + void; +}) { + const { mutateAsync: connectWallet } = useConnectWallet(); + + const [walletInstalled, setWalletInstalled] = useState(false); + const [checkingInstall, setCheckingInstall] = useState(false); + + useEffect(() => { + async function checkWalletInstalled() { + setCheckingInstall(true); + const installed = await wallet.checkInstalled(); + setWalletInstalled(installed); + setCheckingInstall(false); + } + checkWalletInstalled(); + }, [wallet]); + + return ( + + ); +} diff --git a/infra/rooch-portal-v2/src/layouts/components/wallet-select-modal.tsx b/infra/rooch-portal-v2/src/layouts/components/wallet-select-modal.tsx new file mode 100644 index 0000000000..22e094d4ee --- /dev/null +++ b/infra/rooch-portal-v2/src/layouts/components/wallet-select-modal.tsx @@ -0,0 +1,33 @@ +import { useWallets } from '@roochnetwork/rooch-sdk-kit'; + +import { Stack, Dialog, DialogTitle, DialogContent } from '@mui/material'; + +import WalletButton from './wallet-button'; + +export default function WalletSelectModal({ onSelect }: { onSelect: () => void }) { + const wallets = useWallets(); + + return ( + { + onSelect(); + }} + > + Select wallet + + + + {wallets.slice(0, 3).map((w) => ( + + ))} + + + + ); +} diff --git a/infra/rooch-portal-v2/src/sections/assets/components/nft-list-card.tsx b/infra/rooch-portal-v2/src/sections/assets/components/nft-list-card.tsx index 95b443e12c..5111443ea5 100644 --- a/infra/rooch-portal-v2/src/sections/assets/components/nft-list-card.tsx +++ b/infra/rooch-portal-v2/src/sections/assets/components/nft-list-card.tsx @@ -59,7 +59,6 @@ export default function NFTList({ address }: { address: string }) { filter: { object_type_with_owner: { owner: address, - filter_out: false, object_type: FMNFT.objType, }, }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 57eee21cce..743192bb50 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -399,11 +399,11 @@ importers: specifier: ^7.7.0 version: 7.14.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@roochnetwork/rooch-sdk': - specifier: ^0.2.3 - version: 0.2.3 + specifier: ^0.2.4 + version: 0.2.4 '@roochnetwork/rooch-sdk-kit': - specifier: ^0.2.3 - version: 0.2.3(@tanstack/react-query@5.52.2(react@18.3.1))(@types/react@18.3.3)(immer@9.0.21)(react@18.3.1) + specifier: ^0.2.4 + version: 0.2.4(@tanstack/react-query@5.52.2(react@18.3.1))(@types/react@18.3.3)(immer@9.0.21)(react@18.3.1) '@tanstack/react-query': specifier: ^5.51.11 version: 5.52.2(react@18.3.1) @@ -801,7 +801,7 @@ importers: version: 4.5.3(@types/node@20.14.14)(terser@5.31.1) vitest: specifier: ^1.6.0 - version: 1.6.0(@types/node@20.14.14)(happy-dom@14.12.0)(jsdom@23.2.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(terser@5.31.1) + version: 1.6.0(@types/node@20.14.14)(happy-dom@14.12.0)(jsdom@23.2.0)(terser@5.31.1) wait-on: specifier: ^7.0.1 version: 7.2.0 @@ -886,7 +886,7 @@ importers: version: 4.5.3(@types/node@20.14.14)(terser@5.31.1) vitest: specifier: ^1.6.0 - version: 1.6.0(@types/node@20.14.14)(happy-dom@14.12.0)(jsdom@23.2.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(terser@5.31.1) + version: 1.6.0(@types/node@20.14.14)(happy-dom@14.12.0)(jsdom@23.2.0)(terser@5.31.1) sdk/typescript/templates/react-counter: dependencies: @@ -974,7 +974,7 @@ importers: version: 4.5.3(@types/node@20.14.14)(terser@5.31.1) vitest: specifier: ^1.6.0 - version: 1.6.0(@types/node@20.14.14)(happy-dom@14.12.0)(jsdom@23.2.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(terser@5.31.1) + version: 1.6.0(@types/node@20.14.14)(happy-dom@14.12.0)(jsdom@23.2.0)(terser@5.31.1) packages: @@ -4388,10 +4388,21 @@ packages: '@tanstack/react-query': ^5.0.0 react: '*' + '@roochnetwork/rooch-sdk-kit@0.2.4': + resolution: {integrity: sha512-dwrvObq7xuFsM8CjimoOdgNP5biTmwA/k/qy0Zl4KWYCFyh80si5lYhS5oL2muggcMxv6/SYF+xeOCzjUwsNjA==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@tanstack/react-query': ^5.0.0 + react: '*' + '@roochnetwork/rooch-sdk@0.2.3': resolution: {integrity: sha512-9OrkxjtWBg+bvvoMdnqiNFZk8nBHRMbZtEM/cSpCJgTC4UYbfd0LXk6WLGtEagU/FAaBP3p5G6CdBdg/4DdlGA==} engines: {node: '>=18.0.0'} + '@roochnetwork/rooch-sdk@0.2.4': + resolution: {integrity: sha512-YhPQlAbUJ+zbFXXDyR7r40HruMmy8k/tvO03PJj55LG0EfjJ/UfZ7dC+/I9S6Vt7CGJ8ZExcMne6H6cq1IqECA==} + engines: {node: '>=18.0.0'} + '@rushstack/eslint-patch@1.10.3': resolution: {integrity: sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==} @@ -15142,9 +15153,9 @@ snapshots: - babel-plugin-macros - immer - '@roochnetwork/rooch-sdk-kit@0.2.3(@tanstack/react-query@5.52.2(react@18.3.1))(@types/react@18.3.3)(immer@9.0.21)(react@18.3.1)': + '@roochnetwork/rooch-sdk-kit@0.2.4(@tanstack/react-query@5.52.2(react@18.3.1))(@types/react@18.3.3)(immer@9.0.21)(react@18.3.1)': dependencies: - '@roochnetwork/rooch-sdk': 0.2.3 + '@roochnetwork/rooch-sdk': 0.2.4 '@tanstack/react-query': 5.52.2(react@18.3.1) '@vanilla-extract/css': 1.15.3(babel-plugin-macros@3.1.0) '@vanilla-extract/dynamic': 2.1.1 @@ -15171,6 +15182,21 @@ snapshots: tweetnacl: 1.0.3 valibot: 0.25.0 + '@roochnetwork/rooch-sdk@0.2.4': + dependencies: + '@mysten/bcs': 1.0.2 + '@noble/curves': 1.4.0 + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.7 + '@scure/bip32': 1.4.0 + '@scure/bip39': 1.3.0 + '@suchipi/femver': 1.0.0 + bech32: 2.0.0 + bs58check: 2.1.2 + buffer: 6.0.3 + tweetnacl: 1.0.3 + valibot: 0.25.0 + '@rushstack/eslint-patch@1.10.3': {} '@sadoprotocol/ordit-sdk@file:sdk/typescript/bitseed-sdk/libs/sadoprotocol-ordit-sdk-v2.4.9.tgz(bufferutil@4.0.8)': @@ -23837,7 +23863,7 @@ snapshots: fsevents: 2.3.3 terser: 5.31.1 - vitest@1.6.0(@types/node@20.14.14)(happy-dom@14.12.0)(jsdom@23.2.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(terser@5.31.1): + vitest@1.6.0(@types/node@20.14.14)(happy-dom@14.12.0)(jsdom@23.2.0)(terser@5.31.1): dependencies: '@vitest/expect': 1.6.0 '@vitest/runner': 1.6.0