scatesdk-react 0.2.2 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -11,15 +11,13 @@ npm install scatesdk-react
11
11
  ```js
12
12
  import { ScateSDK } from 'scatesdk-react';
13
13
 
14
-
15
14
  // ...
16
- // It's better to initialize the SDK after Adjust SDK
15
+ // It's better to initialize the SDK after Adjust SDK
17
16
  ScateSDK.Init('your app id');
18
17
 
19
18
  // make sure to set adid from Adjust SDK
20
- let adid = Adjust.adid()
19
+ let adid = Adjust.adid();
21
20
  ScateSDK.SetAdid(adid);
22
-
23
21
  ```
24
22
 
25
23
  ### Send Events
@@ -27,15 +25,35 @@ ScateSDK.SetAdid(adid);
27
25
  To send events, you can use the following code:
28
26
 
29
27
  ```js
30
-
31
- ScateSDK.Event("button_clicked");
32
-
28
+ ScateSDK.Event('button_clicked');
33
29
  ```
34
30
 
35
31
  ### Send Events with Additional Data
36
32
 
37
33
  ```js
34
+ ScateSDK.EventWithValue('button_clicked', 'subscribe_btn');
35
+ ```
36
+
37
+ ### Get Remote Config for Key
38
+
39
+ ```js
40
+ ScateSDK.GetRemoteConfig('key', 'defaultValue');
41
+ ```
42
+
43
+ ### Add Listener
44
+
45
+ ```js
46
+ ScateSDK.AddListener(ScateEvents.REMOTE_CONFIG_READY, (event) => {});
47
+ ```
38
48
 
39
- ScateSDK.EventWithValue("button_clicked", "subscribe_btn");
49
+ ### Remove Listener
40
50
 
