@notifi-network/notifi-react-wallet-target-plugin
Version:
The Wallet Target Plugin context provider for @notifi-network/notifi-react
115 lines (85 loc) • 4.84 kB
Markdown
# -network/notifi-react-wallet-target-plugin
A plugin for `-network/notifi-react` that enables advanced wallet-based notification targets.
This package provides the `NotifiContextProviderWithWalletTargetPlugin` context component, allowing seamless integration of Wallet Target functionality into Notifi’s React context system. By utilizing the `toggleTargetAvailability.wallet` prop within `NotifiTargetContext`, you can dynamically enable or disable wallet-based targeting at runtime and leverage the plugin’s capabilities.
## Important Note
This package is a plugin for `-network/notifi-react` and cannot be used independently. Ensure that you have `-network/notifi-react` installed before integrating this plugin.
## Key Benefits
- Maintains the same interface style as `notifi-react`, ensuring minimal changes when integrating.
- Modular design allows developers to opt-in only if Wallet Target functionality is needed.
- Works alongside the primary `NotifiContextProvider`, adding a specialized layer for detecting and handling Wallet Target contexts.
- Provides flexibility: use the core package for standard notification flows or extend with this plugin for wallet-based targeting.
## Usage (with -network/notifi-react)
Below is a minimal example demonstrating how to replace the standard Notifi provider with the plugin-based provider:
```tsx
import { NotifiContextProviderWithWalletTargetPlugin } from '@notifi-network/notifi-react-wallet-target-plugin';
import React from 'react';
function App() {
return (
<NotifiContextProviderWithWalletTargetPlugin
/* Same props as NotifiContextProvider */
>
{/* Include Notifi features like NotifiCardModal or custom forms here */}
{children}
</NotifiContextProviderWithWalletTargetPlugin>
);
}
export default App;
```
When `toggleTargetAvailability.wallet` is set to `true`, the plugin enables wallet-specific notification targets (e.g., Coinbase). To utilize this functionality, ensure your app is wrapped with `NotifiContextProviderWithWalletTargetPlugin` instead of the standard `NotifiContextProvider` when wallet targeting is required.
## Additional Configuration
This plugin is powered by `-react-sdk`, which requires requires specific configuration to handle the `wasm` file.
The following configuration is required in nextjs (the recommended framework).
- **Nextjs version 14.2.0 or above**
```js
nextConfig = {
experimental: {
serverComponentsExternalPackages: [
'@xmtp/user-preferences-bindings-wasm',
],
},
};
// ...other configs
```
- **Nextjs version below 14.2.0**
It requires manual copy of the wasm file to the server chunk folder. We will need to grab the `user_preferences_bindings_wasm_bg.wasm` file from [/user-preferences-bindings-wasm
](https://www.npmjs.com/package/@xmtp/user-preferences-bindings-wasm) npm package: `Code > dist > bundler > user_preferences_bindings_wasm_bg.wasm`. And put it in the `public/wasm` directory. Then add the following configuration in the `next.config.js` file.
```js
nextConfig = {
...nextConfig,
webpack: (config) => {
config.plugins.push(
new CopyPlugin({
patterns: [{ from: 'public/wasm', to: './server/chunks' }],
}),
);
return config;
},
};
// ...other configs
```
The projects might encounter the following error if the above configuration is not set up properly.
```bash
Error: ENOENT: no such file or directory, open '/path/to/project/.next/server/vendor-chunks/user_preferences_bindings_wasm_bg.wasm'
```
> Reference:
>
> - [official xmpt example](https://github.com/xmtp/xmtp-web/blob/main/examples/nextjs/next.config.mjs)
> - [Notifi React Example config](https://github.com/notifi-network/notifi-sdk-ts/blob/main/packages/notifi-react-example-v2/next.config.mjs)
## Advanced Usage
Instead of using `NotifiContextProviderWithWalletTargetPlugin`, which wraps `NotifiContextProvider`, you can use `NotifiWalletTargetContext` independently. This is useful when integrating `NotifiWalletTargetContext` into a different part of your app or pairing it with another context provider.
```tsx
import { NotifiTargetContextProvider } from '@notifi-network/notifi-react';
import { NotifiWalletTargetContext } from '@notifi-network/notifi-react-wallet-target-plugin';
// ... other imports
function App() {
return (
<NotifiWalletTargetContext {...props}>
<NotifiTargetContextProvider toggleTargetAvailability={{ wallet: true }}>
{/* Add Notifi components like NotifiCardModal or custom forms here */}
{children}
</NotifiTargetContextProvider>
</NotifiWalletTargetContext>
);
}
```
This approach gives you more flexibility in managing notification contexts within your application.