{"version":3,"file":"this-dot-route-config.mjs","sources":["../../../../libs/route-config/src/lib/route-data-default-value-token.ts","../../../../libs/route-config/src/lib/route-config.service.ts","../../../../libs/route-config/src/lib/route-tag/not-in-route-tags.pipe.ts","../../../../libs/route-config/src/lib/route-data-has/route-data-has.service.ts","../../../../libs/route-config/src/lib/route-tag/route-tag.directive.ts","../../../../libs/route-config/src/lib/route-data/route-data.directive.ts","../../../../libs/route-config/src/lib/route-data/route-data.module.ts","../../../../libs/route-config/src/lib/route-data-has/route-data-has.directive.ts","../../../../libs/route-config/src/lib/route-config.module.ts","../../../../libs/route-config/src/this-dot-route-config.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { RouteData } from './route-config.service';\n\nexport const ROUTE_DATA_DEFAULT_VALUE = new InjectionToken<RouteData>('Route Data default value');\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { ActivatedRoute, ActivationEnd, Router } from '@angular/router';\nimport { combineLatest, Observable } from 'rxjs';\nimport { filter, map, startWith, switchMap } from 'rxjs/operators';\nimport { ROUTE_DATA_DEFAULT_VALUE } from './route-data-default-value-token';\n\nexport type RouteConfigParams<RouteTags extends string = string> = {\n  routeTags: RouteTags | RouteTags[];\n};\n\nexport type RouteConfigParamNames = keyof RouteConfigParams;\n\nexport type RouteData<\n  ConfigParamsNames extends string = never,\n  RouteTags extends string = string\n> = {\n  [key in ConfigParamsNames]: unknown;\n} & RouteConfigParams<RouteTags>;\n\nexport type RouteDataParam<ConfigParamsNames extends string> = keyof RouteData<ConfigParamsNames>;\n\nconst gatherRoutes = (activatedRoute: ActivatedRoute): ActivatedRoute[] => {\n  const routes: ActivatedRoute[] = activatedRoute.pathFromRoot;\n\n  let route = activatedRoute.firstChild;\n  while (route) {\n    routes.push(route);\n    route = route.firstChild;\n  }\n\n  return routes;\n};\n\n@Injectable()\nexport class RouteConfigService<\n  RouteTags extends string = string,\n  ConfigParamsNames extends string = never\n> {\n  private get injectedDefaultValue(): Partial<RouteData<ConfigParamsNames, RouteTags>> {\n    return this._injectedDefaultValue || {};\n  }\n\n  constructor(\n    private activatedRoute: ActivatedRoute,\n    private router: Router,\n    @Optional()\n    @Inject(ROUTE_DATA_DEFAULT_VALUE)\n    private _injectedDefaultValue?: Partial<RouteData<ConfigParamsNames, RouteTags>>\n  ) {}\n\n  /**\n   * Returns an Observable which emits the route config set for the activated route.\n   *\n   * @example\n   * export class AppComponent {\n   *   data$ = this.routeConfigService.getActivatedRouteConfig();\n   *   dataWithDefaultValue$ = this.routeConfigService.getActivatedRouteConfig({\n   *     routeTags: ['defaultTag'],\n   *     title: 'Default Title',\n   *   });\n   * }\n   *\n   * @param defaultValue - the default value that should be returned, it allows overriding the injected default values.\n   *\n   * @returns Observable<Partial<C>>\n   */\n  getActivatedRouteConfig<\n    C extends RouteData<ConfigParamsNames, RouteTags> = RouteData<ConfigParamsNames, RouteTags>\n  >(defaultValue: Partial<C> = {}): Observable<Partial<C>> {\n    return this.router.events.pipe(\n      filter((event) => event instanceof ActivationEnd),\n      map(() => this.activatedRoute),\n      startWith(this.activatedRoute),\n      map(gatherRoutes),\n      switchMap((routes) =>\n        combineLatest(routes.map(({ data }) => data)).pipe(\n          map((dataArr) => Object.assign({}, this.injectedDefaultValue, defaultValue, ...dataArr))\n        )\n      )\n    );\n  }\n\n  /**\n   * Returnsthe an Observable with current route's property value\n   *\n   * @example\n   * export class AppComponent {\n   *   tags$ = this.routeConfigService.getLeafConfig('routeTags', ['no tags']);\n   * }\n   *\n   * @param paramName - the parameter name from the route config to be returned\n   * @param defaultValue - the default value that should be returned, if the value is not present\n   */\n  getLeafConfig(paramName: 'routeTags', defaultValue?: RouteTags[]): Observable<RouteTags[]>;\n  getLeafConfig<T>(paramName: ConfigParamsNames, defaultValue?: T): Observable<T>;\n  getLeafConfig<T = unknown>(\n    paramName: RouteDataParam<ConfigParamsNames>,\n    defaultValue?: T\n  ): Observable<T> {\n    return this.getActivatedRouteConfig(\n      defaultValue\n        ? ({\n            [paramName]: defaultValue,\n          } as any)\n        : {}\n    ).pipe(map((data: { [key: string]: any }) => data[paramName] || defaultValue));\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { RouteConfigService } from '../route-config.service';\n\n/**\n * Pipes an array of route tags and returns an Observable<boolean> that emits a boolean.\n *\n * The boolean is true if any of the values in the provided array is in the configured route tags of the activated route.\n *\n * @example\n * <!-- Use it chained with the async pipe -->\n * <ng-container *ngIf=\"routesWhereTheElementIsDisplayed | inRouteTags$ | async\">\n *   The contents of this ng-container\n * </ng-container>\n */\n@Pipe({\n  name: 'inRouteTags$',\n})\nexport class InRouteTags$Pipe<RouteTag extends string = string> implements PipeTransform {\n  routeTags$ = this.routeTagService.getLeafConfig('routeTags', []);\n\n  constructor(private routeTagService: RouteConfigService<RouteTag>) {}\n\n  transform(tags: RouteTag[]): Observable<boolean> {\n    return this.routeTags$.pipe(\n      map((routeTags) => !!tags.find((tag: RouteTag) => routeTags.includes(tag)))\n    );\n  }\n}\n","import { Injectable, OnDestroy, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { isTruthy } from '@this-dot/utils';\nimport { BehaviorSubject, combineLatest, Subject } from 'rxjs';\nimport { distinctUntilChanged, filter, map, switchMap, takeUntil, tap } from 'rxjs/operators';\nimport { RouteConfigService } from '../route-config.service';\n\n@Injectable()\nexport class RouteDataHasService<\n  CThen,\n  CElse,\n  RouteTags extends string = string,\n  RoutePropNames extends string = string\n> implements OnDestroy\n{\n  private template!: TemplateRef<CThen>;\n  private viewContainer!: ViewContainerRef;\n  private tags$ = new BehaviorSubject<RouteTags[]>([]);\n  private propName$ = new BehaviorSubject<RoutePropNames | undefined>(undefined);\n  private elseTemplate$ = new BehaviorSubject<TemplateRef<CElse> | null>(null);\n  private destroy$ = new Subject<void>();\n\n  private display$ = combineLatest([\n    this.tags$,\n    this.propName$.pipe(\n      filter(isTruthy),\n      switchMap((propName) => this.routeConfigService.getLeafConfig<string[]>(propName, []))\n    ),\n  ]).pipe(\n    map(([tags, routeValues]) => !!tags.find((tag: RouteTags) => routeValues.includes(tag))),\n    distinctUntilChanged()\n  );\n\n  private readonly createView$ = combineLatest([this.display$, this.elseTemplate$]).pipe(\n    tap(() => this.viewContainer.clear()),\n    tap(([show, elseTemplate]) =>\n      show\n        ? void this.viewContainer.createEmbeddedView(this.template)\n        : void (elseTemplate && this.viewContainer.createEmbeddedView(elseTemplate))\n    )\n  );\n\n  setTags(tags: RouteTags | RouteTags[]) {\n    const tagArray = Array.isArray(tags) ? tags : [tags];\n    this.tags$.next(tagArray);\n  }\n\n  setPropName(propName: RoutePropNames) {\n    this.propName$.next(propName);\n  }\n\n  setElseTemplate(elseTemplate: TemplateRef<CElse>) {\n    this.elseTemplate$.next(elseTemplate);\n  }\n\n  constructor(private routeConfigService: RouteConfigService<string, string>) {}\n\n  init(template: TemplateRef<CThen>, viewContainer: ViewContainerRef) {\n    this.template = template;\n    this.viewContainer = viewContainer;\n    this.createView$.pipe(takeUntil(this.destroy$)).subscribe();\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n}\n","import { Directive, Input, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { RouteDataHasService } from '../route-data-has/route-data-has.service';\n\n/**\n * Retrieves the provided route config property and binds it into a template variable\n *\n * @example\n * <!-- Display an element only if the \"show\" routeTag is truthy -->\n * <p *tdRouteTag=\"'show'\">\n *   This text is only visible, if there is a 'show' tag in the route data's `routeTags` Array\n * </p>\n *\n * @example\n * <!-- Display an element only if the \"show\" routeTag is truthy and display a fallback template if it is falsy -->\n * <p *tdRouteTag=\"'show'; else noShowTag\">\n *   This text is only visible, if there is a 'show' tag in the route data's `routeTags` Array\n * </p>\n * <ng-template #noShowTag>\n *   <p>There is no 'show' tag in this route's config</p>\n * </ng-template>\n */\n@Directive({ selector: '[tdRouteTag]', providers: [RouteDataHasService] })\nexport class RouteTagDirective<CThen, CElse, RouteTags extends string = string> implements OnInit {\n  @Input()\n  set tdRouteTag(tags: RouteTags | RouteTags[]) {\n    this.routeDataHasService.setTags(tags);\n  }\n\n  @Input()\n  set tdRouteTagElse(elseTemplate: TemplateRef<CElse>) {\n    this.routeDataHasService.setElseTemplate(elseTemplate);\n  }\n\n  constructor(\n    private template: TemplateRef<CThen>,\n    private viewContainer: ViewContainerRef,\n    private routeDataHasService: RouteDataHasService<CThen, CElse, RouteTags, 'routeTags'>\n  ) {}\n\n  ngOnInit(): void {\n    this.routeDataHasService.setPropName('routeTags');\n    this.routeDataHasService.init(this.template, this.viewContainer);\n  }\n}\n","import {\n  Directive,\n  EmbeddedViewRef,\n  Input,\n  OnDestroy,\n  OnInit,\n  TemplateRef,\n  ViewContainerRef,\n} from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { distinctUntilChanged, switchMap, takeUntil, tap } from 'rxjs/operators';\nimport { RouteConfigService, RouteData } from '../route-config.service';\n\nexport interface RouteDataDirectiveContext<C> {\n  $implicit: C;\n}\n\n/**\n * This directive allows for access to the whole `data` property defined in the current [Route](https://angular.io/api/router/Route#data) from a Component's template.\n *\n * @example\n * <!-- We can use it as following: -->\n * <h1 *tdRouteData=\"let data\">\n *   Current title is: {{ data.title }}\n * </h1>\n *\n * @example\n * <!-- It is also possible to pass a default value so that if a property is not defined in the Route we will still receive some value: -->\n * <h1 *tdRouteData=\"let data; defaultValue: { title: 'DefaultTitle', routeTags: ['defaultTag'] }\">\n *   Current title is: {{ data.title }}\n * </h1>\n *\n * @example\n * <!-- If you want to access multiple properties in one component's template it is **recommended** to wrap the whole template with only one `*tdRouteData` directive. This approach follows DRY principle and is efficient as it only creates one subscription per template. -->\n * <ng-container *tdRouteData=\"let data; defaultValue: { title: 'DefaultTitle', routeTags: ['defaultTag'] }\">\n *   <h1>\n *     Current title is: {{ data.title }}\n *   </h1>\n *   <p>\n *     Current route contains the following tags: {{ data.routeTags | json }}\n *   </p>\n * </ng-container>\n */\n@Directive({\n  selector: '[tdRouteData]',\n})\nexport class RouteDataDirective<C extends RouteData> implements OnInit, OnDestroy {\n  private destroy$ = new Subject<void>();\n\n  private defaultValue$ = new BehaviorSubject<Partial<C>>({});\n  private view!: EmbeddedViewRef<RouteDataDirectiveContext<Partial<C>>>;\n\n  private data$ = this.defaultValue$.pipe(\n    switchMap((defaultValue) => this.routeConfigService.getActivatedRouteConfig<C>(defaultValue)),\n    distinctUntilChanged()\n  );\n\n  private createView$ = this.data$.pipe(\n    tap((data) => {\n      this.view.context = {\n        $implicit: data,\n      };\n      this.view.markForCheck();\n    })\n  );\n\n  @Input()\n  set tdRouteDataDefaultValue(defaultValue: C) {\n    this.defaultValue$.next(defaultValue);\n  }\n\n  constructor(\n    private routeConfigService: RouteConfigService,\n    private template: TemplateRef<RouteDataDirectiveContext<C>>,\n    private entry: ViewContainerRef\n  ) {}\n\n  ngOnInit(): void {\n    this.view = this.entry.createEmbeddedView(this.template, {\n      $implicit: this.defaultValue$.value,\n    });\n\n    this.createView$.pipe(takeUntil(this.destroy$)).subscribe();\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouteDataDirective } from './route-data.directive';\n\n@NgModule({\n  declarations: [RouteDataDirective],\n  imports: [CommonModule],\n  exports: [RouteDataDirective],\n})\nexport class RouteDataModule {}\n","import { Directive, Input, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { RouteDataHasService } from './route-data-has.service';\n\n/**\n * If you need to use a different route data property to store the tags, you can use the `*tdRouteDataHas` directive. It works very similar to `*tdRouteTag` directive but provides a way to use different properties as a source of data.\n *\n * @example\n * <!-- You can configure the directive to use the `customDataProperty` property of the route data object, where it looks for the `customShow` property to determine if the element needs to show:\n * <p *tdRouteDataHas=\"'customShow'; propName: 'customDataProperty'\">\n *   This text is only visible, if there is a 'show' tag in the route data's `customDataProperty` Array\n * </p>\n *\n * @example\n * <!-- `*tdRouteDataHas` also provides a way do display a fallback template if a given tag is not present -->\n * <p *tdRouteDataHas=\"'customShow'; propName: 'customDataProperty'; else noShowTag\">\n *   This text is only visible, if there is a 'customShow' tag in the route data's `customDataProperty` Array\n * </p>\n * <ng-template #noShowTag>\n *   <p>There is no 'customShow' tag in this route's config</p>\n * </ng-template>\n */\n@Directive({\n  selector: '[tdRouteDataHas]',\n  providers: [RouteDataHasService],\n})\nexport class RouteDataHasDirective<CThen, CElse, RouteTags extends string = string>\n  implements OnInit\n{\n  @Input()\n  set tdRouteDataHas(tags: RouteTags | RouteTags[]) {\n    this.routeDataHasService.setTags(tags);\n  }\n\n  @Input()\n  set tdRouteDataHasPropName(propName: string) {\n    this.routeDataHasService.setPropName(propName);\n  }\n\n  @Input()\n  set tdRouteDataHasElse(elseTemplate: TemplateRef<CElse>) {\n    this.routeDataHasService.setElseTemplate(elseTemplate);\n  }\n\n  constructor(\n    private template: TemplateRef<CThen>,\n    private viewContainer: ViewContainerRef,\n    private routeDataHasService: RouteDataHasService<CThen, CElse, RouteTags>\n  ) {}\n\n  ngOnInit(): void {\n    this.routeDataHasService.init(this.template, this.viewContainer);\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { InRouteTags$Pipe } from './route-tag/not-in-route-tags.pipe';\nimport { RouteTagDirective } from './route-tag/route-tag.directive';\nimport { RouteConfigService } from './route-config.service';\nimport { RouteDataModule } from './route-data';\nimport { RouteDataHasDirective } from './route-data-has/route-data-has.directive';\n\n@NgModule({\n  declarations: [RouteTagDirective, InRouteTags$Pipe, RouteDataHasDirective],\n  imports: [CommonModule, RouteDataModule],\n  exports: [RouteTagDirective, InRouteTags$Pipe, RouteDataModule, RouteDataHasDirective],\n})\nexport class RouteConfigModule {\n  /**\n   * Registers the RouteConfigModule and sets the providers globally.\n   * Make sure you call the forRoot method in your root module.\n   *\n   * @remarks You still need to import the module without calling the forRoot method in other modules so you can use the pipes and directives from this module.\n   */\n  static forRoot(): ModuleWithProviders<RouteConfigModule> {\n    return {\n      ngModule: RouteConfigModule,\n      providers: [RouteConfigService],\n    };\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.RouteConfigService","i1.RouteDataHasService"],"mappings":"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"}