@bespunky/angular-zen
Version:
The Angular tools you always wished were there.
35 lines • 5.81 kB
JavaScript
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==