@repzo/widget-react-native 1.2.1 → 1.2.2
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/CHANGELOG.md +28 -0
- package/README.md +31 -0
- package/lib/commonjs/api/client.js +47 -2
- package/lib/commonjs/api/client.js.map +1 -1
- package/lib/commonjs/audio/voice.js +119 -0
- package/lib/commonjs/audio/voice.js.map +1 -0
- package/lib/commonjs/i18n.js +6 -0
- package/lib/commonjs/i18n.js.map +1 -1
- package/lib/commonjs/locales.js +4 -0
- package/lib/commonjs/locales.js.map +1 -1
- package/lib/commonjs/state/use-widget-state.js +31 -0
- package/lib/commonjs/state/use-widget-state.js.map +1 -1
- package/lib/commonjs/state/widget-store.js +22 -1
- package/lib/commonjs/state/widget-store.js.map +1 -1
- package/lib/commonjs/ui/WidgetProvider.js +6 -0
- package/lib/commonjs/ui/WidgetProvider.js.map +1 -1
- package/lib/commonjs/ui/components/FileCard.js +134 -0
- package/lib/commonjs/ui/components/FileCard.js.map +1 -0
- package/lib/commonjs/ui/components/Launcher.js +15 -1
- package/lib/commonjs/ui/components/Launcher.js.map +1 -1
- package/lib/commonjs/ui/components/VoiceNote.js +354 -0
- package/lib/commonjs/ui/components/VoiceNote.js.map +1 -0
- package/lib/commonjs/ui/components/icons.js +57 -0
- package/lib/commonjs/ui/components/icons.js.map +1 -1
- package/lib/commonjs/ui/screens/chat/ChatView.js +33 -14
- package/lib/commonjs/ui/screens/chat/ChatView.js.map +1 -1
- package/lib/commonjs/ui/screens/chat/ChatView.styles.js +0 -9
- package/lib/commonjs/ui/screens/chat/ChatView.styles.js.map +1 -1
- package/lib/module/api/client.js +48 -2
- package/lib/module/api/client.js.map +1 -1
- package/lib/module/audio/voice.js +110 -0
- package/lib/module/audio/voice.js.map +1 -0
- package/lib/module/i18n.js +6 -0
- package/lib/module/i18n.js.map +1 -1
- package/lib/module/locales.js +4 -0
- package/lib/module/locales.js.map +1 -1
- package/lib/module/state/use-widget-state.js +30 -1
- package/lib/module/state/use-widget-state.js.map +1 -1
- package/lib/module/state/widget-store.js +22 -1
- package/lib/module/state/widget-store.js.map +1 -1
- package/lib/module/ui/WidgetProvider.js +6 -0
- package/lib/module/ui/WidgetProvider.js.map +1 -1
- package/lib/module/ui/components/FileCard.js +130 -0
- package/lib/module/ui/components/FileCard.js.map +1 -0
- package/lib/module/ui/components/Launcher.js +16 -2
- package/lib/module/ui/components/Launcher.js.map +1 -1
- package/lib/module/ui/components/VoiceNote.js +350 -0
- package/lib/module/ui/components/VoiceNote.js.map +1 -0
- package/lib/module/ui/components/icons.js +55 -0
- package/lib/module/ui/components/icons.js.map +1 -1
- package/lib/module/ui/screens/chat/ChatView.js +33 -14
- package/lib/module/ui/screens/chat/ChatView.js.map +1 -1
- package/lib/module/ui/screens/chat/ChatView.styles.js +0 -9
- package/lib/module/ui/screens/chat/ChatView.styles.js.map +1 -1
- package/lib/typescript/commonjs/api/client.d.ts +12 -0
- package/lib/typescript/commonjs/api/client.d.ts.map +1 -1
- package/lib/typescript/commonjs/audio/voice.d.ts +29 -0
- package/lib/typescript/commonjs/audio/voice.d.ts.map +1 -0
- package/lib/typescript/commonjs/i18n.d.ts +4 -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/use-widget-state.d.ts +8 -0
- package/lib/typescript/commonjs/state/use-widget-state.d.ts.map +1 -1
- package/lib/typescript/commonjs/state/widget-store.d.ts +2 -0
- package/lib/typescript/commonjs/state/widget-store.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/WidgetProvider.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/FileCard.d.ts +21 -0
- package/lib/typescript/commonjs/ui/components/FileCard.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/Launcher.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/VoiceNote.d.ts +32 -0
- package/lib/typescript/commonjs/ui/components/VoiceNote.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/icons.d.ts +4 -0
- package/lib/typescript/commonjs/ui/components/icons.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/chat/ChatView.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/chat/ChatView.styles.d.ts +0 -9
- package/lib/typescript/commonjs/ui/screens/chat/ChatView.styles.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/chat/ChatView.types.d.ts +4 -0
- package/lib/typescript/commonjs/ui/screens/chat/ChatView.types.d.ts.map +1 -1
- package/lib/typescript/module/api/client.d.ts +12 -0
- package/lib/typescript/module/api/client.d.ts.map +1 -1
- package/lib/typescript/module/audio/voice.d.ts +29 -0
- package/lib/typescript/module/audio/voice.d.ts.map +1 -0
- package/lib/typescript/module/i18n.d.ts +4 -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/use-widget-state.d.ts +8 -0
- package/lib/typescript/module/state/use-widget-state.d.ts.map +1 -1
- package/lib/typescript/module/state/widget-store.d.ts +2 -0
- package/lib/typescript/module/state/widget-store.d.ts.map +1 -1
- package/lib/typescript/module/ui/WidgetProvider.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/FileCard.d.ts +21 -0
- package/lib/typescript/module/ui/components/FileCard.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/Launcher.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/VoiceNote.d.ts +32 -0
- package/lib/typescript/module/ui/components/VoiceNote.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/icons.d.ts +4 -0
- package/lib/typescript/module/ui/components/icons.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/chat/ChatView.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/chat/ChatView.styles.d.ts +0 -9
- package/lib/typescript/module/ui/screens/chat/ChatView.styles.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/chat/ChatView.types.d.ts +4 -0
- package/lib/typescript/module/ui/screens/chat/ChatView.types.d.ts.map +1 -1
- package/package.json +5 -1
- package/src/api/client.ts +56 -2
- package/src/audio/voice.ts +103 -0
- package/src/i18n.ts +6 -0
- package/src/locales.ts +4 -0
- package/src/state/use-widget-state.ts +30 -1
- package/src/state/widget-store.ts +22 -1
- package/src/ui/WidgetProvider.tsx +6 -0
- package/src/ui/components/FileCard.tsx +111 -0
- package/src/ui/components/Launcher.tsx +7 -2
- package/src/ui/components/VoiceNote.tsx +363 -0
- package/src/ui/components/icons.tsx +33 -0
- package/src/ui/screens/chat/ChatView.styles.ts +0 -9
- package/src/ui/screens/chat/ChatView.tsx +39 -13
- package/src/ui/screens/chat/ChatView.types.ts +4 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Voice notes (and any audio file) play inside the chat when the host app has
|
|
5
|
+
* `expo-audio`; without it they stay a file row that opens in the browser.
|
|
6
|
+
*
|
|
7
|
+
* Resolved once at module load, like the attachment pickers: each `require` is
|
|
8
|
+
* static so Metro can see it, and with `allowOptionalDependencies` (see
|
|
9
|
+
* metro.js) an uninstalled one bundles as a require that throws, which the
|
|
10
|
+
* `try` around it catches.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
let expoAudio = null;
|
|
14
|
+
try {
|
|
15
|
+
const mod = require('expo-audio');
|
|
16
|
+
if (typeof mod?.useAudioPlayer === 'function' && typeof mod?.useAudioPlayerStatus === 'function') {
|
|
17
|
+
expoAudio = mod;
|
|
18
|
+
}
|
|
19
|
+
} catch {
|
|
20
|
+
expoAudio = null;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// expo-audio 1.x (Expo SDK 54+) takes `{ updateInterval }`; 0.x (SDK 53) took
|
|
24
|
+
// the interval itself. Passing the wrong shape would break the player.
|
|
25
|
+
let takesOptionsObject = true;
|
|
26
|
+
try {
|
|
27
|
+
const version = require('expo-audio/package.json')?.version;
|
|
28
|
+
if (typeof version === 'string') takesOptionsObject = Number(version.split('.')[0]) >= 1;
|
|
29
|
+
} catch {
|
|
30
|
+
takesOptionsObject = true;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** How often the playhead moves while a note plays. */
|
|
34
|
+
const UPDATE_INTERVAL_MS = 100;
|
|
35
|
+
|
|
36
|
+
/** The installed expo-audio module, or null when the app doesn't have it. */
|
|
37
|
+
export function voicePlaybackModule() {
|
|
38
|
+
return expoAudio;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** The second argument to `useAudioPlayer` for the installed expo-audio. */
|
|
42
|
+
export function audioPlayerOptions() {
|
|
43
|
+
return takesOptionsObject ? {
|
|
44
|
+
updateInterval: UPDATE_INTERVAL_MS
|
|
45
|
+
} : UPDATE_INTERVAL_MS;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** Audio the chat can play in place: an `audio/*` attachment with a web address. */
|
|
49
|
+
export function isPlayableAudio(contentType, url) {
|
|
50
|
+
return !!expoAudio && (contentType ?? '').toLowerCase().startsWith('audio/') && /^https?:\/\//i.test(url ?? '');
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// ─── One note at a time ─────────────────────────────────────────────────────
|
|
54
|
+
// Each bubble owns its own player, so starting a second note would otherwise
|
|
55
|
+
// talk over the first.
|
|
56
|
+
|
|
57
|
+
let playing = null;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Called as a note starts: pauses whichever note was playing and returns a
|
|
61
|
+
* release for this one's claim (call it when the note goes away).
|
|
62
|
+
*/
|
|
63
|
+
export function claimVoicePlayback(pause) {
|
|
64
|
+
const claim = {
|
|
65
|
+
pause
|
|
66
|
+
};
|
|
67
|
+
const previous = playing;
|
|
68
|
+
playing = claim;
|
|
69
|
+
if (previous) {
|
|
70
|
+
try {
|
|
71
|
+
previous.pause();
|
|
72
|
+
} catch {
|
|
73
|
+
// Its player was released with its bubble: nothing is playing.
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return () => {
|
|
77
|
+
if (playing === claim) playing = null;
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// ─── Waveform ───────────────────────────────────────────────────────────────
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Bar heights (0.15–1) for a note's waveform. Workstation doesn't send the
|
|
85
|
+
* recorded loudness to visitors, so the pattern is made up — seeded from the
|
|
86
|
+
* attachment, so the same note always draws the same bars.
|
|
87
|
+
*/
|
|
88
|
+
export function voiceWaveformLevels(seed, count) {
|
|
89
|
+
let h = 2166136261;
|
|
90
|
+
for (let i = 0; i < seed.length; i += 1) {
|
|
91
|
+
h ^= seed.charCodeAt(i);
|
|
92
|
+
h = Math.imul(h, 16777619);
|
|
93
|
+
}
|
|
94
|
+
const levels = [];
|
|
95
|
+
for (let i = 0; i < count; i += 1) {
|
|
96
|
+
h ^= h << 13;
|
|
97
|
+
h ^= h >>> 17;
|
|
98
|
+
h ^= h << 5;
|
|
99
|
+
const n = (h >>> 0) % 1000 / 1000;
|
|
100
|
+
levels.push(0.15 + Math.pow(n, 0.85) * 0.85);
|
|
101
|
+
}
|
|
102
|
+
return levels;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/** `m:ss` for a playback position or length. */
|
|
106
|
+
export function formatVoiceClock(seconds) {
|
|
107
|
+
const s = Math.max(0, Math.floor(Number.isFinite(seconds) ? seconds : 0));
|
|
108
|
+
return `${Math.floor(s / 60)}:${(s % 60).toString().padStart(2, '0')}`;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=voice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["expoAudio","mod","require","useAudioPlayer","useAudioPlayerStatus","takesOptionsObject","version","Number","split","UPDATE_INTERVAL_MS","voicePlaybackModule","audioPlayerOptions","updateInterval","isPlayableAudio","contentType","url","toLowerCase","startsWith","test","playing","claimVoicePlayback","pause","claim","previous","voiceWaveformLevels","seed","count","h","i","length","charCodeAt","Math","imul","levels","n","push","pow","formatVoiceClock","seconds","s","max","floor","isFinite","toString","padStart"],"sourceRoot":"../../../src","sources":["audio/voice.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/i18n.js
CHANGED
|
@@ -55,6 +55,12 @@ export const DEFAULT_LABELS = {
|
|
|
55
55
|
attachmentTooMany: 'You can attach up to {count} files',
|
|
56
56
|
attachmentsTooLargeTogether: 'Attachments are too large to send together — send some in another message',
|
|
57
57
|
attachmentFailed: "Couldn't attach that file",
|
|
58
|
+
// A file in a message; tapping opens it. `{name}` is the file name.
|
|
59
|
+
openAttachment: 'Open {name}',
|
|
60
|
+
// Voice notes played in the chat (with expo-audio).
|
|
61
|
+
voicePlay: 'Play voice message',
|
|
62
|
+
voicePause: 'Pause voice message',
|
|
63
|
+
voiceSpeed: 'Playback speed',
|
|
58
64
|
// Full-screen image viewer.
|
|
59
65
|
imageLoadFailed: "Couldn't load this image",
|
|
60
66
|
openImageExternally: 'Open image',
|
package/lib/module/i18n.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BUNDLED_TRANSLATIONS","baseLanguage","createTranslator","config","locale","defaultLocale","active","fallbackLocale","key","fallback","translations","WELCOME_TEXT_KEYS","localizeWelcomeText","translate","localized","forEach","DEFAULT_LABELS","back","loading","loadEarlier","emptyConversation","messagePlaceholder","attachFile","attachPhotoLibrary","attachTakePhoto","attachChooseFile","removeAttachment","attachmentTooLarge","attachmentTooMany","attachmentsTooLargeTogether","attachmentFailed","imageLoadFailed","openImageExternally","cameraPermissionDenied","cancel","failedToSend","thinking","messages","noMessages","historyHidden","startBelow","preChatTitle","preChatSubtitle","preChatSkip","preChatSubmit","viewPreviousConversations","homeRecentTitle","homeViewAllCount","homeNoConversations","homeStatusOnline","homeStatusAway","unreadBadge","team","home","close","retry","connectionError","connecting","chatUnavailable","identityVerificationError","widgetCrashed","timeJustNow","timeMinutes","timeHours","timeDays","timeMonths","timeYears","today","yesterday","conversationUpdated","messageDeleted","messageSent","messageSeen","waitingForTeammate","joinedConversation","ratingQuestion","ratingReasonPrompt","ratingCommentPlaceholder","ratingSubmit","ratingDone","ratingThanks","ratingLocked","ratingExpired","ratingFailed","rating1","rating2","rating3","rating4","rating5","procedureSend","procedureSent","procedureShareDetails","procedureDetailsSent","procedureHide","procedureFieldCount","procedureFieldCountOne","procedureTitle","procedureEmailPlaceholder","procedurePhonePlaceholder","fieldRequired","invalidEmail","working","outboundTitle","outboundCta","dismiss","notificationReplyFrom","notificationNewReply","notificationAttachment","notificationOpenHint","postFrom","postNewMessage","postOpenHint","postClose","postMinimize","postReplyPlaceholder","postSend","postSent","postReplyFailed","postReactions","postThanks","postConversation","postContinueChat","blockService","blockProduct","blockChooseTime","blockProfessional","blockPriceOffer","blockSubtotal","blockDiscount","blockTax","blockShipping","blockTotal","blockMinutes","blockSave","blockAnyAvailable","blockWithProvider","blockBookTime","blockValidUntil","launcherOpen","launcherClose","formatLabel","template","values","replace","match","String","buildLabels","labels","Object","keys"],"sourceRoot":"../../src","sources":["i18n.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"names":["BUNDLED_TRANSLATIONS","baseLanguage","createTranslator","config","locale","defaultLocale","active","fallbackLocale","key","fallback","translations","WELCOME_TEXT_KEYS","localizeWelcomeText","translate","localized","forEach","DEFAULT_LABELS","back","loading","loadEarlier","emptyConversation","messagePlaceholder","attachFile","attachPhotoLibrary","attachTakePhoto","attachChooseFile","removeAttachment","attachmentTooLarge","attachmentTooMany","attachmentsTooLargeTogether","attachmentFailed","openAttachment","voicePlay","voicePause","voiceSpeed","imageLoadFailed","openImageExternally","cameraPermissionDenied","cancel","failedToSend","thinking","messages","noMessages","historyHidden","startBelow","preChatTitle","preChatSubtitle","preChatSkip","preChatSubmit","viewPreviousConversations","homeRecentTitle","homeViewAllCount","homeNoConversations","homeStatusOnline","homeStatusAway","unreadBadge","team","home","close","retry","connectionError","connecting","chatUnavailable","identityVerificationError","widgetCrashed","timeJustNow","timeMinutes","timeHours","timeDays","timeMonths","timeYears","today","yesterday","conversationUpdated","messageDeleted","messageSent","messageSeen","waitingForTeammate","joinedConversation","ratingQuestion","ratingReasonPrompt","ratingCommentPlaceholder","ratingSubmit","ratingDone","ratingThanks","ratingLocked","ratingExpired","ratingFailed","rating1","rating2","rating3","rating4","rating5","procedureSend","procedureSent","procedureShareDetails","procedureDetailsSent","procedureHide","procedureFieldCount","procedureFieldCountOne","procedureTitle","procedureEmailPlaceholder","procedurePhonePlaceholder","fieldRequired","invalidEmail","working","outboundTitle","outboundCta","dismiss","notificationReplyFrom","notificationNewReply","notificationAttachment","notificationOpenHint","postFrom","postNewMessage","postOpenHint","postClose","postMinimize","postReplyPlaceholder","postSend","postSent","postReplyFailed","postReactions","postThanks","postConversation","postContinueChat","blockService","blockProduct","blockChooseTime","blockProfessional","blockPriceOffer","blockSubtotal","blockDiscount","blockTax","blockShipping","blockTotal","blockMinutes","blockSave","blockAnyAvailable","blockWithProvider","blockBookTime","blockValidUntil","launcherOpen","launcherClose","formatLabel","template","values","replace","match","String","buildLabels","labels","Object","keys"],"sourceRoot":"../../src","sources":["i18n.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/locales.js
CHANGED
|
@@ -27,6 +27,10 @@ const ar = {
|
|
|
27
27
|
attachmentTooMany: 'يمكنك إرفاق {count} ملفات كحد أقصى',
|
|
28
28
|
attachmentsTooLargeTogether: 'المرفقات كبيرة جدًا لإرسالها معًا — أرسل بعضها في رسالة أخرى',
|
|
29
29
|
attachmentFailed: 'تعذر إرفاق هذا الملف',
|
|
30
|
+
openAttachment: 'فتح {name}',
|
|
31
|
+
voicePlay: 'تشغيل الرسالة الصوتية',
|
|
32
|
+
voicePause: 'إيقاف الرسالة الصوتية مؤقتًا',
|
|
33
|
+
voiceSpeed: 'سرعة التشغيل',
|
|
30
34
|
imageLoadFailed: 'تعذر تحميل هذه الصورة',
|
|
31
35
|
openImageExternally: 'فتح الصورة',
|
|
32
36
|
cameraPermissionDenied: 'اسمح بالوصول إلى الكاميرا من الإعدادات لالتقاط صورة',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ar","back","loading","loadEarlier","emptyConversation","messagePlaceholder","attachFile","attachPhotoLibrary","attachTakePhoto","attachChooseFile","removeAttachment","attachmentTooLarge","attachmentTooMany","attachmentsTooLargeTogether","attachmentFailed","imageLoadFailed","openImageExternally","cameraPermissionDenied","cancel","failedToSend","thinking","messages","noMessages","historyHidden","startBelow","preChatTitle","preChatSubtitle","preChatSkip","preChatSubmit","viewPreviousConversations","homeRecentTitle","homeViewAllCount","homeNoConversations","homeStatusOnline","homeStatusAway","unreadBadge","team","home","close","retry","connectionError","connecting","chatUnavailable","identityVerificationError","widgetCrashed","timeJustNow","timeMinutes","timeHours","timeDays","timeMonths","timeYears","today","yesterday","conversationUpdated","messageDeleted","messageSent","messageSeen","waitingForTeammate","joinedConversation","ratingQuestion","ratingReasonPrompt","ratingCommentPlaceholder","ratingSubmit","ratingDone","ratingThanks","ratingLocked","ratingExpired","ratingFailed","rating1","rating2","rating3","rating4","rating5","procedureSend","procedureSent","procedureShareDetails","procedureDetailsSent","procedureHide","procedureFieldCount","procedureFieldCountOne","procedureTitle","fieldRequired","invalidEmail","working","outboundTitle","outboundCta","dismiss","notificationReplyFrom","notificationNewReply","notificationAttachment","notificationOpenHint","postFrom","postNewMessage","postOpenHint","postClose","postMinimize","postReplyPlaceholder","postSend","postSent","postReplyFailed","postReactions","postThanks","postConversation","postContinueChat","blockService","blockProduct","blockChooseTime","blockProfessional","blockPriceOffer","blockSubtotal","blockDiscount","blockTax","blockShipping","blockTotal","blockMinutes","blockSave","blockAnyAvailable","blockWithProvider","blockBookTime","blockValidUntil","launcherOpen","launcherClose","BUNDLED_TRANSLATIONS","baseLanguage","locale","split","toLowerCase"],"sourceRoot":"../../src","sources":["locales.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"names":["ar","back","loading","loadEarlier","emptyConversation","messagePlaceholder","attachFile","attachPhotoLibrary","attachTakePhoto","attachChooseFile","removeAttachment","attachmentTooLarge","attachmentTooMany","attachmentsTooLargeTogether","attachmentFailed","openAttachment","voicePlay","voicePause","voiceSpeed","imageLoadFailed","openImageExternally","cameraPermissionDenied","cancel","failedToSend","thinking","messages","noMessages","historyHidden","startBelow","preChatTitle","preChatSubtitle","preChatSkip","preChatSubmit","viewPreviousConversations","homeRecentTitle","homeViewAllCount","homeNoConversations","homeStatusOnline","homeStatusAway","unreadBadge","team","home","close","retry","connectionError","connecting","chatUnavailable","identityVerificationError","widgetCrashed","timeJustNow","timeMinutes","timeHours","timeDays","timeMonths","timeYears","today","yesterday","conversationUpdated","messageDeleted","messageSent","messageSeen","waitingForTeammate","joinedConversation","ratingQuestion","ratingReasonPrompt","ratingCommentPlaceholder","ratingSubmit","ratingDone","ratingThanks","ratingLocked","ratingExpired","ratingFailed","rating1","rating2","rating3","rating4","rating5","procedureSend","procedureSent","procedureShareDetails","procedureDetailsSent","procedureHide","procedureFieldCount","procedureFieldCountOne","procedureTitle","fieldRequired","invalidEmail","working","outboundTitle","outboundCta","dismiss","notificationReplyFrom","notificationNewReply","notificationAttachment","notificationOpenHint","postFrom","postNewMessage","postOpenHint","postClose","postMinimize","postReplyPlaceholder","postSend","postSent","postReplyFailed","postReactions","postThanks","postConversation","postContinueChat","blockService","blockProduct","blockChooseTime","blockProfessional","blockPriceOffer","blockSubtotal","blockDiscount","blockTax","blockShipping","blockTotal","blockMinutes","blockSave","blockAnyAvailable","blockWithProvider","blockBookTime","blockValidUntil","launcherOpen","launcherClose","BUNDLED_TRANSLATIONS","baseLanguage","locale","split","toLowerCase"],"sourceRoot":"../../src","sources":["locales.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* component is mounted; this hook only subscribes to it.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import { useSyncExternalStore } from 'react';
|
|
9
|
+
import { useRef, useSyncExternalStore } from 'react';
|
|
10
10
|
import { controller } from "../controller.js";
|
|
11
11
|
export function useWidgetState() {
|
|
12
12
|
const store = controller.store;
|
|
@@ -15,4 +15,33 @@ export function useWidgetState() {
|
|
|
15
15
|
export function useWidgetStore() {
|
|
16
16
|
return controller.store;
|
|
17
17
|
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* A slice of the state that re-renders only when the slice changes (by
|
|
21
|
+
* `isEqual`) — for UI that lives on the host's own screens, like the launcher,
|
|
22
|
+
* which shouldn't redraw on every message or typing event. Internal.
|
|
23
|
+
*/
|
|
24
|
+
export function useWidgetSelector(select, isEqual) {
|
|
25
|
+
const store = controller.store;
|
|
26
|
+
const last = useRef(null);
|
|
27
|
+
const getSnapshot = () => {
|
|
28
|
+
const state = store.getState();
|
|
29
|
+
const previous = last.current;
|
|
30
|
+
if (previous && previous.state === state) return previous.value;
|
|
31
|
+
const value = select(state);
|
|
32
|
+
// Same slice from a newer state: keep the old value so React bails out.
|
|
33
|
+
last.current = {
|
|
34
|
+
state,
|
|
35
|
+
value: previous && isEqual(previous.value, value) ? previous.value : value
|
|
36
|
+
};
|
|
37
|
+
return last.current.value;
|
|
38
|
+
};
|
|
39
|
+
return useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** Same keys, same values (by identity). */
|
|
43
|
+
export function shallowEqual(previous, next) {
|
|
44
|
+
const keys = Object.keys(previous);
|
|
45
|
+
return keys.length === Object.keys(next).length && keys.every(key => Object.is(previous[key], next[key]));
|
|
46
|
+
}
|
|
18
47
|
//# sourceMappingURL=use-widget-state.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useSyncExternalStore","controller","useWidgetState","store","subscribe","getState","useWidgetStore"],"sourceRoot":"../../../src","sources":["state/use-widget-state.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;;AAEA,SAASA,oBAAoB,QAAQ,OAAO;
|
|
1
|
+
{"version":3,"names":["useRef","useSyncExternalStore","controller","useWidgetState","store","subscribe","getState","useWidgetStore","useWidgetSelector","select","isEqual","last","getSnapshot","state","previous","current","value","shallowEqual","next","keys","Object","length","every","key","is"],"sourceRoot":"../../../src","sources":["state/use-widget-state.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;;AAEA,SAASA,MAAM,EAAEC,oBAAoB,QAAQ,OAAO;AAEpD,SAASC,UAAU,QAAQ,kBAAe;AAI1C,OAAO,SAASC,cAAcA,CAAA,EAAgB;EAC5C,MAAMC,KAAK,GAAGF,UAAU,CAACE,KAAK;EAC9B,OAAOH,oBAAoB,CAACG,KAAK,CAACC,SAAS,EAAED,KAAK,CAACE,QAAQ,EAAEF,KAAK,CAACE,QAAQ,CAAC;AAC9E;AAEA,OAAO,SAASC,cAAcA,CAAA,EAAgB;EAC5C,OAAOL,UAAU,CAACE,KAAK;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASI,iBAAiBA,CAC/BC,MAAiC,EACjCC,OAA0C,EACvC;EACH,MAAMN,KAAK,GAAGF,UAAU,CAACE,KAAK;EAC9B,MAAMO,IAAI,GAAGX,MAAM,CAA0C,IAAI,CAAC;EAClE,MAAMY,WAAW,GAAGA,CAAA,KAAM;IACxB,MAAMC,KAAK,GAAGT,KAAK,CAACE,QAAQ,CAAC,CAAC;IAC9B,MAAMQ,QAAQ,GAAGH,IAAI,CAACI,OAAO;IAC7B,IAAID,QAAQ,IAAIA,QAAQ,CAACD,KAAK,KAAKA,KAAK,EAAE,OAAOC,QAAQ,CAACE,KAAK;IAC/D,MAAMA,KAAK,GAAGP,MAAM,CAACI,KAAK,CAAC;IAC3B;IACAF,IAAI,CAACI,OAAO,GAAG;MAAEF,KAAK;MAAEG,KAAK,EAAEF,QAAQ,IAAIJ,OAAO,CAACI,QAAQ,CAACE,KAAK,EAAEA,KAAK,CAAC,GAAGF,QAAQ,CAACE,KAAK,GAAGA;IAAM,CAAC;IACpG,OAAOL,IAAI,CAACI,OAAO,CAACC,KAAK;EAC3B,CAAC;EACD,OAAOf,oBAAoB,CAACG,KAAK,CAACC,SAAS,EAAEO,WAAW,EAAEA,WAAW,CAAC;AACxE;;AAEA;AACA,OAAO,SAASK,YAAYA,CAAoCH,QAAW,EAAEI,IAAO,EAAW;EAC7F,MAAMC,IAAI,GAAGC,MAAM,CAACD,IAAI,CAACL,QAAQ,CAAC;EAClC,OAAOK,IAAI,CAACE,MAAM,KAAKD,MAAM,CAACD,IAAI,CAACD,IAAI,CAAC,CAACG,MAAM,IAAIF,IAAI,CAACG,KAAK,CAAEC,GAAG,IAAKH,MAAM,CAACI,EAAE,CAACV,QAAQ,CAACS,GAAG,CAAC,EAAEL,IAAI,CAACK,GAAG,CAAC,CAAC,CAAC;AAC7G","ignoreList":[]}
|
|
@@ -22,7 +22,7 @@ import { DEFAULT_BASE_URL } from "../types.js";
|
|
|
22
22
|
import { setOpenUrlHandler } from "../ui/utils/safe-url.js";
|
|
23
23
|
|
|
24
24
|
/** Sent on every init; must match `package.json` (tests/version.test.js checks). */
|
|
25
|
-
const SDK_VERSION = '@repzo/widget-react-native@1.2.
|
|
25
|
+
const SDK_VERSION = '@repzo/widget-react-native@1.2.2';
|
|
26
26
|
|
|
27
27
|
/** The platform this session reports — mobile sessions get the Mobile SDKs overrides. */
|
|
28
28
|
function sessionPlatform() {
|
|
@@ -43,6 +43,13 @@ const LOGOUT_REQUEST_TIMEOUT_MS = 5_000;
|
|
|
43
43
|
const STREAM_REAUTH_MIN_INTERVAL_MS = 30_000;
|
|
44
44
|
/** Live replies in the open thread advance the server read cursor, batched. */
|
|
45
45
|
const MARK_READ_DEBOUNCE_MS = 1_000;
|
|
46
|
+
/**
|
|
47
|
+
* Back from the background sooner than this, availability and the post are
|
|
48
|
+
* still current enough to skip re-asking. Reps hop to maps or the camera and
|
|
49
|
+
* back all day; the list and the open thread still catch up every time, since
|
|
50
|
+
* the stream was closed meanwhile.
|
|
51
|
+
*/
|
|
52
|
+
const FOREGROUND_REFRESH_AFTER_MS = 5 * 60_000;
|
|
46
53
|
/** Live events held back while a draft's first send is creating its thread. */
|
|
47
54
|
const DRAFT_EVENT_BUFFER_LIMIT = 50;
|
|
48
55
|
/** How long a post stays up after a reaction, thanking them, before it goes. */
|
|
@@ -162,6 +169,9 @@ export class WidgetStore {
|
|
|
162
169
|
userKeyLoaded = false;
|
|
163
170
|
pendingConversationId = null;
|
|
164
171
|
appStateSubscription = null;
|
|
172
|
+
|
|
173
|
+
/** When the app last went to the background (0: hasn't this session). */
|
|
174
|
+
backgroundedAt = 0;
|
|
165
175
|
lastTypingPingAt = 0;
|
|
166
176
|
visitorTypingActive = false;
|
|
167
177
|
seenMessageIds = [];
|
|
@@ -839,10 +849,14 @@ export class WidgetStore {
|
|
|
839
849
|
}
|
|
840
850
|
watchAppState() {
|
|
841
851
|
if (this.appStateSubscription) return;
|
|
852
|
+
// Booted while already in the background (a push woke the app): coming
|
|
853
|
+
// to the foreground is a return from the background too.
|
|
854
|
+
if (AppState.currentState === 'background') this.backgroundedAt = Date.now();
|
|
842
855
|
this.appStateSubscription = AppState.addEventListener('change', status => {
|
|
843
856
|
if (status === 'active') {
|
|
844
857
|
void this.resumeFromBackground();
|
|
845
858
|
} else if (status === 'background') {
|
|
859
|
+
this.backgroundedAt = Date.now();
|
|
846
860
|
this.realtime.close();
|
|
847
861
|
}
|
|
848
862
|
});
|
|
@@ -855,6 +869,12 @@ export class WidgetStore {
|
|
|
855
869
|
if (this.state.error) await this.retry();
|
|
856
870
|
return;
|
|
857
871
|
}
|
|
872
|
+
// Only the background closes the stream. Back from merely inactive (a
|
|
873
|
+
// system sheet, Face ID, the notification shade) it never stopped, so
|
|
874
|
+
// there is nothing to catch up on.
|
|
875
|
+
if (!this.backgroundedAt) return;
|
|
876
|
+
const awayMs = Date.now() - this.backgroundedAt;
|
|
877
|
+
this.backgroundedAt = 0;
|
|
858
878
|
const epoch = this.epoch;
|
|
859
879
|
const token = await this.client.getToken();
|
|
860
880
|
if (!token || this.isStale(epoch)) return;
|
|
@@ -862,6 +882,7 @@ export class WidgetStore {
|
|
|
862
882
|
// The stream had a gap: refresh the list so unread/snippets are correct,
|
|
863
883
|
// and the thread on screen so replies sent meanwhile show up.
|
|
864
884
|
await Promise.all([this.refreshConversations(), this.refreshOpenThread()]);
|
|
885
|
+
if (awayMs < FOREGROUND_REFRESH_AFTER_MS) return;
|
|
865
886
|
await this.refreshConfig();
|
|
866
887
|
// A post may have gone live (or ended) while the app was away.
|
|
867
888
|
if (!this.isStale(epoch)) this.loadPost();
|