@odx/angular 5.3.3 → 5.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/components/button/lib/models/button-size.d.ts +2 -1
- package/components/notification/README.md +3 -0
- package/components/notification/index.d.ts +7 -0
- package/components/notification/lib/components/index.d.ts +2 -0
- package/components/notification/lib/components/notification-center/notification-center.component.d.ts +19 -0
- package/components/notification/lib/components/notification-item/notification-item.component.d.ts +37 -0
- package/components/notification/lib/directives/index.d.ts +1 -0
- package/components/notification/lib/directives/notification-center.directive.d.ts +69 -0
- package/components/notification/lib/features/index.d.ts +5 -0
- package/components/notification/lib/features/with-browser-notifications.d.ts +17 -0
- package/components/notification/lib/features/with-load-notifications.d.ts +18 -0
- package/components/notification/lib/features/with-notification-transformer.d.ts +26 -0
- package/components/notification/lib/features/with-peristent-notifications.d.ts +63 -0
- package/components/notification/lib/features/with-save-notifications.d.ts +11 -0
- package/components/notification/lib/helpers/get-notifications-by-tag.d.ts +2 -0
- package/components/notification/lib/helpers/index.d.ts +3 -0
- package/components/notification/lib/helpers/sort-notifications.d.ts +3 -0
- package/components/notification/lib/helpers/to-notification-collection.d.ts +3 -0
- package/components/notification/lib/models/index.d.ts +8 -0
- package/components/notification/lib/models/notification-action.d.ts +2 -0
- package/components/notification/lib/models/notification-collection.d.ts +6 -0
- package/components/notification/lib/models/notification-feature.d.ts +5 -0
- package/components/notification/lib/models/notification-options.d.ts +7 -0
- package/components/notification/lib/models/notification-query.d.ts +2 -0
- package/components/notification/lib/models/notification-sort-fn.d.ts +2 -0
- package/components/notification/lib/models/notification.d.ts +6 -0
- package/components/notification/lib/models/notification.ref.d.ts +9 -0
- package/components/notification/lib/notification.config.d.ts +11 -0
- package/components/notification/lib/notification.i18n.d.ts +3 -0
- package/components/notification/lib/notification.logger.d.ts +3 -0
- package/components/notification/lib/notification.service.d.ts +110 -0
- package/components/notification/lib/notification.tokens.d.ts +4 -0
- package/components/notification/lib/services/index.d.ts +1 -0
- package/components/notification/lib/services/notification-center.service.d.ts +69 -0
- package/components/notification/testing/README.md +3 -0
- package/components/notification/testing/index.d.ts +1 -0
- package/components/notification/testing/lib/test-helpers.d.ts +5 -0
- package/components/rich-list/lib/rich-list.component.d.ts +7 -1
- package/components/toast/lib/toast.service.d.ts +30 -2
- package/esm2022/components/button/lib/models/button-size.mjs +2 -1
- package/esm2022/components/notification/index.mjs +8 -0
- package/esm2022/components/notification/lib/components/index.mjs +3 -0
- package/esm2022/components/notification/lib/components/notification-center/notification-center.component.mjs +65 -0
- package/esm2022/components/notification/lib/components/notification-item/notification-item.component.mjs +65 -0
- package/esm2022/components/notification/lib/directives/index.mjs +2 -0
- package/esm2022/components/notification/lib/directives/notification-center.directive.mjs +142 -0
- package/esm2022/components/notification/lib/features/index.mjs +6 -0
- package/esm2022/components/notification/lib/features/with-browser-notifications.mjs +75 -0
- package/esm2022/components/notification/lib/features/with-load-notifications.mjs +45 -0
- package/esm2022/components/notification/lib/features/with-notification-transformer.mjs +34 -0
- package/esm2022/components/notification/lib/features/with-peristent-notifications.mjs +94 -0
- package/esm2022/components/notification/lib/features/with-save-notifications.mjs +45 -0
- package/esm2022/components/notification/lib/helpers/get-notifications-by-tag.mjs +7 -0
- package/esm2022/components/notification/lib/helpers/index.mjs +4 -0
- package/esm2022/components/notification/lib/helpers/sort-notifications.mjs +10 -0
- package/esm2022/components/notification/lib/helpers/to-notification-collection.mjs +9 -0
- package/esm2022/components/notification/lib/models/index.mjs +9 -0
- package/esm2022/components/notification/lib/models/notification-action.mjs +2 -0
- package/esm2022/components/notification/lib/models/notification-collection.mjs +2 -0
- package/esm2022/components/notification/lib/models/notification-feature.mjs +4 -0
- package/esm2022/components/notification/lib/models/notification-options.mjs +2 -0
- package/esm2022/components/notification/lib/models/notification-query.mjs +2 -0
- package/esm2022/components/notification/lib/models/notification-sort-fn.mjs +2 -0
- package/esm2022/components/notification/lib/models/notification.mjs +2 -0
- package/esm2022/components/notification/lib/models/notification.ref.mjs +2 -0
- package/esm2022/components/notification/lib/notification.config.mjs +11 -0
- package/esm2022/components/notification/lib/notification.i18n.mjs +11 -0
- package/esm2022/components/notification/lib/notification.logger.mjs +3 -0
- package/esm2022/components/notification/lib/notification.service.mjs +168 -0
- package/esm2022/components/notification/lib/notification.tokens.mjs +7 -0
- package/esm2022/components/notification/lib/services/index.mjs +2 -0
- package/esm2022/components/notification/lib/services/notification-center.service.mjs +96 -0
- package/esm2022/components/notification/odx-angular-components-notification.mjs +5 -0
- package/esm2022/components/notification/testing/index.mjs +2 -0
- package/esm2022/components/notification/testing/lib/test-helpers.mjs +33 -0
- package/esm2022/components/notification/testing/odx-angular-components-notification-testing.mjs +5 -0
- package/esm2022/components/rich-list/lib/rich-list.component.mjs +18 -6
- package/esm2022/components/toast/lib/components/toast-container/toast-container.component.mjs +6 -6
- package/esm2022/components/toast/lib/toast.service.mjs +38 -8
- package/esm2022/utils/lib/helpers/array.mjs +24 -1
- package/fesm2022/odx-angular-components-button.mjs +1 -0
- package/fesm2022/odx-angular-components-button.mjs.map +1 -1
- package/fesm2022/odx-angular-components-notification-testing.mjs +39 -0
- package/fesm2022/odx-angular-components-notification-testing.mjs.map +1 -0
- package/fesm2022/odx-angular-components-notification.mjs +832 -0
- package/fesm2022/odx-angular-components-notification.mjs.map +1 -0
- package/fesm2022/odx-angular-components-rich-list.mjs +17 -5
- package/fesm2022/odx-angular-components-rich-list.mjs.map +1 -1
- package/fesm2022/odx-angular-components-toast.mjs +42 -11
- package/fesm2022/odx-angular-components-toast.mjs.map +1 -1
- package/fesm2022/odx-angular-utils.mjs +23 -0
- package/fesm2022/odx-angular-utils.mjs.map +1 -1
- package/package.json +13 -1
- package/utils/lib/helpers/array.d.ts +23 -0
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Notification, NotificationCollection, NotificationOptions, NotificationRef } from '@odx/angular/components/notification';
|
|
2
|
+
export declare function mockNotification(props?: Partial<Notification>): Notification;
|
|
3
|
+
export declare function mockNotificationOptions(props?: Partial<NotificationOptions>): NotificationOptions;
|
|
4
|
+
export declare function mockNotificationRef(props?: Partial<NotificationRef>): NotificationRef;
|
|
5
|
+
export declare function mockNotificationCollection(refs: NotificationRef[]): NotificationCollection;
|
|
@@ -2,6 +2,12 @@ import * as i0 from "@angular/core";
|
|
|
2
2
|
import * as i1 from "@odx/angular/cdk/expandable";
|
|
3
3
|
export declare class RichListComponent {
|
|
4
4
|
readonly element: import("@angular/core").ElementRef<HTMLElement>;
|
|
5
|
+
/**
|
|
6
|
+
* @input condensed
|
|
7
|
+
* This rich-list variant sets the vertical padding to 0 for all it's rich-list-items
|
|
8
|
+
*/
|
|
9
|
+
condensed: boolean;
|
|
5
10
|
static ɵfac: i0.ɵɵFactoryDeclaration<RichListComponent, never>;
|
|
6
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<RichListComponent, "odx-rich-list", never, {}, {}, never, ["odx-rich-list-item"], true, [{ directive: typeof i1.ExpandableContainerDirective; inputs: { "multiple": "multiple"; }; outputs: {}; }]>;
|
|
11
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RichListComponent, "odx-rich-list", never, { "condensed": { "alias": "condensed"; "required": false; }; }, {}, never, ["odx-rich-list-item"], true, [{ directive: typeof i1.ExpandableContainerDirective; inputs: { "multiple": "multiple"; }; outputs: {}; }]>;
|
|
12
|
+
static ngAcceptInputType_condensed: unknown;
|
|
7
13
|
}
|
|
@@ -2,15 +2,43 @@ import { Toast, ToastOptions, ToastRef } from './models';
|
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
export declare class ToastService {
|
|
4
4
|
private readonly queue;
|
|
5
|
-
private readonly onRemove$$;
|
|
6
5
|
private readonly defaultOptions;
|
|
6
|
+
readonly toasts$: import("rxjs").Observable<(ToastRef & {
|
|
7
|
+
id: string | number;
|
|
8
|
+
})[]>;
|
|
9
|
+
readonly onUpdate$: import("rxjs").Observable<ToastRef>;
|
|
10
|
+
readonly onToastAdd$: import("rxjs").Observable<ToastRef>;
|
|
11
|
+
readonly onToastUpdate$: import("rxjs").Observable<ToastRef>;
|
|
12
|
+
readonly onToastRemove$: import("rxjs").Observable<ToastRef>;
|
|
13
|
+
/**
|
|
14
|
+
* @deprecated Use `toasts$` instead
|
|
15
|
+
*/
|
|
7
16
|
readonly queue$: import("rxjs").Observable<(ToastRef & {
|
|
8
17
|
id: string | number;
|
|
9
18
|
})[]>;
|
|
19
|
+
/**
|
|
20
|
+
* @deprecated Use `onToastAdd$` instead
|
|
21
|
+
*/
|
|
22
|
+
readonly onAdd$: import("rxjs").Observable<ToastRef>;
|
|
23
|
+
/**
|
|
24
|
+
* @deprecated Use `onToastRemove$` instead
|
|
25
|
+
*/
|
|
10
26
|
readonly onRemove$: import("rxjs").Observable<ToastRef>;
|
|
27
|
+
/**
|
|
28
|
+
* @deprecated Use `create` instead
|
|
29
|
+
*/
|
|
11
30
|
add(item: Toast, options?: Partial<ToastOptions>): ToastRef;
|
|
12
|
-
|
|
31
|
+
create(item: Toast, options?: Partial<ToastOptions>): ToastRef;
|
|
32
|
+
/**
|
|
33
|
+
* @deprecated Use `dismiss` instead
|
|
34
|
+
*/
|
|
35
|
+
remove(refOrId: ToastRef | ToastRef['id']): ToastRef | null;
|
|
36
|
+
dismiss(refOrId: ToastRef | ToastRef['id']): ToastRef | null;
|
|
37
|
+
/**
|
|
38
|
+
* @deprecated Use `dismissAll` instead
|
|
39
|
+
*/
|
|
13
40
|
clear(): void;
|
|
41
|
+
dismissAll(): void;
|
|
14
42
|
static ɵfac: i0.ɵɵFactoryDeclaration<ToastService, never>;
|
|
15
43
|
static ɵprov: i0.ɵɵInjectableDeclaration<ToastService>;
|
|
16
44
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export const ButtonSize = {
|
|
2
2
|
SMALL: 'small',
|
|
3
3
|
MEDIUM: 'medium',
|
|
4
|
+
LARGE: 'large',
|
|
4
5
|
};
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLXNpemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9idXR0b24vc3JjL2xpYi9tb2RlbHMvYnV0dG9uLXNpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLEtBQUssRUFBRSxPQUFPO0lBQ2QsTUFBTSxFQUFFLFFBQVE7SUFDaEIsS0FBSyxFQUFFLE9BQU87Q0FDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgQnV0dG9uU2l6ZSA9ICh0eXBlb2YgQnV0dG9uU2l6ZSlba2V5b2YgdHlwZW9mIEJ1dHRvblNpemVdO1xuXG5leHBvcnQgY29uc3QgQnV0dG9uU2l6ZSA9IHtcbiAgU01BTEw6ICdzbWFsbCcsXG4gIE1FRElVTTogJ21lZGl1bScsXG4gIExBUkdFOiAnbGFyZ2UnLFxufSBhcyBjb25zdDtcbiJdfQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './lib/components';
|
|
2
|
+
export * from './lib/directives';
|
|
3
|
+
export * from './lib/features';
|
|
4
|
+
export * from './lib/models';
|
|
5
|
+
export * from './lib/notification.config';
|
|
6
|
+
export * from './lib/notification.service';
|
|
7
|
+
export * from './lib/notification.tokens';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9ub3RpZmljYXRpb24vc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ZlYXR1cmVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9ub3RpZmljYXRpb24uY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL25vdGlmaWNhdGlvbi50b2tlbnMnO1xuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './notification-center/notification-center.component';
|
|
2
|
+
export * from './notification-item/notification-item.component';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9ub3RpZmljYXRpb24vc3JjL2xpYi9jb21wb25lbnRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscURBQXFELENBQUM7QUFDcEUsY0FBYyxpREFBaUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbm90aWZpY2F0aW9uLWNlbnRlci9ub3RpZmljYXRpb24tY2VudGVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvbi1pdGVtL25vdGlmaWNhdGlvbi1pdGVtLmNvbXBvbmVudCc7XG4iXX0=
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { transition, trigger, useAnimation } from '@angular/animations';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { ChangeDetectionStrategy, Component, ViewEncapsulation, inject } from '@angular/core';
|
|
5
|
+
import { LetDirective } from '@ngrx/component';
|
|
6
|
+
import { collapse } from '@odx/angular/animations';
|
|
7
|
+
import { InteractiveDirective } from '@odx/angular/cdk/a11y';
|
|
8
|
+
import { DynamicViewDirective } from '@odx/angular/cdk/dynamic-view';
|
|
9
|
+
import { ActionGroupComponent } from '@odx/angular/components/action-group';
|
|
10
|
+
import { BadgeDirective } from '@odx/angular/components/badge';
|
|
11
|
+
import { ButtonComponent } from '@odx/angular/components/button';
|
|
12
|
+
import { DropdownModule } from '@odx/angular/components/dropdown';
|
|
13
|
+
import { IconComponent } from '@odx/angular/components/icon';
|
|
14
|
+
import { ListModule } from '@odx/angular/components/list';
|
|
15
|
+
import { CSSComponent } from '@odx/angular/internal';
|
|
16
|
+
import { TranslatePipe, provideTranslations } from '@odx/angular/internal/translate';
|
|
17
|
+
import { injectElement, trackById } from '@odx/angular/utils';
|
|
18
|
+
import notificationI18n from '../../notification.i18n';
|
|
19
|
+
import { NotificationCenterService } from '../../services';
|
|
20
|
+
import { NotificationItemComponent } from '../notification-item/notification-item.component';
|
|
21
|
+
import * as i0 from "@angular/core";
|
|
22
|
+
import * as i1 from "@angular/common";
|
|
23
|
+
import * as i2 from "@odx/angular";
|
|
24
|
+
import * as i3 from "@odx/angular/components/list";
|
|
25
|
+
/**
|
|
26
|
+
* A component for displaying and managing a list of notifications. It integrates various sub-components and directives to provide a rich user interface for notification interaction. Supports animations for notification transitions and leverages Angular's change detection strategies for performance.
|
|
27
|
+
*
|
|
28
|
+
* @CSSComponent 'notification-center' - Specifies the CSS class for styling the notification center component.
|
|
29
|
+
*/
|
|
30
|
+
export let NotificationCenterComponent = class NotificationCenterComponent {
|
|
31
|
+
constructor() {
|
|
32
|
+
this.notificationCenterService = inject(NotificationCenterService);
|
|
33
|
+
this.trackById = trackById;
|
|
34
|
+
this.element = injectElement();
|
|
35
|
+
}
|
|
36
|
+
ngOnDestroy() {
|
|
37
|
+
this.notificationCenterService.markAllAsSeen();
|
|
38
|
+
}
|
|
39
|
+
isMuted({ options, hasBeenSeen }) {
|
|
40
|
+
return hasBeenSeen && !options.action;
|
|
41
|
+
}
|
|
42
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NotificationCenterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
43
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NotificationCenterComponent, isStandalone: true, selector: "odx-notification-center", providers: [provideTranslations(notificationI18n)], ngImport: i0, template: "<ng-template [ngIf]=\"notificationCenterService.notifications$ | async\" let-notifications>\n <h3 class=\"odx-notification-center__header\" *ngrxLet=\"notificationCenterService.title$ | async as title\">\n <ng-template [odxDynamicView]=\"title ?? ('title' | odxTranslate | async)\"></ng-template>\n </h3>\n <odx-list class=\"odx-notification-center__content\">\n <odx-list-item\n @notificationAnimation\n [muted]=\"isMuted(notification)\"\n [selected]=\"!notification.hasBeenSeen\"\n (click)=\"notificationCenterService.executeAction(notification)\"\n *ngFor=\"let notification of notifications.values; trackBy: trackById\"\n >\n <odx-notification-item [notification]=\"notification\" (dismiss)=\"notificationCenterService.dismiss(notification)\" />\n </odx-list-item>\n </odx-list>\n <div class=\"odx-notification-center__footer\">\n <button odxButton [disabled]=\"false\" (click)=\"notificationCenterService.dismissAll()\">\n {{ 'dismissAll' | odxTranslate | async }}\n </button>\n </div>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "directive", type: LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "component", type: ButtonComponent, selector: "button[odxButton], a[odxButton]", inputs: ["variant", "size"] }, { kind: "directive", type: DynamicViewDirective, selector: "ng-template[odxDynamicView]", inputs: ["odxDynamicView", "odxDynamicViewInjector", "odxDynamicViewContext"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "directive", type: i2.DisabledController, selector: "[disabled]", inputs: ["disabled"] }, { kind: "pipe", type: TranslatePipe, name: "odxTranslate" }, { kind: "component", type: NotificationItemComponent, selector: "odx-notification-item", inputs: ["notification"], outputs: ["dismiss"] }, { kind: "ngmodule", type: ListModule }, { kind: "component", type: i3.ListComponent, selector: "odx-list" }, { kind: "component", type: i3.ListItemComponent, selector: "odx-list-item, [odxListItem]", inputs: ["danger", "muted", "selected"] }], animations: [trigger('notificationAnimation', [transition(':leave', useAnimation(collapse, { delay: 150 }))])], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
44
|
+
};
|
|
45
|
+
NotificationCenterComponent = __decorate([
|
|
46
|
+
CSSComponent('notification-center')
|
|
47
|
+
], NotificationCenterComponent);
|
|
48
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NotificationCenterComponent, decorators: [{
|
|
49
|
+
type: Component,
|
|
50
|
+
args: [{ selector: 'odx-notification-center', standalone: true, imports: [
|
|
51
|
+
CommonModule,
|
|
52
|
+
LetDirective,
|
|
53
|
+
ActionGroupComponent,
|
|
54
|
+
BadgeDirective,
|
|
55
|
+
ButtonComponent,
|
|
56
|
+
DynamicViewDirective,
|
|
57
|
+
IconComponent,
|
|
58
|
+
DropdownModule,
|
|
59
|
+
TranslatePipe,
|
|
60
|
+
NotificationItemComponent,
|
|
61
|
+
InteractiveDirective,
|
|
62
|
+
ListModule,
|
|
63
|
+
], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [provideTranslations(notificationI18n)], animations: [trigger('notificationAnimation', [transition(':leave', useAnimation(collapse, { delay: 150 }))])], template: "<ng-template [ngIf]=\"notificationCenterService.notifications$ | async\" let-notifications>\n <h3 class=\"odx-notification-center__header\" *ngrxLet=\"notificationCenterService.title$ | async as title\">\n <ng-template [odxDynamicView]=\"title ?? ('title' | odxTranslate | async)\"></ng-template>\n </h3>\n <odx-list class=\"odx-notification-center__content\">\n <odx-list-item\n @notificationAnimation\n [muted]=\"isMuted(notification)\"\n [selected]=\"!notification.hasBeenSeen\"\n (click)=\"notificationCenterService.executeAction(notification)\"\n *ngFor=\"let notification of notifications.values; trackBy: trackById\"\n >\n <odx-notification-item [notification]=\"notification\" (dismiss)=\"notificationCenterService.dismiss(notification)\" />\n </odx-list-item>\n </odx-list>\n <div class=\"odx-notification-center__footer\">\n <button odxButton [disabled]=\"false\" (click)=\"notificationCenterService.dismissAll()\">\n {{ 'dismissAll' | odxTranslate | async }}\n </button>\n </div>\n</ng-template>\n" }]
|
|
64
|
+
}] });
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLWNlbnRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9ub3RpZmljYXRpb24vc3JjL2xpYi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi1jZW50ZXIvbm90aWZpY2F0aW9uLWNlbnRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9ub3RpZmljYXRpb24vc3JjL2xpYi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi1jZW50ZXIvbm90aWZpY2F0aW9uLWNlbnRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQWEsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDckUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUQsT0FBTyxnQkFBZ0IsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQzs7Ozs7QUFFN0Y7Ozs7R0FJRztBQXlCSSxXQUFNLDJCQUEyQixHQUFqQyxNQUFNLDJCQUEyQjtJQUFqQztRQUNjLDhCQUF5QixHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzlELGNBQVMsR0FBRyxTQUFTLENBQUM7UUFFekIsWUFBTyxHQUFHLGFBQWEsRUFBRSxDQUFDO0tBUzNDO0lBUFEsV0FBVztRQUNoQixJQUFJLENBQUMseUJBQXlCLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDakQsQ0FBQztJQUVTLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQW1CO1FBQ3pELE9BQU8sV0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUN4QyxDQUFDOytHQVpVLDJCQUEyQjttR0FBM0IsMkJBQTJCLHNFQUgzQixDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLENBQUMsMEJDL0NwRCw2aUNBcUJBLDJDRFVJLFlBQVkscVRBQ1osWUFBWSxpR0FHWixlQUFlLHlHQUNmLG9CQUFvQixzSkFFcEIsY0FBYyw0SEFDZCxhQUFhLHFEQUNiLHlCQUF5QixpSEFFekIsVUFBVSw0TkFNQSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUVuRywyQkFBMkI7SUF4QnZDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQztHQXdCdkIsMkJBQTJCLENBYXZDOzRGQWJZLDJCQUEyQjtrQkF2QnZDLFNBQVM7K0JBQ0UseUJBQXlCLGNBQ3ZCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFlBQVk7d0JBQ1osb0JBQW9CO3dCQUNwQixjQUFjO3dCQUNkLGVBQWU7d0JBQ2Ysb0JBQW9CO3dCQUNwQixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYix5QkFBeUI7d0JBQ3pCLG9CQUFvQjt3QkFDcEIsVUFBVTtxQkFDWCxpQkFFYyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxjQUN0QyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHJhbnNpdGlvbiwgdHJpZ2dlciwgdXNlQW5pbWF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25EZXN0cm95LCBWaWV3RW5jYXBzdWxhdGlvbiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMZXREaXJlY3RpdmUgfSBmcm9tICdAbmdyeC9jb21wb25lbnQnO1xuaW1wb3J0IHsgY29sbGFwc2UgfSBmcm9tICdAb2R4L2FuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBJbnRlcmFjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJ0BvZHgvYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBEeW5hbWljVmlld0RpcmVjdGl2ZSB9IGZyb20gJ0BvZHgvYW5ndWxhci9jZGsvZHluYW1pYy12aWV3JztcbmltcG9ydCB7IEFjdGlvbkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvYWN0aW9uLWdyb3VwJztcbmltcG9ydCB7IEJhZGdlRGlyZWN0aXZlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvYmFkZ2UnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IERyb3Bkb3duTW9kdWxlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvZHJvcGRvd24nO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2ljb24nO1xuaW1wb3J0IHsgTGlzdE1vZHVsZSB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2xpc3QnO1xuaW1wb3J0IHsgQ1NTQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2ludGVybmFsJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUsIHByb3ZpZGVUcmFuc2xhdGlvbnMgfSBmcm9tICdAb2R4L2FuZ3VsYXIvaW50ZXJuYWwvdHJhbnNsYXRlJztcbmltcG9ydCB7IGluamVjdEVsZW1lbnQsIHRyYWNrQnlJZCB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25SZWYgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IG5vdGlmaWNhdGlvbkkxOG4gZnJvbSAnLi4vLi4vbm90aWZpY2F0aW9uLmkxOG4nO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uQ2VudGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9ub3RpZmljYXRpb24taXRlbS9ub3RpZmljYXRpb24taXRlbS5jb21wb25lbnQnO1xuXG4vKipcbiAqIEEgY29tcG9uZW50IGZvciBkaXNwbGF5aW5nIGFuZCBtYW5hZ2luZyBhIGxpc3Qgb2Ygbm90aWZpY2F0aW9ucy4gSXQgaW50ZWdyYXRlcyB2YXJpb3VzIHN1Yi1jb21wb25lbnRzIGFuZCBkaXJlY3RpdmVzIHRvIHByb3ZpZGUgYSByaWNoIHVzZXIgaW50ZXJmYWNlIGZvciBub3RpZmljYXRpb24gaW50ZXJhY3Rpb24uIFN1cHBvcnRzIGFuaW1hdGlvbnMgZm9yIG5vdGlmaWNhdGlvbiB0cmFuc2l0aW9ucyBhbmQgbGV2ZXJhZ2VzIEFuZ3VsYXIncyBjaGFuZ2UgZGV0ZWN0aW9uIHN0cmF0ZWdpZXMgZm9yIHBlcmZvcm1hbmNlLlxuICpcbiAqIEBDU1NDb21wb25lbnQgJ25vdGlmaWNhdGlvbi1jZW50ZXInIC0gU3BlY2lmaWVzIHRoZSBDU1MgY2xhc3MgZm9yIHN0eWxpbmcgdGhlIG5vdGlmaWNhdGlvbiBjZW50ZXIgY29tcG9uZW50LlxuICovXG5AQ1NTQ29tcG9uZW50KCdub3RpZmljYXRpb24tY2VudGVyJylcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ29keC1ub3RpZmljYXRpb24tY2VudGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBMZXREaXJlY3RpdmUsXG4gICAgQWN0aW9uR3JvdXBDb21wb25lbnQsXG4gICAgQmFkZ2VEaXJlY3RpdmUsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIER5bmFtaWNWaWV3RGlyZWN0aXZlLFxuICAgIEljb25Db21wb25lbnQsXG4gICAgRHJvcGRvd25Nb2R1bGUsXG4gICAgVHJhbnNsYXRlUGlwZSxcbiAgICBOb3RpZmljYXRpb25JdGVtQ29tcG9uZW50LFxuICAgIEludGVyYWN0aXZlRGlyZWN0aXZlLFxuICAgIExpc3RNb2R1bGUsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9ub3RpZmljYXRpb24tY2VudGVyLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW3Byb3ZpZGVUcmFuc2xhdGlvbnMobm90aWZpY2F0aW9uSTE4bildLFxuICBhbmltYXRpb25zOiBbdHJpZ2dlcignbm90aWZpY2F0aW9uQW5pbWF0aW9uJywgW3RyYW5zaXRpb24oJzpsZWF2ZScsIHVzZUFuaW1hdGlvbihjb2xsYXBzZSwgeyBkZWxheTogMTUwIH0pKV0pXSxcbn0pXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uQ2VudGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG5vdGlmaWNhdGlvbkNlbnRlclNlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uQ2VudGVyU2VydmljZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSB0cmFja0J5SWQgPSB0cmFja0J5SWQ7XG5cbiAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnQgPSBpbmplY3RFbGVtZW50KCk7XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubm90aWZpY2F0aW9uQ2VudGVyU2VydmljZS5tYXJrQWxsQXNTZWVuKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNNdXRlZCh7IG9wdGlvbnMsIGhhc0JlZW5TZWVuIH06IE5vdGlmaWNhdGlvblJlZik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBoYXNCZWVuU2VlbiAmJiAhb3B0aW9ucy5hY3Rpb247XG4gIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBbbmdJZl09XCJub3RpZmljYXRpb25DZW50ZXJTZXJ2aWNlLm5vdGlmaWNhdGlvbnMkIHwgYXN5bmNcIiBsZXQtbm90aWZpY2F0aW9ucz5cbiAgPGgzIGNsYXNzPVwib2R4LW5vdGlmaWNhdGlvbi1jZW50ZXJfX2hlYWRlclwiICpuZ3J4TGV0PVwibm90aWZpY2F0aW9uQ2VudGVyU2VydmljZS50aXRsZSQgfCBhc3luYyBhcyB0aXRsZVwiPlxuICAgIDxuZy10ZW1wbGF0ZSBbb2R4RHluYW1pY1ZpZXddPVwidGl0bGUgPz8gKCd0aXRsZScgfCBvZHhUcmFuc2xhdGUgfCBhc3luYylcIj48L25nLXRlbXBsYXRlPlxuICA8L2gzPlxuICA8b2R4LWxpc3QgY2xhc3M9XCJvZHgtbm90aWZpY2F0aW9uLWNlbnRlcl9fY29udGVudFwiPlxuICAgIDxvZHgtbGlzdC1pdGVtXG4gICAgICBAbm90aWZpY2F0aW9uQW5pbWF0aW9uXG4gICAgICBbbXV0ZWRdPVwiaXNNdXRlZChub3RpZmljYXRpb24pXCJcbiAgICAgIFtzZWxlY3RlZF09XCIhbm90aWZpY2F0aW9uLmhhc0JlZW5TZWVuXCJcbiAgICAgIChjbGljayk9XCJub3RpZmljYXRpb25DZW50ZXJTZXJ2aWNlLmV4ZWN1dGVBY3Rpb24obm90aWZpY2F0aW9uKVwiXG4gICAgICAqbmdGb3I9XCJsZXQgbm90aWZpY2F0aW9uIG9mIG5vdGlmaWNhdGlvbnMudmFsdWVzOyB0cmFja0J5OiB0cmFja0J5SWRcIlxuICAgID5cbiAgICAgIDxvZHgtbm90aWZpY2F0aW9uLWl0ZW0gW25vdGlmaWNhdGlvbl09XCJub3RpZmljYXRpb25cIiAoZGlzbWlzcyk9XCJub3RpZmljYXRpb25DZW50ZXJTZXJ2aWNlLmRpc21pc3Mobm90aWZpY2F0aW9uKVwiIC8+XG4gICAgPC9vZHgtbGlzdC1pdGVtPlxuICA8L29keC1saXN0PlxuICA8ZGl2IGNsYXNzPVwib2R4LW5vdGlmaWNhdGlvbi1jZW50ZXJfX2Zvb3RlclwiPlxuICAgIDxidXR0b24gb2R4QnV0dG9uIFtkaXNhYmxlZF09XCJmYWxzZVwiIChjbGljayk9XCJub3RpZmljYXRpb25DZW50ZXJTZXJ2aWNlLmRpc21pc3NBbGwoKVwiPlxuICAgICAge3sgJ2Rpc21pc3NBbGwnIHwgb2R4VHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';
|
|
4
|
+
import { DynamicViewDirective } from '@odx/angular/cdk/dynamic-view';
|
|
5
|
+
import { ActionGroupComponent } from '@odx/angular/components/action-group';
|
|
6
|
+
import { AvatarComponent } from '@odx/angular/components/avatar';
|
|
7
|
+
import { ButtonComponent } from '@odx/angular/components/button';
|
|
8
|
+
import { IconComponent } from '@odx/angular/components/icon';
|
|
9
|
+
import { CSSComponent } from '@odx/angular/internal';
|
|
10
|
+
import { injectElement } from '@odx/angular/utils';
|
|
11
|
+
import { of } from 'rxjs';
|
|
12
|
+
import { injectNotificationTransform } from '../../features';
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
import * as i1 from "@angular/common";
|
|
15
|
+
/**
|
|
16
|
+
* A component for displaying notifications.
|
|
17
|
+
* Supports customization through dynamic transformation of notification data.
|
|
18
|
+
* Utilizes the OnPush change detection strategy for better performance in large applications.
|
|
19
|
+
*
|
|
20
|
+
* @component
|
|
21
|
+
*/
|
|
22
|
+
export let NotificationItemComponent = class NotificationItemComponent {
|
|
23
|
+
constructor() {
|
|
24
|
+
this.transformNotification = injectNotificationTransform();
|
|
25
|
+
this.element = injectElement();
|
|
26
|
+
/**
|
|
27
|
+
* An event emitter for dismissing the notification.
|
|
28
|
+
* It emits the notification reference that was dismissed.
|
|
29
|
+
*/
|
|
30
|
+
this.dismiss = new EventEmitter();
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Input property to set the notification. On setting, it transforms the notification for display.
|
|
34
|
+
* This transformation can be a custom logic provided through dependency injection.
|
|
35
|
+
*
|
|
36
|
+
* @param value NotificationRef - The notification object to be displayed.
|
|
37
|
+
*/
|
|
38
|
+
set notification(value) {
|
|
39
|
+
this._notificationRef = value;
|
|
40
|
+
this.transformedNotification = this.transformNotification?.(value) ?? of(value);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Getter for the notification property.
|
|
44
|
+
*
|
|
45
|
+
* @returns NotificationRef - The current notification reference stored in the component.
|
|
46
|
+
*/
|
|
47
|
+
get notification() {
|
|
48
|
+
return this._notificationRef;
|
|
49
|
+
}
|
|
50
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NotificationItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
51
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NotificationItemComponent, isStandalone: true, selector: "odx-notification-item", inputs: { notification: "notification" }, outputs: { dismiss: "dismiss" }, ngImport: i0, template: "<ng-template [ngIf]=\"transformedNotification | async\" let-ref>\n <odx-avatar class=\"odx-notification-item__avatar odx-no-margin\">\n <odx-icon [identifier]=\"ref.options.icon\" />\n </odx-avatar>\n <div class=\"odx-notification-item__title\">\n <ng-template [odxDynamicView]=\"ref.item.title\" />\n </div>\n <div class=\"odx-notification-item__description\" *ngIf=\"ref.item.description as description\">\n <ng-template [odxDynamicView]=\"ref.item.description\" />\n </div>\n</ng-template>\n<odx-action-group class=\"odx-notification-item__actions odx-no-margin\">\n <button odxButton class=\"odx-no-margin\" (click)=\"dismiss.next(notification)\" *ngIf=\"notification.options.dismissable\">\n <odx-icon name=\"close\" iconSet=\"core\"></odx-icon>\n </button>\n</odx-action-group>\n", dependencies: [{ kind: "component", type: AvatarComponent, selector: "odx-avatar", inputs: ["size", "variant"] }, { kind: "component", type: ActionGroupComponent, selector: "odx-action-group", inputs: ["reverse"] }, { kind: "component", type: ButtonComponent, selector: "button[odxButton], a[odxButton]", inputs: ["variant", "size"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "directive", type: DynamicViewDirective, selector: "ng-template[odxDynamicView]", inputs: ["odxDynamicView", "odxDynamicViewInjector", "odxDynamicViewContext"] }, { kind: "component", type: IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet", "identifier"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
52
|
+
};
|
|
53
|
+
NotificationItemComponent = __decorate([
|
|
54
|
+
CSSComponent('notification-item')
|
|
55
|
+
], NotificationItemComponent);
|
|
56
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NotificationItemComponent, decorators: [{
|
|
57
|
+
type: Component,
|
|
58
|
+
args: [{ selector: 'odx-notification-item', standalone: true, imports: [AvatarComponent, ActionGroupComponent, ButtonComponent, CommonModule, DynamicViewDirective, IconComponent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template [ngIf]=\"transformedNotification | async\" let-ref>\n <odx-avatar class=\"odx-notification-item__avatar odx-no-margin\">\n <odx-icon [identifier]=\"ref.options.icon\" />\n </odx-avatar>\n <div class=\"odx-notification-item__title\">\n <ng-template [odxDynamicView]=\"ref.item.title\" />\n </div>\n <div class=\"odx-notification-item__description\" *ngIf=\"ref.item.description as description\">\n <ng-template [odxDynamicView]=\"ref.item.description\" />\n </div>\n</ng-template>\n<odx-action-group class=\"odx-notification-item__actions odx-no-margin\">\n <button odxButton class=\"odx-no-margin\" (click)=\"dismiss.next(notification)\" *ngIf=\"notification.options.dismissable\">\n <odx-icon name=\"close\" iconSet=\"core\"></odx-icon>\n </button>\n</odx-action-group>\n" }]
|
|
59
|
+
}], propDecorators: { notification: [{
|
|
60
|
+
type: Input,
|
|
61
|
+
args: [{ required: true }]
|
|
62
|
+
}], dismiss: [{
|
|
63
|
+
type: Output
|
|
64
|
+
}] } });
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL3NyYy9saWIvY29tcG9uZW50cy9ub3RpZmljYXRpb24taXRlbS9ub3RpZmljYXRpb24taXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9ub3RpZmljYXRpb24vc3JjL2xpYi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi1pdGVtL25vdGlmaWNhdGlvbi1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuSCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUc3RDs7Ozs7O0dBTUc7QUFVSSxXQUFNLHlCQUF5QixHQUEvQixNQUFNLHlCQUF5QjtJQUEvQjtRQUNZLDBCQUFxQixHQUFHLDJCQUEyQixFQUFFLENBQUM7UUFLdkQsWUFBTyxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBdUIxQzs7O1dBR0c7UUFFSSxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7S0FDdEQ7SUEzQkM7Ozs7O09BS0c7SUFDSCxJQUNXLFlBQVksQ0FBQyxLQUFzQjtRQUM1QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQzsrR0EzQlUseUJBQXlCO21HQUF6Qix5QkFBeUIsNEpDN0J0Qyx1eUJBZ0JBLDRDRFFZLGVBQWUsb0ZBQUUsb0JBQW9CLGtGQUFFLGVBQWUsd0dBQUUsWUFBWSx3TEFBRSxvQkFBb0IsdUpBQUUsYUFBYTs7QUFLeEcseUJBQXlCO0lBVHJDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztHQVNyQix5QkFBeUIsQ0FtQ3JDOzRGQW5DWSx5QkFBeUI7a0JBUnJDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksV0FDUCxDQUFDLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLGFBQWEsQ0FBQyxpQkFFckcsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTTs4QkFpQnBDLFlBQVk7c0JBRHRCLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQW9CbEIsT0FBTztzQkFEYixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IER5bmFtaWNWaWV3RGlyZWN0aXZlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2Nkay9keW5hbWljLXZpZXcnO1xuaW1wb3J0IHsgQWN0aW9uR3JvdXBDb21wb25lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9hY3Rpb24tZ3JvdXAnO1xuaW1wb3J0IHsgQXZhdGFyQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvYXZhdGFyJztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvaWNvbic7XG5pbXBvcnQgeyBDU1NDb21wb25lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvaW50ZXJuYWwnO1xuaW1wb3J0IHsgaW5qZWN0RWxlbWVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaW5qZWN0Tm90aWZpY2F0aW9uVHJhbnNmb3JtIH0gZnJvbSAnLi4vLi4vZmVhdHVyZXMnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uUmVmIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcblxuLyoqXG4gKiBBIGNvbXBvbmVudCBmb3IgZGlzcGxheWluZyBub3RpZmljYXRpb25zLlxuICogU3VwcG9ydHMgY3VzdG9taXphdGlvbiB0aHJvdWdoIGR5bmFtaWMgdHJhbnNmb3JtYXRpb24gb2Ygbm90aWZpY2F0aW9uIGRhdGEuXG4gKiBVdGlsaXplcyB0aGUgT25QdXNoIGNoYW5nZSBkZXRlY3Rpb24gc3RyYXRlZ3kgZm9yIGJldHRlciBwZXJmb3JtYW5jZSBpbiBsYXJnZSBhcHBsaWNhdGlvbnMuXG4gKlxuICogQGNvbXBvbmVudFxuICovXG5AQ1NTQ29tcG9uZW50KCdub3RpZmljYXRpb24taXRlbScpXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvZHgtbm90aWZpY2F0aW9uLWl0ZW0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQXZhdGFyQ29tcG9uZW50LCBBY3Rpb25Hcm91cENvbXBvbmVudCwgQnV0dG9uQ29tcG9uZW50LCBDb21tb25Nb2R1bGUsIER5bmFtaWNWaWV3RGlyZWN0aXZlLCBJY29uQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL25vdGlmaWNhdGlvbi1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvbkl0ZW1Db21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zZm9ybU5vdGlmaWNhdGlvbiA9IGluamVjdE5vdGlmaWNhdGlvblRyYW5zZm9ybSgpO1xuICBwcml2YXRlIF9ub3RpZmljYXRpb25SZWYhOiBOb3RpZmljYXRpb25SZWY7XG5cbiAgcHJvdGVjdGVkIHRyYW5zZm9ybWVkTm90aWZpY2F0aW9uITogT2JzZXJ2YWJsZTxOb3RpZmljYXRpb25SZWY+O1xuXG4gIHB1YmxpYyByZWFkb25seSBlbGVtZW50ID0gaW5qZWN0RWxlbWVudCgpO1xuXG4gIC8qKlxuICAgKiBJbnB1dCBwcm9wZXJ0eSB0byBzZXQgdGhlIG5vdGlmaWNhdGlvbi4gT24gc2V0dGluZywgaXQgdHJhbnNmb3JtcyB0aGUgbm90aWZpY2F0aW9uIGZvciBkaXNwbGF5LlxuICAgKiBUaGlzIHRyYW5zZm9ybWF0aW9uIGNhbiBiZSBhIGN1c3RvbSBsb2dpYyBwcm92aWRlZCB0aHJvdWdoIGRlcGVuZGVuY3kgaW5qZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgTm90aWZpY2F0aW9uUmVmIC0gVGhlIG5vdGlmaWNhdGlvbiBvYmplY3QgdG8gYmUgZGlzcGxheWVkLlxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgcHVibGljIHNldCBub3RpZmljYXRpb24odmFsdWU6IE5vdGlmaWNhdGlvblJlZikge1xuICAgIHRoaXMuX25vdGlmaWNhdGlvblJlZiA9IHZhbHVlO1xuICAgIHRoaXMudHJhbnNmb3JtZWROb3RpZmljYXRpb24gPSB0aGlzLnRyYW5zZm9ybU5vdGlmaWNhdGlvbj8uKHZhbHVlKSA/PyBvZih2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0dGVyIGZvciB0aGUgbm90aWZpY2F0aW9uIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcmV0dXJucyBOb3RpZmljYXRpb25SZWYgLSBUaGUgY3VycmVudCBub3RpZmljYXRpb24gcmVmZXJlbmNlIHN0b3JlZCBpbiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIGdldCBub3RpZmljYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX25vdGlmaWNhdGlvblJlZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBldmVudCBlbWl0dGVyIGZvciBkaXNtaXNzaW5nIHRoZSBub3RpZmljYXRpb24uXG4gICAqIEl0IGVtaXRzIHRoZSBub3RpZmljYXRpb24gcmVmZXJlbmNlIHRoYXQgd2FzIGRpc21pc3NlZC5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgZGlzbWlzcyA9IG5ldyBFdmVudEVtaXR0ZXI8Tm90aWZpY2F0aW9uUmVmPigpO1xufVxuIiwiPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInRyYW5zZm9ybWVkTm90aWZpY2F0aW9uIHwgYXN5bmNcIiBsZXQtcmVmPlxuICA8b2R4LWF2YXRhciBjbGFzcz1cIm9keC1ub3RpZmljYXRpb24taXRlbV9fYXZhdGFyIG9keC1uby1tYXJnaW5cIj5cbiAgICA8b2R4LWljb24gW2lkZW50aWZpZXJdPVwicmVmLm9wdGlvbnMuaWNvblwiIC8+XG4gIDwvb2R4LWF2YXRhcj5cbiAgPGRpdiBjbGFzcz1cIm9keC1ub3RpZmljYXRpb24taXRlbV9fdGl0bGVcIj5cbiAgICA8bmctdGVtcGxhdGUgW29keER5bmFtaWNWaWV3XT1cInJlZi5pdGVtLnRpdGxlXCIgLz5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJvZHgtbm90aWZpY2F0aW9uLWl0ZW1fX2Rlc2NyaXB0aW9uXCIgKm5nSWY9XCJyZWYuaXRlbS5kZXNjcmlwdGlvbiBhcyBkZXNjcmlwdGlvblwiPlxuICAgIDxuZy10ZW1wbGF0ZSBbb2R4RHluYW1pY1ZpZXddPVwicmVmLml0ZW0uZGVzY3JpcHRpb25cIiAvPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48b2R4LWFjdGlvbi1ncm91cCBjbGFzcz1cIm9keC1ub3RpZmljYXRpb24taXRlbV9fYWN0aW9ucyBvZHgtbm8tbWFyZ2luXCI+XG4gIDxidXR0b24gb2R4QnV0dG9uIGNsYXNzPVwib2R4LW5vLW1hcmdpblwiIChjbGljayk9XCJkaXNtaXNzLm5leHQobm90aWZpY2F0aW9uKVwiICpuZ0lmPVwibm90aWZpY2F0aW9uLm9wdGlvbnMuZGlzbWlzc2FibGVcIj5cbiAgICA8b2R4LWljb24gbmFtZT1cImNsb3NlXCIgaWNvblNldD1cImNvcmVcIj48L29keC1pY29uPlxuICA8L2J1dHRvbj5cbjwvb2R4LWFjdGlvbi1ncm91cD5cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './notification-center.directive';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9ub3RpZmljYXRpb24vc3JjL2xpYi9kaXJlY3RpdmVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsaUNBQWlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvbi1jZW50ZXIuZGlyZWN0aXZlJztcbiJdfQ==
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { DestroyRef, Directive, Input, Output, inject } from '@angular/core';
|
|
2
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
3
|
+
import { DisabledController } from '@odx/angular';
|
|
4
|
+
import { BadgeDirective } from '@odx/angular/components/badge';
|
|
5
|
+
import { DropdownDirective } from '@odx/angular/components/dropdown';
|
|
6
|
+
import { Position } from '@odx/angular/utils';
|
|
7
|
+
import { map, merge, startWith, switchMap, tap } from 'rxjs';
|
|
8
|
+
import { NotificationCenterComponent } from '../components';
|
|
9
|
+
import { NotificationCenterService } from '../services';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "@odx/angular/components/badge";
|
|
12
|
+
import * as i2 from "@odx/angular/components/dropdown";
|
|
13
|
+
/**
|
|
14
|
+
* A directive that provides an interface for managing notifications.
|
|
15
|
+
* It allows configuring a notification center with dynamic content, sorting, and badge display functionalities.
|
|
16
|
+
*/
|
|
17
|
+
export class NotificationCenterDirective {
|
|
18
|
+
constructor() {
|
|
19
|
+
this.badgeDirective = inject(BadgeDirective, { self: true });
|
|
20
|
+
this.destroyRef = inject(DestroyRef);
|
|
21
|
+
this.disabledController = DisabledController.inject();
|
|
22
|
+
this.dropdownDirective = inject(DropdownDirective, { self: true });
|
|
23
|
+
this.notificationCenterService = inject(NotificationCenterService, { self: true });
|
|
24
|
+
this.dropdownStateChange$ = merge(this.dropdownDirective.beforeOpen, this.dropdownDirective.beforeClose).pipe(startWith(void 0));
|
|
25
|
+
this.badgeValue$ = this.notificationCenterService.unseenNotifications$.pipe(switchMap(({ count }) => this.dropdownStateChange$.pipe(map(() => this.formatBadgeValue(count)))));
|
|
26
|
+
/**
|
|
27
|
+
* An event that is emitted when a new notification is added.
|
|
28
|
+
* Listeners can use this event to react to new notifications being added to the notification center.
|
|
29
|
+
*/
|
|
30
|
+
// eslint-disable-next-line @angular-eslint/no-output-rename
|
|
31
|
+
this.notificationAdd = this.notificationCenterService.onNotificationAdd$;
|
|
32
|
+
/**
|
|
33
|
+
* An event that is emitted when a notification is updated.
|
|
34
|
+
* This can be used to react to changes in notifications, such as their read status or content updates.
|
|
35
|
+
*/
|
|
36
|
+
// eslint-disable-next-line @angular-eslint/no-output-rename
|
|
37
|
+
this.notificationUpdate = this.notificationCenterService.onNotificationUpdate$;
|
|
38
|
+
/**
|
|
39
|
+
* An event that is emitted when a notification is removed from the notification center.
|
|
40
|
+
* Use this event to handle the removal of notifications, such as cleaning up resources or updating UI elements.
|
|
41
|
+
*/
|
|
42
|
+
// eslint-disable-next-line @angular-eslint/no-output-rename
|
|
43
|
+
this.notificationRemove = this.notificationCenterService.onNotificationRemove$;
|
|
44
|
+
/**
|
|
45
|
+
* An event that is emitted when a notification is marked as seen.
|
|
46
|
+
* This event can be used to perform actions when the user acknowledges a notification.
|
|
47
|
+
*/
|
|
48
|
+
// eslint-disable-next-line @angular-eslint/no-output-rename
|
|
49
|
+
this.notificationSeen = this.notificationCenterService.onNotificationSeen$;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Sets the tag for filtering notifications. Only notifications with this tag will be shown in the notification center.
|
|
53
|
+
* @param value The tag value to filter notifications. If null, all notifications are shown.
|
|
54
|
+
*/
|
|
55
|
+
set tag(value) {
|
|
56
|
+
this.notificationCenterService.setTag(value);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Sets the title of the notification center. The title can be dynamic and change based on the application state.
|
|
60
|
+
* @param value The title content, which can be a string or an Observable returning a string. Allows for dynamic titles.
|
|
61
|
+
*/
|
|
62
|
+
set title(value) {
|
|
63
|
+
this.notificationCenterService.setTitle(value);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Sets the sorting function used to order notifications within the notification center.
|
|
67
|
+
* @param value A function that compares two notifications and returns the sort order.
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* sortFfn = (a: NotificationRef, b: NotificationRef) => {
|
|
71
|
+
if (a.createdAt < b.createdAt) return -1;
|
|
72
|
+
if (a.createdAt > b.createdAt) return 1;
|
|
73
|
+
return 0;
|
|
74
|
+
};
|
|
75
|
+
*/
|
|
76
|
+
set sortFn(value) {
|
|
77
|
+
this.notificationCenterService.setSortFn(value);
|
|
78
|
+
}
|
|
79
|
+
ngOnInit() {
|
|
80
|
+
this.badgeDirective.position = Position.BOTTOM;
|
|
81
|
+
this.badgeDirective.offset = 6;
|
|
82
|
+
this.dropdownDirective.content = NotificationCenterComponent;
|
|
83
|
+
this.dropdownDirective.options = {
|
|
84
|
+
containerClass: 'odx-notification-center-overlay',
|
|
85
|
+
position: Position.BOTTOM_END,
|
|
86
|
+
enableFallback: false,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
ngAfterViewInit() {
|
|
90
|
+
merge(this.handleBadgeUpdates(), this.handleDropdownUpdates()).pipe(takeUntilDestroyed(this.destroyRef)).subscribe();
|
|
91
|
+
}
|
|
92
|
+
formatBadgeValue(value) {
|
|
93
|
+
return this.dropdownDirective.isOpen || value === 0 ? null : value.toFixed(0);
|
|
94
|
+
}
|
|
95
|
+
handleBadgeUpdates() {
|
|
96
|
+
return this.badgeValue$.pipe(tap((value) => {
|
|
97
|
+
this.badgeDirective.value = value;
|
|
98
|
+
this.badgeDirective.ngOnChanges();
|
|
99
|
+
}));
|
|
100
|
+
}
|
|
101
|
+
handleDropdownUpdates() {
|
|
102
|
+
return this.notificationCenterService.notifications$.pipe(tap(({ isEmpty }) => {
|
|
103
|
+
this.disabledController?.setDisabledState(isEmpty);
|
|
104
|
+
if (!isEmpty)
|
|
105
|
+
return;
|
|
106
|
+
this.dropdownDirective.close();
|
|
107
|
+
}));
|
|
108
|
+
}
|
|
109
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NotificationCenterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
110
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: NotificationCenterDirective, isStandalone: true, selector: "[odxNotificationCenter]", inputs: { tag: ["odxNotificationCenter", "tag"], title: ["odxNotificationCenterTitle", "title"], sortFn: ["odxNotificationCenterSortFn", "sortFn"] }, outputs: { notificationAdd: "odxNotificationCenterAdd", notificationUpdate: "odxNotificationCenterUpdate", notificationRemove: "odxNotificationCenterRemove", notificationSeen: "odxNotificationCenterSeen" }, providers: [NotificationCenterService], hostDirectives: [{ directive: i1.BadgeDirective, inputs: ["odxBadgeVariant", "odxNotificationCenterBadgeVariant"] }, { directive: i2.DropdownDirective }], ngImport: i0 }); }
|
|
111
|
+
}
|
|
112
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NotificationCenterDirective, decorators: [{
|
|
113
|
+
type: Directive,
|
|
114
|
+
args: [{
|
|
115
|
+
standalone: true,
|
|
116
|
+
selector: '[odxNotificationCenter]',
|
|
117
|
+
hostDirectives: [{ directive: BadgeDirective, inputs: ['odxBadgeVariant:odxNotificationCenterBadgeVariant'] }, DropdownDirective],
|
|
118
|
+
providers: [NotificationCenterService],
|
|
119
|
+
}]
|
|
120
|
+
}], propDecorators: { tag: [{
|
|
121
|
+
type: Input,
|
|
122
|
+
args: ['odxNotificationCenter']
|
|
123
|
+
}], title: [{
|
|
124
|
+
type: Input,
|
|
125
|
+
args: ['odxNotificationCenterTitle']
|
|
126
|
+
}], sortFn: [{
|
|
127
|
+
type: Input,
|
|
128
|
+
args: ['odxNotificationCenterSortFn']
|
|
129
|
+
}], notificationAdd: [{
|
|
130
|
+
type: Output,
|
|
131
|
+
args: ['odxNotificationCenterAdd']
|
|
132
|
+
}], notificationUpdate: [{
|
|
133
|
+
type: Output,
|
|
134
|
+
args: ['odxNotificationCenterUpdate']
|
|
135
|
+
}], notificationRemove: [{
|
|
136
|
+
type: Output,
|
|
137
|
+
args: ['odxNotificationCenterRemove']
|
|
138
|
+
}], notificationSeen: [{
|
|
139
|
+
type: Output,
|
|
140
|
+
args: ['odxNotificationCenterSeen']
|
|
141
|
+
}] } });
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLWNlbnRlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9ub3RpZmljYXRpb24vc3JjL2xpYi9kaXJlY3RpdmVzL25vdGlmaWNhdGlvbi1jZW50ZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQWMsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sYUFBYSxDQUFDOzs7O0FBRXhEOzs7R0FHRztBQU9ILE1BQU0sT0FBTywyQkFBMkI7SUFOeEM7UUFPbUIsbUJBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDeEQsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoQyx1QkFBa0IsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNqRCxzQkFBaUIsR0FBRyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM5RCw4QkFBeUIsR0FBRyxNQUFNLENBQUMseUJBQXlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM5RSx5QkFBb0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUgsZ0JBQVcsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUNyRixTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ2xHLENBQUM7UUFvQ0Y7OztXQUdHO1FBQ0gsNERBQTREO1FBRXJELG9CQUFlLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGtCQUFrQixDQUFDO1FBRTNFOzs7V0FHRztRQUNILDREQUE0RDtRQUVyRCx1QkFBa0IsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMscUJBQXFCLENBQUM7UUFFakY7OztXQUdHO1FBQ0gsNERBQTREO1FBRXJELHVCQUFrQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxxQkFBcUIsQ0FBQztRQUVqRjs7O1dBR0c7UUFDSCw0REFBNEQ7UUFFckQscUJBQWdCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLG1CQUFtQixDQUFDO0tBd0M5RTtJQXhHQzs7O09BR0c7SUFDSCxJQUNXLEdBQUcsQ0FBQyxLQUFvQjtRQUNqQyxJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUNXLEtBQUssQ0FBQyxLQUFnQztRQUMvQyxJQUFJLENBQUMseUJBQXlCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsSUFDVyxNQUFNLENBQUMsS0FBeUI7UUFDekMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBa0NNLFFBQVE7UUFDYixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQy9DLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUUvQixJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxHQUFHLDJCQUEyQixDQUFDO1FBQzdELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEdBQUc7WUFDL0IsY0FBYyxFQUFFLGlDQUFpQztZQUNqRCxRQUFRLEVBQUUsUUFBUSxDQUFDLFVBQVU7WUFDN0IsY0FBYyxFQUFFLEtBQUs7U0FDdEIsQ0FBQztJQUNKLENBQUM7SUFFTSxlQUFlO1FBQ3BCLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN2SCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsS0FBYTtRQUNwQyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDMUIsR0FBRyxDQUFDLENBQUMsS0FBZ0MsRUFBRSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxHQUFHLEtBQTJCLENBQUM7WUFDeEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUN2RCxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxPQUFPO2dCQUFFLE9BQU87WUFDckIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOytHQWxIVSwyQkFBMkI7bUdBQTNCLDJCQUEyQiwyYUFGM0IsQ0FBQyx5QkFBeUIsQ0FBQzs7NEZBRTNCLDJCQUEyQjtrQkFOdkMsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsY0FBYyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxDQUFDLG1EQUFtRCxDQUFDLEVBQUUsRUFBRSxpQkFBaUIsQ0FBQztvQkFDakksU0FBUyxFQUFFLENBQUMseUJBQXlCLENBQUM7aUJBQ3ZDOzhCQWlCWSxHQUFHO3NCQURiLEtBQUs7dUJBQUMsdUJBQXVCO2dCQVVuQixLQUFLO3NCQURmLEtBQUs7dUJBQUMsNEJBQTRCO2dCQWlCeEIsTUFBTTtzQkFEaEIsS0FBSzt1QkFBQyw2QkFBNkI7Z0JBVzdCLGVBQWU7c0JBRHJCLE1BQU07dUJBQUMsMEJBQTBCO2dCQVMzQixrQkFBa0I7c0JBRHhCLE1BQU07dUJBQUMsNkJBQTZCO2dCQVM5QixrQkFBa0I7c0JBRHhCLE1BQU07dUJBQUMsNkJBQTZCO2dCQVM5QixnQkFBZ0I7c0JBRHRCLE1BQU07dUJBQUMsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRGVzdHJveVJlZiwgRGlyZWN0aXZlLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRGlzYWJsZWRDb250cm9sbGVyIH0gZnJvbSAnQG9keC9hbmd1bGFyJztcbmltcG9ydCB7IER5bmFtaWNUZXh0Q29udGVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jZGsvZHluYW1pYy12aWV3JztcbmltcG9ydCB7IEJhZGdlRGlyZWN0aXZlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvYmFkZ2UnO1xuaW1wb3J0IHsgRHJvcGRvd25EaXJlY3RpdmUgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9kcm9wZG93bic7XG5pbXBvcnQgeyBQb3NpdGlvbiB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBtYXAsIG1lcmdlLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25DZW50ZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNvcnRGbiB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25DZW50ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMnO1xuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHRoYXQgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGZvciBtYW5hZ2luZyBub3RpZmljYXRpb25zLlxuICogSXQgYWxsb3dzIGNvbmZpZ3VyaW5nIGEgbm90aWZpY2F0aW9uIGNlbnRlciB3aXRoIGR5bmFtaWMgY29udGVudCwgc29ydGluZywgYW5kIGJhZGdlIGRpc3BsYXkgZnVuY3Rpb25hbGl0aWVzLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdbb2R4Tm90aWZpY2F0aW9uQ2VudGVyXScsXG4gIGhvc3REaXJlY3RpdmVzOiBbeyBkaXJlY3RpdmU6IEJhZGdlRGlyZWN0aXZlLCBpbnB1dHM6IFsnb2R4QmFkZ2VWYXJpYW50Om9keE5vdGlmaWNhdGlvbkNlbnRlckJhZGdlVmFyaWFudCddIH0sIERyb3Bkb3duRGlyZWN0aXZlXSxcbiAgcHJvdmlkZXJzOiBbTm90aWZpY2F0aW9uQ2VudGVyU2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvbkNlbnRlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYmFkZ2VEaXJlY3RpdmUgPSBpbmplY3QoQmFkZ2VEaXJlY3RpdmUsIHsgc2VsZjogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRpc2FibGVkQ29udHJvbGxlciA9IERpc2FibGVkQ29udHJvbGxlci5pbmplY3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkcm9wZG93bkRpcmVjdGl2ZSA9IGluamVjdChEcm9wZG93bkRpcmVjdGl2ZSwgeyBzZWxmOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IG5vdGlmaWNhdGlvbkNlbnRlclNlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uQ2VudGVyU2VydmljZSwgeyBzZWxmOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGRyb3Bkb3duU3RhdGVDaGFuZ2UkID0gbWVyZ2UodGhpcy5kcm9wZG93bkRpcmVjdGl2ZS5iZWZvcmVPcGVuLCB0aGlzLmRyb3Bkb3duRGlyZWN0aXZlLmJlZm9yZUNsb3NlKS5waXBlKHN0YXJ0V2l0aCh2b2lkIDApKTtcbiAgcHJpdmF0ZSByZWFkb25seSBiYWRnZVZhbHVlJCA9IHRoaXMubm90aWZpY2F0aW9uQ2VudGVyU2VydmljZS51bnNlZW5Ob3RpZmljYXRpb25zJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoeyBjb3VudCB9KSA9PiB0aGlzLmRyb3Bkb3duU3RhdGVDaGFuZ2UkLnBpcGUobWFwKCgpID0+IHRoaXMuZm9ybWF0QmFkZ2VWYWx1ZShjb3VudCkpKSksXG4gICk7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHRhZyBmb3IgZmlsdGVyaW5nIG5vdGlmaWNhdGlvbnMuIE9ubHkgbm90aWZpY2F0aW9ucyB3aXRoIHRoaXMgdGFnIHdpbGwgYmUgc2hvd24gaW4gdGhlIG5vdGlmaWNhdGlvbiBjZW50ZXIuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdGFnIHZhbHVlIHRvIGZpbHRlciBub3RpZmljYXRpb25zLiBJZiBudWxsLCBhbGwgbm90aWZpY2F0aW9ucyBhcmUgc2hvd24uXG4gICAqL1xuICBASW5wdXQoJ29keE5vdGlmaWNhdGlvbkNlbnRlcicpXG4gIHB1YmxpYyBzZXQgdGFnKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgdGhpcy5ub3RpZmljYXRpb25DZW50ZXJTZXJ2aWNlLnNldFRhZyh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdGl0bGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBjZW50ZXIuIFRoZSB0aXRsZSBjYW4gYmUgZHluYW1pYyBhbmQgY2hhbmdlIGJhc2VkIG9uIHRoZSBhcHBsaWNhdGlvbiBzdGF0ZS5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSB0aXRsZSBjb250ZW50LCB3aGljaCBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gT2JzZXJ2YWJsZSByZXR1cm5pbmcgYSBzdHJpbmcuIEFsbG93cyBmb3IgZHluYW1pYyB0aXRsZXMuXG4gICAqL1xuICBASW5wdXQoJ29keE5vdGlmaWNhdGlvbkNlbnRlclRpdGxlJylcbiAgcHVibGljIHNldCB0aXRsZSh2YWx1ZTogRHluYW1pY1RleHRDb250ZW50IHwgbnVsbCkge1xuICAgIHRoaXMubm90aWZpY2F0aW9uQ2VudGVyU2VydmljZS5zZXRUaXRsZSh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgc29ydGluZyBmdW5jdGlvbiB1c2VkIHRvIG9yZGVyIG5vdGlmaWNhdGlvbnMgd2l0aGluIHRoZSBub3RpZmljYXRpb24gY2VudGVyLlxuICAgKiBAcGFyYW0gdmFsdWUgQSBmdW5jdGlvbiB0aGF0IGNvbXBhcmVzIHR3byBub3RpZmljYXRpb25zIGFuZCByZXR1cm5zIHRoZSBzb3J0IG9yZGVyLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAgc29ydEZmbiA9IChhOiBOb3RpZmljYXRpb25SZWYsIGI6IE5vdGlmaWNhdGlvblJlZikgPT4ge1xuICAgICAgICBpZiAoYS5jcmVhdGVkQXQgPCBiLmNyZWF0ZWRBdCkgcmV0dXJuIC0xO1xuICAgICAgICBpZiAoYS5jcmVhdGVkQXQgPiBiLmNyZWF0ZWRBdCkgcmV0dXJuIDE7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfTtcbiAgICovXG4gIEBJbnB1dCgnb2R4Tm90aWZpY2F0aW9uQ2VudGVyU29ydEZuJylcbiAgcHVibGljIHNldCBzb3J0Rm4odmFsdWU6IE5vdGlmaWNhdGlvblNvcnRGbikge1xuICAgIHRoaXMubm90aWZpY2F0aW9uQ2VudGVyU2VydmljZS5zZXRTb3J0Rm4odmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCB3aGVuIGEgbmV3IG5vdGlmaWNhdGlvbiBpcyBhZGRlZC5cbiAgICogTGlzdGVuZXJzIGNhbiB1c2UgdGhpcyBldmVudCB0byByZWFjdCB0byBuZXcgbm90aWZpY2F0aW9ucyBiZWluZyBhZGRlZCB0byB0aGUgbm90aWZpY2F0aW9uIGNlbnRlci5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LXJlbmFtZVxuICBAT3V0cHV0KCdvZHhOb3RpZmljYXRpb25DZW50ZXJBZGQnKVxuICBwdWJsaWMgbm90aWZpY2F0aW9uQWRkID0gdGhpcy5ub3RpZmljYXRpb25DZW50ZXJTZXJ2aWNlLm9uTm90aWZpY2F0aW9uQWRkJDtcblxuICAvKipcbiAgICogQW4gZXZlbnQgdGhhdCBpcyBlbWl0dGVkIHdoZW4gYSBub3RpZmljYXRpb24gaXMgdXBkYXRlZC5cbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byByZWFjdCB0byBjaGFuZ2VzIGluIG5vdGlmaWNhdGlvbnMsIHN1Y2ggYXMgdGhlaXIgcmVhZCBzdGF0dXMgb3IgY29udGVudCB1cGRhdGVzLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtcmVuYW1lXG4gIEBPdXRwdXQoJ29keE5vdGlmaWNhdGlvbkNlbnRlclVwZGF0ZScpXG4gIHB1YmxpYyBub3RpZmljYXRpb25VcGRhdGUgPSB0aGlzLm5vdGlmaWNhdGlvbkNlbnRlclNlcnZpY2Uub25Ob3RpZmljYXRpb25VcGRhdGUkO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCB0aGF0IGlzIGVtaXR0ZWQgd2hlbiBhIG5vdGlmaWNhdGlvbiBpcyByZW1vdmVkIGZyb20gdGhlIG5vdGlmaWNhdGlvbiBjZW50ZXIuXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIGhhbmRsZSB0aGUgcmVtb3ZhbCBvZiBub3RpZmljYXRpb25zLCBzdWNoIGFzIGNsZWFuaW5nIHVwIHJlc291cmNlcyBvciB1cGRhdGluZyBVSSBlbGVtZW50cy5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LXJlbmFtZVxuICBAT3V0cHV0KCdvZHhOb3RpZmljYXRpb25DZW50ZXJSZW1vdmUnKVxuICBwdWJsaWMgbm90aWZpY2F0aW9uUmVtb3ZlID0gdGhpcy5ub3RpZmljYXRpb25DZW50ZXJTZXJ2aWNlLm9uTm90aWZpY2F0aW9uUmVtb3ZlJDtcblxuICAvKipcbiAgICogQW4gZXZlbnQgdGhhdCBpcyBlbWl0dGVkIHdoZW4gYSBub3RpZmljYXRpb24gaXMgbWFya2VkIGFzIHNlZW4uXG4gICAqIFRoaXMgZXZlbnQgY2FuIGJlIHVzZWQgdG8gcGVyZm9ybSBhY3Rpb25zIHdoZW4gdGhlIHVzZXIgYWNrbm93bGVkZ2VzIGEgbm90aWZpY2F0aW9uLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtcmVuYW1lXG4gIEBPdXRwdXQoJ29keE5vdGlmaWNhdGlvbkNlbnRlclNlZW4nKVxuICBwdWJsaWMgbm90aWZpY2F0aW9uU2VlbiA9IHRoaXMubm90aWZpY2F0aW9uQ2VudGVyU2VydmljZS5vbk5vdGlmaWNhdGlvblNlZW4kO1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmJhZGdlRGlyZWN0aXZlLnBvc2l0aW9uID0gUG9zaXRpb24uQk9UVE9NO1xuICAgIHRoaXMuYmFkZ2VEaXJlY3RpdmUub2Zmc2V0ID0gNjtcblxuICAgIHRoaXMuZHJvcGRvd25EaXJlY3RpdmUuY29udGVudCA9IE5vdGlmaWNhdGlvbkNlbnRlckNvbXBvbmVudDtcbiAgICB0aGlzLmRyb3Bkb3duRGlyZWN0aXZlLm9wdGlvbnMgPSB7XG4gICAgICBjb250YWluZXJDbGFzczogJ29keC1ub3RpZmljYXRpb24tY2VudGVyLW92ZXJsYXknLFxuICAgICAgcG9zaXRpb246IFBvc2l0aW9uLkJPVFRPTV9FTkQsXG4gICAgICBlbmFibGVGYWxsYmFjazogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgbWVyZ2UodGhpcy5oYW5kbGVCYWRnZVVwZGF0ZXMoKSwgdGhpcy5oYW5kbGVEcm9wZG93blVwZGF0ZXMoKSkucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdEJhZGdlVmFsdWUodmFsdWU6IG51bWJlcik6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmRyb3Bkb3duRGlyZWN0aXZlLmlzT3BlbiB8fCB2YWx1ZSA9PT0gMCA/IG51bGwgOiB2YWx1ZS50b0ZpeGVkKDApO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVCYWRnZVVwZGF0ZXMoKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIHRoaXMuYmFkZ2VWYWx1ZSQucGlwZShcbiAgICAgIHRhcCgodmFsdWU6IER5bmFtaWNUZXh0Q29udGVudCB8IG51bGwpID0+IHtcbiAgICAgICAgdGhpcy5iYWRnZURpcmVjdGl2ZS52YWx1ZSA9IHZhbHVlIGFzIER5bmFtaWNUZXh0Q29udGVudDtcbiAgICAgICAgdGhpcy5iYWRnZURpcmVjdGl2ZS5uZ09uQ2hhbmdlcygpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRHJvcGRvd25VcGRhdGVzKCk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIHJldHVybiB0aGlzLm5vdGlmaWNhdGlvbkNlbnRlclNlcnZpY2Uubm90aWZpY2F0aW9ucyQucGlwZShcbiAgICAgIHRhcCgoeyBpc0VtcHR5IH0pID0+IHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZENvbnRyb2xsZXI/LnNldERpc2FibGVkU3RhdGUoaXNFbXB0eSk7XG4gICAgICAgIGlmICghaXNFbXB0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmRyb3Bkb3duRGlyZWN0aXZlLmNsb3NlKCk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from './with-browser-notifications';
|
|
2
|
+
export * from './with-load-notifications';
|
|
3
|
+
export * from './with-notification-transformer';
|
|
4
|
+
export * from './with-peristent-notifications';
|
|
5
|
+
export * from './with-save-notifications';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9ub3RpZmljYXRpb24vc3JjL2xpYi9mZWF0dXJlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3dpdGgtYnJvd3Nlci1ub3RpZmljYXRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vd2l0aC1sb2FkLW5vdGlmaWNhdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi93aXRoLW5vdGlmaWNhdGlvbi10cmFuc2Zvcm1lcic7XG5leHBvcnQgKiBmcm9tICcuL3dpdGgtcGVyaXN0ZW50LW5vdGlmaWNhdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi93aXRoLXNhdmUtbm90aWZpY2F0aW9ucyc7XG4iXX0=
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { ENVIRONMENT_INITIALIZER, inject } from '@angular/core';
|
|
2
|
+
import { makeNotificationFeature } from '../models';
|
|
3
|
+
import { NotificationService } from '../notification.service';
|
|
4
|
+
import { PersistentNotificationSerializer } from './with-peristent-notifications';
|
|
5
|
+
/**
|
|
6
|
+
* Requests permission to display browser notifications and returns a boolean indicating whether permission was granted.
|
|
7
|
+
* @async
|
|
8
|
+
* @function requestBrowserNotificationPermissions
|
|
9
|
+
* @returns {Promise<boolean>} A promise that resolves to `true` if permission is granted, otherwise `false`.
|
|
10
|
+
*/
|
|
11
|
+
async function requestBrowserNotificationPermissions() {
|
|
12
|
+
if (!('Notification' in window))
|
|
13
|
+
return false;
|
|
14
|
+
if (Notification.permission === 'granted')
|
|
15
|
+
return true;
|
|
16
|
+
if (Notification.permission === 'denied')
|
|
17
|
+
return false;
|
|
18
|
+
const permission = await Notification.requestPermission();
|
|
19
|
+
return permission === 'granted';
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Creates a function responsible for sending out browser notifications with the given options.
|
|
23
|
+
* @function sendBrowserNotification
|
|
24
|
+
* @param {NotificationSerializer} serializer - The serializer to use for notification data.
|
|
25
|
+
* @param {BrowserNotificationExtras} [options] - Additional options for the browser notification.
|
|
26
|
+
* @returns {SendBrowserNotificationFn} A function to send browser notifications.
|
|
27
|
+
*/
|
|
28
|
+
function sendBrowserNotification(serializer, options) {
|
|
29
|
+
return async (notificationRef) => {
|
|
30
|
+
if (!('Notification' in window))
|
|
31
|
+
return;
|
|
32
|
+
const [notificationObj] = await serializer.deserialize(await serializer.serialize([notificationRef]));
|
|
33
|
+
if (!notificationObj || notificationObj.hasBeenSeen)
|
|
34
|
+
return;
|
|
35
|
+
const { createdAt, item } = notificationObj;
|
|
36
|
+
new Notification(item.title, {
|
|
37
|
+
tag: notificationRef.options.tags?.[0],
|
|
38
|
+
lang: notificationRef.options.language,
|
|
39
|
+
...options,
|
|
40
|
+
body: item.description,
|
|
41
|
+
timestamp: createdAt,
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Configures the application to send browser notifications, using Angular's `ENVIRONMENT_INITIALIZER` for setup.
|
|
47
|
+
* @function withBrowserNotifications
|
|
48
|
+
* @param {WithBrowserNotificationsOptions} [options] - Optional configuration for browser notifications.
|
|
49
|
+
* @returns {NotificationFeature} A notification feature for integration into the application environment.
|
|
50
|
+
*/
|
|
51
|
+
export function withBrowserNotifications(options) {
|
|
52
|
+
return makeNotificationFeature([
|
|
53
|
+
{
|
|
54
|
+
provide: ENVIRONMENT_INITIALIZER,
|
|
55
|
+
useFactory: () => {
|
|
56
|
+
const isEnabled = options?.isEnabled ?? true;
|
|
57
|
+
if (!isEnabled)
|
|
58
|
+
return () => void 0;
|
|
59
|
+
const notificationService = inject(NotificationService);
|
|
60
|
+
const serializer = new PersistentNotificationSerializer();
|
|
61
|
+
const sendBrowserNotificationFn = options?.sendFn ?? sendBrowserNotification(serializer, options?.extras);
|
|
62
|
+
return async () => {
|
|
63
|
+
if (!isEnabled)
|
|
64
|
+
return;
|
|
65
|
+
const permissionsGranted = await requestBrowserNotificationPermissions();
|
|
66
|
+
if (!permissionsGranted)
|
|
67
|
+
return;
|
|
68
|
+
notificationService.onNotificationAdd$.subscribe(sendBrowserNotificationFn);
|
|
69
|
+
};
|
|
70
|
+
},
|
|
71
|
+
multi: true,
|
|
72
|
+
},
|
|
73
|
+
]);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1icm93c2VyLW5vdGlmaWNhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9ub3RpZmljYXRpb24vc3JjL2xpYi9mZWF0dXJlcy93aXRoLWJyb3dzZXItbm90aWZpY2F0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBd0MsdUJBQXVCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUEwQixnQ0FBZ0MsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBYTFHOzs7OztHQUtHO0FBQ0gsS0FBSyxVQUFVLHFDQUFxQztJQUNsRCxJQUFJLENBQUMsQ0FBQyxjQUFjLElBQUksTUFBTSxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDOUMsSUFBSSxZQUFZLENBQUMsVUFBVSxLQUFLLFNBQVM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUN2RCxJQUFJLFlBQVksQ0FBQyxVQUFVLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3ZELE1BQU0sVUFBVSxHQUFHLE1BQU0sWUFBWSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFFMUQsT0FBTyxVQUFVLEtBQUssU0FBUyxDQUFDO0FBQ2xDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLHVCQUF1QixDQUFDLFVBQWtDLEVBQUUsT0FBbUM7SUFDdEcsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLEVBQUU7UUFDL0IsSUFBSSxDQUFDLENBQUMsY0FBYyxJQUFJLE1BQU0sQ0FBQztZQUFFLE9BQU87UUFDeEMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sVUFBVSxDQUFDLFdBQVcsQ0FBQyxNQUFNLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEcsSUFBSSxDQUFDLGVBQWUsSUFBSSxlQUFlLENBQUMsV0FBVztZQUFFLE9BQU87UUFDNUQsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxlQUFlLENBQUM7UUFDNUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQWUsRUFBRTtZQUNyQyxHQUFHLEVBQUUsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUMsUUFBUTtZQUN0QyxHQUFHLE9BQU87WUFDVixJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQXFCO1lBQ2hDLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxPQUF5QztJQUNoRixPQUFPLHVCQUF1QixDQUFDO1FBQzdCO1lBQ0UsT0FBTyxFQUFFLHVCQUF1QjtZQUNoQyxVQUFVLEVBQUUsR0FBRyxFQUFFO2dCQUNmLE1BQU0sU0FBUyxHQUFHLE9BQU8sRUFBRSxTQUFTLElBQUksSUFBSSxDQUFDO2dCQUM3QyxJQUFJLENBQUMsU0FBUztvQkFBRSxPQUFPLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNwQyxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUN4RCxNQUFNLFVBQVUsR0FBRyxJQUFJLGdDQUFnQyxFQUFFLENBQUM7Z0JBQzFELE1BQU0seUJBQXlCLEdBQUcsT0FBTyxFQUFFLE1BQU0sSUFBSSx1QkFBdUIsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUUxRyxPQUFPLEtBQUssSUFBSSxFQUFFO29CQUNoQixJQUFJLENBQUMsU0FBUzt3QkFBRSxPQUFPO29CQUN2QixNQUFNLGtCQUFrQixHQUFHLE1BQU0scUNBQXFDLEVBQUUsQ0FBQztvQkFDekUsSUFBSSxDQUFDLGtCQUFrQjt3QkFBRSxPQUFPO29CQUNoQyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMseUJBQXlCLENBQUMsQ0FBQztnQkFDOUUsQ0FBQyxDQUFDO1lBQ0osQ0FBQztZQUNELEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRU5WSVJPTk1FTlRfSU5JVElBTElaRVIsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uRmVhdHVyZSwgTm90aWZpY2F0aW9uUmVmLCBtYWtlTm90aWZpY2F0aW9uRmVhdHVyZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VyaWFsaXplciwgUGVyc2lzdGVudE5vdGlmaWNhdGlvblNlcmlhbGl6ZXIgfSBmcm9tICcuL3dpdGgtcGVyaXN0ZW50LW5vdGlmaWNhdGlvbnMnO1xuXG5leHBvcnQgdHlwZSBCcm93c2VyTm90aWZpY2F0aW9uRXh0cmFzID0gT21pdDxOb3RpZmljYXRpb25PcHRpb25zLCAnYm9keScgfCAndGltZXN0YW1wJz47XG5leHBvcnQgdHlwZSBCcm93c2VyTm90aWZpY2F0aW9uID0gTm90aWZpY2F0aW9uO1xuZXhwb3J0IHR5cGUgQnJvd3Nlck5vdGlmaWNhdGlvbkZhY3RvcnkgPSAobm90aWZpY2F0aW9uUmVmOiBOb3RpZmljYXRpb25SZWYpID0+IEJyb3dzZXJOb3RpZmljYXRpb247XG5leHBvcnQgdHlwZSBTZW5kQnJvd3Nlck5vdGlmaWNhdGlvbkZuID0gKG5vdGlmaWNhdGlvblJlZjogTm90aWZpY2F0aW9uUmVmKSA9PiB1bmtub3duO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdpdGhCcm93c2VyTm90aWZpY2F0aW9uc09wdGlvbnMge1xuICBzZW5kRm4/OiBTZW5kQnJvd3Nlck5vdGlmaWNhdGlvbkZuO1xuICBleHRyYXM/OiBCcm93c2VyTm90aWZpY2F0aW9uRXh0cmFzO1xuICBpc0VuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlcXVlc3RzIHBlcm1pc3Npb24gdG8gZGlzcGxheSBicm93c2VyIG5vdGlmaWNhdGlvbnMgYW5kIHJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBwZXJtaXNzaW9uIHdhcyBncmFudGVkLlxuICogQGFzeW5jXG4gKiBAZnVuY3Rpb24gcmVxdWVzdEJyb3dzZXJOb3RpZmljYXRpb25QZXJtaXNzaW9uc1xuICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGB0cnVlYCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQsIG90aGVyd2lzZSBgZmFsc2VgLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0QnJvd3Nlck5vdGlmaWNhdGlvblBlcm1pc3Npb25zKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBpZiAoISgnTm90aWZpY2F0aW9uJyBpbiB3aW5kb3cpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChOb3RpZmljYXRpb24ucGVybWlzc2lvbiA9PT0gJ2dyYW50ZWQnKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKE5vdGlmaWNhdGlvbi5wZXJtaXNzaW9uID09PSAnZGVuaWVkJykgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBwZXJtaXNzaW9uID0gYXdhaXQgTm90aWZpY2F0aW9uLnJlcXVlc3RQZXJtaXNzaW9uKCk7XG5cbiAgcmV0dXJuIHBlcm1pc3Npb24gPT09ICdncmFudGVkJztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHNlbmRpbmcgb3V0IGJyb3dzZXIgbm90aWZpY2F0aW9ucyB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICogQGZ1bmN0aW9uIHNlbmRCcm93c2VyTm90aWZpY2F0aW9uXG4gKiBAcGFyYW0ge05vdGlmaWNhdGlvblNlcmlhbGl6ZXJ9IHNlcmlhbGl6ZXIgLSBUaGUgc2VyaWFsaXplciB0byB1c2UgZm9yIG5vdGlmaWNhdGlvbiBkYXRhLlxuICogQHBhcmFtIHtCcm93c2VyTm90aWZpY2F0aW9uRXh0cmFzfSBbb3B0aW9uc10gLSBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBicm93c2VyIG5vdGlmaWNhdGlvbi5cbiAqIEByZXR1cm5zIHtTZW5kQnJvd3Nlck5vdGlmaWNhdGlvbkZufSBBIGZ1bmN0aW9uIHRvIHNlbmQgYnJvd3NlciBub3RpZmljYXRpb25zLlxuICovXG5mdW5jdGlvbiBzZW5kQnJvd3Nlck5vdGlmaWNhdGlvbihzZXJpYWxpemVyOiBOb3RpZmljYXRpb25TZXJpYWxpemVyLCBvcHRpb25zPzogQnJvd3Nlck5vdGlmaWNhdGlvbkV4dHJhcyk6IFNlbmRCcm93c2VyTm90aWZpY2F0aW9uRm4ge1xuICByZXR1cm4gYXN5bmMgKG5vdGlmaWNhdGlvblJlZikgPT4ge1xuICAgIGlmICghKCdOb3RpZmljYXRpb24nIGluIHdpbmRvdykpIHJldHVybjtcbiAgICBjb25zdCBbbm90aWZpY2F0aW9uT2JqXSA9IGF3YWl0IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYXdhaXQgc2VyaWFsaXplci5zZXJpYWxpemUoW25vdGlmaWNhdGlvblJlZl0pKTtcbiAgICBpZiAoIW5vdGlmaWNhdGlvbk9iaiB8fCBub3RpZmljYXRpb25PYmouaGFzQmVlblNlZW4pIHJldHVybjtcbiAgICBjb25zdCB7IGNyZWF0ZWRBdCwgaXRlbSB9ID0gbm90aWZpY2F0aW9uT2JqO1xuICAgIG5ldyBOb3RpZmljYXRpb24oaXRlbS50aXRsZSBhcyBzdHJpbmcsIHtcbiAgICAgIHRhZzogbm90aWZpY2F0aW9uUmVmLm9wdGlvbnMudGFncz8uWzBdLFxuICAgICAgbGFuZzogbm90aWZpY2F0aW9uUmVmLm9wdGlvbnMubGFuZ3VhZ2UsXG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgYm9keTogaXRlbS5kZXNjcmlwdGlvbiBhcyBzdHJpbmcsXG4gICAgICB0aW1lc3RhbXA6IGNyZWF0ZWRBdCxcbiAgICB9KTtcbiAgfTtcbn1cblxuLyoqXG4gKiBDb25maWd1cmVzIHRoZSBhcHBsaWNhdGlvbiB0byBzZW5kIGJyb3dzZXIgbm90aWZpY2F0aW9ucywgdXNpbmcgQW5ndWxhcidzIGBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUmAgZm9yIHNldHVwLlxuICogQGZ1bmN0aW9uIHdpdGhCcm93c2VyTm90aWZpY2F0aW9uc1xuICogQHBhcmFtIHtXaXRoQnJvd3Nlck5vdGlmaWNhdGlvbnNPcHRpb25zfSBbb3B0aW9uc10gLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciBicm93c2VyIG5vdGlmaWNhdGlvbnMuXG4gKiBAcmV0dXJucyB7Tm90aWZpY2F0aW9uRmVhdHVyZX0gQSBub3RpZmljYXRpb24gZmVhdHVyZSBmb3IgaW50ZWdyYXRpb24gaW50byB0aGUgYXBwbGljYXRpb24gZW52aXJvbm1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoQnJvd3Nlck5vdGlmaWNhdGlvbnMob3B0aW9ucz86IFdpdGhCcm93c2VyTm90aWZpY2F0aW9uc09wdGlvbnMpOiBOb3RpZmljYXRpb25GZWF0dXJlIHtcbiAgcmV0dXJuIG1ha2VOb3RpZmljYXRpb25GZWF0dXJlKFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUixcbiAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IHtcbiAgICAgICAgY29uc3QgaXNFbmFibGVkID0gb3B0aW9ucz8uaXNFbmFibGVkID8/IHRydWU7XG4gICAgICAgIGlmICghaXNFbmFibGVkKSByZXR1cm4gKCkgPT4gdm9pZCAwO1xuICAgICAgICBjb25zdCBub3RpZmljYXRpb25TZXJ2aWNlID0gaW5qZWN0KE5vdGlmaWNhdGlvblNlcnZpY2UpO1xuICAgICAgICBjb25zdCBzZXJpYWxpemVyID0gbmV3IFBlcnNpc3RlbnROb3RpZmljYXRpb25TZXJpYWxpemVyKCk7XG4gICAgICAgIGNvbnN0IHNlbmRCcm93c2VyTm90aWZpY2F0aW9uRm4gPSBvcHRpb25zPy5zZW5kRm4gPz8gc2VuZEJyb3dzZXJOb3RpZmljYXRpb24oc2VyaWFsaXplciwgb3B0aW9ucz8uZXh0cmFzKTtcblxuICAgICAgICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGlmICghaXNFbmFibGVkKSByZXR1cm47XG4gICAgICAgICAgY29uc3QgcGVybWlzc2lvbnNHcmFudGVkID0gYXdhaXQgcmVxdWVzdEJyb3dzZXJOb3RpZmljYXRpb25QZXJtaXNzaW9ucygpO1xuICAgICAgICAgIGlmICghcGVybWlzc2lvbnNHcmFudGVkKSByZXR1cm47XG4gICAgICAgICAgbm90aWZpY2F0aW9uU2VydmljZS5vbk5vdGlmaWNhdGlvbkFkZCQuc3Vic2NyaWJlKHNlbmRCcm93c2VyTm90aWZpY2F0aW9uRm4pO1xuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0pO1xufVxuIl19
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { ENVIRONMENT_INITIALIZER, inject } from '@angular/core';
|
|
2
|
+
import { from, isObservable, of } from 'rxjs';
|
|
3
|
+
import { makeNotificationFeature } from '../models';
|
|
4
|
+
import { NotificationService } from '../notification.service';
|
|
5
|
+
/**
|
|
6
|
+
* Loads notifications using the provided `loadFn`. This function abstracts over the differences
|
|
7
|
+
* between synchronous notifications, promises, and observables, providing a uniform Observable output.
|
|
8
|
+
* @function loadNotifications
|
|
9
|
+
* @param {LoadNotificationsFn} [loadFn] - An optional function to load notifications.
|
|
10
|
+
* @returns {Observable<NotificationRef[]>} An Observable stream of notification references.
|
|
11
|
+
*/
|
|
12
|
+
function loadNotifications(loadFn) {
|
|
13
|
+
const notifications = loadFn?.();
|
|
14
|
+
if (isObservable(notifications)) {
|
|
15
|
+
return notifications;
|
|
16
|
+
}
|
|
17
|
+
if (notifications instanceof Promise) {
|
|
18
|
+
return from(notifications);
|
|
19
|
+
}
|
|
20
|
+
return of(notifications ?? []);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Integrates notification loading into the application environment. This function uses the Angular
|
|
24
|
+
* `ENVIRONMENT_INITIALIZER` to ensure that notifications are loaded as part of the application's
|
|
25
|
+
* initialization process.
|
|
26
|
+
* @function withLoadNotifications
|
|
27
|
+
* @param {LoadNotificationsFn} loadFn - The function to load notifications.
|
|
28
|
+
* @returns {NotificationFeature} A notification feature configured to load notifications at startup.
|
|
29
|
+
*/
|
|
30
|
+
export function withLoadNotifications(loadFn) {
|
|
31
|
+
return makeNotificationFeature([
|
|
32
|
+
{
|
|
33
|
+
provide: ENVIRONMENT_INITIALIZER,
|
|
34
|
+
useFactory: () => {
|
|
35
|
+
const notificationService = inject(NotificationService);
|
|
36
|
+
const notifications$ = loadNotifications(loadFn);
|
|
37
|
+
return () => {
|
|
38
|
+
notifications$.subscribe((notificationRefs) => notificationService.load(notificationRefs));
|
|
39
|
+
};
|
|
40
|
+
},
|
|
41
|
+
multi: true,
|
|
42
|
+
},
|
|
43
|
+
]);
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1sb2FkLW5vdGlmaWNhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9ub3RpZmljYXRpb24vc3JjL2xpYi9mZWF0dXJlcy93aXRoLWxvYWQtbm90aWZpY2F0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBYyxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQXdDLHVCQUF1QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBVTlEOzs7Ozs7R0FNRztBQUNILFNBQVMsaUJBQWlCLENBQUMsTUFBNEI7SUFDckQsTUFBTSxhQUFhLEdBQUcsTUFBTSxFQUFFLEVBQUUsQ0FBQztJQUNqQyxJQUFJLFlBQVksQ0FBQyxhQUFhLENBQUMsRUFBRTtRQUMvQixPQUFPLGFBQWEsQ0FBQztLQUN0QjtJQUNELElBQUksYUFBYSxZQUFZLE9BQU8sRUFBRTtRQUNwQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztLQUM1QjtJQUNELE9BQU8sRUFBRSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxNQUEyQjtJQUMvRCxPQUFPLHVCQUF1QixDQUFDO1FBQzdCO1lBQ0UsT0FBTyxFQUFFLHVCQUF1QjtZQUNoQyxVQUFVLEVBQUUsR0FBRyxFQUFFO2dCQUNmLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQ3hELE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUVqRCxPQUFPLEdBQUcsRUFBRTtvQkFDVixjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7Z0JBQzdGLENBQUMsQ0FBQztZQUNKLENBQUM7WUFDRCxLQUFLLEVBQUUsSUFBSTtTQUNaO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVOVklST05NRU5UX0lOSVRJQUxJWkVSLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGZyb20sIGlzT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkZlYXR1cmUsIE5vdGlmaWNhdGlvblJlZiwgbWFrZU5vdGlmaWNhdGlvbkZlYXR1cmUgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcblxuLyoqXG4gKiBUeXBlIGRlZmluaXRpb24gZm9yIGEgZnVuY3Rpb24gdGhhdCBsb2FkcyBub3RpZmljYXRpb25zLlxuICogQ2FuIHJldHVybiBub3RpZmljYXRpb25zIGRpcmVjdGx5IGFzIGFuIGFycmF5LCBhcyBhIFByb21pc2UsIG9yIGFzIGFuIE9ic2VydmFibGUuXG4gKiBAdHlwZWRlZiB7RnVuY3Rpb259IExvYWROb3RpZmljYXRpb25zRm5cbiAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPE5vdGlmaWNhdGlvblJlZltdPiB8IFByb21pc2U8Tm90aWZpY2F0aW9uUmVmW10+IHwgTm90aWZpY2F0aW9uUmVmW119IFRoZSBsb2FkZWQgbm90aWZpY2F0aW9ucy5cbiAqL1xuZXhwb3J0IHR5cGUgTG9hZE5vdGlmaWNhdGlvbnNGbiA9ICgpID0+IE9ic2VydmFibGU8Tm90aWZpY2F0aW9uUmVmW10+IHwgUHJvbWlzZTxOb3RpZmljYXRpb25SZWZbXT4gfCBOb3RpZmljYXRpb25SZWZbXTtcblxuLyoqXG4gKiBMb2FkcyBub3RpZmljYXRpb25zIHVzaW5nIHRoZSBwcm92aWRlZCBgbG9hZEZuYC4gVGhpcyBmdW5jdGlvbiBhYnN0cmFjdHMgb3ZlciB0aGUgZGlmZmVyZW5jZXNcbiAqIGJldHdlZW4gc3luY2hyb25vdXMgbm90aWZpY2F0aW9ucywgcHJvbWlzZXMsIGFuZCBvYnNlcnZhYmxlcywgcHJvdmlkaW5nIGEgdW5pZm9ybSBPYnNlcnZhYmxlIG91dHB1dC5cbiAqIEBmdW5jdGlvbiBsb2FkTm90aWZpY2F0aW9uc1xuICogQHBhcmFtIHtMb2FkTm90aWZpY2F0aW9uc0ZufSBbbG9hZEZuXSAtIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRvIGxvYWQgbm90aWZpY2F0aW9ucy5cbiAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPE5vdGlmaWNhdGlvblJlZltdPn0gQW4gT2JzZXJ2YWJsZSBzdHJlYW0gb2Ygbm90aWZpY2F0aW9uIHJlZmVyZW5jZXMuXG4gKi9cbmZ1bmN0aW9uIGxvYWROb3RpZmljYXRpb25zKGxvYWRGbj86IExvYWROb3RpZmljYXRpb25zRm4pOiBPYnNlcnZhYmxlPE5vdGlmaWNhdGlvblJlZltdPiB7XG4gIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSBsb2FkRm4/LigpO1xuICBpZiAoaXNPYnNlcnZhYmxlKG5vdGlmaWNhdGlvbnMpKSB7XG4gICAgcmV0dXJuIG5vdGlmaWNhdGlvbnM7XG4gIH1cbiAgaWYgKG5vdGlmaWNhdGlvbnMgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgcmV0dXJuIGZyb20obm90aWZpY2F0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIG9mKG5vdGlmaWNhdGlvbnMgPz8gW10pO1xufVxuXG4vKipcbiAqIEludGVncmF0ZXMgbm90aWZpY2F0aW9uIGxvYWRpbmcgaW50byB0aGUgYXBwbGljYXRpb24gZW52aXJvbm1lbnQuIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgQW5ndWxhclxuICogYEVOVklST05NRU5UX0lOSVRJQUxJWkVSYCB0byBlbnN1cmUgdGhhdCBub3RpZmljYXRpb25zIGFyZSBsb2FkZWQgYXMgcGFydCBvZiB0aGUgYXBwbGljYXRpb24nc1xuICogaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy5cbiAqIEBmdW5jdGlvbiB3aXRoTG9hZE5vdGlmaWNhdGlvbnNcbiAqIEBwYXJhbSB7TG9hZE5vdGlmaWNhdGlvbnNGbn0gbG9hZEZuIC0gVGhlIGZ1bmN0aW9uIHRvIGxvYWQgbm90aWZpY2F0aW9ucy5cbiAqIEByZXR1cm5zIHtOb3RpZmljYXRpb25GZWF0dXJlfSBBIG5vdGlmaWNhdGlvbiBmZWF0dXJlIGNvbmZpZ3VyZWQgdG8gbG9hZCBub3RpZmljYXRpb25zIGF0IHN0YXJ0dXAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoTG9hZE5vdGlmaWNhdGlvbnMobG9hZEZuOiBMb2FkTm90aWZpY2F0aW9uc0ZuKTogTm90aWZpY2F0aW9uRmVhdHVyZSB7XG4gIHJldHVybiBtYWtlTm90aWZpY2F0aW9uRmVhdHVyZShbXG4gICAge1xuICAgICAgcHJvdmlkZTogRU5WSVJPTk1FTlRfSU5JVElBTElaRVIsXG4gICAgICB1c2VGYWN0b3J5OiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvblNlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uU2VydmljZSk7XG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMkID0gbG9hZE5vdGlmaWNhdGlvbnMobG9hZEZuKTtcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgIG5vdGlmaWNhdGlvbnMkLnN1YnNjcmliZSgobm90aWZpY2F0aW9uUmVmcykgPT4gbm90aWZpY2F0aW9uU2VydmljZS5sb2FkKG5vdGlmaWNhdGlvblJlZnMpKTtcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdKTtcbn1cbiJdfQ==
|