Skip to content

Commit 72c6fb5

Browse files
Fix linked wallets update (#372)
* Fix linkWallets update on change * Remove unnecessary comment
1 parent ff3e034 commit 72c6fb5

File tree

2 files changed

+51
-1
lines changed

2 files changed

+51
-1
lines changed

packages/connect/src/hooks/useWallets.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,16 @@ export interface UseLinkedWalletsResult {
6565
clearCache: () => void
6666
}
6767

68+
// --- Listener pattern for cross-instance updates ---
69+
const linkedWalletsListeners: Set<() => Promise<void>> = new Set()
70+
const notifyLinkedWalletsListeners = () => {
71+
// Use setTimeout to ensure notification happens after the current execution context,
72+
// allowing React state updates to potentially settle before listeners run.
73+
setTimeout(() => {
74+
linkedWalletsListeners.forEach(listener => listener())
75+
}, 0)
76+
}
77+
6878
export const useLinkedWallets = (args: GetLinkedWalletsArgs, options: UseLinkedWalletsOptions = {}): UseLinkedWalletsResult => {
6979
const apiClient = useAPIClient()
7080
const [data, setData] = useState<LinkedWallet[] | undefined>(undefined)
@@ -99,10 +109,17 @@ export const useLinkedWallets = (args: GetLinkedWalletsArgs, options: UseLinkedW
99109
}
100110
}, [apiClient, args.parentWalletAddress, args.signatureChainId, options.enabled])
101111

102-
// Fetch on mount and when dependencies change
112+
// Fetch on mount, when dependencies change, and register/unregister listener
103113
useEffect(() => {
114+
// Register the listener
115+
linkedWalletsListeners.add(fetchData)
116+
117+
// Initial fetch
104118
fetchData()
119+
120+
// Cleanup: remove listener and abort ongoing request
105121
return () => {
122+
linkedWalletsListeners.delete(fetchData)
106123
abortControllerRef.current?.abort()
107124
}
108125
}, [fetchData])
@@ -114,6 +131,8 @@ export const useLinkedWallets = (args: GetLinkedWalletsArgs, options: UseLinkedW
114131
const refetch = async () => {
115132
clearCache()
116133
await fetchData()
134+
// Notify other hook instances after successful fetch
135+
notifyLinkedWalletsListeners()
117136
}
118137

119138
return {

packages/connect/src/styles.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,9 @@ export const styles = String.raw`
302302
.my-4 {
303303
margin-block: calc(var(--spacing) * 4);
304304
}
305+
.mt-0 {
306+
margin-top: calc(var(--spacing) * 0);
307+
}
305308
.mt-0\.5 {
306309
margin-top: calc(var(--spacing) * 0.5);
307310
}
@@ -383,6 +386,9 @@ export const styles = String.raw`
383386
.inline-flex {
384387
display: inline-flex;
385388
}
389+
.table {
390+
display: table;
391+
}
386392
.aspect-square {
387393
aspect-ratio: 1 / 1;
388394
}
@@ -476,6 +482,9 @@ export const styles = String.raw`
476482
.min-h-full {
477483
min-height: 100%;
478484
}
485+
.w-1 {
486+
width: calc(var(--spacing) * 1);
487+
}
479488
.w-1\/2 {
480489
width: calc(1/2 * 100%);
481490
}
@@ -551,6 +560,9 @@ export const styles = String.raw`
551560
.w-screen {
552561
width: 100vw;
553562
}
563+
.max-w-1 {
564+
max-width: calc(var(--spacing) * 1);
565+
}
554566
.max-w-1\/2 {
555567
max-width: calc(1/2 * 100%);
556568
}
@@ -575,12 +587,21 @@ export const styles = String.raw`
575587
.min-w-full {
576588
min-width: 100%;
577589
}
590+
.flex-shrink {
591+
flex-shrink: 1;
592+
}
578593
.shrink-0 {
579594
flex-shrink: 0;
580595
}
596+
.flex-grow {
597+
flex-grow: 1;
598+
}
581599
.grow {
582600
flex-grow: 1;
583601
}
602+
.border-collapse {
603+
border-collapse: collapse;
604+
}
584605
.origin-top {
585606
transform-origin: top;
586607
}
@@ -922,6 +943,9 @@ export const styles = String.raw`
922943
.pt-0 {
923944
padding-top: calc(var(--spacing) * 0);
924945
}
946+
.pt-1 {
947+
padding-top: calc(var(--spacing) * 1);
948+
}
925949
.pt-1\.5 {
926950
padding-top: calc(var(--spacing) * 1.5);
927951
}
@@ -1191,6 +1215,9 @@ export const styles = String.raw`
11911215
.ring-border-normal {
11921216
--tw-ring-color: var(--seq-color-border-normal);
11931217
}
1218+
.ring-white {
1219+
--tw-ring-color: var(--color-white);
1220+
}
11941221
.ring-white\/10 {
11951222
--tw-ring-color: color-mix(in oklab, var(--color-white) 10%, transparent);
11961223
}
@@ -1226,6 +1253,10 @@ export const styles = String.raw`
12261253
-webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
12271254
backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
12281255
}
1256+
.backdrop-filter {
1257+
-webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
1258+
backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
1259+
}
12291260
.transition {
12301261
transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter;
12311262
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));

0 commit comments

Comments
 (0)