Customizing Peer Dependencies
Updated
This section explains which dependencies are mandatory, which can be customized, and how to register or unregister custom implementations for seamless integration.
Why is Customization required?
In some cases, your existing codebase may already include specific libraries for functionalities such as SVG rendering, web views, and network information. If the Sprinklr SDK enforces its own versions of these dependencies, it could lead to conflicts and compatibility issues with your setup.
To maintain consistency and avoid disruptions, the Sprinklr SDK allows you to inject custom implementations for certain dependencies. This ensures a seamless integration process, allowing you to:
Use your preferred libraries.
Avoid breaking existing functionality.
Leverage the full capabilities of the Sprinklr SDK without replacing core dependencies.
Types of Peer Dependencies
The peer dependencies in the Sprinklr SDK are classified into mandatory and customizable dependencies.
1. Mandatory Peer Dependencies
These dependencies are required for the Sprinklr SDK to function properly. They cannot be replaced, and their versions must be greater than or equal to the specified ones:
Dependency | Required Version |
redux | >= 4.0.0 |
react-native | >= 0.70.0 |
react-redux | >= 8.0.0 |
react | >= 18.2.0 |
redux-saga | >= 1.0.1 |
2. Customizable Dependencies
The following dependencies can be overridden with your own implementations. Each dependency is identified by a dependency key and an implementation type provided by Sprinklr.
Dependency | Implementation Type | Dependency Key |
react-native-svg | SPRSvg | SVG |
react-native-webview | SPRWebview | WEBVIEW |
@react-native-community/netinfo | SPRNetInfo | NET_INFO |
@react-native-clipboard/clipboard | SPRClipboard | CLIPBOARD |
StatusBar from react-native | SPRStatusBar | STATUS_BAR |
@react-native-camera-roll/camera-roll | SPRCameraRoll | CAMERA_ROLL |
react-native-permissions | SPRPermissions | PERMISSIONS |
react-native-vector-icons | SPRVectorIcons | VECTOR_ICONS |
react-native-video | SPRVideoPlayer | VIDEO_PLAYER |
react-native-image-picker | SPRMediaPicker | MEDIA_PICKER |
react-native-blob-util | SPRFileManager | FILE_MANAGER |
@react-native-async-storage/async-storage | SPRCustomStorage | ASYNC_STORAGE |
Registering Custom Implementations
To provide a custom implementation, follow these steps:
1. Identify the Dependency Key
Each dependency corresponds to a dependency key that you will use for registration.
2. Import the Required Modules
Import the necessary implementation type and MessengerDependenciesManager from the Sprinklr SDK.
Example: Importing an Implementation Type
import { SPRCustomStorage, EXTERNAL_DEPENDENCY } from '@sprinklrjs/chat-native-client';
Note: The above import is just an example for SPRCustomStorage and does not represent an actual implementation.
3. Register Multiple Dependencies
You can register multiple dependencies at once using registerDependencies().
Example: Registering Custom Implementations
import { EXTERNAL_DEPENDENCY, MessengerDependenciesManager } from '@sprinklrjs/chat-native-client';
MessengerDependenciesManager.getInstance().registerDependencies({
[EXTERNAL_DEPENDENCY.ASYNC_STORAGE]: {
getItem: (key) => Promise.resolve(''),
setItem: (key, value) => Promise.resolve(),
removeItem: (key) => Promise.resolve(),
},
});
4. Register a Single Dependency
If you only need to override a specific dependency, use registerDependency().
Example: Registering a Single Dependency
import { EXTERNAL_DEPENDENCY, MessengerDependenciesManager } from '@sprinklrjs/chat-native-client';
MessengerDependenciesManager.getInstance().registerDependency(EXTERNAL_DEPENDENCY.ASYNC_STORAGE, {
getItem: (key) => Promise.resolve(''),
setItem: (key, value) => Promise.resolve(),
removeItem: (key) => Promise.resolve(),
});
Unregistering Custom Implementations
If you need to remove a custom implementation, you can unregister a specific dependency or all custom dependencies at once.
1. Unregister a Single Dependency
import { EXTERNAL_DEPENDENCY, MessengerDependenciesManager } from '@sprinklrjs/chat-native-client';
MessengerDependenciesManager.getInstance().unregisterDependency(EXTERNAL_DEPENDENCY.ASYNC_STORAGE);
2. Unregister All Custom Dependencies
MessengerDependenciesManager.getInstance().unregisterDependencies();
Customizing peer dependencies in the Sprinklr SDK helps avoid conflicts, maintain consistency, and enhance flexibility in your integration. By registering or unregistering dependencies as needed, you can ensure a seamless and efficient implementation of the SDK while retaining control over your app’s existing libraries.
Additional Resources