To be clear
export const determineActivationStrategy = (
currentNavInstruction: NavigationInstruction,
prevViewPortInstruction: ViewPortInstruction,
newViewPortConfig: RouteConfig | ViewPortInstruction,
// indicates whether there is difference between old and new url params
hasNewParams: boolean,
forceLifecycleMinimum?: boolean
): ActivationStrategyType => {
let newInstructionConfig = currentNavInstruction.config;
let prevViewPortViewModel = prevViewPortInstruction.component.viewModel;
let viewPortPlanStrategy: ActivationStrategyType;
if (prevViewPortInstruction.moduleId !== newViewPortConfig.moduleId) {
// different view-model, use "replace".
viewPortPlanStrategy = InternalActivationStrategy.Replace;
} else if ('determineActivationStrategy' in prevViewPortViewModel) {
// when you defined determineActivationStrategy() in view-model
viewPortPlanStrategy = prevViewPortViewModel.determineActivationStrategy(...currentNavInstruction.lifecycleArgs);
} else if (newInstructionConfig.activationStrategy) {
// when you define activationStrategy in route config like
// { route: ..., moduleId: ..., activationStrategy: 'replace'}
viewPortPlanStrategy = newInstructionConfig.activationStrategy;
} else if (hasNewParams || forceLifecycleMinimum) {
// when you navigate from product/a to product/b for a route defined
// with params like product/:id
// use invoke-lifecycle
viewPortPlanStrategy = InternalActivationStrategy.InvokeLifecycle;
} else {
// default to no-change
viewPortPlanStrategy = InternalActivationStrategy.NoChange;
}
return viewPortPlanStrategy;
};