mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-15 19:26:42 +08:00

* test(e2e): update modal navigation app Add layout as root. Add show modal layout. * chore(frame): move frame stack modifiers in a separate frame-stack module * feat(frame): handle back navigation when using common layout as root element
51 lines
1.2 KiB
TypeScript
51 lines
1.2 KiB
TypeScript
// Types.
|
|
import { FrameBase } from "./frame-common";
|
|
|
|
export let frameStack: Array<FrameBase> = [];
|
|
|
|
export function topmost(): FrameBase {
|
|
if (frameStack.length > 0) {
|
|
return frameStack[frameStack.length - 1];
|
|
}
|
|
|
|
return undefined;
|
|
}
|
|
|
|
export function _pushInFrameStack(frame: FrameBase): void {
|
|
if (frame._isInFrameStack && frameStack[frameStack.length - 1] === frame) {
|
|
return;
|
|
}
|
|
|
|
if (frame._isInFrameStack) {
|
|
const indexOfFrame = frameStack.indexOf(frame);
|
|
frameStack.splice(indexOfFrame, 1);
|
|
}
|
|
|
|
frameStack.push(frame);
|
|
frame._isInFrameStack = true;
|
|
}
|
|
|
|
export function _popFromFrameStack(frame: FrameBase): void {
|
|
if (!frame._isInFrameStack) {
|
|
return;
|
|
}
|
|
|
|
const top = topmost();
|
|
if (top !== frame) {
|
|
throw new Error("Cannot pop a Frame which is not at the top of the navigation stack.");
|
|
}
|
|
|
|
frameStack.pop();
|
|
frame._isInFrameStack = false;
|
|
}
|
|
|
|
export function _removeFromFrameStack(frame: FrameBase): void {
|
|
if (!frame._isInFrameStack) {
|
|
return;
|
|
}
|
|
|
|
const index = frameStack.indexOf(frame);
|
|
frameStack.splice(index, 1);
|
|
frame._isInFrameStack = false;
|
|
}
|