StackedRouter: add replace: all

This commit is contained in:
thislight 2024-11-23 23:58:20 +08:00
parent 4c717a0cb7
commit 83e2e6e169
No known key found for this signature in database
GPG key ID: FCFE5192241CCD4E
2 changed files with 15 additions and 7 deletions

View file

@ -64,7 +64,7 @@ export function useSessions() {
if (sessions().length > 0) return;
push(
"/accounts/sign-in?back=" + encodeURIComponent(location.pathname),
{ replace: true },
{ replace: "all" },
);
});

View file

@ -36,9 +36,9 @@ export type NewFrameOptions<T> = (T extends undefined
}
: { state: T }) & {
/**
* The new frame should replace the current frame.
* The new frame should replace the current frame or all the stack.
*/
replace?: boolean;
replace?: boolean | "all";
/**
* The animatedOpen phase of the life cycle.
*
@ -427,11 +427,19 @@ const StackedRouter: Component<StackedRouterProps> = (oprops) => {
animateClose: opts?.animateClose,
};
mutStack(opts?.replace ? stack.length - 1 : stack.length, frame);
if (opts?.replace) {
window.history.replaceState(serializableStack(stack), "", path);
const replace = opts?.replace;
if (replace === "all") {
mutStack([frame]);
} else {
window.history.pushState(serializableStack(stack), "", path);
mutStack(replace ? stack.length - 1 : stack.length, frame);
}
const savedStack = serializableStack(stack);
if (replace) {
window.history.replaceState(savedStack, "", path);
} else {
window.history.pushState(savedStack, "", path);
}
return frame;
});