one
Version:
One is a new React Framework that makes Vite serve both native and web.
39 lines (38 loc) • 1.86 kB
JavaScript
import { nanoid } from "nanoid/non-secure";
import { setLastAction } from "../lastAction.mjs";
import { matchDynamicName } from "../matchers.mjs";
function getNavigateAction(actionState, navigationState, type = "NAVIGATE") {
let actionStateRoute;
for (; actionState && navigationState;) {
const stateRoute = navigationState.routes[navigationState.index];
actionStateRoute = actionState.routes[actionState.routes.length - 1];
const childState = actionStateRoute.state,
nextNavigationState = stateRoute.state,
dynamicMatch = matchDynamicName(actionStateRoute.name);
if (actionStateRoute.name !== stateRoute.name ||
// !deepEqual(actionStateRoute.params, stateRoute.params) ||
!childState || !nextNavigationState || dynamicMatch && actionStateRoute.params?.[dynamicMatch.name] !== stateRoute.params?.[dynamicMatch.name]) break;
actionState = childState, navigationState = nextNavigationState;
}
const rootPayload = {
params: {}
};
let payload = rootPayload,
params = payload.params;
for (; actionStateRoute;) Object.assign(params, {
...actionStateRoute.params
}), payload.screen = actionStateRoute.name, payload.params = {
...actionStateRoute.params
}, actionStateRoute = actionStateRoute.state?.routes[actionStateRoute.state?.routes.length - 1], payload.params ??= {}, payload = payload.params, params = payload;
return type === "PUSH" && (setLastAction(), type = "NAVIGATE", navigationState.type === "stack" && (rootPayload.key = `${rootPayload.name}-${nanoid()}`)), type === "REPLACE" && navigationState.type === "tab" && (type = "JUMP_TO"), {
type,
target: navigationState.key,
payload: {
key: rootPayload.key,
name: rootPayload.screen,
params: rootPayload.params
}
};
}
export { getNavigateAction };
//# sourceMappingURL=getNavigateAction.mjs.map