Skip to content

Commit 85fa754

Browse files
author
Erik Ritter
authored
Merge pull request #95 from Developer-DAO/shortAddressProp
update Address component with shortAddress prop
2 parents 8b18c7e + af950ea commit 85fa754

File tree

3 files changed

+48
-5
lines changed

3 files changed

+48
-5
lines changed

packages/components/src/components/Address/Address.stories.tsx

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,24 @@ export default {
1111

1212
export const Default = () => <Address value='testaddress.eth' />;
1313

14-
const AddressUsingProvider = () => {
14+
export const DefaultShortenedWithENS = () => <Address shortened value='testaddress.eth' />;
15+
16+
export const DefaultShortenedWithHexAddress = () => (
17+
<Address shortened value='0x7Be8076f4EA4A4AD08075C2508e481d6C946D12b' />
18+
);
19+
20+
type AddressProps = {
21+
shortened?: boolean;
22+
};
23+
24+
const AddressUsingProvider = (props: AddressProps) => {
1525
const { connected, connectWallet, connection } = useWallet();
1626

1727
return (
1828
<>
1929
<Address
2030
value={connected ? connection.ens || connection.userAddress || '' : 'Not connected'}
31+
shortened={props.shortened}
2132
/>
2233
<Button onClick={connectWallet}>Connect wallet</Button>
2334
</>
@@ -29,3 +40,9 @@ export const WithWallet = () => (
2940
<AddressUsingProvider />
3041
</Provider>
3142
);
43+
44+
export const WithWalletShortened = () => (
45+
<Provider network={NETWORKS.rinkeby}>
46+
<AddressUsingProvider shortened />
47+
</Provider>
48+
);

packages/components/src/components/Address/Address.test.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,13 @@ import { Address } from './Address';
55

66
describe('Address', () => {
77
it('renders without throwing', () => {
8-
const { container } = render(<Address value="taylorswift.eth" />);
8+
const { container } = render(<Address value='taylorswift.eth' shortened={false} />);
99
expect(container).toBeInTheDocument();
1010
});
11+
12+
it('checks the length of the address when shortened', () => {
13+
const { container } = render(<Address value='0x00000000000000' shortened />);
14+
const addressInput = container.querySelector('input') as HTMLInputElement;
15+
expect(addressInput).toHaveValue('0x00...0000');
16+
});
1117
});
Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,36 @@
11
import { Input } from '@chakra-ui/react';
2-
import React from 'react';
2+
import React, { FC } from 'react';
33

44
export interface AddressProps {
55
/**
66
* The address to display
77
*/
88
value: string;
9+
/**
10+
* Shorten the address if it does not resolve to an ENS name
11+
*/
12+
shortened?: boolean;
913
}
1014

1115
/**
1216
* A component to display an address
1317
*/
14-
export const Address: React.FC<AddressProps> = ({ value }) => {
15-
return <Input value={value} />;
18+
export const Address: FC<AddressProps> = ({ value, shortened = false }) => {
19+
let displayAddress: string;
20+
21+
if (shortened) {
22+
if (value.includes('.eth')) {
23+
displayAddress = value;
24+
} else if (value === '' || value === 'Not connected') {
25+
displayAddress = value;
26+
} else {
27+
displayAddress = `${value.substring(0, 4)}...${value.substring(
28+
value.length - 4
29+
)}`.toLowerCase();
30+
}
31+
} else {
32+
displayAddress = value;
33+
}
34+
35+
return <Input value={displayAddress} />;
1636
};

0 commit comments

Comments
 (0)