diff options
Diffstat (limited to 'packages/excalidraw/context/tunnels.ts')
| -rw-r--r-- | packages/excalidraw/context/tunnels.ts | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/packages/excalidraw/context/tunnels.ts b/packages/excalidraw/context/tunnels.ts new file mode 100644 index 0000000..73b85ba --- /dev/null +++ b/packages/excalidraw/context/tunnels.ts @@ -0,0 +1,45 @@ +import React from "react"; +import tunnel from "tunnel-rat"; +import { createIsolation } from "jotai-scope"; + +export type Tunnel = ReturnType<typeof tunnel>; + +type TunnelsContextValue = { + MainMenuTunnel: Tunnel; + WelcomeScreenMenuHintTunnel: Tunnel; + WelcomeScreenToolbarHintTunnel: Tunnel; + WelcomeScreenHelpHintTunnel: Tunnel; + WelcomeScreenCenterTunnel: Tunnel; + FooterCenterTunnel: Tunnel; + DefaultSidebarTriggerTunnel: Tunnel; + DefaultSidebarTabTriggersTunnel: Tunnel; + OverwriteConfirmDialogTunnel: Tunnel; + TTDDialogTriggerTunnel: Tunnel; + // this can be removed once we create jotai stores per each editor + // instance + tunnelsJotai: ReturnType<typeof createIsolation>; +}; + +export const TunnelsContext = React.createContext<TunnelsContextValue>(null!); + +export const useTunnels = () => React.useContext(TunnelsContext); + +const tunnelsJotai = createIsolation(); + +export const useInitializeTunnels = () => { + return React.useMemo((): TunnelsContextValue => { + return { + MainMenuTunnel: tunnel(), + WelcomeScreenMenuHintTunnel: tunnel(), + WelcomeScreenToolbarHintTunnel: tunnel(), + WelcomeScreenHelpHintTunnel: tunnel(), + WelcomeScreenCenterTunnel: tunnel(), + FooterCenterTunnel: tunnel(), + DefaultSidebarTriggerTunnel: tunnel(), + DefaultSidebarTabTriggersTunnel: tunnel(), + OverwriteConfirmDialogTunnel: tunnel(), + TTDDialogTriggerTunnel: tunnel(), + tunnelsJotai, + }; + }, []); +}; |
