Skip to content

Commit

Permalink
feat: add search form for wallet
Browse files Browse the repository at this point in the history
Search form enables user to search for ethereum wallet based on its address and display balance using Tatum API.
  • Loading branch information
martinkyselak committed Dec 29, 2023
1 parent f985410 commit cb45ad5
Show file tree
Hide file tree
Showing 6 changed files with 96 additions and 4 deletions.
32 changes: 32 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"version": "0.1.0",
"private": true,
"dependencies": {
"@tatumio/tatum": "^4.1.34",
"@testing-library/jest-dom": "^5.17.0",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
Expand Down
2 changes: 1 addition & 1 deletion src/SearchWalletForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { FieldError, useForm } from 'react-hook-form';
import { SearchCriteria } from './api/types';

type Props = {
onSearch: (search: SearchCriteria) => void;
onSearch: (address: SearchCriteria) => void;
};

export function SearchWalletForm({ onSearch }: Props) {
Expand Down
19 changes: 19 additions & 0 deletions src/WalletFound.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { AddressBalance } from '@tatumio/tatum';

type Props = {
addressBalance: AddressBalance[];
};

export function WalletFound({ addressBalance }: Props) {
return (
<div>
<h2 className="text-xl font-bold">Wallet</h2>
<p className="py-2 text-sm truncate" title={addressBalance[0].address}>
Address: {addressBalance[0].address}
</p>
<p className="py-2 text-sm">Balance: {addressBalance[0].balance}</p>
<h3 className="text-l font-bold">Transactions</h3>
<p>...</p>
</div>
);
}
36 changes: 33 additions & 3 deletions src/WalletPage.tsx
Original file line number Diff line number Diff line change
@@ -1,18 +1,48 @@
import { useState } from 'react';
import { useEffect, useState } from 'react';
import { SearchCriteria } from './api/types';
import { SearchWalletForm } from './SearchWalletForm';
import { getWallet } from './api/getWallet';
import { WalletFound } from './WalletFound';
import { AddressBalance } from '@tatumio/tatum';

export function WalletPage() {
const [searchCriteria, setSearchCriteria] = useState<SearchCriteria | undefined>();
const [isLoading, setIsLoading] = useState(false);
const [addressBalance, setWalletData] = useState<AddressBalance[]>();
const [searchCriteria, setSearchCriteria] = useState<SearchCriteria>();

useEffect(() => {
let cancel = false;
// '0xb794f5ea0ba39494ce839613fffba74279579268'
if (searchCriteria) {
getWallet(searchCriteria.address).then((data) => {
if (!cancel) {
setWalletData(data);
setIsLoading(false);
}
});
}
return () => {
cancel = true;
};
}, [searchCriteria]);

function handleSearch(search: SearchCriteria) {
setIsLoading(true);
setSearchCriteria(search);
}

if (isLoading) {
return <div className="w-96 mx-auto mt-6">Loading ...</div>;
}
return (
<main className="max-w-xs ml-auto mr-auto">
<SearchWalletForm onSearch={handleSearch} />
<div>Wallet balance and last ten transactions will be here.</div>
{searchCriteria && !addressBalance && (
<p className="py-2 text-sm truncate">
No wallet with address <em>{searchCriteria.address}</em> found.
</p>
)}
{addressBalance && <WalletFound addressBalance={addressBalance} />}
</main>
);
}
10 changes: 10 additions & 0 deletions src/api/getWallet.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { TatumSDK, Network, Ethereum, ResponseDto, AddressBalance } from '@tatumio/tatum';

export async function getWallet(address: string): Promise<AddressBalance[]> {
const tatum = await TatumSDK.init<Ethereum>({ network: Network.ETHEREUM });
const balance: ResponseDto<AddressBalance[]> = await tatum.address.getBalance({
addresses: [address],
});

return balance.data;
}

0 comments on commit cb45ad5

Please sign in to comment.