import type { PropsWithChildren } from 'react'; import React from 'react'; import { createBrowserHistory } from 'history'; import { Router as OriginalRouter } from 'react-router'; import { layoutFromWindow } from 'mastodon/is_mobile'; interface MastodonLocationState { fromMastodon?: boolean; mastodonModalKey?: string; } const browserHistory = createBrowserHistory< MastodonLocationState | undefined >(); const originalPush = browserHistory.push.bind(browserHistory); const originalReplace = browserHistory.replace.bind(browserHistory); browserHistory.push = (path: string, state?: MastodonLocationState) => { state = state ?? {}; state.fromMastodon = true; if (layoutFromWindow() === 'multi-column' && !path.startsWith('/deck')) { originalPush(`/deck${path}`, state); } else { originalPush(path, state); } }; browserHistory.replace = (path: string, state?: MastodonLocationState) => { if (browserHistory.location.state?.fromMastodon) { state = state ?? {}; state.fromMastodon = true; } if (layoutFromWindow() === 'multi-column' && !path.startsWith('/deck')) { originalReplace(`/deck${path}`, state); } else { originalReplace(path, state); } }; export const Router: React.FC = ({ children }) => { return {children}; };