UNPKG

@bespunky/angular-zen

Version:

The Angular tools you always wished were there.

35 lines 5.81 kB
import { map, merge, shareReplay } from 'rxjs'; import { inject } from '@angular/core'; import { ActivatedRoute, NavigationEnd } from '@angular/router'; import { RouterOutletComponentBus } from '@bespunky/angular-zen/router-x'; import { useRouterEvent } from './use-router-event'; /** * Creates an observable which emits the latest state of the published router outlets in the app. * The emitted state is a dictionary of outlet names and corresponding component instances. * * @see `PublishComponentDirective` for more details. * * @export * @return {Observable<Map<string, AnyObject | null>>} An observable which emits the latest state of the published router outlets in the app. */ export function useRouterOutletStateTracker() { const componentBus = inject(RouterOutletComponentBus); return merge([componentBus.componentPublished, componentBus.componentUnpublished]).pipe(map(() => componentBus.outletsState), shareReplay(1)); } /** * Creates an observable which emits the latest component instance for the currently activated route. * * @see `PublishComponentDirective` for more details. * * @export * @return {Observable<ActivatedRouteWithComponent>} An observable which emits the component instance for the currently activated route. */ export function useActivatedRouteComponent() { const componentBus = inject(RouterOutletComponentBus); const route = inject(ActivatedRoute); return useRouterEvent(NavigationEnd).pipe(map(() => ({ component: componentBus.instance(route.outlet), route: route.snapshot })), shareReplay(1)); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXJvdXRlci1vdXRsZXQtdHJhY2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci16ZW4vcm91dGVyLXgvdXRpbHMvc3JjL2xpYi91c2Utcm91dGVyLW91dGxldC10cmFja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFjLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxjQUFjLEVBQTBCLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVwRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSwyQkFBMkI7SUFFdkMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFFdEQsT0FBTyxLQUFLLENBQUMsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsWUFBWSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ25GLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLEVBQ3BDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDakIsQ0FBQztBQUNOLENBQUM7QUFPRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLDBCQUEwQjtJQUV0QyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUN0RCxNQUFNLEtBQUssR0FBVSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFNUMsT0FBTyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUNyQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNQLFNBQVMsRUFBRSxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDOUMsS0FBSyxFQUFNLEtBQUssQ0FBQyxRQUFRO0tBQ0ksQ0FBQSxDQUFDLEVBQ2xDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDakIsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtYXAsIG1lcmdlLCBPYnNlcnZhYmxlLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgTmF2aWdhdGlvbkVuZCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBSb3V0ZXJPdXRsZXRDb21wb25lbnRCdXMgfSBmcm9tICdAYmVzcHVua3kvYW5ndWxhci16ZW4vcm91dGVyLXgnO1xuaW1wb3J0IHsgQW55T2JqZWN0IH0gZnJvbSAnQGJlc3B1bmt5L3R5cGVzY3JpcHQtdXRpbHMnO1xuaW1wb3J0IHsgdXNlUm91dGVyRXZlbnQgfSBmcm9tICcuL3VzZS1yb3V0ZXItZXZlbnQnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JzZXJ2YWJsZSB3aGljaCBlbWl0cyB0aGUgbGF0ZXN0IHN0YXRlIG9mIHRoZSBwdWJsaXNoZWQgcm91dGVyIG91dGxldHMgaW4gdGhlIGFwcC5cbiAqIFRoZSBlbWl0dGVkIHN0YXRlIGlzIGEgZGljdGlvbmFyeSBvZiBvdXRsZXQgbmFtZXMgYW5kIGNvcnJlc3BvbmRpbmcgY29tcG9uZW50IGluc3RhbmNlcy5cbiAqXG4gKiBAc2VlIGBQdWJsaXNoQ29tcG9uZW50RGlyZWN0aXZlYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogXG4gKiBAZXhwb3J0XG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlPE1hcDxzdHJpbmcsIEFueU9iamVjdCB8IG51bGw+Pn0gQW4gb2JzZXJ2YWJsZSB3aGljaCBlbWl0cyB0aGUgbGF0ZXN0IHN0YXRlIG9mIHRoZSBwdWJsaXNoZWQgcm91dGVyIG91dGxldHMgaW4gdGhlIGFwcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVJvdXRlck91dGxldFN0YXRlVHJhY2tlcigpOiBPYnNlcnZhYmxlPE1hcDxzdHJpbmcsIEFueU9iamVjdCB8IG51bGw+Plxue1xuICAgIGNvbnN0IGNvbXBvbmVudEJ1cyA9IGluamVjdChSb3V0ZXJPdXRsZXRDb21wb25lbnRCdXMpO1xuXG4gICAgcmV0dXJuIG1lcmdlKFtjb21wb25lbnRCdXMuY29tcG9uZW50UHVibGlzaGVkLCBjb21wb25lbnRCdXMuY29tcG9uZW50VW5wdWJsaXNoZWRdKS5waXBlKFxuICAgICAgICBtYXAoKCkgPT4gY29tcG9uZW50QnVzLm91dGxldHNTdGF0ZSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbn1cblxuZXhwb3J0IHR5cGUgQWN0aXZhdGVkUm91dGVXaXRoQ29tcG9uZW50ID0ge1xuICAgIGNvbXBvbmVudDogQW55T2JqZWN0IHwgbnVsbDtcbiAgICByb3V0ZSAgICA6IEFjdGl2YXRlZFJvdXRlU25hcHNob3Q7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JzZXJ2YWJsZSB3aGljaCBlbWl0cyB0aGUgbGF0ZXN0IGNvbXBvbmVudCBpbnN0YW5jZSBmb3IgdGhlIGN1cnJlbnRseSBhY3RpdmF0ZWQgcm91dGUuXG4gKiBcbiAqIEBzZWUgYFB1Ymxpc2hDb21wb25lbnREaXJlY3RpdmVgIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQGV4cG9ydFxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxBY3RpdmF0ZWRSb3V0ZVdpdGhDb21wb25lbnQ+fSBBbiBvYnNlcnZhYmxlIHdoaWNoIGVtaXRzIHRoZSBjb21wb25lbnQgaW5zdGFuY2UgZm9yIHRoZSBjdXJyZW50bHkgYWN0aXZhdGVkIHJvdXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQWN0aXZhdGVkUm91dGVDb21wb25lbnQoKTogT2JzZXJ2YWJsZTxBY3RpdmF0ZWRSb3V0ZVdpdGhDb21wb25lbnQ+XG57XG4gICAgY29uc3QgY29tcG9uZW50QnVzID0gaW5qZWN0KFJvdXRlck91dGxldENvbXBvbmVudEJ1cyk7XG4gICAgY29uc3Qgcm91dGUgICAgICAgID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcblxuICAgIHJldHVybiB1c2VSb3V0ZXJFdmVudChOYXZpZ2F0aW9uRW5kKS5waXBlKFxuICAgICAgICBtYXAoKCkgPT4gKHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogY29tcG9uZW50QnVzLmluc3RhbmNlKHJvdXRlLm91dGxldCksXG4gICAgICAgICAgICByb3V0ZSAgICA6IHJvdXRlLnNuYXBzaG90XG4gICAgICAgIH0gYXMgQWN0aXZhdGVkUm91dGVXaXRoQ29tcG9uZW50KSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbn1cbiJdfQ==