UNPKG

ng-hub-ui-portal

Version:

A flexible Angular portal library for dynamic content rendering with advanced positioning and interaction control

84 lines 9.58 kB
import { inject, Injectable, Injector } from '@angular/core'; import { HubPortalConfig } from './portal-config'; import { HubPortalStack } from './portal-stack'; import * as i0 from "@angular/core"; /** * A service for opening portal windows. * * Creating a portal is straightforward: create a component or a template and pass it as an argument to * the `.open()` method. */ export class HubPortal { constructor() { this._injector = inject(Injector); this._portalStack = inject(HubPortalStack); this._config = inject(HubPortalConfig); } /** * Opens a new portal window with the specified content and supplied options. * * Content can be provided as a `TemplateRef` or a component type. If you pass a component type as content, * then instances of those components can be injected with an instance of the `HubActivePortal` class. You can then * use `HubActivePortal` methods to close / dismiss portals from "inside" of your component. * * Also see the [`HubPortalOptions`](#/components/portal/api#HubPortalOptions) for the list of supported options. */ open(content, options = {}) { const combinedOptions = { ...this._config, animation: this._config.animation, ...options }; return this._portalStack.open(this._injector, content, combinedOptions); } /** * The function `toggle` opens a portal with specified content and options while dismissing any existing portals. * * @param {any} content - The `content` parameter in the `toggle` function is the content that you want to display within the * portal. This can be any type of content such as a component, template, or any other HTML element that you want to show in the * portal. * @param {HubPortalOptions} options - The `options` parameter in the `toggle` function is an object that allows you to customize * the behavior of the portal. * * @returns The `toggle` function is returning a `HubPortalRef` object. */ toggle(content, options = {}) { const combinedOptions = { ...this._config, animation: this._config.animation, ...options }; // this.dismissAll(); // return this._portalStack.open(this._injector, content, combinedOptions); return this._portalStack.toggle(this._injector, content, combinedOptions); } /** * Returns an observable that holds the active portal instances. */ get activeInstances() { return this._portalStack.activeInstances; } /** * Dismisses all currently displayed portal windows with the supplied reason. * * @since 3.1.0 */ dismissAll(reason) { this._portalStack.dismissAll(reason); } /** * Indicates if there are currently any open portal windows in the application. * * @since 3.3.0 */ hasOpenPortals() { return this._portalStack.hasOpenPortals(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HubPortal, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HubPortal, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HubPortal, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydGFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcG9ydGFsL3NyYy9saWIvcG9ydGFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQUUsZUFBZSxFQUFvQixNQUFNLGlCQUFpQixDQUFDO0FBRXBFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFaEQ7Ozs7O0dBS0c7QUFFSCxNQUFNLE9BQU8sU0FBUztJQUR0QjtRQUVTLGNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsaUJBQVksR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEMsWUFBTyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztLQXNFMUM7SUFwRUE7Ozs7Ozs7O09BUUc7SUFDSCxJQUFJLENBQUMsT0FBWSxFQUFFLFVBQTRCLEVBQUU7UUFDaEQsTUFBTSxlQUFlLEdBQUc7WUFDdkIsR0FBRyxJQUFJLENBQUMsT0FBTztZQUNmLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVM7WUFDakMsR0FBRyxPQUFPO1NBQ1YsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCxNQUFNLENBQUMsT0FBWSxFQUFFLFVBQTRCLEVBQUU7UUFDbEQsTUFBTSxlQUFlLEdBQUc7WUFDdkIsR0FBRyxJQUFJLENBQUMsT0FBTztZQUNmLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVM7WUFDakMsR0FBRyxPQUFPO1NBQ1YsQ0FBQztRQUNGLHFCQUFxQjtRQUNyQiwyRUFBMkU7UUFDM0UsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FDOUIsSUFBSSxDQUFDLFNBQVMsRUFDZCxPQUFPLEVBQ1AsZUFBZSxDQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLGVBQWU7UUFDbEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFVBQVUsQ0FBQyxNQUFZO1FBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsY0FBYztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMzQyxDQUFDOzhHQXhFVyxTQUFTO2tIQUFULFNBQVMsY0FESSxNQUFNOzsyRkFDbkIsU0FBUztrQkFEckIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEh1YlBvcnRhbENvbmZpZywgSHViUG9ydGFsT3B0aW9ucyB9IGZyb20gJy4vcG9ydGFsLWNvbmZpZyc7XG5pbXBvcnQgeyBIdWJQb3J0YWxSZWYgfSBmcm9tICcuL3BvcnRhbC1yZWYnO1xuaW1wb3J0IHsgSHViUG9ydGFsU3RhY2sgfSBmcm9tICcuL3BvcnRhbC1zdGFjayc7XG5cbi8qKlxuICogQSBzZXJ2aWNlIGZvciBvcGVuaW5nIHBvcnRhbCB3aW5kb3dzLlxuICpcbiAqIENyZWF0aW5nIGEgcG9ydGFsIGlzIHN0cmFpZ2h0Zm9yd2FyZDogY3JlYXRlIGEgY29tcG9uZW50IG9yIGEgdGVtcGxhdGUgYW5kIHBhc3MgaXQgYXMgYW4gYXJndW1lbnQgdG9cbiAqIHRoZSBgLm9wZW4oKWAgbWV0aG9kLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEh1YlBvcnRhbCB7XG5cdHByaXZhdGUgX2luamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblx0cHJpdmF0ZSBfcG9ydGFsU3RhY2sgPSBpbmplY3QoSHViUG9ydGFsU3RhY2spO1xuXHRwcml2YXRlIF9jb25maWcgPSBpbmplY3QoSHViUG9ydGFsQ29uZmlnKTtcblxuXHQvKipcblx0ICogT3BlbnMgYSBuZXcgcG9ydGFsIHdpbmRvdyB3aXRoIHRoZSBzcGVjaWZpZWQgY29udGVudCBhbmQgc3VwcGxpZWQgb3B0aW9ucy5cblx0ICpcblx0ICogQ29udGVudCBjYW4gYmUgcHJvdmlkZWQgYXMgYSBgVGVtcGxhdGVSZWZgIG9yIGEgY29tcG9uZW50IHR5cGUuIElmIHlvdSBwYXNzIGEgY29tcG9uZW50IHR5cGUgYXMgY29udGVudCxcblx0ICogdGhlbiBpbnN0YW5jZXMgb2YgdGhvc2UgY29tcG9uZW50cyBjYW4gYmUgaW5qZWN0ZWQgd2l0aCBhbiBpbnN0YW5jZSBvZiB0aGUgYEh1YkFjdGl2ZVBvcnRhbGAgY2xhc3MuIFlvdSBjYW4gdGhlblxuXHQgKiB1c2UgYEh1YkFjdGl2ZVBvcnRhbGAgbWV0aG9kcyB0byBjbG9zZSAvIGRpc21pc3MgcG9ydGFscyBmcm9tIFwiaW5zaWRlXCIgb2YgeW91ciBjb21wb25lbnQuXG5cdCAqXG5cdCAqIEFsc28gc2VlIHRoZSBbYEh1YlBvcnRhbE9wdGlvbnNgXSgjL2NvbXBvbmVudHMvcG9ydGFsL2FwaSNIdWJQb3J0YWxPcHRpb25zKSBmb3IgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIG9wdGlvbnMuXG5cdCAqL1xuXHRvcGVuKGNvbnRlbnQ6IGFueSwgb3B0aW9uczogSHViUG9ydGFsT3B0aW9ucyA9IHt9KTogSHViUG9ydGFsUmVmIHtcblx0XHRjb25zdCBjb21iaW5lZE9wdGlvbnMgPSB7XG5cdFx0XHQuLi50aGlzLl9jb25maWcsXG5cdFx0XHRhbmltYXRpb246IHRoaXMuX2NvbmZpZy5hbmltYXRpb24sXG5cdFx0XHQuLi5vcHRpb25zXG5cdFx0fTtcblx0XHRyZXR1cm4gdGhpcy5fcG9ydGFsU3RhY2sub3Blbih0aGlzLl9pbmplY3RvciwgY29udGVudCwgY29tYmluZWRPcHRpb25zKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgZnVuY3Rpb24gYHRvZ2dsZWAgb3BlbnMgYSBwb3J0YWwgd2l0aCBzcGVjaWZpZWQgY29udGVudCBhbmQgb3B0aW9ucyB3aGlsZSBkaXNtaXNzaW5nIGFueSBleGlzdGluZyBwb3J0YWxzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge2FueX0gY29udGVudCAtIFRoZSBgY29udGVudGAgcGFyYW1ldGVyIGluIHRoZSBgdG9nZ2xlYCBmdW5jdGlvbiBpcyB0aGUgY29udGVudCB0aGF0IHlvdSB3YW50IHRvIGRpc3BsYXkgd2l0aGluIHRoZVxuXHQgKiBwb3J0YWwuIFRoaXMgY2FuIGJlIGFueSB0eXBlIG9mIGNvbnRlbnQgc3VjaCBhcyBhIGNvbXBvbmVudCwgdGVtcGxhdGUsIG9yIGFueSBvdGhlciBIVE1MIGVsZW1lbnQgdGhhdCB5b3Ugd2FudCB0byBzaG93IGluIHRoZVxuXHQgKiBwb3J0YWwuXG5cdCAqIEBwYXJhbSB7SHViUG9ydGFsT3B0aW9uc30gb3B0aW9ucyAtIFRoZSBgb3B0aW9uc2AgcGFyYW1ldGVyIGluIHRoZSBgdG9nZ2xlYCBmdW5jdGlvbiBpcyBhbiBvYmplY3QgdGhhdCBhbGxvd3MgeW91IHRvIGN1c3RvbWl6ZVxuXHQgKiB0aGUgYmVoYXZpb3Igb2YgdGhlIHBvcnRhbC5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIGB0b2dnbGVgIGZ1bmN0aW9uIGlzIHJldHVybmluZyBhIGBIdWJQb3J0YWxSZWZgIG9iamVjdC5cblx0ICovXG5cdHRvZ2dsZShjb250ZW50OiBhbnksIG9wdGlvbnM6IEh1YlBvcnRhbE9wdGlvbnMgPSB7fSk6IEh1YlBvcnRhbFJlZiB7XG5cdFx0Y29uc3QgY29tYmluZWRPcHRpb25zID0ge1xuXHRcdFx0Li4udGhpcy5fY29uZmlnLFxuXHRcdFx0YW5pbWF0aW9uOiB0aGlzLl9jb25maWcuYW5pbWF0aW9uLFxuXHRcdFx0Li4ub3B0aW9uc1xuXHRcdH07XG5cdFx0Ly8gdGhpcy5kaXNtaXNzQWxsKCk7XG5cdFx0Ly8gcmV0dXJuIHRoaXMuX3BvcnRhbFN0YWNrLm9wZW4odGhpcy5faW5qZWN0b3IsIGNvbnRlbnQsIGNvbWJpbmVkT3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXMuX3BvcnRhbFN0YWNrLnRvZ2dsZShcblx0XHRcdHRoaXMuX2luamVjdG9yLFxuXHRcdFx0Y29udGVudCxcblx0XHRcdGNvbWJpbmVkT3B0aW9uc1xuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhbiBvYnNlcnZhYmxlIHRoYXQgaG9sZHMgdGhlIGFjdGl2ZSBwb3J0YWwgaW5zdGFuY2VzLlxuXHQgKi9cblx0Z2V0IGFjdGl2ZUluc3RhbmNlcygpIHtcblx0XHRyZXR1cm4gdGhpcy5fcG9ydGFsU3RhY2suYWN0aXZlSW5zdGFuY2VzO1xuXHR9XG5cblx0LyoqXG5cdCAqIERpc21pc3NlcyBhbGwgY3VycmVudGx5IGRpc3BsYXllZCBwb3J0YWwgd2luZG93cyB3aXRoIHRoZSBzdXBwbGllZCByZWFzb24uXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjEuMFxuXHQgKi9cblx0ZGlzbWlzc0FsbChyZWFzb24/OiBhbnkpIHtcblx0XHR0aGlzLl9wb3J0YWxTdGFjay5kaXNtaXNzQWxsKHJlYXNvbik7XG5cdH1cblxuXHQvKipcblx0ICogSW5kaWNhdGVzIGlmIHRoZXJlIGFyZSBjdXJyZW50bHkgYW55IG9wZW4gcG9ydGFsIHdpbmRvd3MgaW4gdGhlIGFwcGxpY2F0aW9uLlxuXHQgKlxuXHQgKiBAc2luY2UgMy4zLjBcblx0ICovXG5cdGhhc09wZW5Qb3J0YWxzKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9wb3J0YWxTdGFjay5oYXNPcGVuUG9ydGFscygpO1xuXHR9XG59XG4iXX0=