39 lines
1.1 KiB
TypeScript
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,
|
|
}
|
|
}
|