@survicate/react-native-survicate 4.0.1 → 4.1.0
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 +7 -0
- package/android/.gradle/7.5.1/checksums/checksums.lock +0 -0
- package/android/.gradle/7.5.1/checksums/md5-checksums.bin +0 -0
- package/android/.gradle/7.5.1/checksums/sha1-checksums.bin +0 -0
- package/android/.gradle/7.5.1/executionHistory/executionHistory.bin +0 -0
- package/android/.gradle/7.5.1/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/7.5.1/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/7.5.1/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/7.5.1/fileHashes/resourceHashesCache.bin +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
- package/android/.gradle/config.properties +2 -0
- package/android/.gradle/file-system.probe +0 -0
- package/android/.idea/compiler.xml +6 -0
- package/android/.idea/gradle.xml +18 -0
- package/android/.idea/migrations.xml +10 -0
- package/android/.idea/misc.xml +9 -0
- package/android/.idea/modules/android.androidTest.iml +6 -0
- package/android/.idea/modules/android.iml +6 -0
- package/android/.idea/modules/android.main.iml +6 -0
- package/android/.idea/modules/android.unitTest.iml +6 -0
- package/android/.idea/sonarlint/issuestore/0/d/0df9aa085b7b8db1dccfbc855a1ace7351a87b1f +0 -0
- package/android/.idea/sonarlint/issuestore/3/4/348c0bbc5ca5287a00a390486ca37dd7b380944a +0 -0
- package/android/.idea/sonarlint/issuestore/5/9/590364a981f27a7c9f1304f29901ba5f8b10c7bb +0 -0
- package/android/.idea/sonarlint/issuestore/6/1/61130b71a87185f8a73a14cbce1419badde70d8b +0 -0
- package/android/.idea/sonarlint/issuestore/f/0/f07866736216be0ee2aba49e392191aeae700a35 +0 -0
- package/android/.idea/sonarlint/issuestore/index.pb +11 -0
- package/android/.idea/sonarlint/securityhotspotstore/0/d/0df9aa085b7b8db1dccfbc855a1ace7351a87b1f +0 -0
- package/android/.idea/sonarlint/securityhotspotstore/3/4/348c0bbc5ca5287a00a390486ca37dd7b380944a +0 -0
- package/android/.idea/sonarlint/securityhotspotstore/5/9/590364a981f27a7c9f1304f29901ba5f8b10c7bb +0 -0
- package/android/.idea/sonarlint/securityhotspotstore/6/1/61130b71a87185f8a73a14cbce1419badde70d8b +0 -0
- package/android/.idea/sonarlint/securityhotspotstore/f/0/f07866736216be0ee2aba49e392191aeae700a35 +0 -0
- package/android/.idea/sonarlint/securityhotspotstore/index.pb +11 -0
- package/android/.idea/vcs.xml +6 -0
- package/android/build.gradle +1 -8
- package/android/local.properties +8 -0
- package/android/src/main/java/com/survicate/react/SurvicateModuleImpl.java +27 -0
- package/android/src/main/java/com/survicate/react/SurvicateRNEventListener.java +108 -0
- package/ios/SurvicateBindings.h +5 -2
- package/ios/SurvicateBindings.mm +52 -1
- package/ios/SurvicateBindings.xcodeproj/xcuserdata/pawelgodlewski.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
- package/ios/SurvicateBindings.xcworkspace/xcuserdata/pawelgodlewski.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/lib/commonjs/index.js +66 -5
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/index.js +65 -5
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/index.d.ts +37 -2
- package/lib/typescript/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/react-native-survicate.podspec +1 -1
- package/src/NativeSurvicateModule.ts +2 -0
- package/src/index.ts +132 -10
package/README.md
CHANGED
|
@@ -60,6 +60,13 @@ const numberTrait = new UserTrait('age', 25);
|
|
|
60
60
|
const booleanTrait = new UserTrait('isPremium', true);
|
|
61
61
|
const dateTrait = new UserTrait('lastLogin', new Date());
|
|
62
62
|
const timeIntervalTrait = new UserTrait('timeOfPurchase', new Date());
|
|
63
|
+
const listener: SurvicateEventListener = {
|
|
64
|
+
onSurveyDisplayed(event: SurveyDisplayedEvent) {},
|
|
65
|
+
onQuestionAnswered(event: QuestionAnsweredEvent) {},
|
|
66
|
+
onSurveyClosed(event: SurveyClosedEvent) {},
|
|
67
|
+
onSurveyCompleted(event: SurveyCompletedEvent) {},
|
|
68
|
+
}
|
|
69
|
+
Survicate.addSurvicateEventListener(listener);
|
|
63
70
|
Survicate.reset();
|
|
64
71
|
```
|
|
65
72
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<project version="4">
|
|
3
|
+
<component name="GradleMigrationSettings" migrationVersion="1" />
|
|
4
|
+
<component name="GradleSettings">
|
|
5
|
+
<option name="linkedExternalProjectsSettings">
|
|
6
|
+
<GradleProjectSettings>
|
|
7
|
+
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
|
8
|
+
<option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
|
|
9
|
+
<option name="modules">
|
|
10
|
+
<set>
|
|
11
|
+
<option value="$PROJECT_DIR$" />
|
|
12
|
+
</set>
|
|
13
|
+
</option>
|
|
14
|
+
<option name="resolveExternalAnnotations" value="false" />
|
|
15
|
+
</GradleProjectSettings>
|
|
16
|
+
</option>
|
|
17
|
+
</component>
|
|
18
|
+
</project>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<project version="4">
|
|
2
|
+
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
|
3
|
+
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">
|
|
4
|
+
<output url="file://$PROJECT_DIR$/build/classes" />
|
|
5
|
+
</component>
|
|
6
|
+
<component name="ProjectType">
|
|
7
|
+
<option name="id" value="Android" />
|
|
8
|
+
</component>
|
|
9
|
+
</project>
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
|
|
2
|
+
i
|
|
3
|
+
9src/oldarch/java/com/survicate/react/SurvicateModule.java,6/1/61130b71a87185f8a73a14cbce1419badde70d8b
|
|
4
|
+
j
|
|
5
|
+
:src/main/java/com/survicate/react/SurvicateModuleImpl.java,0/d/0df9aa085b7b8db1dccfbc855a1ace7351a87b1f
|
|
6
|
+
<
|
|
7
|
+
build.gradle,f/0/f07866736216be0ee2aba49e392191aeae700a35
|
|
8
|
+
o
|
|
9
|
+
?src/main/java/com/survicate/react/SurvicateRNEventListener.java,5/9/590364a981f27a7c9f1304f29901ba5f8b10c7bb
|
|
10
|
+
g
|
|
11
|
+
7src/main/java/com/survicate/react/SurvicatePackage.java,3/4/348c0bbc5ca5287a00a390486ca37dd7b380944a
|
package/android/.idea/sonarlint/securityhotspotstore/0/d/0df9aa085b7b8db1dccfbc855a1ace7351a87b1f
ADDED
|
File without changes
|
package/android/.idea/sonarlint/securityhotspotstore/3/4/348c0bbc5ca5287a00a390486ca37dd7b380944a
ADDED
|
File without changes
|
package/android/.idea/sonarlint/securityhotspotstore/5/9/590364a981f27a7c9f1304f29901ba5f8b10c7bb
ADDED
|
File without changes
|
package/android/.idea/sonarlint/securityhotspotstore/6/1/61130b71a87185f8a73a14cbce1419badde70d8b
ADDED
|
File without changes
|
package/android/.idea/sonarlint/securityhotspotstore/f/0/f07866736216be0ee2aba49e392191aeae700a35
ADDED
|
File without changes
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
|
|
2
|
+
i
|
|
3
|
+
9src/oldarch/java/com/survicate/react/SurvicateModule.java,6/1/61130b71a87185f8a73a14cbce1419badde70d8b
|
|
4
|
+
j
|
|
5
|
+
:src/main/java/com/survicate/react/SurvicateModuleImpl.java,0/d/0df9aa085b7b8db1dccfbc855a1ace7351a87b1f
|
|
6
|
+
<
|
|
7
|
+
build.gradle,f/0/f07866736216be0ee2aba49e392191aeae700a35
|
|
8
|
+
o
|
|
9
|
+
?src/main/java/com/survicate/react/SurvicateRNEventListener.java,5/9/590364a981f27a7c9f1304f29901ba5f8b10c7bb
|
|
10
|
+
g
|
|
11
|
+
7src/main/java/com/survicate/react/SurvicatePackage.java,3/4/348c0bbc5ca5287a00a390486ca37dd7b380944a
|
package/android/build.gradle
CHANGED
|
@@ -99,14 +99,7 @@ repositories {
|
|
|
99
99
|
dependencies {
|
|
100
100
|
//noinspection GradleDynamicVersion
|
|
101
101
|
implementation 'com.facebook.react:react-native:+' // From node_modules
|
|
102
|
-
implementation ('com.survicate:survicate-sdk:4.0
|
|
103
|
-
exclude group: 'io.coil-kt', module: 'coil-base'
|
|
104
|
-
exclude group: 'io.coil-kt', module: 'coil-gif'
|
|
105
|
-
exclude group: 'io.coil-kt', module: 'coil-svg'
|
|
106
|
-
}
|
|
107
|
-
implementation 'io.coil-kt:coil-base:2.4.0'
|
|
108
|
-
implementation 'io.coil-kt:coil-gif:2.4.0'
|
|
109
|
-
implementation 'io.coil-kt:coil-svg:2.4.0'
|
|
102
|
+
implementation ('com.survicate:survicate-sdk:4.1.0')
|
|
110
103
|
}
|
|
111
104
|
|
|
112
105
|
if (isNewArchitectureEnabled()) {
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
## This file must *NOT* be checked into Version Control Systems,
|
|
2
|
+
# as it contains information specific to your local configuration.
|
|
3
|
+
#
|
|
4
|
+
# Location of the SDK. This is only used by Gradle.
|
|
5
|
+
# For customization when using a Version Control System, please read the
|
|
6
|
+
# header note.
|
|
7
|
+
#Thu Jan 25 11:41:28 CET 2024
|
|
8
|
+
sdk.dir=/Users/pawelgodlewski/Library/Android/sdk
|
|
@@ -12,10 +12,14 @@ public class SurvicateModuleImpl extends SurvicateModule {
|
|
|
12
12
|
public static final String NAME = "SurvicateBindings";
|
|
13
13
|
|
|
14
14
|
private final ReactApplicationContext reactContext;
|
|
15
|
+
private final SurvicateRNEventListener eventListener;
|
|
16
|
+
|
|
17
|
+
private int listenerCount = 0;
|
|
15
18
|
|
|
16
19
|
public SurvicateModuleImpl(ReactApplicationContext reactContext) {
|
|
17
20
|
super(reactContext);
|
|
18
21
|
this.reactContext = reactContext;
|
|
22
|
+
this.eventListener = new SurvicateRNEventListener(reactContext);
|
|
19
23
|
}
|
|
20
24
|
|
|
21
25
|
@Override
|
|
@@ -67,4 +71,27 @@ public class SurvicateModuleImpl extends SurvicateModule {
|
|
|
67
71
|
public void setWorkspaceKey(String workspaceKey) {
|
|
68
72
|
Survicate.setWorkspaceKey(workspaceKey);
|
|
69
73
|
}
|
|
74
|
+
|
|
75
|
+
@ReactMethod
|
|
76
|
+
public void addListener(String eventName) {
|
|
77
|
+
if (listenerCount == 0) {
|
|
78
|
+
Survicate.setEventListener(eventListener);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
listenerCount++;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
@ReactMethod
|
|
85
|
+
public void removeListeners(int count) {
|
|
86
|
+
listenerCount -= count;
|
|
87
|
+
|
|
88
|
+
if (listenerCount == 0) {
|
|
89
|
+
Survicate.setEventListener(null);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
@ReactMethod
|
|
94
|
+
public void removeListeners(double count) {
|
|
95
|
+
removeListeners((int) count);
|
|
96
|
+
}
|
|
70
97
|
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
package com.survicate.react;
|
|
2
|
+
|
|
3
|
+
import androidx.annotation.NonNull;
|
|
4
|
+
|
|
5
|
+
import com.facebook.react.bridge.Arguments;
|
|
6
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
7
|
+
import com.facebook.react.bridge.ReactContext;
|
|
8
|
+
import com.facebook.react.bridge.WritableMap;
|
|
9
|
+
import com.facebook.react.bridge.WritableArray;
|
|
10
|
+
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
|
11
|
+
import com.survicate.surveys.SurvicateAnswer;
|
|
12
|
+
import com.survicate.surveys.SurvicateEventListener;
|
|
13
|
+
import com.survicate.surveys.SurveyDisplayedEvent;
|
|
14
|
+
import com.survicate.surveys.QuestionAnsweredEvent;
|
|
15
|
+
import com.survicate.surveys.SurveyClosedEvent;
|
|
16
|
+
import com.survicate.surveys.SurveyCompletedEvent;
|
|
17
|
+
|
|
18
|
+
import javax.annotation.Nullable;
|
|
19
|
+
|
|
20
|
+
class SurvicateRNEventListener extends SurvicateEventListener {
|
|
21
|
+
|
|
22
|
+
private static final String SURVEY_ID = "surveyId";
|
|
23
|
+
private static final String SURVEY_NAME = "surveyName";
|
|
24
|
+
private static final String RESPONSE_UUID = "responseUuid";
|
|
25
|
+
private static final String VISITOR_UUID = "visitorUuid";
|
|
26
|
+
private static final String QUESTION_ID = "questionId";
|
|
27
|
+
private static final String QUESTION = "question";
|
|
28
|
+
private static final String ANSWER_TYPE = "answerType";
|
|
29
|
+
private static final String ANSWER_ID = "answerId";
|
|
30
|
+
private static final String ANSWER_IDS = "answerIds";
|
|
31
|
+
private static final String ANSWER_VALUE = "answerValue";
|
|
32
|
+
private static final String PANEL_ANSWER_URL = "panelAnswerUrl";
|
|
33
|
+
|
|
34
|
+
private ReactApplicationContext reactContext;
|
|
35
|
+
|
|
36
|
+
public SurvicateRNEventListener(ReactApplicationContext reactContext) {
|
|
37
|
+
this.reactContext = reactContext;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@Override
|
|
41
|
+
public void onSurveyDisplayed(@NonNull SurveyDisplayedEvent event) {
|
|
42
|
+
WritableMap params = Arguments.createMap();
|
|
43
|
+
params.putString(SURVEY_ID, event.getSurveyId());
|
|
44
|
+
sendEvent(reactContext, "onSurveyDisplayed", params);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
@Override
|
|
48
|
+
public void onQuestionAnswered(@NonNull QuestionAnsweredEvent event) {
|
|
49
|
+
WritableMap params = Arguments.createMap();
|
|
50
|
+
params.putString(SURVEY_ID, event.getSurveyId());
|
|
51
|
+
params.putString(SURVEY_NAME, event.getSurveyName());
|
|
52
|
+
params.putString(RESPONSE_UUID, event.getResponseUuid());
|
|
53
|
+
params.putString(VISITOR_UUID, event.getVisitorUuid());
|
|
54
|
+
params.putString(PANEL_ANSWER_URL, event.getPanelAnswerUrl());
|
|
55
|
+
params.putDouble(QUESTION_ID, event.getQuestionId());
|
|
56
|
+
params.putString(QUESTION, event.getQuestionText());
|
|
57
|
+
|
|
58
|
+
if (event.getAnswer().getType() != null) {
|
|
59
|
+
params.putString(ANSWER_TYPE, event.getAnswer().getType());
|
|
60
|
+
} else {
|
|
61
|
+
params.putNull(ANSWER_TYPE);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (event.getAnswer().getId() != null) {
|
|
65
|
+
params.putDouble(ANSWER_ID, event.getAnswer().getId());
|
|
66
|
+
} else {
|
|
67
|
+
params.putNull(ANSWER_ID);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (event.getAnswer().getIds() != null) {
|
|
71
|
+
WritableArray ids = Arguments.createArray();
|
|
72
|
+
for (long id : event.getAnswer().getIds()) {
|
|
73
|
+
ids.pushDouble(id);
|
|
74
|
+
}
|
|
75
|
+
params.putArray(ANSWER_IDS, ids);
|
|
76
|
+
} else {
|
|
77
|
+
params.putArray(ANSWER_IDS, Arguments.createArray());
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (event.getAnswer().getValue() != null) {
|
|
81
|
+
params.putString(ANSWER_VALUE, event.getAnswer().getValue());
|
|
82
|
+
} else {
|
|
83
|
+
params.putNull(ANSWER_VALUE);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
sendEvent(reactContext, "onQuestionAnswered", params);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
@Override
|
|
90
|
+
public void onSurveyClosed(@NonNull SurveyClosedEvent event) {
|
|
91
|
+
WritableMap params = Arguments.createMap();
|
|
92
|
+
params.putString(SURVEY_ID, event.getSurveyId());
|
|
93
|
+
sendEvent(reactContext, "onSurveyClosed", params);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
@Override
|
|
97
|
+
public void onSurveyCompleted(@NonNull SurveyCompletedEvent event) {
|
|
98
|
+
WritableMap params = Arguments.createMap();
|
|
99
|
+
params.putString(SURVEY_ID, event.getSurveyId());
|
|
100
|
+
sendEvent(reactContext, "onSurveyCompleted", params);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
private void sendEvent(ReactContext reactContext, String eventName, @Nullable WritableMap params) {
|
|
104
|
+
reactContext
|
|
105
|
+
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
|
|
106
|
+
.emit(eventName, params);
|
|
107
|
+
}
|
|
108
|
+
}
|
package/ios/SurvicateBindings.h
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
+
#import <Survicate/Survicate-Swift.h>
|
|
2
|
+
#import <React/RCTEventEmitter.h>
|
|
3
|
+
|
|
1
4
|
#ifdef RCT_NEW_ARCH_ENABLED
|
|
2
5
|
#import "RNSurvicateSpec.h"
|
|
3
6
|
|
|
4
|
-
@interface SurvicateBindings :
|
|
7
|
+
@interface SurvicateBindings : RCTEventEmitter<NativeSurvicateModuleSpec, SurvicateDelegate>
|
|
5
8
|
#else
|
|
6
9
|
#import <React/RCTBridgeModule.h>
|
|
7
10
|
|
|
8
|
-
@interface SurvicateBindings :
|
|
11
|
+
@interface SurvicateBindings : RCTEventEmitter<RCTBridgeModule, SurvicateDelegate>
|
|
9
12
|
#endif
|
|
10
13
|
|
|
11
14
|
@end
|
package/ios/SurvicateBindings.mm
CHANGED
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
#import <Survicate/Survicate-Swift.h>
|
|
3
3
|
|
|
4
4
|
@implementation SurvicateBindings
|
|
5
|
+
{
|
|
6
|
+
bool hasListeners;
|
|
7
|
+
}
|
|
5
8
|
|
|
6
9
|
- (dispatch_queue_t)methodQueue
|
|
7
10
|
{
|
|
@@ -56,10 +59,58 @@ RCT_EXPORT_METHOD(setWorkspaceKey:(NSString *)workspaceKey)
|
|
|
56
59
|
[[SurvicateSdk shared] setWorkspaceKey:workspaceKey error: &error];
|
|
57
60
|
}
|
|
58
61
|
|
|
62
|
+
|
|
63
|
+
- (NSArray<NSString*> *)supportedEvents {
|
|
64
|
+
return @[@"onQuestionAnswered", @"onSurveyClosed", @"onSurveyCompleted", @"onSurveyDisplayed"];
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
- (void)startObserving {
|
|
68
|
+
hasListeners = YES;
|
|
69
|
+
[[SurvicateSdk shared] setDelegate:self];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
- (void)stopObserving {
|
|
73
|
+
hasListeners = NO;
|
|
74
|
+
[[SurvicateSdk shared] setDelegate:nil];
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
- (void)surveyDisplayedWithEvent:(SurveyDisplayedEvent * _Nonnull)event {
|
|
78
|
+
if (!hasListeners) return;
|
|
79
|
+
[self sendEventWithName:@"onSurveyDisplayed" body:@{@"surveyId": event.surveyId}];
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
- (void)questionAnswered:(QuestionAnsweredEvent * _Nonnull)event {
|
|
83
|
+
if (!hasListeners) return;
|
|
84
|
+
[self sendEventWithName:@"onQuestionAnswered" body:
|
|
85
|
+
@{@"surveyId": event.surveyId,
|
|
86
|
+
@"surveyName": event.surveyName,
|
|
87
|
+
@"visitorUuid": event.visitorUUID,
|
|
88
|
+
@"responseUuid": event.responseUUID,
|
|
89
|
+
@"questionId": @(event.questionID),
|
|
90
|
+
@"question": event.question,
|
|
91
|
+
@"answerValue": event.answer.value ?: [NSNull null],
|
|
92
|
+
@"answerId": event.answer.id ?: [NSNull null],
|
|
93
|
+
@"answerType": event.answer.type ?: [NSNull null],
|
|
94
|
+
@"answerIds": event.answer.ids ?: @[],
|
|
95
|
+
@"panelAnswerUrl": event.panelAnswerUrl,
|
|
96
|
+
}
|
|
97
|
+
];
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
- (void)surveyCompletedWithEvent:(SurveyCompletedEvent * _Nonnull)event {
|
|
101
|
+
if (!hasListeners) return;
|
|
102
|
+
[self sendEventWithName:@"onSurveyCompleted" body:@{@"surveyId": event.surveyId}];
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
- (void)surveyClosedWithEvent:(SurveyClosedEvent * _Nonnull)event {
|
|
106
|
+
if (!hasListeners) return;
|
|
107
|
+
[self sendEventWithName:@"onSurveyClosed" body:@{@"surveyId": event.surveyId}];
|
|
108
|
+
}
|
|
109
|
+
|
|
59
110
|
// Don't compile this code when we build for the old architecture.
|
|
60
111
|
#ifdef RCT_NEW_ARCH_ENABLED
|
|
61
112
|
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
|
|
62
|
-
|
|
113
|
+
(const facebook::react::ObjCTurboModule::InitParams &)params
|
|
63
114
|
{
|
|
64
115
|
return std::make_shared<facebook::react::NativeSurvicateModuleSpecJSI>(params);
|
|
65
116
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>SchemeUserState</key>
|
|
6
|
+
<dict>
|
|
7
|
+
<key>SurvicateBindings.xcscheme_^#shared#^_</key>
|
|
8
|
+
<dict>
|
|
9
|
+
<key>orderHint</key>
|
|
10
|
+
<integer>0</integer>
|
|
11
|
+
</dict>
|
|
12
|
+
</dict>
|
|
13
|
+
</dict>
|
|
14
|
+
</plist>
|
|
Binary file
|
package/lib/commonjs/index.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.default = exports.UserTrait = void 0;
|
|
6
|
+
exports.default = exports.UserTrait = exports.SurvicateIntegrations = void 0;
|
|
7
7
|
var _reactNative = require("react-native");
|
|
8
8
|
const {
|
|
9
9
|
SurvicateBindings
|
|
@@ -12,7 +12,10 @@ const {
|
|
|
12
12
|
// @ts-expect-error
|
|
13
13
|
const isTurboModuleEnabled = global.__turboModuleProxy != null;
|
|
14
14
|
const survicate = isTurboModuleEnabled ? require("./NativeSurvicateModule").default : SurvicateBindings;
|
|
15
|
+
class SurvicateIntegrations {}
|
|
16
|
+
exports.SurvicateIntegrations = SurvicateIntegrations;
|
|
15
17
|
class Survicate {
|
|
18
|
+
static integrations = new SurvicateIntegrations();
|
|
16
19
|
static initializeSdk() {
|
|
17
20
|
survicate.initializeSdk();
|
|
18
21
|
}
|
|
@@ -30,11 +33,11 @@ class Survicate {
|
|
|
30
33
|
}
|
|
31
34
|
|
|
32
35
|
/**
|
|
33
|
-
|
|
34
|
-
|
|
36
|
+
* @deprecated Use setUserTrait(userTrait: UserTrait) method instead.
|
|
37
|
+
*/
|
|
35
38
|
|
|
36
39
|
static setUserTrait(traitNameOrUserTrait, traitValue) {
|
|
37
|
-
if (typeof traitNameOrUserTrait ===
|
|
40
|
+
if (typeof traitNameOrUserTrait === "string" && traitValue !== undefined) {
|
|
38
41
|
survicate.setUserTrait(traitNameOrUserTrait, traitValue);
|
|
39
42
|
} else if (traitNameOrUserTrait instanceof UserTrait) {
|
|
40
43
|
survicate.setUserTrait(traitNameOrUserTrait.key, traitNameOrUserTrait.value);
|
|
@@ -43,11 +46,69 @@ class Survicate {
|
|
|
43
46
|
static reset() {
|
|
44
47
|
survicate.reset();
|
|
45
48
|
}
|
|
49
|
+
static addSurvicateEventListener(listener) {
|
|
50
|
+
const eventEmitter = new _reactNative.NativeEventEmitter(survicate);
|
|
51
|
+
const onSurveyDisplayedCallback = nativeEvent => {
|
|
52
|
+
let event = {
|
|
53
|
+
surveyId: nativeEvent.surveyId
|
|
54
|
+
};
|
|
55
|
+
if (listener.onSurveyDisplayed !== undefined) {
|
|
56
|
+
listener.onSurveyDisplayed(event);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
const onSurveyDisplayedListener = eventEmitter.addListener("onSurveyDisplayed", event => onSurveyDisplayedCallback(event));
|
|
60
|
+
const onQuestionAnsweredCallback = nativeEvent => {
|
|
61
|
+
let answer = {
|
|
62
|
+
type: nativeEvent.answerType,
|
|
63
|
+
id: nativeEvent.answerId,
|
|
64
|
+
ids: nativeEvent.answerIds,
|
|
65
|
+
value: nativeEvent.answerValue
|
|
66
|
+
};
|
|
67
|
+
let event = {
|
|
68
|
+
surveyId: nativeEvent.surveyId,
|
|
69
|
+
surveyName: nativeEvent.surveyName,
|
|
70
|
+
visitorUuid: nativeEvent.visitorUuid,
|
|
71
|
+
responseUuid: nativeEvent.responseUuid,
|
|
72
|
+
questionId: nativeEvent.questionId,
|
|
73
|
+
question: nativeEvent.question,
|
|
74
|
+
answer: answer,
|
|
75
|
+
panelAnswerUrl: nativeEvent.panelAnswerUrl
|
|
76
|
+
};
|
|
77
|
+
if (listener.onQuestionAnswered !== undefined) {
|
|
78
|
+
listener.onQuestionAnswered(event);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
const onQuestionAnsweredListener = eventEmitter.addListener("onQuestionAnswered", onQuestionAnsweredCallback);
|
|
82
|
+
const onSurveyCompletedCallback = nativeEvent => {
|
|
83
|
+
let event = {
|
|
84
|
+
surveyId: nativeEvent.surveyId
|
|
85
|
+
};
|
|
86
|
+
if (listener.onSurveyCompleted !== undefined) {
|
|
87
|
+
listener.onSurveyCompleted(event);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
const onSurveyCompletedListener = eventEmitter.addListener("onSurveyCompleted", onSurveyCompletedCallback);
|
|
91
|
+
const onSurveyClosedCallback = nativeEvent => {
|
|
92
|
+
let event = {
|
|
93
|
+
surveyId: nativeEvent.surveyId
|
|
94
|
+
};
|
|
95
|
+
if (listener.onSurveyClosed !== undefined) {
|
|
96
|
+
listener.onSurveyClosed(event);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
const onSurveyClosedListener = eventEmitter.addListener("onSurveyClosed", onSurveyClosedCallback);
|
|
100
|
+
return () => {
|
|
101
|
+
onSurveyDisplayedListener.remove();
|
|
102
|
+
onQuestionAnsweredListener.remove();
|
|
103
|
+
onSurveyCompletedListener.remove();
|
|
104
|
+
onSurveyClosedListener.remove();
|
|
105
|
+
};
|
|
106
|
+
}
|
|
46
107
|
}
|
|
47
108
|
class UserTrait {
|
|
48
109
|
constructor(key, value) {
|
|
49
110
|
if (key === null || value === null) {
|
|
50
|
-
throw new Error(
|
|
111
|
+
throw new Error("Key and value cannot be null");
|
|
51
112
|
}
|
|
52
113
|
this.key = key;
|
|
53
114
|
if (value instanceof Date) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","SurvicateBindings","NativeModules","isTurboModuleEnabled","global","__turboModuleProxy","survicate","default","Survicate","initializeSdk","invokeEvent","eventName","enterScreen","screenName","leaveScreen","setUserId","userId","setUserTrait","traitNameOrUserTrait","traitValue","undefined","UserTrait","key","value","reset","constructor","Error","Date","formatDateToTimeZoneIso","toString","date","offset","getTimezoneOffset","offsetHours","Math","floor","abs","offsetMinutes","getTime","toISOString","slice","padStart","
|
|
1
|
+
{"version":3,"names":["_reactNative","require","SurvicateBindings","NativeModules","isTurboModuleEnabled","global","__turboModuleProxy","survicate","default","SurvicateIntegrations","exports","Survicate","integrations","initializeSdk","invokeEvent","eventName","enterScreen","screenName","leaveScreen","setUserId","userId","setUserTrait","traitNameOrUserTrait","traitValue","undefined","UserTrait","key","value","reset","addSurvicateEventListener","listener","eventEmitter","NativeEventEmitter","onSurveyDisplayedCallback","nativeEvent","event","surveyId","onSurveyDisplayed","onSurveyDisplayedListener","addListener","onQuestionAnsweredCallback","answer","type","answerType","id","answerId","ids","answerIds","answerValue","surveyName","visitorUuid","responseUuid","questionId","question","panelAnswerUrl","onQuestionAnswered","onQuestionAnsweredListener","onSurveyCompletedCallback","onSurveyCompleted","onSurveyCompletedListener","onSurveyClosedCallback","onSurveyClosed","onSurveyClosedListener","remove","constructor","Error","Date","formatDateToTimeZoneIso","toString","date","offset","getTimezoneOffset","offsetHours","Math","floor","abs","offsetMinutes","getTime","toISOString","slice","padStart","_default"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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"}
|
package/lib/module/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { NativeModules } from "react-native";
|
|
1
|
+
import { NativeModules, NativeEventEmitter } from "react-native";
|
|
2
2
|
const {
|
|
3
3
|
SurvicateBindings
|
|
4
4
|
} = NativeModules;
|
|
@@ -6,7 +6,9 @@ const {
|
|
|
6
6
|
// @ts-expect-error
|
|
7
7
|
const isTurboModuleEnabled = global.__turboModuleProxy != null;
|
|
8
8
|
const survicate = isTurboModuleEnabled ? require("./NativeSurvicateModule").default : SurvicateBindings;
|
|
9
|
+
export class SurvicateIntegrations {}
|
|
9
10
|
class Survicate {
|
|
11
|
+
static integrations = new SurvicateIntegrations();
|
|
10
12
|
static initializeSdk() {
|
|
11
13
|
survicate.initializeSdk();
|
|
12
14
|
}
|
|
@@ -24,11 +26,11 @@ class Survicate {
|
|
|
24
26
|
}
|
|
25
27
|
|
|
26
28
|
/**
|
|
27
|
-
|
|
28
|
-
|
|
29
|
+
* @deprecated Use setUserTrait(userTrait: UserTrait) method instead.
|
|
30
|
+
*/
|
|
29
31
|
|
|
30
32
|
static setUserTrait(traitNameOrUserTrait, traitValue) {
|
|
31
|
-
if (typeof traitNameOrUserTrait ===
|
|
33
|
+
if (typeof traitNameOrUserTrait === "string" && traitValue !== undefined) {
|
|
32
34
|
survicate.setUserTrait(traitNameOrUserTrait, traitValue);
|
|
33
35
|
} else if (traitNameOrUserTrait instanceof UserTrait) {
|
|
34
36
|
survicate.setUserTrait(traitNameOrUserTrait.key, traitNameOrUserTrait.value);
|
|
@@ -37,11 +39,69 @@ class Survicate {
|
|
|
37
39
|
static reset() {
|
|
38
40
|
survicate.reset();
|
|
39
41
|
}
|
|
42
|
+
static addSurvicateEventListener(listener) {
|
|
43
|
+
const eventEmitter = new NativeEventEmitter(survicate);
|
|
44
|
+
const onSurveyDisplayedCallback = nativeEvent => {
|
|
45
|
+
let event = {
|
|
46
|
+
surveyId: nativeEvent.surveyId
|
|
47
|
+
};
|
|
48
|
+
if (listener.onSurveyDisplayed !== undefined) {
|
|
49
|
+
listener.onSurveyDisplayed(event);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
const onSurveyDisplayedListener = eventEmitter.addListener("onSurveyDisplayed", event => onSurveyDisplayedCallback(event));
|
|
53
|
+
const onQuestionAnsweredCallback = nativeEvent => {
|
|
54
|
+
let answer = {
|
|
55
|
+
type: nativeEvent.answerType,
|
|
56
|
+
id: nativeEvent.answerId,
|
|
57
|
+
ids: nativeEvent.answerIds,
|
|
58
|
+
value: nativeEvent.answerValue
|
|
59
|
+
};
|
|
60
|
+
let event = {
|
|
61
|
+
surveyId: nativeEvent.surveyId,
|
|
62
|
+
surveyName: nativeEvent.surveyName,
|
|
63
|
+
visitorUuid: nativeEvent.visitorUuid,
|
|
64
|
+
responseUuid: nativeEvent.responseUuid,
|
|
65
|
+
questionId: nativeEvent.questionId,
|
|
66
|
+
question: nativeEvent.question,
|
|
67
|
+
answer: answer,
|
|
68
|
+
panelAnswerUrl: nativeEvent.panelAnswerUrl
|
|
69
|
+
};
|
|
70
|
+
if (listener.onQuestionAnswered !== undefined) {
|
|
71
|
+
listener.onQuestionAnswered(event);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
const onQuestionAnsweredListener = eventEmitter.addListener("onQuestionAnswered", onQuestionAnsweredCallback);
|
|
75
|
+
const onSurveyCompletedCallback = nativeEvent => {
|
|
76
|
+
let event = {
|
|
77
|
+
surveyId: nativeEvent.surveyId
|
|
78
|
+
};
|
|
79
|
+
if (listener.onSurveyCompleted !== undefined) {
|
|
80
|
+
listener.onSurveyCompleted(event);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
const onSurveyCompletedListener = eventEmitter.addListener("onSurveyCompleted", onSurveyCompletedCallback);
|
|
84
|
+
const onSurveyClosedCallback = nativeEvent => {
|
|
85
|
+
let event = {
|
|
86
|
+
surveyId: nativeEvent.surveyId
|
|
87
|
+
};
|
|
88
|
+
if (listener.onSurveyClosed !== undefined) {
|
|
89
|
+
listener.onSurveyClosed(event);
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
const onSurveyClosedListener = eventEmitter.addListener("onSurveyClosed", onSurveyClosedCallback);
|
|
93
|
+
return () => {
|
|
94
|
+
onSurveyDisplayedListener.remove();
|
|
95
|
+
onQuestionAnsweredListener.remove();
|
|
96
|
+
onSurveyCompletedListener.remove();
|
|
97
|
+
onSurveyClosedListener.remove();
|
|
98
|
+
};
|
|
99
|
+
}
|
|
40
100
|
}
|
|
41
101
|
export class UserTrait {
|
|
42
102
|
constructor(key, value) {
|
|
43
103
|
if (key === null || value === null) {
|
|
44
|
-
throw new Error(
|
|
104
|
+
throw new Error("Key and value cannot be null");
|
|
45
105
|
}
|
|
46
106
|
this.key = key;
|
|
47
107
|
if (value instanceof Date) {
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeModules","SurvicateBindings","isTurboModuleEnabled","global","__turboModuleProxy","survicate","require","default","Survicate","initializeSdk","invokeEvent","eventName","enterScreen","screenName","leaveScreen","setUserId","userId","setUserTrait","traitNameOrUserTrait","traitValue","undefined","UserTrait","key","value","reset","constructor","Error","Date","formatDateToTimeZoneIso","toString","date","offset","getTimezoneOffset","offsetHours","Math","floor","abs","offsetMinutes","getTime","toISOString","slice","padStart"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"AAAA,SAASA,aAAa,QAAQ,cAAc;
|
|
1
|
+
{"version":3,"names":["NativeModules","NativeEventEmitter","SurvicateBindings","isTurboModuleEnabled","global","__turboModuleProxy","survicate","require","default","SurvicateIntegrations","Survicate","integrations","initializeSdk","invokeEvent","eventName","enterScreen","screenName","leaveScreen","setUserId","userId","setUserTrait","traitNameOrUserTrait","traitValue","undefined","UserTrait","key","value","reset","addSurvicateEventListener","listener","eventEmitter","onSurveyDisplayedCallback","nativeEvent","event","surveyId","onSurveyDisplayed","onSurveyDisplayedListener","addListener","onQuestionAnsweredCallback","answer","type","answerType","id","answerId","ids","answerIds","answerValue","surveyName","visitorUuid","responseUuid","questionId","question","panelAnswerUrl","onQuestionAnswered","onQuestionAnsweredListener","onSurveyCompletedCallback","onSurveyCompleted","onSurveyCompletedListener","onSurveyClosedCallback","onSurveyClosed","onSurveyClosedListener","remove","constructor","Error","Date","formatDateToTimeZoneIso","toString","date","offset","getTimezoneOffset","offsetHours","Math","floor","abs","offsetMinutes","getTime","toISOString","slice","padStart"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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"}
|
|
@@ -1,15 +1,19 @@
|
|
|
1
|
+
export declare class SurvicateIntegrations {
|
|
2
|
+
}
|
|
1
3
|
declare class Survicate {
|
|
4
|
+
static integrations: SurvicateIntegrations;
|
|
2
5
|
static initializeSdk(): void;
|
|
3
6
|
static invokeEvent(eventName: string): void;
|
|
4
7
|
static enterScreen(screenName: string): void;
|
|
5
8
|
static leaveScreen(screenName: string): void;
|
|
6
9
|
static setUserId(userId: string): void;
|
|
7
10
|
/**
|
|
8
|
-
|
|
9
|
-
|
|
11
|
+
* @deprecated Use setUserTrait(userTrait: UserTrait) method instead.
|
|
12
|
+
*/
|
|
10
13
|
static setUserTrait(traitName: string, traitValue: string): void;
|
|
11
14
|
static setUserTrait(userTrait: UserTrait): void;
|
|
12
15
|
static reset(): void;
|
|
16
|
+
static addSurvicateEventListener(listener: SurvicateEventListener): () => void;
|
|
13
17
|
}
|
|
14
18
|
export declare class UserTrait {
|
|
15
19
|
key: string;
|
|
@@ -17,5 +21,36 @@ export declare class UserTrait {
|
|
|
17
21
|
constructor(key: string, value: string | number | boolean | Date);
|
|
18
22
|
private formatDateToTimeZoneIso;
|
|
19
23
|
}
|
|
24
|
+
export type SurveyDisplayedEvent = {
|
|
25
|
+
surveyId: string;
|
|
26
|
+
};
|
|
27
|
+
export type QuestionAnsweredEvent = {
|
|
28
|
+
surveyId: string;
|
|
29
|
+
surveyName: string;
|
|
30
|
+
visitorUuid: string;
|
|
31
|
+
responseUuid: string;
|
|
32
|
+
questionId: string;
|
|
33
|
+
question: string | null;
|
|
34
|
+
answer: SurvicateAnswer;
|
|
35
|
+
panelAnswerUrl: string;
|
|
36
|
+
};
|
|
37
|
+
export type SurvicateAnswer = {
|
|
38
|
+
type: string | null;
|
|
39
|
+
id: number | null;
|
|
40
|
+
ids: number[];
|
|
41
|
+
value: string | null;
|
|
42
|
+
};
|
|
43
|
+
export type SurveyCompletedEvent = {
|
|
44
|
+
surveyId: string;
|
|
45
|
+
};
|
|
46
|
+
export type SurveyClosedEvent = {
|
|
47
|
+
surveyId: string;
|
|
48
|
+
};
|
|
49
|
+
export interface SurvicateEventListener {
|
|
50
|
+
onSurveyDisplayed?: (event: SurveyDisplayedEvent) => void;
|
|
51
|
+
onQuestionAnswered?: (event: QuestionAnsweredEvent) => void;
|
|
52
|
+
onSurveyCompleted?: (event: SurveyCompletedEvent) => void;
|
|
53
|
+
onSurveyClosed?: (event: SurveyClosedEvent) => void;
|
|
54
|
+
}
|
|
20
55
|
export default Survicate;
|
|
21
56
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAYA,qBAAa,qBAAqB;CAAG;AAErC,cAAM,SAAS;IACb,MAAM,CAAC,YAAY,wBAA+B;IAElD,MAAM,CAAC,aAAa,IAAI,IAAI;IAI5B,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI3C,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAI5C,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAI5C,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAItC;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAChE,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAe/C,MAAM,CAAC,KAAK,IAAI,IAAI;IAIpB,MAAM,CAAC,yBAAyB,CAC9B,QAAQ,EAAE,sBAAsB,GAC/B,MAAM,IAAI;CAuEd;AAED,qBAAa,SAAS;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;gBAEF,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI;IAchE,OAAO,CAAC,uBAAuB;CAOhC;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,eAAe,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACrC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC1D,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAC5D,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC1D,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACrD;AAED,eAAe,SAAS,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@survicate/react-native-survicate",
|
|
3
3
|
"title": "React Native Survicate Bindings",
|
|
4
|
-
"version": "4.0
|
|
4
|
+
"version": "4.1.0",
|
|
5
5
|
"description": "React Native bindings for Survicate Mobile SDK",
|
|
6
6
|
"main": "lib/commonjs/index.js",
|
|
7
7
|
"module": "lib/module/index.js",
|
|
@@ -11,6 +11,8 @@ export interface Spec extends TurboModule {
|
|
|
11
11
|
setUserTrait(traitName: string, traitValue: string): void;
|
|
12
12
|
setWorkspaceKey(workspaceKey: string): void;
|
|
13
13
|
reset(): void;
|
|
14
|
+
addListener(eventName: string): void;
|
|
15
|
+
removeListeners(count: number): void;
|
|
14
16
|
}
|
|
15
17
|
|
|
16
18
|
export default TurboModuleRegistry.get<Spec>("SurvicateBindings");
|
package/src/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { NativeModules } from "react-native";
|
|
1
|
+
import { NativeModules, NativeEventEmitter } from "react-native";
|
|
2
2
|
|
|
3
3
|
const { SurvicateBindings } = NativeModules;
|
|
4
4
|
|
|
@@ -9,7 +9,12 @@ const survicate: any = isTurboModuleEnabled
|
|
|
9
9
|
? require("./NativeSurvicateModule").default
|
|
10
10
|
: SurvicateBindings;
|
|
11
11
|
|
|
12
|
+
|
|
13
|
+
export class SurvicateIntegrations {}
|
|
14
|
+
|
|
12
15
|
class Survicate {
|
|
16
|
+
static integrations = new SurvicateIntegrations();
|
|
17
|
+
|
|
13
18
|
static initializeSdk(): void {
|
|
14
19
|
survicate.initializeSdk();
|
|
15
20
|
}
|
|
@@ -31,21 +36,101 @@ class Survicate {
|
|
|
31
36
|
}
|
|
32
37
|
|
|
33
38
|
/**
|
|
34
|
-
|
|
35
|
-
|
|
39
|
+
* @deprecated Use setUserTrait(userTrait: UserTrait) method instead.
|
|
40
|
+
*/
|
|
36
41
|
static setUserTrait(traitName: string, traitValue: string): void;
|
|
37
42
|
static setUserTrait(userTrait: UserTrait): void;
|
|
38
|
-
static setUserTrait(
|
|
39
|
-
|
|
43
|
+
static setUserTrait(
|
|
44
|
+
traitNameOrUserTrait: string | UserTrait,
|
|
45
|
+
traitValue?: string
|
|
46
|
+
): void {
|
|
47
|
+
if (typeof traitNameOrUserTrait === "string" && traitValue !== undefined) {
|
|
40
48
|
survicate.setUserTrait(traitNameOrUserTrait, traitValue);
|
|
41
49
|
} else if (traitNameOrUserTrait instanceof UserTrait) {
|
|
42
|
-
survicate.setUserTrait(
|
|
50
|
+
survicate.setUserTrait(
|
|
51
|
+
traitNameOrUserTrait.key,
|
|
52
|
+
traitNameOrUserTrait.value
|
|
53
|
+
);
|
|
43
54
|
}
|
|
44
55
|
}
|
|
45
56
|
|
|
46
57
|
static reset(): void {
|
|
47
58
|
survicate.reset();
|
|
48
59
|
}
|
|
60
|
+
|
|
61
|
+
static addSurvicateEventListener(
|
|
62
|
+
listener: SurvicateEventListener
|
|
63
|
+
): () => void {
|
|
64
|
+
const eventEmitter = new NativeEventEmitter(survicate);
|
|
65
|
+
|
|
66
|
+
const onSurveyDisplayedCallback = (nativeEvent: any) => {
|
|
67
|
+
let event: SurveyDisplayedEvent = { surveyId: nativeEvent.surveyId };
|
|
68
|
+
if (listener.onSurveyDisplayed !== undefined) {
|
|
69
|
+
listener.onSurveyDisplayed!(event);
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
const onSurveyDisplayedListener = eventEmitter.addListener(
|
|
73
|
+
"onSurveyDisplayed",
|
|
74
|
+
(event) => onSurveyDisplayedCallback(event)
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
const onQuestionAnsweredCallback = (nativeEvent: any) => {
|
|
78
|
+
let answer: SurvicateAnswer = {
|
|
79
|
+
type: nativeEvent.answerType,
|
|
80
|
+
id: nativeEvent.answerId,
|
|
81
|
+
ids: nativeEvent.answerIds,
|
|
82
|
+
value: nativeEvent.answerValue
|
|
83
|
+
};
|
|
84
|
+
let event: QuestionAnsweredEvent = {
|
|
85
|
+
surveyId: nativeEvent.surveyId,
|
|
86
|
+
surveyName: nativeEvent.surveyName,
|
|
87
|
+
visitorUuid: nativeEvent.visitorUuid,
|
|
88
|
+
responseUuid: nativeEvent.responseUuid,
|
|
89
|
+
questionId: nativeEvent.questionId,
|
|
90
|
+
question: nativeEvent.question,
|
|
91
|
+
answer: answer,
|
|
92
|
+
panelAnswerUrl: nativeEvent.panelAnswerUrl,
|
|
93
|
+
};
|
|
94
|
+
if (listener.onQuestionAnswered !== undefined) {
|
|
95
|
+
listener.onQuestionAnswered!(event);
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
const onQuestionAnsweredListener = eventEmitter.addListener(
|
|
99
|
+
"onQuestionAnswered",
|
|
100
|
+
onQuestionAnsweredCallback
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
const onSurveyCompletedCallback = (nativeEvent: any) => {
|
|
104
|
+
let event: SurveyCompletedEvent = { surveyId: nativeEvent.surveyId };
|
|
105
|
+
if (listener.onSurveyCompleted !== undefined) {
|
|
106
|
+
listener.onSurveyCompleted!(event);
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
const onSurveyCompletedListener = eventEmitter.addListener(
|
|
111
|
+
"onSurveyCompleted",
|
|
112
|
+
onSurveyCompletedCallback
|
|
113
|
+
);
|
|
114
|
+
|
|
115
|
+
const onSurveyClosedCallback = (nativeEvent: any) => {
|
|
116
|
+
let event: SurveyClosedEvent = { surveyId: nativeEvent.surveyId };
|
|
117
|
+
if (listener.onSurveyClosed !== undefined) {
|
|
118
|
+
listener.onSurveyClosed!(event);
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
const onSurveyClosedListener = eventEmitter.addListener(
|
|
123
|
+
"onSurveyClosed",
|
|
124
|
+
onSurveyClosedCallback
|
|
125
|
+
);
|
|
126
|
+
|
|
127
|
+
return () => {
|
|
128
|
+
onSurveyDisplayedListener.remove();
|
|
129
|
+
onQuestionAnsweredListener.remove();
|
|
130
|
+
onSurveyCompletedListener.remove();
|
|
131
|
+
onSurveyClosedListener.remove();
|
|
132
|
+
};
|
|
133
|
+
}
|
|
49
134
|
}
|
|
50
135
|
|
|
51
136
|
export class UserTrait {
|
|
@@ -54,25 +139,62 @@ export class UserTrait {
|
|
|
54
139
|
|
|
55
140
|
constructor(key: string, value: string | number | boolean | Date) {
|
|
56
141
|
if (key === null || value === null) {
|
|
57
|
-
throw new Error(
|
|
142
|
+
throw new Error("Key and value cannot be null");
|
|
58
143
|
}
|
|
59
144
|
|
|
60
145
|
this.key = key;
|
|
61
|
-
|
|
146
|
+
|
|
62
147
|
if (value instanceof Date) {
|
|
63
148
|
this.value = this.formatDateToTimeZoneIso(value);
|
|
64
149
|
} else {
|
|
65
150
|
this.value = value.toString();
|
|
66
151
|
}
|
|
67
152
|
}
|
|
68
|
-
|
|
153
|
+
|
|
69
154
|
private formatDateToTimeZoneIso(date: Date): string {
|
|
70
155
|
const offset = date.getTimezoneOffset();
|
|
71
156
|
const offsetHours = Math.floor(Math.abs(offset) / 60);
|
|
72
157
|
const offsetMinutes = Math.abs(offset) % 60;
|
|
73
|
-
|
|
158
|
+
date = new Date(date.getTime() - (offset * 60 * 1000));
|
|
74
159
|
return date.toISOString().slice(0, -5) + (offset > 0 ? "-" : "+") + offsetHours.toString().padStart(2, '0') + ":" + offsetMinutes.toString().padStart(2, '0');
|
|
75
160
|
}
|
|
76
161
|
}
|
|
77
162
|
|
|
163
|
+
export type SurveyDisplayedEvent = {
|
|
164
|
+
surveyId: string;
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
export type QuestionAnsweredEvent = {
|
|
168
|
+
surveyId: string;
|
|
169
|
+
surveyName: string;
|
|
170
|
+
visitorUuid: string;
|
|
171
|
+
responseUuid: string;
|
|
172
|
+
questionId: string;
|
|
173
|
+
question: string | null;
|
|
174
|
+
answer: SurvicateAnswer;
|
|
175
|
+
panelAnswerUrl: string;
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
export type SurvicateAnswer = {
|
|
179
|
+
type: string | null;
|
|
180
|
+
id: number | null;
|
|
181
|
+
ids: number[];
|
|
182
|
+
value: string | null;
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
export type SurveyCompletedEvent = {
|
|
186
|
+
surveyId: string;
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
export type SurveyClosedEvent = {
|
|
190
|
+
surveyId: string;
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
export interface SurvicateEventListener {
|
|
194
|
+
onSurveyDisplayed?: (event: SurveyDisplayedEvent) => void;
|
|
195
|
+
onQuestionAnswered?: (event: QuestionAnsweredEvent) => void;
|
|
196
|
+
onSurveyCompleted?: (event: SurveyCompletedEvent) => void;
|
|
197
|
+
onSurveyClosed?: (event: SurveyClosedEvent) => void;
|
|
198
|
+
}
|
|
199
|
+
|
|
78
200
|
export default Survicate;
|