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, } }