Skip to content

Commit b16edfa

Browse files
committed
feat(notification): add service worker support for @ng-web-apis/notification
1 parent 83fd5c7 commit b16edfa

File tree

19 files changed

+262
-33
lines changed

19 files changed

+262
-33
lines changed

apps/demo/src/app/app.browser.module.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ import {LocationStrategy, PathLocationStrategy} from '@angular/common';
22
import {NgModule, SecurityContext} from '@angular/core';
33
import {BrowserModule} from '@angular/platform-browser';
44
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
5-
import {ServiceWorkerModule} from '@angular/service-worker';
5+
import {ServiceWorkerModule, SwPush} from '@angular/service-worker';
66
import {POSITION_OPTIONS} from '@ng-web-apis/geolocation';
7+
import {provideSwPush} from '@ng-web-apis/notification';
78
import {TuiLinkModule, TuiRootModule, TuiSvgModule} from '@taiga-ui/core';
89
import {HIGHLIGHT_OPTIONS, HighlightModule} from 'ngx-highlightjs';
910
import {MarkdownModule} from 'ngx-markdown';
@@ -35,6 +36,7 @@ import {AppRoutingModule} from './app.routes';
3536
],
3637
declarations: [AppComponent],
3738
providers: [
39+
provideSwPush(SwPush),
3840
{
3941
provide: HIGHLIGHT_OPTIONS,
4042
useValue: {fullLibraryLoader: async () => import(`highlight.js`)},

apps/demo/src/app/pages/notification/examples/01-getting-permission/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ import {CommonModule} from '@angular/common';
22
import {ChangeDetectionStrategy, Component, inject} from '@angular/core';
33
import {NotificationService} from '@ng-web-apis/notification';
44
import {PermissionsService} from '@ng-web-apis/permissions';
5+
import {TuiButtonModule} from '@taiga-ui/core';
56
import {TuiBadgeModule} from '@taiga-ui/kit';
67

78
@Component({
89
standalone: true,
910
selector: 'notification-page-example-1',
10-
imports: [CommonModule, TuiBadgeModule],
11+
imports: [CommonModule, TuiBadgeModule, TuiButtonModule],
1112
templateUrl: './index.html',
1213
changeDetection: ChangeDetectionStrategy.OnPush,
1314
})

apps/demo/src/app/pages/notification/examples/02-create-notification/index.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
import {CommonModule} from '@angular/common';
1+
import {AsyncPipe} from '@angular/common';
22
import {ChangeDetectionStrategy, Component, inject} from '@angular/core';
33
import {NotificationService} from '@ng-web-apis/notification';
44
import {isDenied, isGranted, PermissionsService} from '@ng-web-apis/permissions';
5+
import {TuiButtonModule} from '@taiga-ui/core';
56
import {filter, map, switchMap} from 'rxjs/operators';
67

78
@Component({
89
standalone: true,
910
selector: 'notification-page-example-2',
10-
imports: [CommonModule],
11+
imports: [AsyncPipe, TuiButtonModule],
1112
templateUrl: './index.html',
1213
changeDetection: ChangeDetectionStrategy.OnPush,
1314
})

apps/demo/src/app/pages/notification/examples/03-close-notification/index.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<button
22
tuiButton
33
[disabled]="(denied$ | async)!"
4+
[showLoader]="(showLoader$ | async)!"
45
(click)="sendNotification()"
56
>
67
Send notification
Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,32 @@
1-
import {CommonModule} from '@angular/common';
1+
import {AsyncPipe} from '@angular/common';
22
import {ChangeDetectionStrategy, Component, inject} from '@angular/core';
33
import {NotificationService} from '@ng-web-apis/notification';
44
import {isDenied, isGranted, PermissionsService} from '@ng-web-apis/permissions';
5-
import {timer} from 'rxjs';
6-
import {filter, map, switchMap, takeUntil} from 'rxjs/operators';
5+
import {TuiButtonModule} from '@taiga-ui/core';
6+
import {BehaviorSubject, timer} from 'rxjs';
7+
import {filter, map, switchMap, takeUntil, tap} from 'rxjs/operators';
78

89
@Component({
910
standalone: true,
1011
selector: 'notification-page-example-3',
11-
imports: [CommonModule],
12+
imports: [AsyncPipe, TuiButtonModule],
1213
templateUrl: './index.html',
1314
changeDetection: ChangeDetectionStrategy.OnPush,
1415
})
1516
export class NotificationPageExample3 {
1617
private readonly notifications: NotificationService = inject(NotificationService);
17-
1818
readonly denied$ = inject(PermissionsService)
1919
.state('notifications')
2020
.pipe(map(isDenied));
2121

22+
readonly showLoader$ = new BehaviorSubject(false);
23+
2224
sendNotification(): void {
2325
this.notifications
2426
.requestPermission()
2527
.pipe(
2628
filter(isGranted),
29+
tap(() => this.showLoader$.next(true)),
2730
switchMap(() =>
2831
this.notifications.open('Close me, please!', {
2932
requireInteraction: true,
@@ -32,7 +35,10 @@ export class NotificationPageExample3 {
3235
takeUntil(timer(5_000)), // close stream after 5 seconds
3336
)
3437
.subscribe({
35-
complete: () => console.info('Notification closed!'),
38+
complete: () => {
39+
this.showLoader$.next(false);
40+
console.info('Notification closed!');
41+
},
3642
});
3743
}
3844
}

apps/demo/src/app/pages/notification/examples/04-listen-notification-events/index.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
import {CommonModule} from '@angular/common';
1+
import {AsyncPipe} from '@angular/common';
22
import {ChangeDetectionStrategy, Component, inject} from '@angular/core';
33
import {NotificationService} from '@ng-web-apis/notification';
44
import {isDenied, isGranted, PermissionsService} from '@ng-web-apis/permissions';
5-
import {fromEvent} from 'rxjs';
5+
import {TuiButtonModule} from '@taiga-ui/core';
66
import {filter, map, switchMap} from 'rxjs/operators';
77

88
@Component({
99
standalone: true,
1010
selector: 'notification-page-example-4',
11-
imports: [CommonModule],
11+
imports: [AsyncPipe, TuiButtonModule],
1212
templateUrl: './index.html',
1313
changeDetection: ChangeDetectionStrategy.OnPush,
1414
})
@@ -31,7 +31,9 @@ export class NotificationPageExample4 {
3131
data: `Randomly generated number: ${Math.random().toFixed(2)}`,
3232
}),
3333
),
34-
switchMap(notification => fromEvent(notification, 'click')),
34+
switchMap(notification =>
35+
this.notifications.fromEvent(notification, 'click'),
36+
),
3537
)
3638
.subscribe(console.info);
3739
}

apps/demo/src/app/pages/notification/notification-page.component.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ import {CommonModule} from '@angular/common';
22
import {ChangeDetectionStrategy, Component, inject} from '@angular/core';
33
import {PermissionsService} from '@ng-web-apis/permissions';
44
import {TuiAddonDocModule, TuiDocExample} from '@taiga-ui/addon-doc';
5-
import {TuiButtonModule, TuiLinkModule, TuiNotificationModule} from '@taiga-ui/core';
6-
import {TuiBadgeModule} from '@taiga-ui/kit';
5+
import {TuiLinkModule, TuiNotificationModule} from '@taiga-ui/core';
76

87
import {NotificationPageExample1} from './examples/01-getting-permission';
98
import {NotificationPageExample2} from './examples/02-create-notification';
@@ -16,8 +15,6 @@ import {NotificationPageExample4} from './examples/04-listen-notification-events
1615
imports: [
1716
CommonModule,
1817
TuiAddonDocModule,
19-
TuiBadgeModule,
20-
TuiButtonModule,
2118
TuiNotificationModule,
2219
TuiLinkModule,
2320
NotificationPageExample1,

apps/demo/src/app/pages/notification/notification-page.template.html

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,9 @@ <h2 class="header">
146146
instance after its successful creation.
147147

148148
<p>
149-
Use rxjs function
149+
Use
150150
<code>fromEvent</code>
151-
to listen events that can be triggered on the
151+
method to listen events that can be triggered on the
152152
<code>Notification</code>
153153
instance.
154154
<br />
@@ -163,6 +163,26 @@ <h2 class="header">
163163
</a>
164164
.
165165
</p>
166+
167+
<tui-notification status="warning">
168+
Notifications spawned by Service Worker support only
169+
<a
170+
href="https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerGlobalScope/notificationclick_event"
171+
target="_blank"
172+
tuiLink
173+
>
174+
<code>click</code>
175+
</a>
176+
and
177+
<a
178+
href="https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerGlobalScope/notificationclose_event"
179+
target="_blank"
180+
tuiLink
181+
>
182+
<code>close</code>
183+
</a>
184+
events!
185+
</tui-notification>
166186
</ng-template>
167187

168188
<tui-notification

apps/demo/src/app/pages/payment-request/shop/shop.component.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {NgForOf} from '@angular/common';
1+
import {NgForOf, NgIf} from '@angular/common';
22
import {ChangeDetectionStrategy, Component} from '@angular/core';
33
import {PaymentRequestModule} from '@ng-web-apis/payment-request';
44

@@ -20,7 +20,7 @@ class ShopItem implements PaymentItem {
2020
@Component({
2121
standalone: true,
2222
selector: 'app-shop',
23-
imports: [NgForOf, PaymentRequestModule],
23+
imports: [NgForOf, NgIf, PaymentRequestModule],
2424
templateUrl: './shop.component.html',
2525
styleUrls: ['./shop.component.less'],
2626
changeDetection: ChangeDetectionStrategy.OnPush,

libs/common/src/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,11 @@ export * from './tokens/network-information';
1111
export * from './tokens/page-visibility';
1212
export * from './tokens/performance';
1313
export * from './tokens/screen';
14+
export * from './tokens/service-worker';
1415
export * from './tokens/session-storage';
1516
export * from './tokens/speech-recognition';
1617
export * from './tokens/speech-synthesis';
1718
export * from './tokens/user-agent';
1819
export * from './tokens/window';
20+
export * from './types/injection-token-type';
21+
export * from './utils/zone';

0 commit comments

Comments
 (0)