one
Version:
One is a new React Framework that makes Vite serve both native and web.
65 lines (64 loc) • 2.78 kB
JavaScript
import { nanoid } from "nanoid/non-secure";
import { setLastAction } from "../lastAction.native.js";
import { matchDynamicName } from "../matchers.native.js";
function getNavigateAction(actionState, navigationState) {
var type = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : "NAVIGATE";
var actionStateRoute;
while (actionState && navigationState) {
var _actionStateRoute_params, _stateRoute_params;
var stateRoute = navigationState.routes[navigationState.index];
actionStateRoute = actionState.routes[actionState.routes.length - 1];
var childState = actionStateRoute.state;
var nextNavigationState = stateRoute.state;
var dynamicMatch = matchDynamicName(actionStateRoute.name);
var didActionAndCurrentStateDiverge = actionStateRoute.name !== stateRoute.name ||
// !deepEqual(actionStateRoute.params, stateRoute.params) ||
!childState || !nextNavigationState || dynamicMatch && ((_actionStateRoute_params = actionStateRoute.params) === null || _actionStateRoute_params === void 0 ? void 0 : _actionStateRoute_params[dynamicMatch.name]) !== ((_stateRoute_params = stateRoute.params) === null || _stateRoute_params === void 0 ? void 0 : _stateRoute_params[dynamicMatch.name]);
if (didActionAndCurrentStateDiverge) {
break;
}
actionState = childState;
navigationState = nextNavigationState;
}
var rootPayload = {
params: {}
};
var payload = rootPayload;
var params = payload.params;
while (actionStateRoute) {
var _payload, _params;
var _actionStateRoute_state, _actionStateRoute_state1;
Object.assign(params, {
...actionStateRoute.params
});
payload.screen = actionStateRoute.name;
payload.params = {
...actionStateRoute.params
};
actionStateRoute = (_actionStateRoute_state1 = actionStateRoute.state) === null || _actionStateRoute_state1 === void 0 ? void 0 : _actionStateRoute_state1.routes[((_actionStateRoute_state = actionStateRoute.state) === null || _actionStateRoute_state === void 0 ? void 0 : _actionStateRoute_state.routes.length) - 1];
(_params = (_payload = payload).params) !== null && _params !== void 0 ? _params : _payload.params = {};
payload = payload.params;
params = payload;
}
if (type === "PUSH") {
setLastAction();
type = "NAVIGATE";
if (navigationState.type === "stack") {
rootPayload.key = `${rootPayload.name}-${nanoid()}`;
}
}
if (type === "REPLACE" && navigationState.type === "tab") {
type = "JUMP_TO";
}
return {
type,
target: navigationState.key,
payload: {
key: rootPayload.key,
name: rootPayload.screen,
params: rootPayload.params
}
};
}
export { getNavigateAction };
//# sourceMappingURL=getNavigateAction.native.js.map