@survicate/react-native-survicate 4.0.2 → 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/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.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
|
|
|
@@ -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
|
}
|
|
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;
|