Skip to content

Commit 9a6670f

Browse files
authored
Merge pull request #124 from OneSignal/fadi/sdk-2946-add-custom-events-for-onesignal-react-package
feat: add custom events for web packages
2 parents f767065 + 8e2c156 commit 9a6670f

File tree

6 files changed

+180
-111
lines changed

6 files changed

+180
-111
lines changed

scripts/build

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,11 @@ mv build/vue/v3.tgz dist/vue/v3.tgz
5353

5454
# This is required to use 'npm link' when testing local builds
5555
# We do this last so unneed files are not included in the releases.
56-
log '👀 Install and Linting'
57-
concurrently --kill-others-on-fail "npm ci --loglevel=error --prefix=build/vue/v3" "npm ci --loglevel=error --prefix=build/vue/v2" "npm ci --loglevel=error --prefix=build/react" "npm i --prefix=build/onesignal-ngx"
58-
59-
log '✅ Done!'
56+
log '👀 Install + Linting + Build'
57+
58+
if concurrently --kill-others-on-fail "npm ci --loglevel=error --prefix=build/vue/v3" "npm ci --loglevel=error --prefix=build/vue/v2" "npm ci --loglevel=error --prefix=build/react" "npm i --prefix=build/onesignal-ngx"; then
59+
log '✅ Done!'
60+
else
61+
log '❌ Build failed!'
62+
exit 1
63+
fi

src/scaffolds/angular-workspace/projects/onesignal-ngx/src/lib/onesignal-ngx.service.ts

