Cleanup - unused files / unused exports / duplicate exports
[ProtonMail-WebClient.git] / packages / shared / lib / helpers / window.ts
blobbfb20f0d5bd3594e58553ae7732b4bcc2f59f3d7
1 /**
2  * A handle representing a JavaScript {@link Window}, useful for dealing with
3  * new windows in async contexts and avoiding popup blockers.
4  *
5  * @see {@link getNewWindow}
6  */
7 export type WindowHandle = {
8     /** Actual JS Window object */
9     handle: Window;
10     /** Closes the window in case of failure */
11     close: () => void;
14 /**
15  * Creates a {@link WindowHandle} for the current window, used as a fallback when opening new tabs.
16  *
17  * Close is a no-op.
18  *
19  * @see {@link getNewWindow}
20  */
21 export const getCurrentTab = (): WindowHandle => ({
22     handle: window,
23     close: () => {},
24 });
26 /**
27  * Creates a {@link WindowHandle} for a new tab. Falls back to the current tab.
28  *
29  * @example
30  *
31  * const w = getNewWindow();
32  *
33  * try {
34  *     const result = await somethingAsynchronous();
35  *     w.handle.location = new URL(result);
36  * } catch (e) {
37  *     reportError(e);
38  *     // Close the window if the call fails (edge case)
39  *     w.close();
40  * }
41  */
42 export const getNewWindow = (): WindowHandle => {
43     const handle = window.open('', '_blank');
45     if (!handle) {
46         // In case we weren't able to open a new window,
47         // let's fall back to opening in the current tab.
49         // eslint-disable-next-line no-console
50         console.warn('Failed to open new window, using current tab');
52         return getCurrentTab();
53     }
55     return {
56         handle,
57         close: () => handle.close(),
58     };