{"version":3,"file":"firestitch-core.mjs","sources":["../../src/app/helpers/collect-routes-data.ts","../../src/app/classes/route-subject.ts","../../src/app/classes/route-observer.ts","../../src/app/helpers/control-container-factory.ts","../../src/app/helpers/get-path-to-route-parent.ts","../../src/firestitch-core.ts"],"sourcesContent":["import { ActivatedRoute, ActivatedRouteSnapshot } from '@angular/router';\n\nimport { Observable, of } from 'rxjs';\n\nexport function collectRoutesData(\n  route: ActivatedRoute | ActivatedRouteSnapshot,\n): Observable<Record<string, unknown>>[] {\n  const dataSubjects: Observable<Record<string, unknown>>[] = [];\n\n  if (route instanceof ActivatedRouteSnapshot) {\n    let r = route;\n    do {\n      dataSubjects.unshift(of(r.data));\n      r = r.parent;\n    }\n    while (r);\n\n  } else if (route instanceof ActivatedRoute) {\n    let r = route;\n    do {\n      dataSubjects.unshift(r.data);\n      r = r.parent;\n    }\n    while (r);\n  }\n\n  return dataSubjects;\n}\n","import { BehaviorSubject, Observable, of } from 'rxjs';\n\n\nexport class RouteSubject {\n\n  public subject: BehaviorSubject<any>;\n\n  private _targetObservable: Observable<unknown>;\n\n  constructor() {\n    this.subject = new BehaviorSubject(undefined);\n  }\n\n  /**\n   * Subscribe to observer data changes\n   *\n   * @param func\n   * @returns\n   */\n  public subscribe(func) {\n    return this.subject.subscribe(func);\n  }\n\n  /**\n   * Observe changes from passed observable (Service)\n   *\n   * @param observable\n   * @returns\n   */\n  public observe(observable: Observable<unknown>): Observable<RouteSubject> {\n    this._targetObservable = observable;\n    this._load();\n\n    return of(this);\n  }\n\n  /**\n   * Provide value to subscriber\n   *\n   * @param val\n   * @returns\n   */\n  public next(val): Observable<RouteSubject> {\n    this.subject.next(val);\n\n    return of(this);\n  }\n\n  /**\n   * Destroy observer\n   */\n  public destroy() {\n    this.subject.complete();\n  }\n\n  public reload(): void {\n    this._load();\n  }\n\n  private _load(): void {\n    this._targetObservable.subscribe((val) => {\n      this.next(val);\n    });\n  }\n}\n","import { ActivatedRoute, ActivatedRouteSnapshot } from '@angular/router';\n\nimport { BehaviorSubject, Observable, Subject, combineLatest, of } from 'rxjs';\nimport { filter, map, switchMap, tap } from 'rxjs/operators';\n\nimport { cloneDeep } from 'lodash-es';\n\nimport { collectRoutesData } from '../helpers/collect-routes-data';\n\nimport { RouteSubject } from './route-subject';\n\n\nexport class RouteObserver<T = unknown> extends Observable<T> {\n\n  private _loaded$ = new BehaviorSubject(false);\n  private _routeSubject: RouteSubject;\n  private _routeSubject$: Subject<unknown>;\n\n  constructor(route: ActivatedRoute | ActivatedRouteSnapshot, name: string) {\n    super();\n\n    const routesData = collectRoutesData(route);\n    const stream = combineLatest(routesData)\n      .pipe(\n        map((data) => {\n          return data.reduce((acc, routeData) => {\n            return { ...acc, ...routeData };\n          }, {});\n        }, {}),\n        switchMap((routeData: Record<string, RouteSubject | unknown>) => {\n          const target = routeData[name];\n\n          if (target instanceof RouteSubject && target.subject) {\n            this._routeSubject = target;\n            this._routeSubject$ = target.subject;\n\n            return target.subject;\n          }\n\n          return of(null);\n        }),\n        filter((item) => {\n          return item !== undefined;\n        }),\n        map((item) => {\n          return cloneDeep(item);\n        }),\n        tap(() => {\n          this._loaded$.next(true);\n        }),\n      );\n\n    this.subscribe = ((subscriber) => stream.subscribe(subscriber));\n  }\n\n  public get loaded(): boolean {\n    return this._loaded$.getValue();\n  }\n\n  public get value(): any {\n    return this._routeSubject?.subject.getValue();\n  }\n\n  public get loaded$(): Observable<boolean> {\n    return this._loaded$.asObservable();\n  }\n\n  public reload(): void {\n    this._loaded$.next(false);\n    this._routeSubject.reload();\n  }\n\n  public next(value): void {\n    if (this._routeSubject$) {\n      this._routeSubject$.next(value);\n    }\n  }\n}\n\n","import { NgForm } from '@angular/forms';\n\n\nexport function controlContainerFactory(ngForm?: NgForm) {\n  return ngForm;\n}\n","import { ActivatedRoute } from '@angular/router';\n\n\nexport function getPathToRouteParent(route: ActivatedRoute): string {\n  // let stepsBack = 1;\n  // let route = this._route.parent;\n\n  // we are looking for parent route to navigate from current dialog\n  // but we have to skip routes like loadChildren or redirectTo\n  // because it does not make sence to do navigation to them\n  // while (route.routeConfig && (route.routeConfig.redirectTo || route.routeConfig.path === '') && route.parent) {\n  //   stepsBack++;\n\n  //   if (route.routeConfig.path === '' && route.parent?.routeConfig.loadChildren && route.parent?.parent) {\n  //     route = route.parent.parent\n  //   } else {\n  //     route = route.parent;\n  //   }\n  // }\n\n  const stepsBack = (route.routeConfig.path.match(/\\//g) || []).length + 1;\n\n  // make relative navigation path like '../../../';\n  return Array\n    .from(Array(stepsBack), () => '../')\n    .join('');\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}