Co-authored-by: tobi <tobi.smethurst@protonmail.com> Reviewed-on: https://codeberg.org/superseriousbusiness/masto-fe-standalone/pulls/88 Co-authored-by: Zoë Bijl <moiety@noreply.codeberg.org> Co-committed-by: Zoë Bijl <moiety@noreply.codeberg.org>
37 lines
1.0 KiB
TypeScript
37 lines
1.0 KiB
TypeScript
import { type PropsWithChildren } from "react";
|
|
import React from "react";
|
|
|
|
import { createBrowserHistory } from "history";
|
|
import { Router as OriginalRouter } from "react-router";
|
|
|
|
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;
|
|
|
|
originalPush(path, state);
|
|
};
|
|
|
|
browserHistory.replace = (path: string, state?: MastodonLocationState) => {
|
|
if (browserHistory.location.state?.fromMastodon) {
|
|
state = state ?? {};
|
|
state.fromMastodon = true;
|
|
}
|
|
|
|
originalReplace(path, state);
|
|
};
|
|
|
|
export const Router: React.FC<PropsWithChildren> = ({ children }) => {
|
|
return <OriginalRouter history={browserHistory}>{children}</OriginalRouter>;
|
|
};
|