41
- ```
51
+ ```js
52
+ ScateSDK.RemoveListener(ScateEvents.REMOTE_CONFIG_READY, 1); //Listener id
53
+ ```
54
+
55
+ ### Clean Listeners
56
+
57
+ ```js
58
+ ScateSDK.CleanListeners(ScateEvents.REMOTE_CONFIG_READY);
59
+ ```
@@ -1,6 +1,5 @@
1
1
  package com.scatesdkreact;
2
2
 
3
-
4
3
  import androidx.annotation.NonNull;
5
4
 
6
5
  import com.facebook.react.bridge.Promise;
@@ -11,41 +10,58 @@ import com.facebook.react.module.annotations.ReactModule;
11
10
 
12
11
  @ReactModule(name = ScatesdkReactModule.NAME)
13
12
  public class ScatesdkReactModule extends ReactContextBaseJavaModule {
14
- public static final String NAME = "ScateSDK";
15
-
16
- public ScatesdkReactModule(ReactApplicationContext reactContext) {
17
- super(reactContext);
18
- }
19
-
20
- @Override
21
- @NonNull
22
- public String getName() {
23
- return NAME;
24
- }
25
-
26
- @ReactMethod
27
- public void Init(String appID, Promise promise){
28
- // not implemented yet
29
- promise.resolve("");
30
- }
31
-
32
- @ReactMethod
33
- public void SetAdid(String adid, Promise promise){
34
- // not implemented yet
35
- promise.resolve("");
36
- }
37
-
38
- @ReactMethod
39
- public void Event(String name, Promise promise){
40
- // not implemented yet
41
- promise.resolve("");
42
- }
43
-
44
- @ReactMethod
45
- public void EventWithValue(String name, String customValue, Promise promise){
46
- // not implemented yet
47
- promise.resolve("");
48
- }
49
13
 
14
+ public static final String NAME = "ScateSDK";
15
+
16
+ public ScatesdkReactModule(ReactApplicationContext reactContext) {
17
+ super(reactContext);
18
+ }
19
+
20
+ @Override
21
+ @NonNull
22
+ public String getName() {
23
+ return NAME;
24
+ }
25
+
26
+ @ReactMethod
27
+ public void Init(String appID, Promise promise) {
28
+ // not implemented yet
29
+ promise.resolve("");
30
+ }
31
+
32
+ @ReactMethod
33
+ public void SetAdid(String adid, Promise promise) {
34
+ // not implemented yet
35
+ promise.resolve("");
36
+ }
37
+
38
+ @ReactMethod
39
+ public void Event(String name, Promise promise) {
40
+ // not implemented yet
41
+ promise.resolve("");
42
+ }
43
+
44
+ @ReactMethod
45
+ public void EventWithValue(String name, String customValue, Promise promise) {
46
+ // not implemented yet
47
+ promise.resolve("");
48
+ }
49
+
50
+ @ReactMethod
51
+ public void GetRemoteConfig(String key, String defaultValue, Promise promise) {
52
+ // not implemented yet
53
+ promise.resolve("");
54
+ }
55
+
56
+ @ReactMethod
57
+ public void AddListener(String name, Promise promise) {
58
+ // not implemented yet
59
+ promise.resolve("");
60
+ }
50
61
 
62
+ @ReactMethod
63
+ public void RemoveListener(String name, Promise promise) {
64
+ // not implemented yet
65
+ promise.resolve("");
66
+ }
51
67
  }
@@ -1,2 +1,3 @@
1
1
  #import <React/RCTBridgeModule.h>
2
2
  #import <React/RCTViewManager.h>
3
+ #import <React/RCTEventEmitter.h>
@@ -1,6 +1,7 @@
1
1
  #import <React/RCTBridgeModule.h>
2
+ #import "React/RCTEventEmitter.h"
2
3
 
3
- @interface RCT_EXTERN_MODULE(ScateSDK, NSObject)
4
+ @interface RCT_EXTERN_MODULE(ScateSDK, RCTEventEmitter)
4
5
 
5
6
  RCT_EXTERN_METHOD(Init:(NSString *)appID
6
7
  withResolver:(RCTPromiseResolveBlock)resolve
@@ -18,7 +19,15 @@ RCT_EXTERN_METHOD(EventWithValue:(NSString *)name
18
19
  withCustomValue:(NSString* )customValue
19
20
  withResolver:(RCTPromiseResolveBlock)resolve
20
21
  withRejecter:(RCTPromiseRejectBlock)reject)
21
-
22
+
23
+ RCT_EXTERN_METHOD(GetRemoteConfig:(NSString *)key
24
+ withDefaultValue:(NSString *)defaultValue
25
+ withResolver:(RCTPromiseResolveBlock)resolve
26
+ withRejecter:(RCTPromiseRejectBlock)reject)
27
+
28
+ RCT_EXTERN_METHOD(AddListener:(NSString*) name)
29
+ RCT_EXTERN_METHOD(RemoveListener:(NSString*) name)
30
+
22
31
  + (BOOL)requiresMainQueueSetup
23
32
  {
24
33
  return NO;
@@ -1,7 +1,10 @@
1
1
  import ScateSDK
2
2
 
3
3
  @objc(ScateSDK)
4
- class ScateSDK: NSObject {
4
+ class ScateSDK: RCTEventEmitter {
5
+ override func supportedEvents() -> [String]! {
6
+ return [ScateCoreSDK.RemoteConfigsReady.rawValue]
7
+ }
5
8
 
6
9
  @objc(Init:withResolver:withRejecter:)
7
10
  func Init(appID: String, resolve:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) -> Void {
@@ -14,17 +17,59 @@ class ScateSDK: NSObject {
14
17
  ScateCoreSDK.SetAdid(adid: adid)
15
18
  resolve("")
16
19
  }
17
-
18
- @objc(Event:withResolver:withRejecter:)
20
+
21
+ @objc(Event:withResolver:withRejecter:)
19
22
  func Event(name: String, resolve:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) -> Void {
20
- ScateCoreSDK.Event(name: name)
21
- resolve("")
22
- }
23
+ ScateCoreSDK.Event(name: name)
24
+ resolve("")
25
+ }
23
26
 
24
- @objc(EventWithValue:withCustomValue:withResolver:withRejecter:)
27
+ @objc(EventWithValue:withCustomValue:withResolver:withRejecter:)
25
28
  func EventWithValue(name: String, value: String, resolve:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) -> Void {
26
29
  ScateCoreSDK.Event(name: name, customValue: value)
27
- resolve("")
28
- }
30
+ resolve("")
31
+ }
29
32
 
33
+ @objc(GetRemoteConfig:withDefaultValue:withResolver:withRejecter:)
34
+ func GetRemoteConfig(key: String, defaultValue: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
35
+ let config = ScateCoreSDK.GetRemoteConfig(key: key, defaultValue: defaultValue)
36
+ resolve(config)
37
+ }
38
+
39
+ @objc
40
+ func AddListener(_ name: String) {
41
+ NotificationCenter.default.addObserver(self,
42
+ selector: #selector(handleListener),
43
+ name: Notification.Name(name),
44
+ object: nil)
45
+ }
46
+
47
+ @objc
48
+ func RemoveListener(_ name: String) {
49
+ NotificationCenter.default.removeObserver(self,
50
+ name: Notification.Name(name),
51
+ object: nil)
52
+ }
53
+
54
+ @objc
55
+ func handleListener(notification: Notification) {
56
+ var userInfoJSON: [String: Any] = [:]
57
+
58
+ if let userInfo = notification.userInfo {
59
+ do {
60
+ let data = try JSONSerialization.data(withJSONObject: userInfo, options: [])
61
+ if let jsonString = String(data: data, encoding: .utf8) {
62
+ }
63
+ } catch {
64
+ print("Error converting userInfo to JSON: \(error.localizedDescription)")
65
+ }
66
+ }
67
+
68
+ let eventName = notification.name.rawValue
69
+
70
+ userInfoJSON["data"] = notification.userInfo
71
+ userInfoJSON["event"] = eventName
72
+
73
+ sendEvent(withName: eventName, body: userInfoJSON)
74
+ }
30
75
  }
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = exports.ScateSDK = void 0;
6
+ exports.default = exports.ScateSDK = exports.ScateEvents = void 0;
7
7
  var _reactNative = require("react-native");
8
8
  const LINKING_ERROR = `The package 'scatesdk-react' doesn't seem to be linked. Make sure: \n\n` + _reactNative.Platform.select({
