# @nativescript/shared-notification-delegate

> Shared delegate helper for iOS.

Latest version **1.0.2** (published 2021-02-03) · Apache-2.0 license · 0 weekly downloads

## Install

```sh
npm install @nativescript/shared-notification-delegate
pnpm add @nativescript/shared-notification-delegate
yarn add @nativescript/shared-notification-delegate
bun add @nativescript/shared-notification-delegate
```

## Health

**Score 20/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.2 |
| Published | 2021-02-03 |
| First published | 2020-08-02 |
| Weekly downloads | 0 |
| License | Apache-2.0 |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 29 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 2 |
| Author | Eduardo Speroni |
| Maintainers | tdermendjiev, nativescript-user, tns-bot, lini, tachev, rosen-vladimirov, stoskov, rosen_vladimirov, walkerrunpdx, bradmartin, nathanaela, davecoffin, rigor789, nativescript-bot, multishiv19, eddyverbruggen, edusperoni, facetious |
| Keywords | NativeScript, JavaScript, TypeScript, iOS |

## Links

- npm: https://www.npmjs.com/package/@nativescript/shared-notification-delegate
- Repository: https://github.com/edusperoni/nativescript-shared-notification-delegate
- Issues: https://github.com/edusperoni/nativescript-shared-notification-delegate/issues
- npm.io page: https://npm.io/package/@nativescript/shared-notification-delegate

## Alternatives

- [@openai/codex-sdk](https://npm.io/package/@openai/codex-sdk.md) — 731.4K weekly downloads
- [babel-plugin-transform-react-jsx](https://npm.io/package/babel-plugin-transform-react-jsx.md) — 565.0K weekly downloads
- [babel-helper-remove-or-void](https://npm.io/package/babel-helper-remove-or-void.md) — 508.5K weekly downloads
- [@pnpm/store-controller-types](https://npm.io/package/@pnpm/store-controller-types.md) — 186.9K weekly downloads
- [react-native-signature-canvas](https://npm.io/package/react-native-signature-canvas.md) — 155.6K weekly downloads

## Recent versions

- 1.0.2 (latest) — 2021-02-03
- 1.0.0 — 2020-08-02

## README

# Nativescript Shared Notification Delegate

This project aims to prevent the shortcomings that come from the iOS implementation of only allowing a single delegate.

## Installation

```javascript
ns plugin add @nativescript/shared-notification-delegate
```

## Usage 

Import `SharedNotificationDelegate` and add Observers
	
```typescript
import { SharedNotificationDelegate } from '@nativescript/shared-notification-delegate';

...


SharedNotificationDelegate.addObserver({
    delegateUniqueKey: "myUniqueKey", // ensures uniqueness, if not set or is null/undefined, allows multiple of the same
    userNotificationCenterWillPresentNotificationWithCompletionHandler: (notificationCenter, notification, handler, stop, next) => {
        console.log("notification received by observer");
        // is this notification something I should handle?
        if (shouldHandleThis) {
            // do stuff
            // intercept it and show alert
            handler(UNNotificationPresentationOptions.Alert);
            return;
        }
        // not mine, next should handle
        next();
    }
});
```

## API

#### SharedNotificationDelegate Methods
| Method |  Description |
| --- | --- |
| addObserver(observer: `DelegateObserver`, priority?: `number`): `void` | Adds a delegate observer of a certain priority (lower means first). Default priority is 100. |
| removeObserver(observer: `DelegateObserver`) | removes a DelegateObserver |
| removeObserverByUniqueKey(key: `any`) | removes a DelegateObserver by its unique key |

#### DelegateObserver Interface

A DelegateObserver can implement 3 methods from `UNUserNotificationCenterDelegate` with the addition of some details:

```typescript
interface DelegateObserver {
    userNotificationCenterDidReceiveNotificationResponseWithCompletionHandler?(center: any /* UNUserNotificationCenter */, response: any /* UNNotificationResponse */, completionHandler: () => void, next: () => void): void;
    userNotificationCenterOpenSettingsForNotification?(center: any /* UNUserNotificationCenter */, notification: any /* UNNotification */, stop: () => void, next: () => void): void;
    userNotificationCenterWillPresentNotificationWithCompletionHandler?(center: any /* UNUserNotificationCenter */, notification: any /* UNNotification */, completionHandler: (p1: any /* UNNotificationPresentationOptions */) => void, next: () => void): void;
    /**
     * if set to not null/undefined, will ensure only one is registered
     */
    delegateUniqueKey?: any;
}
```

All the functions are called asynchronously in a chain.

Calling a `completionHandler` immediately stops the observer chain. `next()` **must** be called if the method will not be handling the notification.

Calling `stop()` on `userNotificationCenterOpenSettingsForNotification` prevents the event bubbling to the rest.

Only one method will be processed at a time, this means you can take as long as you want (including making http calls, for example), as long as you just call `completionHandler`, `stop` and `next` when you're finished.

If a DelegateObserver has a `delegateUniqueKey`, the `SharedNotificationDelegate` will ensure only the latest copy of the observer is present. This is especially useful if debugging with HMR, which may add multiple observers on application reload.

    
## License

Apache License Version 2.0, January 2004

---
_Source: https://npm.io/package/@nativescript/shared-notification-delegate · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
