@originallyus/feedback-rn-sdk 3.1.0 → 4.0.0-beta.10
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/{LICENSE.txt → LICENSE} +1 -2
- package/README.md +69 -176
- package/lib/module/AIAContentUsefulness.js +273 -0
- package/lib/module/AIAContentUsefulness.js.map +1 -0
- package/lib/module/AIAFeedback.js +295 -0
- package/lib/module/AIAFeedback.js.map +1 -0
- package/lib/module/AIAFeedbackForm.js +212 -0
- package/lib/module/AIAFeedbackForm.js.map +1 -0
- package/lib/module/AIAFeedbackSplash.js +57 -0
- package/lib/module/AIAFeedbackSplash.js.map +1 -0
- package/lib/module/AIAFeedbackStyles.js +329 -0
- package/lib/module/AIAFeedbackStyles.js.map +1 -0
- package/lib/module/AIAFeedbackSuccess.js +68 -0
- package/lib/module/AIAFeedbackSuccess.js.map +1 -0
- package/lib/module/assets/CheckIcon.js +21 -0
- package/lib/module/assets/CheckIcon.js.map +1 -0
- package/lib/module/assets/CloseIcon.js +21 -0
- package/lib/module/assets/CloseIcon.js.map +1 -0
- package/lib/module/assets/ErrorIcon.js +23 -0
- package/lib/module/assets/ErrorIcon.js.map +1 -0
- package/lib/module/assets/PlusIcon.js +21 -0
- package/lib/module/assets/PlusIcon.js.map +1 -0
- package/lib/module/assets/StarIcon.js +21 -0
- package/lib/module/assets/StarIcon.js.map +1 -0
- package/lib/module/component/Button.js +49 -0
- package/lib/module/component/Button.js.map +1 -0
- package/lib/module/component/ButtonSubmit.js +194 -0
- package/lib/module/component/ButtonSubmit.js.map +1 -0
- package/lib/module/component/Input.js +172 -0
- package/lib/module/component/Input.js.map +1 -0
- package/lib/module/component/MultiSelectButtons.js +173 -0
- package/lib/module/component/MultiSelectButtons.js.map +1 -0
- package/lib/module/component/README.md +215 -0
- package/lib/module/component/READMEVI.md +192 -0
- package/lib/module/component/Rating.js +167 -0
- package/lib/module/component/Rating.js.map +1 -0
- package/lib/module/component/RatingNumber.js +267 -0
- package/lib/module/component/RatingNumber.js.map +1 -0
- package/lib/module/component/Textarea.js +163 -0
- package/lib/module/component/Textarea.js.map +1 -0
- package/lib/module/component/YesNoButtons.js +161 -0
- package/lib/module/component/YesNoButtons.js.map +1 -0
- package/lib/module/index.js +13 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/service/feedbackService.js +77 -0
- package/lib/module/service/feedbackService.js.map +1 -0
- package/lib/module/utils/common.js +229 -0
- package/lib/module/utils/common.js.map +1 -0
- package/lib/module/utils/constants.js +48 -0
- package/lib/module/utils/constants.js.map +1 -0
- package/lib/module/utils/index.js +140 -0
- package/lib/module/utils/index.js.map +1 -0
- package/lib/module/utils/networking.js +121 -0
- package/lib/module/utils/networking.js.map +1 -0
- package/lib/typescript/AIAContentUsefulness.d.ts +14 -0
- package/lib/typescript/AIAContentUsefulness.d.ts.map +1 -0
- package/lib/typescript/AIAFeedback.d.ts +15 -0
- package/lib/typescript/AIAFeedback.d.ts.map +1 -0
- package/lib/typescript/AIAFeedbackForm.d.ts +22 -0
- package/lib/typescript/AIAFeedbackForm.d.ts.map +1 -0
- package/lib/typescript/AIAFeedbackSplash.d.ts +10 -0
- package/lib/typescript/AIAFeedbackSplash.d.ts.map +1 -0
- package/lib/typescript/AIAFeedbackStyles.d.ts +342 -0
- package/lib/typescript/AIAFeedbackStyles.d.ts.map +1 -0
- package/lib/typescript/AIAFeedbackSuccess.d.ts +11 -0
- package/lib/typescript/AIAFeedbackSuccess.d.ts.map +1 -0
- package/lib/typescript/assets/CheckIcon.d.ts +7 -0
- package/lib/typescript/assets/CheckIcon.d.ts.map +1 -0
- package/lib/typescript/assets/CloseIcon.d.ts +7 -0
- package/lib/typescript/assets/CloseIcon.d.ts.map +1 -0
- package/lib/typescript/assets/ErrorIcon.d.ts +7 -0
- package/lib/typescript/assets/ErrorIcon.d.ts.map +1 -0
- package/lib/typescript/assets/PlusIcon.d.ts +7 -0
- package/lib/typescript/assets/PlusIcon.d.ts.map +1 -0
- package/lib/typescript/assets/StarIcon.d.ts +7 -0
- package/lib/typescript/assets/StarIcon.d.ts.map +1 -0
- package/lib/typescript/component/Button.d.ts +30 -0
- package/lib/typescript/component/Button.d.ts.map +1 -0
- package/lib/typescript/component/ButtonSubmit.d.ts +115 -0
- package/lib/typescript/component/ButtonSubmit.d.ts.map +1 -0
- package/lib/typescript/component/Input.d.ts +112 -0
- package/lib/typescript/component/Input.d.ts.map +1 -0
- package/lib/typescript/component/MultiSelectButtons.d.ts +103 -0
- package/lib/typescript/component/MultiSelectButtons.d.ts.map +1 -0
- package/lib/typescript/component/Rating.d.ts +83 -0
- package/lib/typescript/component/Rating.d.ts.map +1 -0
- package/lib/typescript/component/RatingNumber.d.ts +135 -0
- package/lib/typescript/component/RatingNumber.d.ts.map +1 -0
- package/lib/typescript/component/Textarea.d.ts +115 -0
- package/lib/typescript/component/Textarea.d.ts.map +1 -0
- package/lib/typescript/component/YesNoButtons.d.ts +94 -0
- package/lib/typescript/component/YesNoButtons.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +21 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/service/feedbackService.d.ts +33 -0
- package/lib/typescript/service/feedbackService.d.ts.map +1 -0
- package/lib/typescript/utils/common.d.ts +24 -0
- package/lib/typescript/utils/common.d.ts.map +1 -0
- package/lib/typescript/utils/constants.d.ts +38 -0
- package/lib/typescript/utils/constants.d.ts.map +1 -0
- package/lib/typescript/utils/index.d.ts +12 -0
- package/lib/typescript/utils/index.d.ts.map +1 -0
- package/lib/typescript/utils/networking.d.ts +12 -0
- package/lib/typescript/utils/networking.d.ts.map +1 -0
- package/package.json +186 -39
- package/fonts/AIAEverest-CondensedMedium.ttf +0 -0
- package/fonts/AIAEverest-Medium.ttf +0 -0
- package/fonts/AIAEverest-Regular.ttf +0 -0
- package/fonts/AIAEverestBold.ttf +0 -0
- package/fonts/OpenSans-Bold.ttf +0 -0
- package/fonts/OpenSans-Light.ttf +0 -0
- package/fonts/OpenSans-Regular.ttf +0 -0
- package/fonts/OpenSans-SemiBold.ttf +0 -0
- package/lib/commonjs/api/index.js +0 -1
- package/lib/commonjs/assets/index.js +0 -1
- package/lib/commonjs/component/confirmStep.js +0 -1
- package/lib/commonjs/component/confirmStepTablet.js +0 -1
- package/lib/commonjs/component/contentUI.js +0 -1
- package/lib/commonjs/component/contentUITablet.js +0 -1
- package/lib/commonjs/component/header.js +0 -1
- package/lib/commonjs/component/index.js +0 -1
- package/lib/commonjs/component/inlineSurvey.js +0 -1
- package/lib/commonjs/index.js +0 -1
- package/lib/commonjs/ui/ButtonSubmit.js +0 -1
- package/lib/commonjs/ui/Fineprint.js +0 -1
- package/lib/commonjs/ui/Instruction.js +0 -1
- package/lib/commonjs/ui/MultipleSelectInput.js +0 -1
- package/lib/commonjs/ui/Question.js +0 -1
- package/lib/commonjs/ui/RatingNumber.js +0 -1
- package/lib/commonjs/ui/RatingStar.js +0 -1
- package/lib/commonjs/ui/SecondaryQuestion.js +0 -1
- package/lib/commonjs/ui/TextArea.js +0 -1
- package/lib/commonjs/ui/index.js +0 -1
- package/lib/commonjs/utils/MyFunction.js +0 -1
- package/lib/commonjs/utils/NetworkHelper.js +0 -1
- package/lib/commonjs/utils/StatusBarHeight.js +0 -1
- package/lib/commonjs/utils/const.js +0 -1
package/{LICENSE.txt → LICENSE}
RENAMED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c)
|
|
4
|
-
|
|
3
|
+
Copyright (c) 2026 Tiempham
|
|
5
4
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
5
|
of this software and associated documentation files (the "Software"), to deal
|
|
7
6
|
in the Software without restriction, including without limitation the rights
|
package/README.md
CHANGED
|
@@ -1,199 +1,92 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @originallyus/feedback-rn-sdk
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Cross-platform Feedback UI components for React Native.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
|
-
Install the package using either Yarn:
|
|
8
|
-
|
|
9
|
-
```sh
|
|
10
|
-
yarn add @originallyus/feedback-rn-sdk
|
|
11
|
-
```
|
|
12
|
-
or npm:
|
|
13
|
-
|
|
14
7
|
```sh
|
|
15
8
|
npm install @originallyus/feedback-rn-sdk
|
|
9
|
+
# or
|
|
10
|
+
yarn add @originallyus/feedback-rn-sdk
|
|
16
11
|
```
|
|
17
12
|
|
|
18
|
-
##
|
|
19
|
-
|
|
20
|
-
These packages are specified as peerDependencies and need to be installed separately.
|
|
13
|
+
## Peer dependencies
|
|
21
14
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
react-native-
|
|
25
|
-
react-native-device-info \
|
|
26
|
-
react-native-rate
|
|
27
|
-
```
|
|
15
|
+
### Required
|
|
16
|
+
- `react-native-reanimated` (>= 3.0.0)
|
|
17
|
+
- `react-native-keyboard-controller` – for Input/Textarea to work correctly with keyboard
|
|
28
18
|
|
|
29
|
-
|
|
19
|
+
### Device info (choose one)
|
|
30
20
|
|
|
21
|
+
**Expo**:
|
|
31
22
|
```sh
|
|
32
|
-
|
|
33
|
-
react-native-encrypted-storage \
|
|
34
|
-
react-native-device-info \
|
|
35
|
-
react-native-rate
|
|
23
|
+
npx expo install react-native-reanimated react-native-svg react-native-keyboard-controller expo-device expo-application
|
|
36
24
|
```
|
|
37
25
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
Package requires custom fonts found in `fonts` folder:
|
|
41
|
-
|
|
26
|
+
**React Native CLI**:
|
|
42
27
|
```sh
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
OpenSans-Regular.ttf
|
|
46
|
-
OpenSans-SemiBold.ttf
|
|
28
|
+
npm install react-native-reanimated react-native-svg react-native-keyboard-controller react-native-device-info
|
|
29
|
+
# iOS: cd ios && pod install
|
|
47
30
|
```
|
|
48
31
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
return (
|
|
70
|
-
{/* The root view wrapper makes sure the app is full screen and vertical align center */}
|
|
71
|
-
<View style={{ flex: 1, justifyContent: 'center' }}>
|
|
72
|
-
<YourAppContainerView></YourAppContainerView>
|
|
73
|
-
|
|
74
|
-
{/* Please insert this mount point directly in your App.js,
|
|
75
|
-
preferably at the bottom of your root view tree for it to stay on top of all other views */}
|
|
76
|
-
<XXXXXXXXXXX ref={feedbackRef} />
|
|
77
|
-
</View>
|
|
78
|
-
);
|
|
32
|
+
### Keyboard setup (for Input/Textarea)
|
|
33
|
+
|
|
34
|
+
Wrap your app with `KeyboardProvider` and use `KeyboardAwareScrollView` for forms with Input/Textarea:
|
|
35
|
+
|
|
36
|
+
```tsx
|
|
37
|
+
import { KeyboardProvider, KeyboardAwareScrollView } from 'react-native-keyboard-controller'
|
|
38
|
+
|
|
39
|
+
export default function App() {
|
|
40
|
+
return (
|
|
41
|
+
<KeyboardProvider>
|
|
42
|
+
<KeyboardAwareScrollView
|
|
43
|
+
keyboardShouldPersistTaps="handled"
|
|
44
|
+
contentContainerStyle={{ padding: 16 }}
|
|
45
|
+
>
|
|
46
|
+
<Input appWidth={width} value={val} onChangeText={setVal} />
|
|
47
|
+
<Textarea appWidth={width} value={val} onChangeText={setVal} />
|
|
48
|
+
</KeyboardAwareScrollView>
|
|
49
|
+
</KeyboardProvider>
|
|
50
|
+
)
|
|
51
|
+
}
|
|
79
52
|
```
|
|
80
|
-
**Optional inline feedback component**
|
|
81
|
-
|
|
82
|
-
Place `<FeedbackInlineSurvey />` component anywhere in your app view hierarchy where the feedback inline prompt should be shown.
|
|
83
|
-
|
|
84
|
-
- If `<FeedbackInlineSurvey />` component is not present, feedback survey will shown as non-intrusive style
|
|
85
|
-
- The inline component may or may not be shown depends on configuration of the survey in backend
|
|
86
|
-
|
|
87
|
-
```js
|
|
88
|
-
import { FeedbackInlineSurvey } from '@originallyus/feedback-rn-sdk';
|
|
89
|
-
|
|
90
|
-
return (
|
|
91
|
-
...
|
|
92
|
-
<SomeContainerView>
|
|
93
|
-
<FeedbackInlineSurvey />
|
|
94
|
-
</SomeContainerView>
|
|
95
|
-
...
|
|
96
|
-
);
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
All other functions to be invoked on feedbackRef.current can be done anywhere in your application code (can also be inside App.js)
|
|
100
|
-
|
|
101
|
-
```js
|
|
102
|
-
import XXXXXXXXXXX from '@originallyus/feedback-rn-sdk';
|
|
103
|
-
|
|
104
|
-
const OtherComponent = (props) => {
|
|
105
|
-
// This is a singleton. The initialization should have already been done inside App.js
|
|
106
|
-
const feedbackRef = useRef();
|
|
107
|
-
|
|
108
|
-
const setupFeedbackSDK = () => {
|
|
109
|
-
// Please contact us to obtain an App Secret specific to your Bundle ID/Package ID
|
|
110
|
-
feedbackRef.current.setAppSecret('QcJasjiu2olMBxHyFohKJ');
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
const setLanguage = (language) => {
|
|
114
|
-
// Use international language codes: "en", "zh", "zh_tw", "ms", "ta", "id", "th", "tl", "vi"
|
|
115
|
-
// Note: our backend must be loaded with the translation content before a language can be used. Invalid languages will automatically fallback to English
|
|
116
|
-
feedbackRef.current.setLanguage(language);
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
const setAppUserId = () => {
|
|
120
|
-
// This is an optional User ID provided by the host app.
|
|
121
|
-
feedbackRef.current.setAppUserId('1234');
|
|
122
|
-
};
|
|
123
|
-
|
|
124
|
-
const setMetadata = () => {
|
|
125
|
-
// This is an optional metadata provided by the host app. Supports string format only.
|
|
126
|
-
feedbackRef.current.setMetadata('policy_1234567890');
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
const testRatingForm = (eventTag) => {
|
|
130
|
-
// This will always show the Feedback form for testing/debugging purpose
|
|
131
|
-
// You may troubleshoot this in "Request (Testing)" section in CMS
|
|
132
|
-
feedbackRef.current.setFormSlug('native_rating_form');
|
|
133
|
-
feedbackRef.current.testRatingForm(eventTag);
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
const testInlineForm = (eventTag, slug) => {
|
|
137
|
-
// This will always show the inline Feedback component for testing/debugging purpose
|
|
138
|
-
// You may troubleshoot this in "Request (Testing)" section in CMS
|
|
139
|
-
feedbackRef.current.testInlineForm(eventTag, slug);
|
|
140
|
-
};
|
|
141
|
-
|
|
142
|
-
const showRatingForm = (eventTag) => {
|
|
143
|
-
// This may not always show/trigger the form, depending on the Response Frequency & Prompt Frequency configuration on backend
|
|
144
|
-
// You may troubleshoot this in "Request" section in CMS
|
|
145
|
-
feedbackRef.current.showRatingForm(eventTag);
|
|
146
|
-
};
|
|
147
|
-
|
|
148
|
-
const showInlineForm = (eventTag, slug) => {
|
|
149
|
-
// This may not always show/trigger the form, depending on the Response Frequency & Prompt Frequency configuration on backend
|
|
150
|
-
// You may troubleshoot this in "Request" section in CMS
|
|
151
|
-
feedbackRef.current.showInlineForm(eventTag, slug);
|
|
152
|
-
};
|
|
153
|
-
|
|
154
|
-
};
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
## Callback Function (optional)
|
|
158
|
-
|
|
159
|
-
An optional callback function can be provided as parameter to capture the outcome of the SDK.
|
|
160
|
-
|
|
161
|
-
- **formDidShow = false** is triggered when there is no form to be shown, this callback function will be triggered almost immediately.
|
|
162
|
-
- **formDidShow = true** is triggered when has been shown and user has finished interacting with it or dismiss/cancel it
|
|
163
|
-
|
|
164
|
-
```js
|
|
165
|
-
feedbackRef.current.testRatingForm(eventTag, (formDidShow) => {
|
|
166
|
-
console.log('formDidShow', formDidShow);
|
|
167
|
-
});
|
|
168
|
-
|
|
169
|
-
feedbackRef.current.showRatingForm(eventTag, (formDidShow) => {
|
|
170
|
-
console.log('formDidShow', formDidShow);
|
|
171
|
-
});
|
|
172
|
-
|
|
173
|
-
feedbackRef.current.showInlineForm(eventTag, slug, (formDidShow) => {
|
|
174
|
-
console.log('formDidShow', formDidShow);
|
|
175
|
-
});
|
|
176
53
|
|
|
54
|
+
## Usage
|
|
55
|
+
|
|
56
|
+
```tsx
|
|
57
|
+
import {
|
|
58
|
+
Rating,
|
|
59
|
+
RatingNumber,
|
|
60
|
+
Input,
|
|
61
|
+
Textarea,
|
|
62
|
+
ButtonSubmit,
|
|
63
|
+
YesNoButtons,
|
|
64
|
+
MultiSelectButtons,
|
|
65
|
+
} from '@originallyus/feedback-rn-sdk'
|
|
66
|
+
import { Dimensions } from 'react-native'
|
|
67
|
+
|
|
68
|
+
const { width: appWidth } = Dimensions.get('window')
|
|
69
|
+
|
|
70
|
+
// Star rating
|
|
71
|
+
<Rating value={rating} onRate={setRating} />
|
|
72
|
+
|
|
73
|
+
// Numeric scale (1-10)
|
|
74
|
+
<RatingNumber
|
|
75
|
+
appWidth={appWidth}
|
|
76
|
+
numStar={rating}
|
|
77
|
+
rating_min={1}
|
|
78
|
+
rating_max={10}
|
|
79
|
+
scale_label_color="#666"
|
|
80
|
+
handlePressRating={setRating}
|
|
81
|
+
/>
|
|
82
|
+
|
|
83
|
+
// Input / Textarea
|
|
84
|
+
<Input appWidth={appWidth} value={val} onChangeText={setVal} placeholder="..." />
|
|
85
|
+
<Textarea appWidth={appWidth} value={val} onChangeText={setVal} />
|
|
177
86
|
```
|
|
178
87
|
|
|
179
|
-
|
|
180
|
-
|
|
88
|
+
For full props documentation, see [src/component/README.md](src/component/README.md)
|
|
181
89
|
|
|
182
|
-
|
|
90
|
+
## License
|
|
183
91
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
```
|
|
187
|
-
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example">
|
|
188
|
-
<queries>
|
|
189
|
-
<intent>
|
|
190
|
-
<action android:name="android.intent.action.VIEW" />
|
|
191
|
-
<data android:scheme="http" />
|
|
192
|
-
<data android:scheme="https" />
|
|
193
|
-
</intent>
|
|
194
|
-
</queries>
|
|
195
|
-
...
|
|
196
|
-
<!-- Another config -->
|
|
197
|
-
</manifest>
|
|
198
|
-
|
|
199
|
-
```
|
|
92
|
+
MIT
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { useState, useEffect, useCallback } from 'react';
|
|
4
|
+
import { View, Text, StyleSheet, ActivityIndicator } from 'react-native';
|
|
5
|
+
import { feedbackService } from "./service/feedbackService.js";
|
|
6
|
+
import { PRIMARY_COLOR, TEXT_DARK, BORDER_DEFAULT } from "./utils/constants.js";
|
|
7
|
+
import YesNoButtons from "./component/YesNoButtons.js";
|
|
8
|
+
import Rating from "./component/Rating.js";
|
|
9
|
+
import MultiSelectButtons from "./component/MultiSelectButtons.js";
|
|
10
|
+
import Textarea from "./component/Textarea.js";
|
|
11
|
+
import ButtonSubmit from "./component/ButtonSubmit.js";
|
|
12
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
13
|
+
const AIAContentUsefulness = ({
|
|
14
|
+
slug,
|
|
15
|
+
options,
|
|
16
|
+
style,
|
|
17
|
+
initialVisible = false,
|
|
18
|
+
onSuccess,
|
|
19
|
+
onError
|
|
20
|
+
}) => {
|
|
21
|
+
const [visible, setVisible] = useState(initialVisible);
|
|
22
|
+
const [step, setStep] = useState('PROMPT');
|
|
23
|
+
const [formData, setFormData] = useState(null);
|
|
24
|
+
const [loading, setLoading] = useState(true);
|
|
25
|
+
const [submitting, setSubmitting] = useState(false);
|
|
26
|
+
const [containerWidth, setContainerWidth] = useState(0);
|
|
27
|
+
|
|
28
|
+
// Form values
|
|
29
|
+
const [rating, setRating] = useState(0);
|
|
30
|
+
const [selectedOptions, setSelectedOptions] = useState([]);
|
|
31
|
+
const [freeText, setFreeText] = useState('');
|
|
32
|
+
const loadForm = useCallback(() => {
|
|
33
|
+
setLoading(true);
|
|
34
|
+
feedbackService.requestForm({
|
|
35
|
+
...options,
|
|
36
|
+
formSlug: slug
|
|
37
|
+
}, res => {
|
|
38
|
+
setLoading(false);
|
|
39
|
+
if (res && !res.error) {
|
|
40
|
+
setFormData(res);
|
|
41
|
+
} else {
|
|
42
|
+
onError?.(new Error(res?.error || 'Failed to load form'));
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}, [slug, options, onError]);
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
if (visible) {
|
|
48
|
+
loadForm();
|
|
49
|
+
}
|
|
50
|
+
}, [visible, loadForm]);
|
|
51
|
+
useEffect(() => {
|
|
52
|
+
const unsubscribe = feedbackService.onShow((triggerSlug, showOptions) => {
|
|
53
|
+
if (triggerSlug === slug && !showOptions?.forceModal) {
|
|
54
|
+
setVisible(true);
|
|
55
|
+
return true; // Handled
|
|
56
|
+
}
|
|
57
|
+
return false;
|
|
58
|
+
});
|
|
59
|
+
return unsubscribe;
|
|
60
|
+
}, [slug]);
|
|
61
|
+
const onPromptSelect = async value => {
|
|
62
|
+
setStep('LOADING');
|
|
63
|
+
try {
|
|
64
|
+
const selectionData = {
|
|
65
|
+
slug,
|
|
66
|
+
debug: options.debug || false,
|
|
67
|
+
event_tag: options.eventTag || '',
|
|
68
|
+
metadata: options.metadata || {},
|
|
69
|
+
rating: value === 'yes' ? 2 : 1,
|
|
70
|
+
request_id: formData?.id || ''
|
|
71
|
+
};
|
|
72
|
+
const res = await feedbackService.submitSelection(selectionData, options);
|
|
73
|
+
if (res && !res.error) {
|
|
74
|
+
// Hide itself and trigger modal for the rest of the flow
|
|
75
|
+
setVisible(false);
|
|
76
|
+
feedbackService.emitShow(slug, {
|
|
77
|
+
forceModal: true,
|
|
78
|
+
initialData: res
|
|
79
|
+
});
|
|
80
|
+
} else {
|
|
81
|
+
setStep('PROMPT');
|
|
82
|
+
onError?.(new Error(res?.error || 'Failed to submit selection'));
|
|
83
|
+
}
|
|
84
|
+
} catch (err) {
|
|
85
|
+
setStep('PROMPT');
|
|
86
|
+
onError?.(err);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
const onSubmitDetails = async () => {
|
|
90
|
+
setSubmitting(true);
|
|
91
|
+
try {
|
|
92
|
+
const submitData = {
|
|
93
|
+
slug: formData.slug || slug,
|
|
94
|
+
debug: options.debug || false,
|
|
95
|
+
event_tag: options.eventTag || '',
|
|
96
|
+
metadata: options.metadata || {},
|
|
97
|
+
request_id: formData.id || '',
|
|
98
|
+
rating: rating,
|
|
99
|
+
selected_options: selectedOptions.join(','),
|
|
100
|
+
free_text: freeText
|
|
101
|
+
};
|
|
102
|
+
const res = await feedbackService.submitForm(submitData, options);
|
|
103
|
+
if (res && !res.error) {
|
|
104
|
+
setStep('SUCCESS');
|
|
105
|
+
onSuccess?.(res);
|
|
106
|
+
} else {
|
|
107
|
+
onError?.(new Error(res?.error || 'Failed to submit feedback'));
|
|
108
|
+
}
|
|
109
|
+
} catch (err) {
|
|
110
|
+
onError?.(err);
|
|
111
|
+
} finally {
|
|
112
|
+
setSubmitting(false);
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
const getThemeColor = (key, fallback) => {
|
|
116
|
+
return formData?.theme?.[key] || fallback;
|
|
117
|
+
};
|
|
118
|
+
const textAlign = formData?.alignment === 'left' ? 'left' : 'center';
|
|
119
|
+
const align = formData?.alignment === 'left' ? 'flex-start' : 'center';
|
|
120
|
+
if (!visible) return null;
|
|
121
|
+
if (loading) {
|
|
122
|
+
return /*#__PURE__*/_jsx(View, {
|
|
123
|
+
style: [styles.container, style, styles.center],
|
|
124
|
+
children: /*#__PURE__*/_jsx(ActivityIndicator, {
|
|
125
|
+
color: PRIMARY_COLOR
|
|
126
|
+
})
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
if (!formData) return null;
|
|
130
|
+
const renderPrompt = () => /*#__PURE__*/_jsx(YesNoButtons, {
|
|
131
|
+
question: formData.question,
|
|
132
|
+
value: null,
|
|
133
|
+
yesLabel: formData.positive_feedback_button || 'Yes',
|
|
134
|
+
noLabel: formData.negative_feedback_button || 'No',
|
|
135
|
+
onSelect: onPromptSelect,
|
|
136
|
+
appWidth: containerWidth || 300,
|
|
137
|
+
selectedVariant: "secondary",
|
|
138
|
+
questionStyle: {
|
|
139
|
+
color: getThemeColor('question_color', TEXT_DARK),
|
|
140
|
+
textAlign
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
const renderForm = () => /*#__PURE__*/_jsxs(View, {
|
|
144
|
+
style: {
|
|
145
|
+
alignItems: align
|
|
146
|
+
},
|
|
147
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
148
|
+
style: [styles.title, {
|
|
149
|
+
color: getThemeColor('title_color', TEXT_DARK),
|
|
150
|
+
textAlign
|
|
151
|
+
}],
|
|
152
|
+
children: formData.title
|
|
153
|
+
}), formData.question && /*#__PURE__*/_jsx(Text, {
|
|
154
|
+
style: [styles.question, {
|
|
155
|
+
color: getThemeColor('question_color', TEXT_DARK),
|
|
156
|
+
textAlign
|
|
157
|
+
}],
|
|
158
|
+
children: formData.question
|
|
159
|
+
}), formData.show_rating_star === 1 && /*#__PURE__*/_jsx(View, {
|
|
160
|
+
style: styles.mv16,
|
|
161
|
+
children: /*#__PURE__*/_jsx(Rating, {
|
|
162
|
+
value: rating,
|
|
163
|
+
onRate: setRating,
|
|
164
|
+
selectedStarColor: getThemeColor('selected_star_color', PRIMARY_COLOR)
|
|
165
|
+
})
|
|
166
|
+
}), formData.options && formData.options.length > 0 && /*#__PURE__*/_jsx(MultiSelectButtons, {
|
|
167
|
+
question: formData.instruction || '',
|
|
168
|
+
options: formData.options.map(o => ({
|
|
169
|
+
label: o.text || o.title || '',
|
|
170
|
+
value: o.value || o.slug || ''
|
|
171
|
+
})),
|
|
172
|
+
value: selectedOptions,
|
|
173
|
+
onSelect: setSelectedOptions,
|
|
174
|
+
appWidth: containerWidth || 300,
|
|
175
|
+
style: styles.mv16
|
|
176
|
+
}), (formData.type === 'comment' || formData.show_comment) && /*#__PURE__*/_jsx(Textarea, {
|
|
177
|
+
value: freeText,
|
|
178
|
+
onChangeText: setFreeText,
|
|
179
|
+
placeholder: formData.comment_placeholder,
|
|
180
|
+
label: formData.secondary_question || 'Please specify',
|
|
181
|
+
appWidth: containerWidth || 300
|
|
182
|
+
}), /*#__PURE__*/_jsx(ButtonSubmit, {
|
|
183
|
+
title: formData.submit_button_text || 'Submit',
|
|
184
|
+
onPress: onSubmitDetails,
|
|
185
|
+
loading: submitting,
|
|
186
|
+
appWidth: containerWidth || 300,
|
|
187
|
+
backgroundColor: getThemeColor('button_bg_color', PRIMARY_COLOR)
|
|
188
|
+
})]
|
|
189
|
+
});
|
|
190
|
+
const renderSuccess = () => /*#__PURE__*/_jsxs(View, {
|
|
191
|
+
style: styles.center,
|
|
192
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
193
|
+
style: [styles.successTitle, {
|
|
194
|
+
textAlign
|
|
195
|
+
}],
|
|
196
|
+
children: formData.success_title || 'Submitted'
|
|
197
|
+
}), formData.success_message && /*#__PURE__*/_jsx(Text, {
|
|
198
|
+
style: [styles.successMsg, {
|
|
199
|
+
textAlign
|
|
200
|
+
}],
|
|
201
|
+
children: formData.success_message
|
|
202
|
+
})]
|
|
203
|
+
});
|
|
204
|
+
if (!visible) return null;
|
|
205
|
+
return /*#__PURE__*/_jsx(View, {
|
|
206
|
+
style: [styles.container, style],
|
|
207
|
+
onLayout: event => {
|
|
208
|
+
const {
|
|
209
|
+
width
|
|
210
|
+
} = event.nativeEvent.layout;
|
|
211
|
+
setContainerWidth(width);
|
|
212
|
+
},
|
|
213
|
+
children: /*#__PURE__*/_jsx(View, {
|
|
214
|
+
style: styles.expandedContent,
|
|
215
|
+
children: loading ? /*#__PURE__*/_jsx(View, {
|
|
216
|
+
style: styles.center,
|
|
217
|
+
children: /*#__PURE__*/_jsx(ActivityIndicator, {
|
|
218
|
+
color: PRIMARY_COLOR
|
|
219
|
+
})
|
|
220
|
+
}) : !formData ? null : /*#__PURE__*/_jsxs(_Fragment, {
|
|
221
|
+
children: [step === 'PROMPT' && renderPrompt(), step === 'LOADING' && /*#__PURE__*/_jsx(View, {
|
|
222
|
+
style: styles.center,
|
|
223
|
+
children: /*#__PURE__*/_jsx(ActivityIndicator, {
|
|
224
|
+
color: PRIMARY_COLOR
|
|
225
|
+
})
|
|
226
|
+
}), step === 'FORM' && renderForm(), step === 'SUCCESS' && renderSuccess()]
|
|
227
|
+
})
|
|
228
|
+
})
|
|
229
|
+
});
|
|
230
|
+
};
|
|
231
|
+
const styles = StyleSheet.create({
|
|
232
|
+
container: {
|
|
233
|
+
padding: 16,
|
|
234
|
+
backgroundColor: '#FFF',
|
|
235
|
+
borderRadius: 8,
|
|
236
|
+
borderWidth: 1,
|
|
237
|
+
borderColor: BORDER_DEFAULT,
|
|
238
|
+
marginVertical: 10
|
|
239
|
+
},
|
|
240
|
+
expandedContent: {
|
|
241
|
+
marginTop: 0
|
|
242
|
+
},
|
|
243
|
+
center: {
|
|
244
|
+
padding: 20,
|
|
245
|
+
alignItems: 'center',
|
|
246
|
+
justifyContent: 'center'
|
|
247
|
+
},
|
|
248
|
+
title: {
|
|
249
|
+
fontSize: 18,
|
|
250
|
+
fontWeight: '700',
|
|
251
|
+
marginBottom: 8
|
|
252
|
+
},
|
|
253
|
+
question: {
|
|
254
|
+
fontSize: 14,
|
|
255
|
+
marginBottom: 16
|
|
256
|
+
},
|
|
257
|
+
successTitle: {
|
|
258
|
+
fontSize: 18,
|
|
259
|
+
fontWeight: '700',
|
|
260
|
+
color: PRIMARY_COLOR
|
|
261
|
+
},
|
|
262
|
+
successMsg: {
|
|
263
|
+
fontSize: 14,
|
|
264
|
+
marginTop: 8,
|
|
265
|
+
color: TEXT_DARK
|
|
266
|
+
},
|
|
267
|
+
mv16: {
|
|
268
|
+
marginVertical: 16,
|
|
269
|
+
width: '100%'
|
|
270
|
+
}
|
|
271
|
+
});
|
|
272
|
+
export default AIAContentUsefulness;
|
|
273
|
+
//# sourceMappingURL=AIAContentUsefulness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useState","useEffect","useCallback","View","Text","StyleSheet","ActivityIndicator","feedbackService","PRIMARY_COLOR","TEXT_DARK","BORDER_DEFAULT","YesNoButtons","Rating","MultiSelectButtons","Textarea","ButtonSubmit","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","AIAContentUsefulness","slug","options","style","initialVisible","onSuccess","onError","visible","setVisible","step","setStep","formData","setFormData","loading","setLoading","submitting","setSubmitting","containerWidth","setContainerWidth","rating","setRating","selectedOptions","setSelectedOptions","freeText","setFreeText","loadForm","requestForm","formSlug","res","error","Error","unsubscribe","onShow","triggerSlug","showOptions","forceModal","onPromptSelect","value","selectionData","debug","event_tag","eventTag","metadata","request_id","id","submitSelection","emitShow","initialData","err","onSubmitDetails","submitData","selected_options","join","free_text","submitForm","getThemeColor","key","fallback","theme","textAlign","alignment","align","styles","container","center","children","color","renderPrompt","question","yesLabel","positive_feedback_button","noLabel","negative_feedback_button","onSelect","appWidth","selectedVariant","questionStyle","renderForm","alignItems","title","show_rating_star","mv16","onRate","selectedStarColor","length","instruction","map","o","label","text","type","show_comment","onChangeText","placeholder","comment_placeholder","secondary_question","submit_button_text","onPress","backgroundColor","renderSuccess","successTitle","success_title","success_message","successMsg","onLayout","event","width","nativeEvent","layout","expandedContent","create","padding","borderRadius","borderWidth","borderColor","marginVertical","marginTop","justifyContent","fontSize","fontWeight","marginBottom"],"sourceRoot":"../../src","sources":["AIAContentUsefulness.tsx"],"mappings":"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","ignoreList":[]}
|