9
9
  ios: "- You have run 'pod install'\n",
@@ -14,7 +14,13 @@ const _ScateSDK = _reactNative.NativeModules.ScateSDK ? _reactNative.NativeModul
14
14
  throw new Error(LINKING_ERROR);
15
15
  }
16
16
  });
17
+ const eventEmitter = new _reactNative.NativeEventEmitter(_ScateSDK);
18
+ let ScateEvents = exports.ScateEvents = /*#__PURE__*/function (ScateEvents) {
19
+ ScateEvents["REMOTE_CONFIG_READY"] = "Scate_RemoteConfigsReady";
20
+ return ScateEvents;
21
+ }({});
17
22
  class ScateSDK {
23
+ static listeners = new Map();
18
24
  static Init(appID) {
19
25
  return _ScateSDK.Init(appID);
20
26
  }
@@ -27,6 +33,41 @@ class ScateSDK {
27
33
  static EventWithValue(name, customValue) {
28
34
  return _ScateSDK.EventWithValue(name, customValue);
29
35
  }
36
+ static GetRemoteConfig(key, defaultValue) {
37
+ return _ScateSDK.GetRemoteConfig(key, defaultValue);
38
+ }
39
+ static HandleEvent = (name, event) => {
40
+ const listeners = this.listeners.get(name);
41
+ if (listeners) {
42
+ listeners.forEach(listener => {
43
+ listener(event); // Pass event data to listeners
44
+ });
45
+ }
46
+ };
47
+ static AddListener(name, listener) {
48
+ const listenerId = Date.now().toString(); // Create unique listener ID based on current timestamp
49
+ if (!this.listeners.has(name)) {
50
+ this.listeners.set(name, new Map());
51
+ _ScateSDK.AddListener(name); // Register native listener
52
+ eventEmitter.addListener(name, event => this.HandleEvent(name, event));
53
+ }
54
+ this.listeners.get(name)?.set(listenerId, listener); // Store listener with ID
55
+ return listenerId; // Return the listener ID
56
+ }
57
+ static RemoveListener(name, listenerId) {
58
+ const listeners = this.listeners.get(name);
59
+ if (listeners && listeners.has(listenerId)) {
60
+ listeners.delete(listenerId); // Remove listener from map
61
+ if (listeners.size === 0) {
62
+ this.listeners.delete(name); // Remove entire map entry if no listeners remain
63
+ _ScateSDK.RemoveListener(name); // Unregister native listener
64
+ }
65
+ }
66
+ }
67
+ static ClearListeners(name) {
68
+ this.listeners.delete(name); // Remove all listeners for a given event
69
+ _ScateSDK.RemoveListener(name); // Unregister native listener
70
+ }
30
71
  }
31
72
  exports.ScateSDK = ScateSDK;
32
73
  var _default = exports.default = ScateSDK;
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","LINKING_ERROR","Platform","select","ios","default","_ScateSDK","NativeModules","ScateSDK","Proxy","get","Error","Init","appID","SetAdid","adid","Event","name","EventWithValue","customValue","exports","_default"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEA,MAAMC,aAAa,GAChB,yEAAwE,GACzEC,qBAAQ,CAACC,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMC,SAAS,GAAGC,0BAAa,CAACC,QAAQ,GACpCD,0BAAa,CAACC,QAAQ,GACtB,IAAIC,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACV,aAAa,CAAC;EAChC;AACF,CACF,CAAC;AAEE,MAAMO,QAAQ,CAAC;EACpB,OAAcI,IAAIA,CAACC,KAAa,EAAiB;IAC/C,OAAOP,SAAS,CAACM,IAAI,CAACC,KAAK,CAAC;EAC9B;EAEA,OAAcC,OAAOA,CAACC,IAAY,EAAiB;IACjD,OAAOT,SAAS,CAACQ,OAAO,CAACC,IAAI,CAAC;EAChC;EAEA,OAAcC,KAAKA,CAACC,IAAY,EAAiB;IAC/C,OAAOX,SAAS,CAACU,KAAK,CAACC,IAAI,CAAC;EAC9B;EAEA,OAAcC,cAAcA,CAC1BD,IAAY,EACZE,WAAmB,EACJ;IACf,OAAOb,SAAS,CAACY,cAAc,CAACD,IAAI,EAAEE,WAAW,CAAC;EACpD;AACF;AAACC,OAAA,CAAAZ,QAAA,GAAAA,QAAA;AAAA,IAAAa,QAAA,GAAAD,OAAA,CAAAf,OAAA,GACcG,QAAQ","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","LINKING_ERROR","Platform","select","ios","default","_ScateSDK","NativeModules","ScateSDK","Proxy","get","Error","eventEmitter","NativeEventEmitter","ScateEvents","exports","listeners","Map","Init","appID","SetAdid","adid","Event","name","EventWithValue","customValue","GetRemoteConfig","key","defaultValue","HandleEvent","event","forEach","listener","AddListener","listenerId","Date","now","toString","has","set","addListener","RemoveListener","delete","size","ClearListeners","_default"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import { NativeModules, Platform } from 'react-native';
1
+ import { NativeEventEmitter, NativeModules, Platform } from 'react-native';
2
2
  const LINKING_ERROR = `The package 'scatesdk-react' doesn't seem to be linked. Make sure: \n\n` + Platform.select({
3
3
  ios: "- You have run 'pod install'\n",
4
4
  default: ''
@@ -8,7 +8,13 @@ const _ScateSDK = NativeModules.ScateSDK ? NativeModules.ScateSDK : new Proxy({}
8
8
  throw new Error(LINKING_ERROR);
9
9
  }
10
10
  });
11
+ const eventEmitter = new NativeEventEmitter(_ScateSDK);
12
+ export let ScateEvents = /*#__PURE__*/function (ScateEvents) {
13
+ ScateEvents["REMOTE_CONFIG_READY"] = "Scate_RemoteConfigsReady";
14
+ return ScateEvents;
15
+ }({});
11
16
  export class ScateSDK {
17
+ static listeners = new Map();
12
18
  static Init(appID) {
13
19
  return _ScateSDK.Init(appID);
14
20
  }
@@ -21,6 +27,41 @@ export class ScateSDK {
21
27
  static EventWithValue(name, customValue) {
22
28
  return _ScateSDK.EventWithValue(name, customValue);
23
29
  }
30
+ static GetRemoteConfig(key, defaultValue) {
31
+ return _ScateSDK.GetRemoteConfig(key, defaultValue);
32
+ }
33
+ static HandleEvent = (name, event) => {
34
+ const listeners = this.listeners.get(name);
35
+ if (listeners) {
36
+ listeners.forEach(listener => {
37
+ listener(event); // Pass event data to listeners
38
+ });
39
+ }
40
+ };
41
+ static AddListener(name, listener) {
42
+ const listenerId = Date.now().toString(); // Create unique listener ID based on current timestamp
43
+ if (!this.listeners.has(name)) {
44
+ this.listeners.set(name, new Map());
45
+ _ScateSDK.AddListener(name); // Register native listener
46
+ eventEmitter.addListener(name, event => this.HandleEvent(name, event));
47
+ }
48
+ this.listeners.get(name)?.set(listenerId, listener); // Store listener with ID
49
+ return listenerId; // Return the listener ID
50
+ }
51
+ static RemoveListener(name, listenerId) {
52
+ const listeners = this.listeners.get(name);
53
+ if (listeners && listeners.has(listenerId)) {
54
+ listeners.delete(listenerId); // Remove listener from map
55
+ if (listeners.size === 0) {
56
+ this.listeners.delete(name); // Remove entire map entry if no listeners remain
57
+ _ScateSDK.RemoveListener(name); // Unregister native listener
58
+ }
59
+ }
60
+ }
61
+ static ClearListeners(name) {
62
+ this.listeners.delete(name); // Remove all listeners for a given event
63
+ _ScateSDK.RemoveListener(name); // Unregister native listener
64
+ }
24
65
  }
25
66
  export default ScateSDK;
26
67
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["NativeModules","Platform","LINKING_ERROR","select","ios","default","_ScateSDK","ScateSDK","Proxy","get","Error","Init","appID","SetAdid","adid","Event","name","EventWithValue","customValue"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"AAAA,SAASA,aAAa,EAAEC,QAAQ,QAAQ,cAAc;AAEtD,MAAMC,aAAa,GAChB,yEAAwE,GACzED,QAAQ,CAACE,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMC,SAAS,GAAGN,aAAa,CAACO,QAAQ,GACpCP,aAAa,CAACO,QAAQ,GACtB,IAAIC,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACR,aAAa,CAAC;EAChC;AACF,CACF,CAAC;AAEL,OAAO,MAAMK,QAAQ,CAAC;EACpB,OAAcI,IAAIA,CAACC,KAAa,EAAiB;IAC/C,OAAON,SAAS,CAACK,IAAI,CAACC,KAAK,CAAC;EAC9B;EAEA,OAAcC,OAAOA,CAACC,IAAY,EAAiB;IACjD,OAAOR,SAAS,CAACO,OAAO,CAACC,IAAI,CAAC;EAChC;EAEA,OAAcC,KAAKA,CAACC,IAAY,EAAiB;IAC/C,OAAOV,SAAS,CAACS,KAAK,CAACC,IAAI,CAAC;EAC9B;EAEA,OAAcC,cAAcA,CAC1BD,IAAY,EACZE,WAAmB,EACJ;IACf,OAAOZ,SAAS,CAACW,cAAc,CAACD,IAAI,EAAEE,WAAW,CAAC;EACpD;AACF;AACA,eAAeX,QAAQ","ignoreList":[]}
1
+ {"version":3,"names":["NativeEventEmitter","NativeModules","Platform","LINKING_ERROR","select","ios","default","_ScateSDK","ScateSDK","Proxy","get","Error","eventEmitter","ScateEvents","listeners","Map","Init","appID","SetAdid","adid","Event","name","EventWithValue","customValue","GetRemoteConfig","key","defaultValue","HandleEvent","event","forEach","listener","AddListener","listenerId","Date","now","toString","has","set","addListener","RemoveListener","delete","size","ClearListeners"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,8 +1,17 @@
1
+ export declare enum ScateEvents {
2
+ REMOTE_CONFIG_READY = "Scate_RemoteConfigsReady"
3
+ }
1
4
  export declare class ScateSDK {
2
- static Init(appID: String): Promise<void>;
3
- static SetAdid(adid: String): Promise<void>;
4
- static Event(name: String): Promise<void>;
5
- static EventWithValue(name: String, customValue: String): Promise<void>;
5
+ private static listeners;
6
+ static Init(appID: string): Promise<void>;
7
+ static SetAdid(adid: string): Promise<void>;
8
+ static Event(name: string): Promise<void>;
9
+ static EventWithValue(name: string, customValue: string): Promise<void>;
10
+ static GetRemoteConfig(key: string, defaultValue: string): Promise<string>;
11
+ static HandleEvent: (name: string, event: any) => void;
12
+ static AddListener(name: string, listener: Function): string;
13
+ static RemoveListener(name: string, listenerId: string): void;
14
+ static ClearListeners(name: string): void;
6
15
  }
7
16
  export default ScateSDK;
8
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAmBA,qBAAa,QAAQ;WACL,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAIlC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAIpC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAIlC,cAAc,CAC1B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;CAGjB;AACD,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAqBA,oBAAY,WAAW;IACrB,mBAAmB,6BAA6B;CACjD;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAiD;WAE3D,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAIlC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAIpC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAIlC,cAAc,CAC1B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;WAIF,eAAe,CAC3B,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC;IAIlB,OAAc,WAAW,SAAU,MAAM,SAAS,GAAG,UAOnD;WAEY,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;WAW5C,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;WAW/C,cAAc,CAAC,IAAI,EAAE,MAAM;CAI1C;AAED,eAAe,QAAQ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scatesdk-react",
3
- "version": "0.2.2",
3
+ "version": "0.3.5",
4
4
  "description": "Scate SDK is made for developers to integrate Scate's services into their apps. Please visit https://www.scate.io for more information.",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -16,7 +16,7 @@ Pod::Spec.new do |s|
16
16
 
17
17
  s.source_files = "ios/**/*.{h,m,mm,swift}"
18
18
 
19
- s.dependency "ScateSDK", "0.0.2"
19
+ s.dependency "ScateSDK", "0.3.26"
20
20
 
21
21
  # Use install_modules_dependencies helper to install the dependencies if React Native version >=0.71.0.
22
22
  # See https://github.com/facebook/react-native/blob/febf6b7f33fdb4904669f99d795eba4c0f95d7bf/scripts/cocoapods/new_architecture.rb#L79.
package/src/index.tsx CHANGED
@@ -1,4 +1,4 @@
1
- import { NativeModules, Platform } from 'react-native';
1
+ import { NativeEventEmitter, NativeModules, Platform } from 'react-native';
2
2
 
3
3
  const LINKING_ERROR =
4
4
  `The package 'scatesdk-react' doesn't seem to be linked. Make sure: \n\n` +
@@ -17,24 +17,76 @@ const _ScateSDK = NativeModules.ScateSDK
17
17
  }
18
18
  );
19
19
 
20
+ const eventEmitter = new NativeEventEmitter(_ScateSDK);
21
+
22
+ export enum ScateEvents {
23
+ REMOTE_CONFIG_READY = 'Scate_RemoteConfigsReady',
24
+ }
25
+
20
26
  export class ScateSDK {
21
- public static Init(appID: String): Promise<void> {
27
+ private static listeners: Map<string, Map<string, Function>> = new Map();
28
+
29
+ public static Init(appID: string): Promise<void> {
22
30
  return _ScateSDK.Init(appID);
23
31
  }
24
32
 
25
- public static SetAdid(adid: String): Promise<void> {
33
+ public static SetAdid(adid: string): Promise<void> {
26
34
  return _ScateSDK.SetAdid(adid);
27
35
  }
28
36
 
29
- public static Event(name: String): Promise<void> {
37
+ public static Event(name: string): Promise<void> {
30
38
  return _ScateSDK.Event(name);
31
39
  }
32
40
 
33
41
  public static EventWithValue(
34
- name: String,
35
- customValue: String
42
+ name: string,
43
+ customValue: string
36
44
  ): Promise<void> {
37
45
  return _ScateSDK.EventWithValue(name, customValue);
38
46
  }
47
+
48
+ public static GetRemoteConfig(
49
+ key: string,
50
+ defaultValue: string
51
+ ): Promise<string> {
52
+ return _ScateSDK.GetRemoteConfig(key, defaultValue);
53
+ }
54
+
55
+ public static HandleEvent = (name: string, event: any) => {
56
+ const listeners = this.listeners.get(name);
57
+ if (listeners) {
58
+ listeners.forEach((listener) => {
59
+ listener(event); // Pass event data to listeners
60
+ });
61
+ }
62
+ };
63
+
64
+ public static AddListener(name: string, listener: Function) {
65
+ const listenerId = Date.now().toString(); // Create unique listener ID based on current timestamp
66
+ if (!this.listeners.has(name)) {
67
+ this.listeners.set(name, new Map());
68
+ _ScateSDK.AddListener(name); // Register native listener
69
+ eventEmitter.addListener(name, (event) => this.HandleEvent(name, event));
70
+ }
71
+ this.listeners.get(name)?.set(listenerId, listener); // Store listener with ID
72
+ return listenerId; // Return the listener ID
73
+ }
74
+
75
+ public static RemoveListener(name: string, listenerId: string) {
76
+ const listeners = this.listeners.get(name);
77
+ if (listeners && listeners.has(listenerId)) {
78
+ listeners.delete(listenerId); // Remove listener from map
79
+ if (listeners.size === 0) {
80
+ this.listeners.delete(name); // Remove entire map entry if no listeners remain
81
+ _ScateSDK.RemoveListener(name); // Unregister native listener
82
+ }
83
+ }
84
+ }
85
+
86
+ public static ClearListeners(name: string) {
87
+ this.listeners.delete(name); // Remove all listeners for a given event
88
+ _ScateSDK.RemoveListener(name); // Unregister native listener
89
+ }
39
90
  }
91
+
40
92
  export default ScateSDK;