fix: infinite reloading (#2405)

This commit is contained in:
Himself65 2023-05-16 22:58:34 -07:00 committed by GitHub
parent 38305cd984
commit 2629d39501
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 11 deletions

View File

@ -129,6 +129,15 @@ export const AllWorkspaceContext = ({
return <>{children}</>;
};
declare global {
// eslint-disable-next-line no-var
var HALTING_PROBLEM_TIMEOUT: number;
}
if (globalThis.HALTING_PROBLEM_TIMEOUT === undefined) {
globalThis.HALTING_PROBLEM_TIMEOUT = 1000;
}
export const CurrentWorkspaceContext = ({
children,
}: PropsWithChildren): ReactElement => {
@ -137,12 +146,15 @@ export const CurrentWorkspaceContext = ({
const exist = metadata.find(m => m.id === workspaceId);
const router = useRouter();
const push = router.push;
// fixme(himself65): this is not a good way to handle this,
// need a better way to check whether this workspace really exist.
useEffect(() => {
const id = setTimeout(() => {
if (!exist) {
void push('/');
globalThis.HALTING_PROBLEM_TIMEOUT <<= 1;
}
}, 1000);
}, globalThis.HALTING_PROBLEM_TIMEOUT);
return () => {
clearTimeout(id);
};

View File

@ -28,11 +28,7 @@ export const rootWorkspacesMetadataAtom = atomWithStorage<
);
// two more atoms to store the current workspace and page
export const rootCurrentWorkspaceIdAtom = atomWithStorage<string | null>(
'root-current-workspace-id',
null,
createJSONStorage(() => sessionStorage)
);
export const rootCurrentWorkspaceIdAtom = atom<string | null>(null);
rootCurrentWorkspaceIdAtom.onMount = set => {
if (typeof window !== 'undefined') {
@ -52,11 +48,7 @@ rootCurrentWorkspaceIdAtom.onMount = set => {
}
};
export const rootCurrentPageIdAtom = atomWithStorage<string | null>(
'root-current-page-id',
null,
createJSONStorage(() => sessionStorage)
);
export const rootCurrentPageIdAtom = atom<string | null>(null);
rootCurrentPageIdAtom.onMount = set => {
if (typeof window !== 'undefined') {