{"version":3,"file":"o3r-routing.mjs","sources":["../../src/stores/routing-guard/routing-guard.actions.ts","../../src/stores/routing-guard/extra-effects/ngrx-store-router.effect.ts","../../src/stores/routing-guard/routing-guard.state.ts","../../src/stores/routing-guard/routing-guard.reducer.ts","../../src/stores/routing-guard/routing-guard-module.ts","../../src/stores/routing-guard/routing-guard.selectors.ts","../../src/tools/app-server-routing-module.ts","../../src/tools/on-navigation-strategy-preloader.ts","../../src/o3r-routing.ts"],"sourcesContent":["import {\n  createAction,\n  props,\n} from '@ngrx/store';\nimport {\n  RegisteredItemFailureReason,\n} from './routing-guard.state';\n\n/** Entity Actions */\nconst ACTION_REGISTER_ENTITY = '[RoutingGuard] register an entity';\nconst ACTION_SET_ENTITY_AS_FAILURE = '[RoutingGuard] set an entity state as FAILURE';\nconst ACTION_SET_ENTITY_AS_SUCCESS_AND_CLEAR_REASON = '[RoutingGuard] set an entity state as SUCCESS and clear reason';\nconst ACTION_SET_ENTITY_AS_PENDING = '[RoutingGuard] set an entity state as PENDING';\nconst ACTION_CLEAR_ENTITIES = '[RoutingGuard] clear entities';\nconst ACTION_CLEAR_FAILURE_REASON = '[RoutingGuard] clear failure reason for an entity';\nconst ACTION_SET_ENTITY_AS_FAILURE_WITH_REASON = '[RoutingGuard] set an entity state as FAILURE with a reason';\n\nexport interface RoutingGuardActionPayload {\n  /** Id of the block instance */\n  id: string;\n}\n\nexport interface RoutingGuardFailureReasonPayload {\n  /** Id of the block instance */\n  id: string;\n  /** Reason for failure */\n  reason: RegisteredItemFailureReason;\n}\n\n/**\n * Register a new entity in routing guard store\n */\nexport const registerRoutingGuardEntity = createAction(ACTION_REGISTER_ENTITY, props<RoutingGuardActionPayload>());\n\n/**\n * Set an entity in FAILURE status\n */\nexport const setRoutingGuardEntityAsFailure = createAction(ACTION_SET_ENTITY_AS_FAILURE, props<RoutingGuardActionPayload>());\n\n/**\n * Set an entity in SUCCESS status and clear the reason\n */\nexport const setRoutingGuardEntityAsSuccessAndClearReason = createAction(ACTION_SET_ENTITY_AS_SUCCESS_AND_CLEAR_REASON, props<RoutingGuardActionPayload>());\n\n/**\n * Set an entity in PENDING status\n */\nexport const setRoutingGuardEntityAsPending = createAction(ACTION_SET_ENTITY_AS_PENDING, props<RoutingGuardActionPayload>());\n\n/**\n * Clear only the entities, keeps the other attributes in the state\n */\nexport const clearRoutingGuardEntities = createAction(ACTION_CLEAR_ENTITIES);\n\n/**\n * Clear only the entities, keeps the other attributes in the state\n */\nexport const clearRoutingGuardEntitiesFailureReason = createAction(ACTION_CLEAR_FAILURE_REASON, props<RoutingGuardActionPayload>());\n\n/**\n * Set entity in FAILURE status with a reason\n */\nexport const setRoutingGuardEntityFailureWithReason = createAction(ACTION_SET_ENTITY_AS_FAILURE_WITH_REASON, props<RoutingGuardFailureReasonPayload>());\n","import {\n  inject,\n  Injectable,\n} from '@angular/core';\nimport {\n  Actions,\n  createEffect,\n  ofType,\n} from '@ngrx/effects';\nimport {\n  BaseRouterStoreState,\n  ROUTER_NAVIGATED,\n  ROUTER_REQUEST,\n  RouterRequestAction,\n} from '@ngrx/router-store';\nimport {\n  filter,\n  map,\n} from 'rxjs/operators';\nimport {\n  clearRoutingGuardEntities,\n} from '../routing-guard.actions';\n\n/**\n * Effect to react on Ngrx router store actions\n */\n@Injectable()\nexport class NgrxStoreRouterEffect {\n  protected actions$ = inject(Actions);\n\n  /**\n   * Clear Router registrations when the active history entry changes (ex : click on back/next button Action)\n   */\n  public resetRouterRegistrationOnRequest$ = createEffect(() =>\n    this.actions$.pipe(\n      ofType(ROUTER_REQUEST),\n      filter((action: RouterRequestAction<BaseRouterStoreState>) => action.payload.event.navigationTrigger === 'popstate'),\n      map(() => clearRoutingGuardEntities())\n    )\n  );\n\n  /**\n   * Clear Router registrations when navigation happened\n   */\n  public resetRouterRegistrationOnNavigated$ = createEffect(() =>\n    this.actions$.pipe(\n      ofType(ROUTER_NAVIGATED),\n      map(() => clearRoutingGuardEntities())\n    )\n  );\n}\n","import {\n  EntityState,\n} from '@ngrx/entity';\n\n/** Identifies the status of a registered block */\nexport enum RegisteredItemStatus {\n  /** block is ready (async call has not been triggered) */\n  READY = 'READY',\n  /** block is waiting for async call to resolve */\n  PENDING = 'PENDING',\n  /** block received the async call result and it's a failure */\n  FAILURE = 'FAILURE',\n  /** block received the async call result and it's a success */\n  SUCCESS = 'SUCCESS'\n}\n\n/** Identifies the failure reason for the registered block */\nexport enum RegisteredItemFailureReason {\n  /** Routing Failed because the async call result is failure */\n  ASYNC_CALL_FAILURE = 'ASYNC_CALL_FAILURE',\n  /** Routing failed because the changes to the form has not been saved */\n  FORM_UNSAVED = 'FORM_UNSAVED'\n}\n\n/**\n * RoutingGuard model\n */\nexport interface RoutingGuardModel {\n  /** Id of the block instance */\n  id: string;\n  /** Routing status of the block */\n  status: RegisteredItemStatus;\n  /** Routing Guard blocking reason */\n  blockingReason?: RegisteredItemFailureReason;\n}\n\n/**\n * RoutingGuard store state\n */\nexport interface RoutingGuardState extends EntityState<RoutingGuardModel> {}\n\n/**\n * Name of the RoutingGuard Store\n */\nexport const ROUTING_GUARD_STORE_NAME = 'routingGuard';\n\n/**\n * RoutingGuard Store Interface\n */\nexport interface RoutingGuardStore {\n  /** RoutingGuard state */\n  [ROUTING_GUARD_STORE_NAME]: RoutingGuardState;\n}\n","import {\n  createEntityAdapter,\n  EntityAdapter,\n} from '@ngrx/entity';\nimport {\n  ActionCreator,\n  createReducer,\n  on,\n  ReducerTypes,\n} from '@ngrx/store';\nimport * as actions from './routing-guard.actions';\nimport {\n  RegisteredItemStatus,\n  RoutingGuardModel,\n  RoutingGuardState,\n} from './routing-guard.state';\n\n/**\n * RoutingGuard Store adapter\n */\nexport const routingGuardAdapter: EntityAdapter<RoutingGuardModel> = createEntityAdapter<RoutingGuardModel>({\n  selectId: (model) => model.id\n});\n\n/**\n * RoutingGuard Store initial value\n */\nexport const routingGuardInitialState = routingGuardAdapter.getInitialState<RoutingGuardState>({});\n\n/**\n *  List of basic actions for RoutingGuard Store\n */\nexport const routingGuardReducerFeatures: ReducerTypes<RoutingGuardState, ActionCreator[]>[] = [\n  on(actions.registerRoutingGuardEntity, (state, payload) =>\n    routingGuardAdapter.addOne({ id: payload.id, status: RegisteredItemStatus.READY }, state)),\n\n  on(actions.setRoutingGuardEntityAsPending, (state, payload) =>\n    routingGuardAdapter.updateOne({ id: payload.id, changes: { status: RegisteredItemStatus.PENDING } }, state)),\n\n  on(actions.setRoutingGuardEntityAsFailure, (state, payload) =>\n    routingGuardAdapter.updateOne({ id: payload.id, changes: { status: RegisteredItemStatus.FAILURE } }, state)),\n\n  on(actions.setRoutingGuardEntityAsSuccessAndClearReason, (state, payload) =>\n    routingGuardAdapter.updateOne({ id: payload.id, changes: { status: RegisteredItemStatus.SUCCESS, blockingReason: undefined } }, state)),\n\n  on(actions.clearRoutingGuardEntities, (state) => routingGuardAdapter.removeAll(state)),\n\n  on(actions.clearRoutingGuardEntitiesFailureReason, (state, payload) =>\n    routingGuardAdapter.updateOne({ id: payload.id, changes: { status: RegisteredItemStatus.READY, blockingReason: undefined } }, state)),\n\n  on(actions.setRoutingGuardEntityFailureWithReason, (state, payload) =>\n    routingGuardAdapter.updateOne({ id: payload.id, changes: { status: RegisteredItemStatus.FAILURE, blockingReason: payload.reason } }, state))\n];\n\n/**\n * RoutingGuard Store reducer\n */\nexport const routingGuardReducer = createReducer(\n  routingGuardInitialState,\n  ...routingGuardReducerFeatures\n);\n","import {\n  InjectionToken,\n  ModuleWithProviders,\n  NgModule,\n} from '@angular/core';\nimport {\n  Action,\n  ActionReducer,\n  StoreModule,\n} from '@ngrx/store';\nimport {\n  routingGuardReducer,\n} from './routing-guard.reducer';\nimport {\n  ROUTING_GUARD_STORE_NAME,\n  RoutingGuardState,\n} from './routing-guard.state';\n\n/** Token of the RoutingGuard reducer */\nexport const ROUTING_GUARD_REDUCER_TOKEN = new InjectionToken<ActionReducer<RoutingGuardState, Action>>('Feature RoutingGuard Reducer');\n\n/** Provide default reducer for RoutingGuard store */\nexport function getDefaultRoutingGuardReducer() {\n  return routingGuardReducer;\n}\n\n@NgModule({\n  imports: [\n    StoreModule.forFeature(ROUTING_GUARD_STORE_NAME, ROUTING_GUARD_REDUCER_TOKEN)\n  ],\n  providers: [\n    { provide: ROUTING_GUARD_REDUCER_TOKEN, useFactory: getDefaultRoutingGuardReducer }\n  ]\n})\nexport class RoutingGuardStoreModule {\n  public static forRoot<T extends RoutingGuardState>(reducerFactory: () => ActionReducer<T, Action>): ModuleWithProviders<RoutingGuardStoreModule> {\n    return {\n      ngModule: RoutingGuardStoreModule,\n      providers: [\n        { provide: ROUTING_GUARD_REDUCER_TOKEN, useFactory: reducerFactory }\n      ]\n    };\n  }\n}\n","import {\n  createFeatureSelector,\n  createSelector,\n} from '@ngrx/store';\nimport {\n  routingGuardAdapter,\n} from './routing-guard.reducer';\nimport {\n  RegisteredItemFailureReason,\n  RegisteredItemStatus,\n  ROUTING_GUARD_STORE_NAME,\n  RoutingGuardState,\n} from './routing-guard.state';\n\nconst { selectIds, selectEntities, selectAll, selectTotal } = routingGuardAdapter.getSelectors();\n\n/** Select RoutingGuard State */\nexport const selectRoutingGuardState = createFeatureSelector<RoutingGuardState>(ROUTING_GUARD_STORE_NAME);\n\n/** Select the array of RoutingGuard ids */\nexport const selectRoutingGuardIds = createSelector(selectRoutingGuardState, selectIds);\n\n/** Select the array of RoutingGuard */\nexport const selectAllRoutingGuard = createSelector(selectRoutingGuardState, selectAll);\n\n/** Select the dictionary of RoutingGuard entities */\nexport const selectRoutingGuardEntities = createSelector(selectRoutingGuardState, selectEntities);\n\n/** Select the total RoutingGuard count */\nexport const selectRoutingGuardTotal = createSelector(selectRoutingGuardState, selectTotal);\n\n/**\n * Selector used to retrieve the list of entities' status\n */\nexport const selectRoutingGuardEntitiesStatusList = createSelector(\n  selectRoutingGuardState,\n  (state: RoutingGuardState) => {\n    return Object.keys(state.entities)\n      .filter((key) => !!state.entities[key])\n      .map((key) => state.entities[key]!.status);\n  }\n);\n\n/**\n * Selector used to retrieve the list of entities' blocking reasons for FAILURE status.\n */\nexport const selectRoutingGuardEntitiesBlockingReasons = createSelector(\n  selectRoutingGuardState,\n  (state: RoutingGuardState) => {\n    return Object.values(state.entities)\n      .filter((entity) => !!entity && !!entity.blockingReason)\n      .map((entity) => entity!.blockingReason!);\n  }\n);\n\n/**\n * Selector used to check that no item is in PENDING state.\n * For example, we will rely on this selector to trigger the canDeactivate logic in the RoutingGuard\n */\nexport const hasNoEntitiesInPendingState = createSelector(\n  selectRoutingGuardEntitiesStatusList,\n  (statusList: string[]) => {\n    return !statusList.includes(RegisteredItemStatus.PENDING);\n  }\n);\n\n/**\n * Selector used to check that no item is in FAILURE state.\n * For example, we will rely on this selector to authorize or not the navigation in the RoutingGuard\n */\nexport const hasNoEntitiesInFailureState = createSelector(\n  selectRoutingGuardEntitiesStatusList,\n  (statusList: string[]) => {\n    return !statusList.includes(RegisteredItemStatus.FAILURE);\n  }\n);\n\n/**\n * Selector used to check that no item is in READY or FAILURE state.\n * For example, we will rely on this selector to trigger the router navigation and display a loader\n */\nexport const hasNoEntityInReadyOrFailureState = createSelector(\n  selectRoutingGuardEntitiesStatusList,\n  (statusList: RegisteredItemStatus[]) => {\n    return !statusList.some((status) => status === RegisteredItemStatus.READY || status === RegisteredItemStatus.FAILURE);\n  }\n);\n\n/**\n * Selector used to check that no item is in FAILURE state with a blocking reason provided.\n * Takes `blockingReason: RegisteredItemFailureReason` as aproperty parameter.\n */\nexport const hasNoEntityFailureStateWithReasons = createSelector(\n  selectRoutingGuardEntitiesBlockingReasons,\n  (reasons: RegisteredItemFailureReason[], properties: { blockingReason: RegisteredItemFailureReason }) => {\n    return !reasons.includes(properties.blockingReason);\n  }\n);\n","import {\n  APP_BASE_HREF,\n} from '@angular/common';\nimport {\n  InjectionToken,\n  makeEnvironmentProviders,\n  type Provider,\n} from '@angular/core';\nimport {\n  type BuildTimeProperties,\n  DEFAULT_BUILD_PROPERTIES,\n} from '@o3r/core';\n\n/**\n * AppBaseHref factory function\n * The APP_BASE_HREF will assume one of the following values (ordered by priority):\n * 1- undefined (or disabled) if it's not a PROD environment\n * 2- the content of the data tag data-appbasehref in the body if it exists\n * 3- the content of config.APP_BASE_HREF if defined\n * 4- otherwise, undefined\n * @param config The application environment configuration\n */\nexport function appBaseHrefFactory(config: BuildTimeProperties) {\n  if (config.ENVIRONMENT !== 'prod') {\n    return;\n  }\n  const dynamicBaseHref: string | undefined = document.body.dataset.appbasehref;\n  if (typeof dynamicBaseHref !== 'undefined') {\n    return dynamicBaseHref;\n  }\n  return typeof config.APP_BASE_HREF === 'string' ? config.APP_BASE_HREF : undefined;\n}\n\nexport const ENVIRONMENT_CONFIG_TOKEN = new InjectionToken<BuildTimeProperties>('Environment config');\n\ntype EnvironmentFeatureKind = 'base-href';\n\ninterface EnvironmentFeature<FeatureKind extends EnvironmentFeatureKind> {\n  ɵkind: FeatureKind;\n  ɵproviders: Provider[];\n}\n\ntype BaseHrefFeature = EnvironmentFeature<'base-href'>;\n\ntype EnvironmentFeatures = BaseHrefFeature;\n\n/**\n * Specify a custom base href\n * @param baseHref\n */\nexport function withBaseHref<T extends string | undefined>(baseHref: T | ((environmentConfig: BuildTimeProperties) => T)): EnvironmentFeatures {\n  return {\n    ɵkind: 'base-href',\n    ɵproviders: [\n      {\n        provide: APP_BASE_HREF,\n        ...(\n          typeof baseHref === 'function'\n            ? { useFactory: baseHref, deps: [ENVIRONMENT_CONFIG_TOKEN] }\n            : { useValue: baseHref }\n        )\n      }\n    ]\n  };\n}\n\n/**\n * Provide environment configuration\n * @note it will also provide APP_BASE_HREF based on the environment configuration\n * @param config\n * @param features\n */\nexport function provideEnvironment(config: Partial<BuildTimeProperties>, ...features: EnvironmentFeatures[]) {\n  const additionalProviders = [];\n  const baseHrefFeature = features.find((f) => f.ɵkind === 'base-href') ?? withBaseHref(appBaseHrefFactory);\n  additionalProviders.push(baseHrefFeature.ɵproviders);\n\n  return makeEnvironmentProviders([\n    { provide: ENVIRONMENT_CONFIG_TOKEN, useValue: { ...DEFAULT_BUILD_PROPERTIES, ...config } },\n    additionalProviders\n  ]);\n}\n","import {\n  inject,\n  Injectable,\n} from '@angular/core';\nimport {\n  NavigationEnd,\n  PreloadingStrategy,\n  Route,\n  Router,\n} from '@angular/router';\nimport {\n  Observable,\n  of,\n} from 'rxjs';\nimport {\n  filter,\n  switchMap,\n} from 'rxjs/operators';\n\n/**\n * Data to inject to the route parameter to specify preloading strategy\n */\nexport interface O3rOnDemandPreloadingData {\n  /** List of page reached that trigger preloading */\n  preloadOn: string[] | '*' | RegExp;\n}\n\n/**\n * Check if the route has preload instructions\n * @param  data Route data\n */\nexport function hasPreloadingOnDemand(data: any): data is O3rOnDemandPreloadingData {\n  if (!data) {\n    return false;\n  }\n\n  return (Array.isArray(data.preloadOn) && data.preloadOn.length > 0)\n    || data.preloadOn === '*'\n    || data.preloadOn instanceof RegExp;\n}\n\n/**\n * Otter Preloading strategy base on previous route\n * @inheritDoc\n */\n@Injectable()\nexport class O3rOnNavigationPreloadingStrategy implements PreloadingStrategy {\n  private readonly router = inject(Router);\n\n  /**\n   * Check if the module should be preloaded based on the data preload array of routes or regex value\n   * @param data Route data\n   * @param url URL of current page\n   */\n  private isUrlMatchingPreloadConfig(data: any, url: string): boolean {\n    return (Array.isArray(data.preloadOn) && data.preloadOn.includes(url))\n      || (data.preloadOn instanceof RegExp && data.preloadOn.test(url));\n  }\n\n  /** @inheritDoc */\n  public preload(route: Route, preload: () => Observable<any>): Observable<any> {\n    if ((route.path || route.matcher) && hasPreloadingOnDemand(route.data)) {\n      // On application landing page, check the route to preload.\n      if (route.data.preloadOn === '*' || this.isUrlMatchingPreloadConfig(route.data, this.router.routerState.snapshot.url)) {\n        return preload();\n      }\n\n      // On route navigation end, load the routes to preload for the current route.\n      return this.router.events\n        .pipe(\n          filter((r) => r instanceof NavigationEnd && this.isUrlMatchingPreloadConfig(route.data, r.url)),\n          switchMap(() => preload())\n        );\n    }\n    return of(null);\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["actions.registerRoutingGuardEntity","actions.setRoutingGuardEntityAsPending","actions.setRoutingGuardEntityAsFailure","actions.setRoutingGuardEntityAsSuccessAndClearReason","actions.clearRoutingGuardEntities","actions.clearRoutingGuardEntitiesFailureReason","actions.setRoutingGuardEntityFailureWithReason"],"mappings":"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"}