Skip to content

Commit 58b532e

Browse files
committed
add more fields to useIframe hook return
1 parent 56f306d commit 58b532e

File tree

1 file changed

+37
-22
lines changed

1 file changed

+37
-22
lines changed

packages/react-lite/src/hooks/useIframe.ts

+37-22
Original file line numberDiff line numberDiff line change
@@ -59,16 +59,32 @@ export type UseIframeOptions = {
5959
origins?: string[];
6060
};
6161

62+
export type UseIframeReturn = {
63+
/**
64+
* The main wallet, or undefined if the wallet is not connected.
65+
*/
66+
wallet: MainWalletBase | undefined;
67+
/**
68+
* A ref callback to set the iframe element.
69+
*/
70+
iframeRef: RefCallback<HTMLIFrameElement | null>;
71+
/**
72+
* The iframe element.
73+
*/
74+
iframe: HTMLIFrameElement | null;
75+
/**
76+
* A function to trigger a keystore change event on the iframe app wallet.
77+
*/
78+
triggerKeystoreChange: () => void;
79+
};
80+
6281
export const useIframe = ({
6382
walletName,
6483
metadata,
6584
walletClientOverrides,
6685
signerOverrides,
6786
origins,
68-
}: UseIframeOptions = {}): {
69-
wallet: MainWalletBase;
70-
iframeRef: RefCallback<HTMLIFrameElement | null>;
71-
} => {
87+
}: UseIframeOptions = {}): UseIframeReturn => {
7288
const wallet = useWallet(walletName).mainWallet;
7389
const [iframe, setIframe] = useState<HTMLIFrameElement | null>(null);
7490

@@ -79,54 +95,51 @@ export const useIframe = ({
7995
const signerOverridesRef = useRef(signerOverrides);
8096
signerOverridesRef.current = signerOverrides;
8197

82-
// Broadcast keystore change event to iframe wallet.
83-
useEffect(() => {
84-
const notifyIframe = () => {
98+
const triggerKeystoreChange = useCallback(
99+
() =>
85100
iframe?.contentWindow.postMessage(
86101
{
87102
event: COSMIFRAME_KEYSTORECHANGE_EVENT,
88103
},
89104
'*'
90-
);
91-
};
105+
),
106+
[iframe]
107+
);
92108

109+
// Broadcast keystore change event to iframe wallet.
110+
useEffect(() => {
93111
// Notify inner window of keystore change on any wallet client change
94112
// (likely either connection or disconnection).
95-
notifyIframe();
113+
triggerKeystoreChange();
96114

97115
if (!wallet || typeof window === 'undefined') {
98116
return;
99117
}
100118

101119
// Notify inner window of keystore change on any wallet connect event.
102120
wallet.walletInfo.connectEventNamesOnWindow?.forEach((eventName) => {
103-
window.addEventListener(eventName, notifyIframe);
121+
window.addEventListener(eventName, triggerKeystoreChange);
104122
});
105123
wallet.walletInfo.connectEventNamesOnClient?.forEach(async (eventName) => {
106-
wallet.client?.on?.(eventName, notifyIframe);
124+
wallet.client?.on?.(eventName, triggerKeystoreChange);
107125
});
108126

109127
return () => {
110128
wallet.walletInfo.connectEventNamesOnWindow?.forEach((eventName) => {
111-
window.removeEventListener(eventName, notifyIframe);
129+
window.removeEventListener(eventName, triggerKeystoreChange);
112130
});
113131
wallet.walletInfo.connectEventNamesOnClient?.forEach(
114132
async (eventName) => {
115-
wallet.client?.off?.(eventName, notifyIframe);
133+
wallet.client?.off?.(eventName, triggerKeystoreChange);
116134
}
117135
);
118136
};
119-
}, [wallet, iframe]);
137+
}, [wallet, triggerKeystoreChange]);
120138

121139
// Whenever wallet changes, broadcast keystore change event to iframe wallet.
122140
useEffect(() => {
123-
iframe?.contentWindow.postMessage(
124-
{
125-
event: COSMIFRAME_KEYSTORECHANGE_EVENT,
126-
},
127-
'*'
128-
);
129-
}, [wallet, iframe]);
141+
triggerKeystoreChange();
142+
}, [wallet, triggerKeystoreChange]);
130143

131144
useEffect(() => {
132145
if (!iframe) {
@@ -189,5 +202,7 @@ export const useIframe = ({
189202
return {
190203
wallet,
191204
iframeRef,
205+
iframe,
206+
triggerKeystoreChange,
192207
};
193208
};

0 commit comments

Comments
 (0)