Skip to content

Commit c26d150

Browse files
authored
On changing network, causes to the dashboard to refetch data (#137)
1 parent 95474e5 commit c26d150

File tree

3 files changed

+47
-16
lines changed

3 files changed

+47
-16
lines changed

packages/invoice-dashboard/src/lib/view-requests.svelte

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@
5858
})
5959
| undefined;
6060
let currencyManager: CurrencyManager;
61+
let previousWalletAddress: string | undefined;
62+
let previousNetwork: string | undefined;
6163
6264
let columns = {
6365
issuedAt: false,
@@ -82,44 +84,42 @@
8284
});
8385
8486
const getRequests = async () => {
85-
try {
86-
loading = true;
87+
if (!wallet || !requestNetwork) return;
88+
loading = true;
8789
90+
try {
8891
const requestsData = await requestNetwork?.fromIdentity({
8992
type: Types.Identity.TYPE.ETHEREUM_ADDRESS,
90-
value: signer,
93+
value: wallet?.accounts[0]?.address,
9194
});
92-
9395
requests = requestsData
9496
?.map((request) => request.getData())
9597
.sort((a, b) => b.timestamp - a.timestamp);
96-
97-
loading = false;
9898
} catch (error) {
99-
loading = false;
10099
console.error("Failed to fetch requests:", error);
100+
} finally {
101+
loading = false;
101102
}
102103
};
103104
104105
const getOneRequest = async (activeRequest: any) => {
105-
try {
106-
loading = true;
106+
if (!activeRequest) return;
107+
loading = true;
107108
109+
try {
108110
const _request = await requestNetwork?.fromRequestId(
109111
activeRequest?.requestId!
110112
);
111-
112113
requests = requests?.filter(
113114
(request) => request.requestId !== activeRequest.requestId
114115
);
115116
requests = [...requests, _request.getData()].sort(
116117
(a, b) => b.timestamp - a.timestamp
117118
);
118-
119-
loading = false;
120119
} catch (error) {
121-
loading = false;
122120
console.error("Failed to fetch request:", error);
121+
} finally {
122+
loading = false;
123123
}
124124
};
125125
@@ -133,8 +133,24 @@
133133
let currentPage = 1;
134134
let totalPages = 1;
135135
136-
$: wallet, getRequests();
137-
$: wallet, (activeRequest = undefined);
136+
$: {
137+
const currentWalletAddress = wallet?.accounts[0]?.address;
138+
const currentNetwork = wallet?.chains[0]?.id;
139+
140+
if (
141+
currentWalletAddress &&
142+
currentWalletAddress !== previousWalletAddress
143+
) {
144+
getRequests();
145+
previousWalletAddress = currentWalletAddress;
146+
147+
activeRequest = undefined;
148+
}
149+
150+
if (currentNetwork && currentNetwork !== previousNetwork) {
151+
previousNetwork = currentNetwork;
152+
}
153+
}
138154
139155
$: {
140156
if (sortColumn && sortOrder) {
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
declare interface Window {
22
ethereum: {
3+
on: (event: string, callback: (accounts: string[]) => void) => void;
4+
removeListener: (
5+
event: string,
6+
callback: (accounts: string[]) => void
7+
) => void;
38
request: (request: { method: string }) => Promise<void>;
9+
autoRefreshOnNetworkChange: boolean;
410
};
511
}

shared/components/button/button.svelte

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,25 @@
88
let className: $$Props["class"] = undefined;
99
export let builders: $$Props["builders"] = [];
1010
export { className as class };
11+
export let onClick: (event: MouseEvent) => void = () => {};
12+
export let preventDefault: boolean = true;
1113
1214
$: classes = ["rn-btn", className].filter(Boolean).join(" ");
15+
16+
function handleClick(event: MouseEvent) {
17+
if (preventDefault) {
18+
event.preventDefault();
19+
}
20+
onClick(event);
21+
}
1322
</script>
1423

1524
<ButtonPrimitive.Root
1625
{builders}
1726
class={classes}
1827
type="button"
1928
{...$$restProps}
20-
on:click
29+
on:click={handleClick}
2130
on:keydown
2231
>
2332
<slot />

0 commit comments

Comments
 (0)