bbuddy-ui/src/hooks/useOauthWindow.ts

39 lines
1.1 KiB
TypeScript

const DEFAULT_WINDOW_PARAMS = 'toolbar=no, menubar=no, width=600, height=700, top=100, left=100';
export const useOauthWindow = () => {
let oauthWindow: Window | null = null;
const openOauthWindow = (
url: string,
name: string,
messageHandler: (e: MessageEvent) => void,
params: string = DEFAULT_WINDOW_PARAMS,
) => {
const handler = (event: MessageEvent) => {
const { data } = event;
if (data.messageType === 'oAuth') {
messageHandler(event);
window?.removeEventListener('message', handler);
}
}
window?.removeEventListener('message', handler);
if (!oauthWindow || oauthWindow.closed) {
// окно ещё не существует, либо было закрыто
oauthWindow = window?.open(url, name, params)!;
} else {
// окно уже существует
oauthWindow!.focus();
}
window?.addEventListener('message', handler);
}
return {
oauthWindow,
openOauthWindow,
}
}