@repzo/widget-react-native 1.0.4 → 1.0.6
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/lib/commonjs/api/client.js +8 -0
- package/lib/commonjs/api/client.js.map +1 -1
- package/lib/commonjs/i18n.js +14 -0
- package/lib/commonjs/i18n.js.map +1 -1
- package/lib/commonjs/locales.js +13 -0
- package/lib/commonjs/locales.js.map +1 -1
- package/lib/commonjs/state/widget-store.js +44 -4
- package/lib/commonjs/state/widget-store.js.map +1 -1
- package/lib/commonjs/types.js +3 -0
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/ui/WidgetProvider.js +93 -64
- package/lib/commonjs/ui/WidgetProvider.js.map +1 -1
- package/lib/commonjs/ui/components/Gradient.js +18 -2
- package/lib/commonjs/ui/components/Gradient.js.map +1 -1
- package/lib/commonjs/ui/components/RatingCard.js +347 -0
- package/lib/commonjs/ui/components/RatingCard.js.map +1 -0
- package/lib/commonjs/ui/hooks/use-top-inset.js +22 -0
- package/lib/commonjs/ui/hooks/use-top-inset.js.map +1 -0
- package/lib/commonjs/ui/screens/chat/ChatView.js +30 -2
- package/lib/commonjs/ui/screens/chat/ChatView.js.map +1 -1
- package/lib/commonjs/ui/screens/home/HomeView.js +42 -9
- package/lib/commonjs/ui/screens/home/HomeView.js.map +1 -1
- package/lib/commonjs/ui/screens/home/HomeView.styles.js +5 -3
- package/lib/commonjs/ui/screens/home/HomeView.styles.js.map +1 -1
- package/lib/module/api/client.js +8 -0
- package/lib/module/api/client.js.map +1 -1
- package/lib/module/i18n.js +14 -0
- package/lib/module/i18n.js.map +1 -1
- package/lib/module/locales.js +13 -0
- package/lib/module/locales.js.map +1 -1
- package/lib/module/state/widget-store.js +44 -4
- package/lib/module/state/widget-store.js.map +1 -1
- package/lib/module/types.js +3 -0
- package/lib/module/types.js.map +1 -1
- package/lib/module/ui/WidgetProvider.js +96 -67
- package/lib/module/ui/WidgetProvider.js.map +1 -1
- package/lib/module/ui/components/Gradient.js +18 -2
- package/lib/module/ui/components/Gradient.js.map +1 -1
- package/lib/module/ui/components/RatingCard.js +341 -0
- package/lib/module/ui/components/RatingCard.js.map +1 -0
- package/lib/module/ui/hooks/use-top-inset.js +17 -0
- package/lib/module/ui/hooks/use-top-inset.js.map +1 -0
- package/lib/module/ui/screens/chat/ChatView.js +31 -3
- package/lib/module/ui/screens/chat/ChatView.js.map +1 -1
- package/lib/module/ui/screens/home/HomeView.js +44 -12
- package/lib/module/ui/screens/home/HomeView.js.map +1 -1
- package/lib/module/ui/screens/home/HomeView.styles.js +4 -2
- package/lib/module/ui/screens/home/HomeView.styles.js.map +1 -1
- package/lib/typescript/commonjs/api/client.d.ts +7 -1
- package/lib/typescript/commonjs/api/client.d.ts.map +1 -1
- package/lib/typescript/commonjs/i18n.d.ts +13 -0
- package/lib/typescript/commonjs/i18n.d.ts.map +1 -1
- package/lib/typescript/commonjs/locales.d.ts.map +1 -1
- package/lib/typescript/commonjs/state/widget-store.d.ts +18 -1
- package/lib/typescript/commonjs/state/widget-store.d.ts.map +1 -1
- package/lib/typescript/commonjs/types.d.ts +17 -0
- package/lib/typescript/commonjs/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/WidgetProvider.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/Gradient.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/RatingCard.d.ts +57 -0
- package/lib/typescript/commonjs/ui/components/RatingCard.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/hooks/use-top-inset.d.ts +11 -0
- package/lib/typescript/commonjs/ui/hooks/use-top-inset.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/screens/chat/ChatView.d.ts +1 -1
- package/lib/typescript/commonjs/ui/screens/chat/ChatView.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/chat/ChatView.types.d.ts +11 -1
- package/lib/typescript/commonjs/ui/screens/chat/ChatView.types.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/home/HomeView.d.ts +7 -0
- package/lib/typescript/commonjs/ui/screens/home/HomeView.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/home/HomeView.styles.d.ts +3 -1
- package/lib/typescript/commonjs/ui/screens/home/HomeView.styles.d.ts.map +1 -1
- package/lib/typescript/module/api/client.d.ts +7 -1
- package/lib/typescript/module/api/client.d.ts.map +1 -1
- package/lib/typescript/module/i18n.d.ts +13 -0
- package/lib/typescript/module/i18n.d.ts.map +1 -1
- package/lib/typescript/module/locales.d.ts.map +1 -1
- package/lib/typescript/module/state/widget-store.d.ts +18 -1
- package/lib/typescript/module/state/widget-store.d.ts.map +1 -1
- package/lib/typescript/module/types.d.ts +17 -0
- package/lib/typescript/module/types.d.ts.map +1 -1
- package/lib/typescript/module/ui/WidgetProvider.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/Gradient.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/RatingCard.d.ts +57 -0
- package/lib/typescript/module/ui/components/RatingCard.d.ts.map +1 -0
- package/lib/typescript/module/ui/hooks/use-top-inset.d.ts +11 -0
- package/lib/typescript/module/ui/hooks/use-top-inset.d.ts.map +1 -0
- package/lib/typescript/module/ui/screens/chat/ChatView.d.ts +1 -1
- package/lib/typescript/module/ui/screens/chat/ChatView.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/chat/ChatView.types.d.ts +11 -1
- package/lib/typescript/module/ui/screens/chat/ChatView.types.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/home/HomeView.d.ts +7 -0
- package/lib/typescript/module/ui/screens/home/HomeView.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/home/HomeView.styles.d.ts +3 -1
- package/lib/typescript/module/ui/screens/home/HomeView.styles.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/api/client.ts +13 -0
- package/src/i18n.ts +14 -0
- package/src/locales.ts +13 -0
- package/src/state/widget-store.ts +53 -4
- package/src/types.ts +19 -0
- package/src/ui/WidgetProvider.tsx +54 -4
- package/src/ui/components/Gradient.tsx +19 -2
- package/src/ui/components/RatingCard.tsx +355 -0
- package/src/ui/hooks/use-top-inset.ts +16 -0
- package/src/ui/screens/chat/ChatView.tsx +35 -2
- package/src/ui/screens/chat/ChatView.types.ts +11 -0
- package/src/ui/screens/home/HomeView.styles.ts +4 -2
- package/src/ui/screens/home/HomeView.tsx +36 -8
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Conversation rating card (CSAT), posted two minutes after a teammate closes
|
|
5
|
+
* the chat. Port of `client/src/widget/components/RatingCard.tsx`.
|
|
6
|
+
*
|
|
7
|
+
* Tapping a face saves it right away; after 😠/🙁 the visitor can also tap a
|
|
8
|
+
* reason, labelled in their language. A comment locks the rating. The server enforces the change window and answers
|
|
9
|
+
* 409 (locked) or 410 (expired), which the card shows instead of the faces'
|
|
10
|
+
* actions.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { useState } from 'react';
|
|
14
|
+
import { Pressable, StyleSheet, Text, TextInput, View } from 'react-native';
|
|
15
|
+
import { contrastingTextColor, fontSize, palette, radius, spacing, withAlpha } from "../styles/theme.js";
|
|
16
|
+
|
|
17
|
+
/** 1..5, worst to best — Intercom's five faces. */
|
|
18
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
19
|
+
const RATING_SCALE = [{
|
|
20
|
+
value: 1,
|
|
21
|
+
emoji: '😠'
|
|
22
|
+
}, {
|
|
23
|
+
value: 2,
|
|
24
|
+
emoji: '🙁'
|
|
25
|
+
}, {
|
|
26
|
+
value: 3,
|
|
27
|
+
emoji: '😐'
|
|
28
|
+
}, {
|
|
29
|
+
value: 4,
|
|
30
|
+
emoji: '🙂'
|
|
31
|
+
}, {
|
|
32
|
+
value: 5,
|
|
33
|
+
emoji: '🤩'
|
|
34
|
+
}];
|
|
35
|
+
/** 1–2 asks for a reason; 3 is neutral, 4–5 good. */
|
|
36
|
+
export const isBadRating = rating => rating != null && rating <= 2;
|
|
37
|
+
const isRatingReason = value => !!value && typeof value === 'object' && typeof value.id === 'string' && !!value.labels && typeof value.labels === 'object';
|
|
38
|
+
|
|
39
|
+
/** The rating card carried by a system message's metadata, or null. */
|
|
40
|
+
export function getRatingRequest(metadata) {
|
|
41
|
+
if (!metadata || metadata.event !== 'rating_request' || typeof metadata.ratingId !== 'string') return null;
|
|
42
|
+
const rating = typeof metadata.rating === 'number' && metadata.rating >= 1 && metadata.rating <= 5 ? metadata.rating : null;
|
|
43
|
+
const comment = typeof metadata.ratingComment === 'string' && metadata.ratingComment ? metadata.ratingComment : null;
|
|
44
|
+
const reason = typeof metadata.ratingReason === 'string' && metadata.ratingReason ? metadata.ratingReason : null;
|
|
45
|
+
const reasons = Array.isArray(metadata.ratingReasons) ? metadata.ratingReasons.filter(isRatingReason) : [];
|
|
46
|
+
return {
|
|
47
|
+
ratingId: metadata.ratingId,
|
|
48
|
+
rating,
|
|
49
|
+
comment,
|
|
50
|
+
reason,
|
|
51
|
+
reasons
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* A reason's label in the first of `locales` it has (full code, then its base
|
|
57
|
+
* language: "ar-SA" → "ar"), else English, else whatever it has.
|
|
58
|
+
*/
|
|
59
|
+
export function reasonLabel(reason, locales) {
|
|
60
|
+
for (const locale of [...locales, 'en']) {
|
|
61
|
+
if (!locale) continue;
|
|
62
|
+
const label = reason.labels[locale] || reason.labels[locale.split('-')[0]];
|
|
63
|
+
if (label) return label;
|
|
64
|
+
}
|
|
65
|
+
return Object.values(reason.labels).find(Boolean) ?? reason.id;
|
|
66
|
+
}
|
|
67
|
+
export function RatingCard({
|
|
68
|
+
ratingId,
|
|
69
|
+
initialRating,
|
|
70
|
+
initialComment,
|
|
71
|
+
initialReason,
|
|
72
|
+
reasons,
|
|
73
|
+
locales,
|
|
74
|
+
color,
|
|
75
|
+
labels,
|
|
76
|
+
onRate
|
|
77
|
+
}) {
|
|
78
|
+
const [rating, setRating] = useState(initialRating);
|
|
79
|
+
const [reason, setReason] = useState(initialReason);
|
|
80
|
+
const [comment, setComment] = useState(initialComment);
|
|
81
|
+
const [draft, setDraft] = useState('');
|
|
82
|
+
const [pending, setPending] = useState(false);
|
|
83
|
+
const [closedReason, setClosedReason] = useState(initialComment ? 'locked' : null);
|
|
84
|
+
const [failed, setFailed] = useState(false);
|
|
85
|
+
const interactive = !!onRate && !closedReason && !pending;
|
|
86
|
+
const canSubmit = !pending && draft.trim().length > 0;
|
|
87
|
+
const submit = async next => {
|
|
88
|
+
if (!onRate || pending) return;
|
|
89
|
+
setPending(true);
|
|
90
|
+
setFailed(false);
|
|
91
|
+
try {
|
|
92
|
+
const result = await onRate(ratingId, next);
|
|
93
|
+
setRating(result.rating);
|
|
94
|
+
setReason(result.reason ?? null);
|
|
95
|
+
setComment(result.comment);
|
|
96
|
+
if (result.locked) setClosedReason('locked');
|
|
97
|
+
setDraft('');
|
|
98
|
+
} catch (error) {
|
|
99
|
+
const status = error.status;
|
|
100
|
+
if (status === 409) setClosedReason('locked');else if (status === 410) setClosedReason('expired');else setFailed(true);
|
|
101
|
+
} finally {
|
|
102
|
+
setPending(false);
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
const status = closedReason === 'expired' ? labels.expired : closedReason === 'locked' && !comment ? labels.locked : failed ? labels.failed : rating != null ? labels.thanks : null;
|
|
106
|
+
return /*#__PURE__*/_jsx(View, {
|
|
107
|
+
style: styles.row,
|
|
108
|
+
children: /*#__PURE__*/_jsxs(View, {
|
|
109
|
+
style: styles.card,
|
|
110
|
+
testID: "repzo-rating-card",
|
|
111
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
112
|
+
style: styles.question,
|
|
113
|
+
children: labels.question
|
|
114
|
+
}), /*#__PURE__*/_jsx(View, {
|
|
115
|
+
style: styles.faces,
|
|
116
|
+
accessibilityRole: "radiogroup",
|
|
117
|
+
children: RATING_SCALE.map((entry, index) => {
|
|
118
|
+
const selected = rating === entry.value;
|
|
119
|
+
return /*#__PURE__*/_jsx(Pressable, {
|
|
120
|
+
accessibilityRole: "radio",
|
|
121
|
+
accessibilityLabel: labels.scale[index],
|
|
122
|
+
accessibilityState: {
|
|
123
|
+
checked: selected,
|
|
124
|
+
disabled: !interactive
|
|
125
|
+
},
|
|
126
|
+
disabled: !interactive,
|
|
127
|
+
hitSlop: 4,
|
|
128
|
+
onPress: () => {
|
|
129
|
+
if (!selected) void submit({
|
|
130
|
+
rating: entry.value
|
|
131
|
+
});
|
|
132
|
+
},
|
|
133
|
+
style: ({
|
|
134
|
+
pressed
|
|
135
|
+
}) => [styles.face, selected && {
|
|
136
|
+
borderColor: color,
|
|
137
|
+
backgroundColor: withAlpha(color, 0.08)
|
|
138
|
+
}, rating != null && !selected && styles.faceDimmed, pressed && styles.facePressed],
|
|
139
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
140
|
+
style: styles.emoji,
|
|
141
|
+
children: entry.emoji
|
|
142
|
+
})
|
|
143
|
+
}, entry.value);
|
|
144
|
+
})
|
|
145
|
+
}), status ? /*#__PURE__*/_jsx(Text, {
|
|
146
|
+
style: [styles.status, failed && styles.statusFailed],
|
|
147
|
+
children: status
|
|
148
|
+
}) : null, isBadRating(rating) && reasons.length > 0 && (interactive || reason) ? /*#__PURE__*/_jsxs(View, {
|
|
149
|
+
style: styles.reasons,
|
|
150
|
+
children: [interactive ? /*#__PURE__*/_jsx(Text, {
|
|
151
|
+
style: styles.reasonPrompt,
|
|
152
|
+
children: labels.reasonPrompt
|
|
153
|
+
}) : null, /*#__PURE__*/_jsx(View, {
|
|
154
|
+
style: styles.chips,
|
|
155
|
+
accessibilityRole: "radiogroup",
|
|
156
|
+
accessibilityLabel: labels.reasonPrompt,
|
|
157
|
+
children: reasons.filter(item => interactive || item.id === reason).map(item => {
|
|
158
|
+
const selected = item.id === reason;
|
|
159
|
+
return /*#__PURE__*/_jsx(Pressable, {
|
|
160
|
+
accessibilityRole: "radio",
|
|
161
|
+
accessibilityState: {
|
|
162
|
+
checked: selected,
|
|
163
|
+
disabled: !interactive
|
|
164
|
+
},
|
|
165
|
+
disabled: !interactive,
|
|
166
|
+
onPress: () => {
|
|
167
|
+
if (!selected && rating != null) void submit({
|
|
168
|
+
rating,
|
|
169
|
+
reason: item.id
|
|
170
|
+
});
|
|
171
|
+
},
|
|
172
|
+
style: ({
|
|
173
|
+
pressed
|
|
174
|
+
}) => [styles.chip, selected && {
|
|
175
|
+
backgroundColor: color,
|
|
176
|
+
borderColor: color
|
|
177
|
+
}, pressed && styles.facePressed],
|
|
178
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
179
|
+
style: [styles.chipText, selected && {
|
|
180
|
+
color: contrastingTextColor(color)
|
|
181
|
+
}],
|
|
182
|
+
children: reasonLabel(item, locales)
|
|
183
|
+
})
|
|
184
|
+
}, item.id);
|
|
185
|
+
})
|
|
186
|
+
})]
|
|
187
|
+
}) : null, comment ? /*#__PURE__*/_jsx(Text, {
|
|
188
|
+
style: styles.comment,
|
|
189
|
+
children: comment
|
|
190
|
+
}) : rating != null && !closedReason ? /*#__PURE__*/_jsxs(View, {
|
|
191
|
+
style: styles.form,
|
|
192
|
+
children: [/*#__PURE__*/_jsx(TextInput, {
|
|
193
|
+
value: draft,
|
|
194
|
+
onChangeText: setDraft,
|
|
195
|
+
editable: !pending,
|
|
196
|
+
multiline: true,
|
|
197
|
+
maxLength: 2000,
|
|
198
|
+
placeholder: labels.commentPlaceholder,
|
|
199
|
+
placeholderTextColor: palette.textSubtle,
|
|
200
|
+
style: styles.input
|
|
201
|
+
}), /*#__PURE__*/_jsx(Pressable, {
|
|
202
|
+
accessibilityRole: "button",
|
|
203
|
+
disabled: !canSubmit,
|
|
204
|
+
onPress: () => {
|
|
205
|
+
const text = draft.trim();
|
|
206
|
+
if (text && rating != null) void submit({
|
|
207
|
+
rating,
|
|
208
|
+
comment: text
|
|
209
|
+
});
|
|
210
|
+
},
|
|
211
|
+
style: ({
|
|
212
|
+
pressed
|
|
213
|
+
}) => [styles.submit, {
|
|
214
|
+
backgroundColor: color
|
|
215
|
+
}, !canSubmit && styles.submitDisabled, pressed && canSubmit && styles.facePressed],
|
|
216
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
217
|
+
style: [styles.submitText, {
|
|
218
|
+
color: contrastingTextColor(color)
|
|
219
|
+
}],
|
|
220
|
+
children: labels.submit
|
|
221
|
+
})
|
|
222
|
+
})]
|
|
223
|
+
}) : null]
|
|
224
|
+
})
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
const styles = StyleSheet.create({
|
|
228
|
+
row: {
|
|
229
|
+
alignItems: 'center',
|
|
230
|
+
paddingVertical: spacing.md
|
|
231
|
+
},
|
|
232
|
+
card: {
|
|
233
|
+
width: '100%',
|
|
234
|
+
maxWidth: 340,
|
|
235
|
+
gap: spacing.md,
|
|
236
|
+
padding: spacing.lg,
|
|
237
|
+
borderRadius: radius.xl,
|
|
238
|
+
borderWidth: StyleSheet.hairlineWidth,
|
|
239
|
+
borderColor: palette.border,
|
|
240
|
+
backgroundColor: palette.white
|
|
241
|
+
},
|
|
242
|
+
question: {
|
|
243
|
+
textAlign: 'center',
|
|
244
|
+
color: palette.ink,
|
|
245
|
+
fontSize: fontSize.body,
|
|
246
|
+
fontWeight: '600'
|
|
247
|
+
},
|
|
248
|
+
faces: {
|
|
249
|
+
flexDirection: 'row',
|
|
250
|
+
justifyContent: 'center',
|
|
251
|
+
gap: spacing.sm
|
|
252
|
+
},
|
|
253
|
+
face: {
|
|
254
|
+
width: 48,
|
|
255
|
+
height: 48,
|
|
256
|
+
borderRadius: 24,
|
|
257
|
+
borderWidth: 2,
|
|
258
|
+
borderColor: 'transparent',
|
|
259
|
+
alignItems: 'center',
|
|
260
|
+
justifyContent: 'center'
|
|
261
|
+
},
|
|
262
|
+
faceDimmed: {
|
|
263
|
+
opacity: 0.45
|
|
264
|
+
},
|
|
265
|
+
facePressed: {
|
|
266
|
+
opacity: 0.7
|
|
267
|
+
},
|
|
268
|
+
emoji: {
|
|
269
|
+
fontSize: 28
|
|
270
|
+
},
|
|
271
|
+
status: {
|
|
272
|
+
textAlign: 'center',
|
|
273
|
+
color: palette.textMuted,
|
|
274
|
+
fontSize: fontSize.meta
|
|
275
|
+
},
|
|
276
|
+
statusFailed: {
|
|
277
|
+
color: palette.danger
|
|
278
|
+
},
|
|
279
|
+
reasons: {
|
|
280
|
+
gap: spacing.sm
|
|
281
|
+
},
|
|
282
|
+
reasonPrompt: {
|
|
283
|
+
color: palette.ink,
|
|
284
|
+
fontSize: fontSize.meta,
|
|
285
|
+
fontWeight: '600'
|
|
286
|
+
},
|
|
287
|
+
chips: {
|
|
288
|
+
flexDirection: 'row',
|
|
289
|
+
flexWrap: 'wrap',
|
|
290
|
+
gap: spacing.sm
|
|
291
|
+
},
|
|
292
|
+
chip: {
|
|
293
|
+
paddingHorizontal: spacing.md,
|
|
294
|
+
paddingVertical: spacing.sm,
|
|
295
|
+
borderRadius: radius.pill,
|
|
296
|
+
borderWidth: 1,
|
|
297
|
+
borderColor: palette.border,
|
|
298
|
+
backgroundColor: palette.white
|
|
299
|
+
},
|
|
300
|
+
chipText: {
|
|
301
|
+
color: palette.ink,
|
|
302
|
+
fontSize: fontSize.meta
|
|
303
|
+
},
|
|
304
|
+
comment: {
|
|
305
|
+
paddingHorizontal: spacing.md,
|
|
306
|
+
paddingVertical: spacing.sm,
|
|
307
|
+
borderRadius: radius.md,
|
|
308
|
+
backgroundColor: palette.surfaceAlt,
|
|
309
|
+
color: palette.ink,
|
|
310
|
+
fontSize: fontSize.meta,
|
|
311
|
+
writingDirection: 'auto'
|
|
312
|
+
},
|
|
313
|
+
form: {
|
|
314
|
+
gap: spacing.sm
|
|
315
|
+
},
|
|
316
|
+
input: {
|
|
317
|
+
minHeight: 64,
|
|
318
|
+
paddingHorizontal: spacing.md,
|
|
319
|
+
paddingVertical: spacing.sm,
|
|
320
|
+
borderRadius: radius.md,
|
|
321
|
+
borderWidth: 1,
|
|
322
|
+
borderColor: palette.border,
|
|
323
|
+
color: palette.ink,
|
|
324
|
+
fontSize: fontSize.input,
|
|
325
|
+
textAlignVertical: 'top'
|
|
326
|
+
},
|
|
327
|
+
submit: {
|
|
328
|
+
alignSelf: 'flex-end',
|
|
329
|
+
paddingHorizontal: spacing.lg,
|
|
330
|
+
paddingVertical: spacing.sm,
|
|
331
|
+
borderRadius: radius.pill
|
|
332
|
+
},
|
|
333
|
+
submitDisabled: {
|
|
334
|
+
opacity: 0.5
|
|
335
|
+
},
|
|
336
|
+
submitText: {
|
|
337
|
+
fontSize: fontSize.meta,
|
|
338
|
+
fontWeight: '600'
|
|
339
|
+
}
|
|
340
|
+
});
|
|
341
|
+
//# sourceMappingURL=RatingCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useState","Pressable","StyleSheet","Text","TextInput","View","contrastingTextColor","fontSize","palette","radius","spacing","withAlpha","jsx","_jsx","jsxs","_jsxs","RATING_SCALE","value","emoji","isBadRating","rating","isRatingReason","id","labels","getRatingRequest","metadata","event","ratingId","comment","ratingComment","reason","ratingReason","reasons","Array","isArray","ratingReasons","filter","reasonLabel","locales","locale","label","split","Object","values","find","Boolean","RatingCard","initialRating","initialComment","initialReason","color","onRate","setRating","setReason","setComment","draft","setDraft","pending","setPending","closedReason","setClosedReason","failed","setFailed","interactive","canSubmit","trim","length","submit","next","result","locked","error","status","expired","thanks","style","styles","row","children","card","testID","question","faces","accessibilityRole","map","entry","index","selected","accessibilityLabel","scale","accessibilityState","checked","disabled","hitSlop","onPress","pressed","face","borderColor","backgroundColor","faceDimmed","facePressed","statusFailed","reasonPrompt","chips","item","chip","chipText","form","onChangeText","editable","multiline","maxLength","placeholder","commentPlaceholder","placeholderTextColor","textSubtle","input","text","submitDisabled","submitText","create","alignItems","paddingVertical","md","width","maxWidth","gap","padding","lg","borderRadius","xl","borderWidth","hairlineWidth","border","white","textAlign","ink","body","fontWeight","flexDirection","justifyContent","sm","height","opacity","textMuted","meta","danger","flexWrap","paddingHorizontal","pill","surfaceAlt","writingDirection","minHeight","textAlignVertical","alignSelf"],"sourceRoot":"../../../../src","sources":["ui/components/RatingCard.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* How far a screen's header must reach up to sit under the status bar.
|
|
5
|
+
*
|
|
6
|
+
* The messenger draws edge to edge. Screens with a brand header (home, chat)
|
|
7
|
+
* extend that header's background into the status-bar area instead of leaving
|
|
8
|
+
* a white strip above it; the provider gives them the inset through this
|
|
9
|
+
* context and pads every other screen itself, so this is 0 for them.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { createContext, useContext } from 'react';
|
|
13
|
+
export const TopInsetContext = /*#__PURE__*/createContext(0);
|
|
14
|
+
export function useTopInset() {
|
|
15
|
+
return useContext(TopInsetContext);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=use-top-inset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createContext","useContext","TopInsetContext","useTopInset"],"sourceRoot":"../../../../src","sources":["ui/hooks/use-top-inset.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;AAEjD,OAAO,MAAMC,eAAe,gBAAGF,aAAa,CAAC,CAAC,CAAC;AAE/C,OAAO,SAASG,WAAWA,CAAA,EAAW;EACpC,OAAOF,UAAU,CAACC,eAAe,CAAC;AACpC","ignoreList":[]}
|
|
@@ -19,14 +19,16 @@ import { AttachmentChips } from "../../components/AttachmentChips.js";
|
|
|
19
19
|
import { AttachmentMenu, showNativeAttachmentMenu } from "../../components/AttachmentMenu.js";
|
|
20
20
|
import { Avatar } from "../../components/Avatar.js";
|
|
21
21
|
import { ImageViewer } from "../../components/ImageViewer.js";
|
|
22
|
+
import { getRatingRequest, RatingCard } from "../../components/RatingCard.js";
|
|
22
23
|
import { WidgetErrorBoundary } from "../../components/ErrorBoundary.js";
|
|
23
24
|
import { GradientBackground } from "../../components/Gradient.js";
|
|
24
25
|
import { ArrowUpIcon, ChatOutlineIcon, ChevronIcon, ClockIcon, PaperclipIcon } from "../../components/icons.js";
|
|
25
26
|
import { TeamAvatars } from "../../components/TeamAvatars.js";
|
|
26
27
|
import { Markdown } from "../../components/Markdown.js";
|
|
27
28
|
import { useReduceMotion } from "../../hooks/use-reduce-motion.js";
|
|
29
|
+
import { useTopInset } from "../../hooks/use-top-inset.js";
|
|
28
30
|
import { globalStyles } from "../../styles/global.js";
|
|
29
|
-
import { contrastingTextColor, mixHex, palette, withAlpha } from "../../styles/theme.js";
|
|
31
|
+
import { contrastingTextColor, mixHex, palette, spacing, withAlpha } from "../../styles/theme.js";
|
|
30
32
|
import { formatClockTime, formatDayLabel, isSameDay } from "../../utils/conversations.js";
|
|
31
33
|
import { stripHtml } from "../../utils/html.js";
|
|
32
34
|
import { isHttpUrl, openExternalUrl } from "../../utils/safe-url.js";
|
|
@@ -54,6 +56,8 @@ export function ChatView({
|
|
|
54
56
|
onPickAttachments,
|
|
55
57
|
onSendMessage,
|
|
56
58
|
onIdentifyVisitor,
|
|
59
|
+
onRateConversation,
|
|
60
|
+
defaultLocale,
|
|
57
61
|
onLoadMore,
|
|
58
62
|
onTyping,
|
|
59
63
|
onBack,
|
|
@@ -262,6 +266,7 @@ export function ChatView({
|
|
|
262
266
|
const lastVisitorMessageId = [...messages].reverse().find(message => message.direction === 'inbound' && (message.messageType ?? 'message') === 'message')?.id;
|
|
263
267
|
// Two stops off the brand color: flat fill looked like an unstyled block.
|
|
264
268
|
// A non-hex brand color falls through mixHex unchanged and renders solid.
|
|
269
|
+
const topInset = useTopInset();
|
|
265
270
|
const headerGradient = [color, mixHex(color, '#000000', 0.16)];
|
|
266
271
|
const headerControl = {
|
|
267
272
|
backgroundColor: withAlpha(headerTextColor, 0.16)
|
|
@@ -272,7 +277,12 @@ export function ChatView({
|
|
|
272
277
|
colors: headerGradient,
|
|
273
278
|
style: [styles.header, {
|
|
274
279
|
borderBottomColor: mixHex(color, '#000000', 0.26)
|
|
275
|
-
}
|
|
280
|
+
},
|
|
281
|
+
// Reaches under the status bar so the brand colour runs to the top.
|
|
282
|
+
topInset > 0 ? {
|
|
283
|
+
paddingTop: spacing.md + topInset,
|
|
284
|
+
minHeight: 72 + topInset
|
|
285
|
+
} : null],
|
|
276
286
|
children: [/*#__PURE__*/_jsx(Pressable, {
|
|
277
287
|
onPress: onBack,
|
|
278
288
|
accessibilityRole: "button",
|
|
@@ -428,6 +438,8 @@ export function ChatView({
|
|
|
428
438
|
color: color,
|
|
429
439
|
labels: labels,
|
|
430
440
|
onOpenImage: setViewerImage,
|
|
441
|
+
onRateConversation: onRateConversation,
|
|
442
|
+
locales: [locale, defaultLocale],
|
|
431
443
|
senderLabel: isAgentMessage && (startsRun || startsDay) ? message.senderName || agentName || labels.team : null,
|
|
432
444
|
timeLabel: formatClockTime(message.createdAt, locale),
|
|
433
445
|
receiptLabel: message.id === lastVisitorMessageId ? receiptLabel(message, labels) : undefined,
|
|
@@ -563,7 +575,9 @@ function MessageBubble({
|
|
|
563
575
|
receiptLabel,
|
|
564
576
|
onSubmitProcedureForm,
|
|
565
577
|
onAgentUiAction,
|
|
566
|
-
onOpenImage
|
|
578
|
+
onOpenImage,
|
|
579
|
+
onRateConversation,
|
|
580
|
+
locales
|
|
567
581
|
}) {
|
|
568
582
|
const joinedName = message.metadata?.event === 'agent_joined' ? message.metadata?.agentName : null;
|
|
569
583
|
if (message.messageType === 'system' && typeof joinedName === 'string' && joinedName) {
|
|
@@ -583,6 +597,20 @@ function MessageBubble({
|
|
|
583
597
|
})]
|
|
584
598
|
});
|
|
585
599
|
}
|
|
600
|
+
const ratingRequest = message.messageType === 'system' ? getRatingRequest(message.metadata) : null;
|
|
601
|
+
if (ratingRequest) {
|
|
602
|
+
return /*#__PURE__*/_jsx(RatingCard, {
|
|
603
|
+
ratingId: ratingRequest.ratingId,
|
|
604
|
+
initialRating: ratingRequest.rating,
|
|
605
|
+
initialComment: ratingRequest.comment,
|
|
606
|
+
initialReason: ratingRequest.reason,
|
|
607
|
+
reasons: ratingRequest.reasons,
|
|
608
|
+
locales: locales,
|
|
609
|
+
color: color,
|
|
610
|
+
labels: labels.rating,
|
|
611
|
+
onRate: onRateConversation ? (ratingId, data) => onRateConversation(message.id, ratingId, data) : undefined
|
|
612
|
+
});
|
|
613
|
+
}
|
|
586
614
|
if (message.messageType === 'system') {
|
|
587
615
|
const text = message.bodyPlain || stripHtml(message.body || '') || labels.conversationUpdated;
|
|
588
616
|
return /*#__PURE__*/_jsx(View, {
|