Lines changed: 58 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ export interface IOneSignalNotifications {
353353
setDefaultUrl(url: string): Promise<void>;
354354
setDefaultTitle(title: string): Promise<void>;
355355
isPushSupported(): boolean;
356-
requestPermission(): Promise<void>;
356+
requestPermission(): Promise<boolean>;
357357
addEventListener<K extends NotificationEventName>(event: K, listener: (obj: NotificationEventTypeMap[K]) => void): void;
358358
removeEventListener<K extends NotificationEventName>(event: K, listener: (obj: NotificationEventTypeMap[K]) => void): void;
359359
}
@@ -394,6 +394,7 @@ export interface IOneSignalUser {
394394
removeEventListener(event: 'change', listener: (change: UserChangeEvent) => void): void;
395395
setLanguage(language: string): void;
396396
getLanguage(): string;
397+
trackEvent(name: string, properties?: Record<string, unknown>): void;
397398
}
398399
export interface IOneSignalPushSubscription {
399400
id: string | null | undefined;
@@ -405,119 +406,128 @@ export interface IOneSignalPushSubscription {
405406
removeEventListener(event: 'change', listener: (change: SubscriptionChangeEvent) => void): void;
406407
}
407408
function oneSignalLogin(externalId: string, jwtToken?: string): Promise<void> {
408-
409409
return new Promise((resolve, reject) => {
410410
if (isOneSignalScriptFailed) {
411411
reject(new Error('OneSignal script failed to load.'));
412412
return;
413413
}
414414

415415
window.OneSignalDeferred?.push((oneSignal: IOneSignalOneSignal) => {
416-
oneSignal.login(externalId, jwtToken).then(() => resolve());
416+
oneSignal.login(externalId, jwtToken)
417+
.then(() => resolve())
418+
.catch(error => reject(error));
417419
});
418420
});
419421
}
420422
function oneSignalLogout(): Promise<void> {
421-
422423
return new Promise((resolve, reject) => {
423424
if (isOneSignalScriptFailed) {
424425
reject(new Error('OneSignal script failed to load.'));
425426
return;
426427
}
427428

428429
window.OneSignalDeferred?.push((oneSignal: IOneSignalOneSignal) => {
429-
oneSignal.logout().then(() => resolve());
430+
oneSignal.logout()
431+
.then(() => resolve())
432+
.catch(error => reject(error));
430433
});
431434
});
432435
}
433436
function oneSignalSetConsentGiven(consent: boolean): Promise<void> {
434-
435437
return new Promise((resolve, reject) => {
436438
if (isOneSignalScriptFailed) {
437439
reject(new Error('OneSignal script failed to load.'));
438440
return;
439441
}
440442

441443
window.OneSignalDeferred?.push((oneSignal: IOneSignalOneSignal) => {
442-
oneSignal.setConsentGiven(consent).then(() => resolve());
444+
oneSignal.setConsentGiven(consent)
445+
.then(() => resolve())
446+
.catch(error => reject(error));
443447
});
444448
});
445449
}
446450
function oneSignalSetConsentRequired(requiresConsent: boolean): Promise<void> {
447-
448451
return new Promise((resolve, reject) => {
449452
if (isOneSignalScriptFailed) {
450453
reject(new Error('OneSignal script failed to load.'));
451454
return;
452455
}
453456

454457
window.OneSignalDeferred?.push((oneSignal: IOneSignalOneSignal) => {
455-
oneSignal.setConsentRequired(requiresConsent).then(() => resolve());
458+
oneSignal.setConsentRequired(requiresConsent)
459+
.then(() => resolve())
460+
.catch(error => reject(error));
456461
});
457462
});
458463
}
459464
function slidedownPromptPush(options?: AutoPromptOptions): Promise<void> {
460-
461465
return new Promise((resolve, reject) => {
462466
if (isOneSignalScriptFailed) {
463467
reject(new Error('OneSignal script failed to load.'));
464468
return;
465469
}
466470

467471
window.OneSignalDeferred?.push((oneSignal: IOneSignalOneSignal) => {
468-
oneSignal.Slidedown.promptPush(options).then(() => resolve());
472+
oneSignal.Slidedown.promptPush(options)
473+
.then(() => resolve())
474+
.catch(error => reject(error));
469475
});
470476
});
471477
}
472478
function slidedownPromptPushCategories(options?: AutoPromptOptions): Promise<void> {
473-
474479
return new Promise((resolve, reject) => {
475480
if (isOneSignalScriptFailed) {
476481
reject(new Error('OneSignal script failed to load.'));
477482
return;
478483
}
479484

480485
window.OneSignalDeferred?.push((oneSignal: IOneSignalOneSignal) => {
481-
oneSignal.Slidedown.promptPushCategories(options).then(() => resolve());
486+
oneSignal.Slidedown.promptPushCategories(options)
487+
.then(() => resolve())
488+
.catch(error => reject(error));
482489
});
483490
});
484491
}
485492
function slidedownPromptSms(options?: AutoPromptOptions): Promise<void> {
486-
487493
return new Promise((resolve, reject) => {
488494
if (isOneSignalScriptFailed) {
489495
reject(new Error('OneSignal script failed to load.'));
490496
return;
491497
}
492498

493499
window.OneSignalDeferred?.push((oneSignal: IOneSignalOneSignal) => {
494-
oneSignal.Slidedown.promptSms(options).then(() => resolve());
500+
oneSignal.Slidedown.promptSms(options)
501+
.then(() => resolve())
502+
.catch(error => reject(error));
495503
});
496504
});
497505
}
498506
function slidedownPromptEmail(options?: AutoPromptOptions): Promise<void> {
499-
500507
return new Promise((resolve, reject) => {
501508
if (isOneSignalScriptFailed) {
502509
reject(new Error('OneSignal script failed to load.'));
503510
return;
504511
}
505512

506513
window.OneSignalDeferred?.push((oneSignal: IOneSignalOneSignal) => {
507-
oneSignal.Slidedown.promptEmail(options).then(() => resolve());
514+
oneSignal.Slidedown.promptEmail(options)
515+
.then(() => resolve())
516+
.catch(error => reject(error));
508517
});
509518
});
510519
}
511520
function slidedownPromptSmsAndEmail(options?: AutoPromptOptions): Promise<void> {
512-
513521
return new Promise((resolve, reject) => {
514522
if (isOneSignalScriptFailed) {
515523
reject(new Error('OneSignal script failed to load.'));
516524
return;
517525
}
518526

519527
window.OneSignalDeferred?.push((oneSignal: IOneSignalOneSignal) => {
520-
oneSignal.Slidedown.promptSmsAndEmail(options).then(() => resolve());
528+
oneSignal.Slidedown.promptSmsAndEmail(options)
529+
.then(() => resolve())
530+
.catch(error => reject(error));
521531
});
522532
});
523533
}
@@ -534,41 +544,44 @@ function slidedownRemoveEventListener(event: SlidedownEventName, listener: (wasS
534544
}
535545

536546
function notificationsSetDefaultUrl(url: string): Promise<void> {
537-
538547
return new Promise((resolve, reject) => {
539548
if (isOneSignalScriptFailed) {
540549
reject(new Error('OneSignal script failed to load.'));
541550
return;
542551
}
543552

544553
window.OneSignalDeferred?.push((oneSignal: IOneSignalOneSignal) => {
545-
oneSignal.Notifications.setDefaultUrl(url).then(() => resolve());
554+
oneSignal.Notifications.setDefaultUrl(url)
555+
.then(() => resolve())
556+
.catch(error => reject(error));
546557
});
547558
});
548559
}
549560
function notificationsSetDefaultTitle(title: string): Promise<void> {
550-
551561
return new Promise((resolve, reject) => {
552562
if (isOneSignalScriptFailed) {
553563
reject(new Error('OneSignal script failed to load.'));
554564
return;
555565
}
556566

557567
window.OneSignalDeferred?.push((oneSignal: IOneSignalOneSignal) => {
558-
oneSignal.Notifications.setDefaultTitle(title).then(() => resolve());
568+
oneSignal.Notifications.setDefaultTitle(title)
569+
.then(() => resolve())
570+
.catch(error => reject(error));
559571
});
560572
});
561573
}
562-
function notificationsRequestPermission(): Promise<void> {
563-
574+
function notificationsRequestPermission(): Promise<boolean> {
564575
return new Promise((resolve, reject) => {
565576
if (isOneSignalScriptFailed) {
566577
reject(new Error('OneSignal script failed to load.'));
567578
return;
568579
}
569580

570581
window.OneSignalDeferred?.push((oneSignal: IOneSignalOneSignal) => {
571-
oneSignal.Notifications.requestPermission().then(() => resolve());
582+
oneSignal.Notifications.requestPermission()
583+
.then(result => resolve(result))
584+
.catch(error => reject(error));
572585
});
573586
});
574587
}
@@ -585,28 +598,30 @@ function notificationsRemoveEventListener<K extends NotificationEventName>(event
585598
}
586599

587600
function sessionSendOutcome(outcomeName: string, outcomeWeight?: number): Promise<void> {
588-
589601
return new Promise((resolve, reject) => {
590602
if (isOneSignalScriptFailed) {
591603
reject(new Error('OneSignal script failed to load.'));
592604
return;
593605
}
594606

595607
window.OneSignalDeferred?.push((oneSignal: IOneSignalOneSignal) => {
596-
oneSignal.Session.sendOutcome(outcomeName, outcomeWeight).then(() => resolve());
608+
oneSignal.Session.sendOutcome(outcomeName, outcomeWeight)
609+
.then(() => resolve())
610+
.catch(error => reject(error));
597611
});
598612
});
599613
}
600614
function sessionSendUniqueOutcome(outcomeName: string): Promise<void> {
601-
602615
return new Promise((resolve, reject) => {
603616
if (isOneSignalScriptFailed) {
604617
reject(new Error('OneSignal script failed to load.'));
605618
return;
606619
}
607620

608621
window.OneSignalDeferred?.push((oneSignal: IOneSignalOneSignal) => {
609-
oneSignal.Session.sendUniqueOutcome(outcomeName).then(() => resolve());
622+
oneSignal.Session.sendUniqueOutcome(outcomeName)
623+
.then(() => resolve())
624+
.catch(error => reject(error));
610625
});
611626
});
612627
}
@@ -720,29 +735,37 @@ async function userGetLanguage(): string {
720735
return retVal;
721736
}
722737

738+
function userTrackEvent(name: string, properties?: Record<string, unknown>): void {
739+
window.OneSignalDeferred?.push((oneSignal: IOneSignalOneSignal) => {
740+
oneSignal.User.trackEvent(name, properties);
741+
});
742+
}
743+
723744
function pushSubscriptionOptIn(): Promise<void> {
724-
725745
return new Promise((resolve, reject) => {
726746
if (isOneSignalScriptFailed) {
727747
reject(new Error('OneSignal script failed to load.'));
728748
return;
729749
}
730750

731751
window.OneSignalDeferred?.push((oneSignal: IOneSignalOneSignal) => {
732-
oneSignal.User.PushSubscription.optIn().then(() => resolve());
752+
oneSignal.User.PushSubscription.optIn()
753+
.then(() => resolve())
754+
.catch(error => reject(error));
733755
});
734756
});
735757
}
736758
function pushSubscriptionOptOut(): Promise<void> {
737-
738759
return new Promise((resolve, reject) => {
739760
if (isOneSignalScriptFailed) {
740761
reject(new Error('OneSignal script failed to load.'));
741762
return;
742763
}
743764

744765
window.OneSignalDeferred?.push((oneSignal: IOneSignalOneSignal) => {
745-
oneSignal.User.PushSubscription.optOut().then(() => resolve());
766+
oneSignal.User.PushSubscription.optOut()
767+
.then(() => resolve())
768+
.catch(error => reject(error));
746769
});
747770
});
748771
}
@@ -795,6 +818,7 @@ const UserNamespace: IOneSignalUser = {
795818
removeEventListener: userRemoveEventListener,
796819
setLanguage: userSetLanguage,
797820
getLanguage: userGetLanguage,
821+
trackEvent: userTrackEvent,
798822
PushSubscription: PushSubscriptionNamespace,
799823
};
800824

src/static/react/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
},
3636
"scripts": {
3737
"lint": "eslint . --ext .js,.jsx,.ts,.tsx",
38-
"build": "vite build",
38+
"build": "tsc --noEmit && vite build",
3939
"test": "vitest run",
4040
"prepare": "npm run lint && npm run test && npm run build"
4141
},

0 commit comments

Comments
 (0)