@@ -14,12 +14,11 @@ import { RollerTransaction } from '@urbit/roller-api';
15import './TransactionHistory.scss';
15import './TransactionHistory.scss';
16import { TransactionRow } from './TransactionRow';
16import { TransactionRow } from './TransactionRow';
17−import { Box, Row } from '@tlon/indigo-react';
17+import { Box, LoadingSpinner, Row } from '@tlon/indigo-react';
18import { PatpRow } from './PatpRow';
18import { PatpRow } from './PatpRow';
19import Dropdown from 'components/L2/Dropdowns/Dropdown';
19import Dropdown from 'components/L2/Dropdowns/Dropdown';
20import Sigil from 'components/Sigil';
20import Sigil from 'components/Sigil';
21import { AddressRow } from './AddressRow';
21import { AddressRow } from './AddressRow';
22−import { abbreviateAddress } from 'lib/utils/address';
24interface GroupedTransactions {
23interface GroupedTransactions {
25 [ship: string]: RollerTransaction[];
24 [ship: string]: RollerTransaction[];
@@ -36,7 +35,7 @@ const TransactionHistory = () => {
36 const [selectedPatp, setSelectedPatp] = useState<string | null>(null);
35 const [selectedPatp, setSelectedPatp] = useState<string | null>(null);
38 const shortAddress = useMemo(() => {
37 const shortAddress = useMemo(() => {
39− return abbreviateAddress(address);
38+ return address.slice(0, 6);
40 }, [address]);
39 }, [address]);
42 const fetchTransactions = useCallback(async () => {
41 const fetchTransactions = useCallback(async () => {
@@ -85,75 +84,81 @@ const TransactionHistory = () => {
85 className="transaction-history"
84 className="transaction-history"
86 header={<L2BackHeader />}>
85 header={<L2BackHeader />}>
89− <Box className={'loading'}>Loading...</Box>
92− <HeaderPane>
88+ <HeaderPane>
93− <Box className="transaction-header">
89+ <Box className="transaction-header">
94− <h5>Transactions</h5>
90+ <h5>Transactions</h5>
95− <Dropdown
91+ <Dropdown
96− className="transaction-dropdown"
92+ className="transaction-dropdown"
97− open={dropdownOpen}
93+ open={dropdownOpen}
98− value={selectedPatp ? selectedPatp : shortAddress}
94+ value={selectedPatp ? selectedPatp : shortAddress}
99− toggleOpen={() => setDropdownOpen(!dropdownOpen)}>
95+ toggleOpen={() => setDropdownOpen(!dropdownOpen)}>
100− <Box className="divider" />
96+ <Box className="divider" />
101− <Box className="points">
97+ <Box className="points">
102− <Row className="entry" onClick={() => selectPatp(null)}>
98+ <Row className="entry" onClick={() => selectPatp(null)}>
103− <Box>{shortAddress}</Box>
99+ <Box>{shortAddress}</Box>
106− background="black"
102+ background="black"
107− borderRadius="2px"
103+ borderRadius="2px"
108− width="24px"
104+ width="24px"
109− height="24px"></Box>
105+ height="24px"></Box>
112− {txPatps.map(patp => {
108+ {txPatps.map(patp => {
113− return (
109+ return (
115− className="entry"
111+ className="entry"
116− onClick={() => selectPatp(patp)}
112+ onClick={() => selectPatp(patp)}
117− key={patp}>
113+ key={patp}>
118− <Box>{patp}</Box>
114+ <Box>{patp}</Box>
120− <Box className="sigil">
116+ <Box className="sigil">
123− patp={patp}
119+ patp={patp}
124− size={1}
120+ size={1}
125− colors={['#000', '#FFF']}
121+ colors={['#000', '#FFF']}
133− </Dropdown>
129+ </Dropdown>
134+ <Box className={'loading'}>
135− </HeaderPane>
137+ ) : (
137 <Box className="transaction-container">
138 <Box className="transaction-container">
138 {!selectedPatp && <AddressRow address={address} />}
139 {!selectedPatp && <AddressRow address={address} />}
139− {filteredPatps.map(patp => {
140+ {filteredPatps && filteredPatps.length > 0 ? (
141+ filteredPatps.map(patp => {
140− return (
142+ return (
141− <Box key={patp}>
143+ <Box key={patp}>
142− <PatpRow patp={patp} />
144+ <PatpRow patp={patp} />
143− {txnsByPatp[patp]
145+ {txnsByPatp[patp]
144− .sort((a, b) => {
146+ .sort((a, b) => {
145− return a.time - b.time;
147+ return a.time - b.time;
147− .map(tx => (
149+ .map(tx => (
148− <TransactionRow key={tx.time} {...tx} />
150+ <TransactionRow key={tx.time} {...tx} />
156+ <Box className="no-results">No transactions yet</Box>
154− </BodyPane>
160+ </BodyPane>
157 </Window>
162 </Window>