@appsupportkit/support-sdk 0.1.2 → 0.3.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/lib/commonjs/api.js +17 -2
- package/lib/commonjs/api.js.map +1 -1
- package/lib/commonjs/components/BottomSheet.js +67 -47
- package/lib/commonjs/components/BottomSheet.js.map +1 -1
- package/lib/commonjs/components/LauncherButton.js +177 -0
- package/lib/commonjs/components/LauncherButton.js.map +1 -0
- package/lib/commonjs/components/SupportButton.js +168 -190
- package/lib/commonjs/components/SupportButton.js.map +1 -1
- package/lib/commonjs/components/icons.js +110 -23
- package/lib/commonjs/components/icons.js.map +1 -1
- package/lib/commonjs/components/primitives.js +191 -44
- package/lib/commonjs/components/primitives.js.map +1 -1
- package/lib/commonjs/components/screens/ComposeScreen.js +108 -60
- package/lib/commonjs/components/screens/ComposeScreen.js.map +1 -1
- package/lib/commonjs/components/screens/HomeScreen.js +221 -118
- package/lib/commonjs/components/screens/HomeScreen.js.map +1 -1
- package/lib/commonjs/components/screens/LanguageScreen.js +150 -0
- package/lib/commonjs/components/screens/LanguageScreen.js.map +1 -0
- package/lib/commonjs/components/screens/ThreadScreen.js +237 -111
- package/lib/commonjs/components/screens/ThreadScreen.js.map +1 -1
- package/lib/commonjs/i18n/index.js +101 -0
- package/lib/commonjs/i18n/index.js.map +1 -0
- package/lib/commonjs/i18n/languages.js +95 -0
- package/lib/commonjs/i18n/languages.js.map +1 -0
- package/lib/commonjs/i18n/strings/de.js +72 -0
- package/lib/commonjs/i18n/strings/de.js.map +1 -0
- package/lib/commonjs/i18n/strings/en.js +88 -0
- package/lib/commonjs/i18n/strings/en.js.map +1 -0
- package/lib/commonjs/i18n/strings/es.js +72 -0
- package/lib/commonjs/i18n/strings/es.js.map +1 -0
- package/lib/commonjs/i18n/strings/fr.js +72 -0
- package/lib/commonjs/i18n/strings/fr.js.map +1 -0
- package/lib/commonjs/i18n/strings/hi.js +72 -0
- package/lib/commonjs/i18n/strings/hi.js.map +1 -0
- package/lib/commonjs/i18n/strings/it.js +72 -0
- package/lib/commonjs/i18n/strings/it.js.map +1 -0
- package/lib/commonjs/i18n/strings/ja.js +72 -0
- package/lib/commonjs/i18n/strings/ja.js.map +1 -0
- package/lib/commonjs/i18n/strings/ko.js +72 -0
- package/lib/commonjs/i18n/strings/ko.js.map +1 -0
- package/lib/commonjs/i18n/strings/nl.js +72 -0
- package/lib/commonjs/i18n/strings/nl.js.map +1 -0
- package/lib/commonjs/i18n/strings/pl.js +72 -0
- package/lib/commonjs/i18n/strings/pl.js.map +1 -0
- package/lib/commonjs/i18n/strings/pt.js +72 -0
- package/lib/commonjs/i18n/strings/pt.js.map +1 -0
- package/lib/commonjs/i18n/strings/ru.js +72 -0
- package/lib/commonjs/i18n/strings/ru.js.map +1 -0
- package/lib/commonjs/i18n/strings/tr.js +72 -0
- package/lib/commonjs/i18n/strings/tr.js.map +1 -0
- package/lib/commonjs/i18n/strings/zh.js +72 -0
- package/lib/commonjs/i18n/strings/zh.js.map +1 -0
- package/lib/commonjs/index.js +31 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/theme.js +136 -17
- package/lib/commonjs/theme.js.map +1 -1
- package/lib/commonjs/types.js +18 -0
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/unread.js +92 -0
- package/lib/commonjs/unread.js.map +1 -0
- package/lib/commonjs/useSupportThreads.js +296 -0
- package/lib/commonjs/useSupportThreads.js.map +1 -0
- package/lib/commonjs/utils.js +58 -10
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/module/api.js +16 -2
- package/lib/module/api.js.map +1 -1
- package/lib/module/components/BottomSheet.js +68 -48
- package/lib/module/components/BottomSheet.js.map +1 -1
- package/lib/module/components/LauncherButton.js +172 -0
- package/lib/module/components/LauncherButton.js.map +1 -0
- package/lib/module/components/SupportButton.js +172 -194
- package/lib/module/components/SupportButton.js.map +1 -1
- package/lib/module/components/icons.js +107 -22
- package/lib/module/components/icons.js.map +1 -1
- package/lib/module/components/primitives.js +187 -45
- package/lib/module/components/primitives.js.map +1 -1
- package/lib/module/components/screens/ComposeScreen.js +114 -64
- package/lib/module/components/screens/ComposeScreen.js.map +1 -1
- package/lib/module/components/screens/HomeScreen.js +224 -121
- package/lib/module/components/screens/HomeScreen.js.map +1 -1
- package/lib/module/components/screens/LanguageScreen.js +147 -0
- package/lib/module/components/screens/LanguageScreen.js.map +1 -0
- package/lib/module/components/screens/ThreadScreen.js +243 -115
- package/lib/module/components/screens/ThreadScreen.js.map +1 -1
- package/lib/module/i18n/index.js +56 -0
- package/lib/module/i18n/index.js.map +1 -0
- package/lib/module/i18n/languages.js +88 -0
- package/lib/module/i18n/languages.js.map +1 -0
- package/lib/module/i18n/strings/de.js +68 -0
- package/lib/module/i18n/strings/de.js.map +1 -0
- package/lib/module/i18n/strings/en.js +84 -0
- package/lib/module/i18n/strings/en.js.map +1 -0
- package/lib/module/i18n/strings/es.js +68 -0
- package/lib/module/i18n/strings/es.js.map +1 -0
- package/lib/module/i18n/strings/fr.js +68 -0
- package/lib/module/i18n/strings/fr.js.map +1 -0
- package/lib/module/i18n/strings/hi.js +68 -0
- package/lib/module/i18n/strings/hi.js.map +1 -0
- package/lib/module/i18n/strings/it.js +68 -0
- package/lib/module/i18n/strings/it.js.map +1 -0
- package/lib/module/i18n/strings/ja.js +68 -0
- package/lib/module/i18n/strings/ja.js.map +1 -0
- package/lib/module/i18n/strings/ko.js +68 -0
- package/lib/module/i18n/strings/ko.js.map +1 -0
- package/lib/module/i18n/strings/nl.js +68 -0
- package/lib/module/i18n/strings/nl.js.map +1 -0
- package/lib/module/i18n/strings/pl.js +68 -0
- package/lib/module/i18n/strings/pl.js.map +1 -0
- package/lib/module/i18n/strings/pt.js +68 -0
- package/lib/module/i18n/strings/pt.js.map +1 -0
- package/lib/module/i18n/strings/ru.js +68 -0
- package/lib/module/i18n/strings/ru.js.map +1 -0
- package/lib/module/i18n/strings/tr.js +68 -0
- package/lib/module/i18n/strings/tr.js.map +1 -0
- package/lib/module/i18n/strings/zh.js +68 -0
- package/lib/module/i18n/strings/zh.js.map +1 -0
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/theme.js +135 -16
- package/lib/module/theme.js.map +1 -1
- package/lib/module/types.js +18 -0
- package/lib/module/types.js.map +1 -1
- package/lib/module/unread.js +83 -0
- package/lib/module/unread.js.map +1 -0
- package/lib/module/useSupportThreads.js +291 -0
- package/lib/module/useSupportThreads.js.map +1 -0
- package/lib/module/utils.js +55 -10
- package/lib/module/utils.js.map +1 -1
- package/lib/typescript/api.d.ts +9 -0
- package/lib/typescript/api.d.ts.map +1 -1
- package/lib/typescript/components/BottomSheet.d.ts.map +1 -1
- package/lib/typescript/components/LauncherButton.d.ts +14 -0
- package/lib/typescript/components/LauncherButton.d.ts.map +1 -0
- package/lib/typescript/components/SupportButton.d.ts +3 -3
- package/lib/typescript/components/SupportButton.d.ts.map +1 -1
- package/lib/typescript/components/icons.d.ts +18 -2
- package/lib/typescript/components/icons.d.ts.map +1 -1
- package/lib/typescript/components/primitives.d.ts +42 -7
- package/lib/typescript/components/primitives.d.ts.map +1 -1
- package/lib/typescript/components/screens/ComposeScreen.d.ts +3 -1
- package/lib/typescript/components/screens/ComposeScreen.d.ts.map +1 -1
- package/lib/typescript/components/screens/HomeScreen.d.ts +8 -2
- package/lib/typescript/components/screens/HomeScreen.d.ts.map +1 -1
- package/lib/typescript/components/screens/LanguageScreen.d.ts +30 -0
- package/lib/typescript/components/screens/LanguageScreen.d.ts.map +1 -0
- package/lib/typescript/components/screens/ThreadScreen.d.ts +3 -1
- package/lib/typescript/components/screens/ThreadScreen.d.ts.map +1 -1
- package/lib/typescript/i18n/index.d.ts +15 -0
- package/lib/typescript/i18n/index.d.ts.map +1 -0
- package/lib/typescript/i18n/languages.d.ts +36 -0
- package/lib/typescript/i18n/languages.d.ts.map +1 -0
- package/lib/typescript/i18n/strings/de.d.ts +3 -0
- package/lib/typescript/i18n/strings/de.d.ts.map +1 -0
- package/lib/typescript/i18n/strings/en.d.ts +83 -0
- package/lib/typescript/i18n/strings/en.d.ts.map +1 -0
- package/lib/typescript/i18n/strings/es.d.ts +3 -0
- package/lib/typescript/i18n/strings/es.d.ts.map +1 -0
- package/lib/typescript/i18n/strings/fr.d.ts +3 -0
- package/lib/typescript/i18n/strings/fr.d.ts.map +1 -0
- package/lib/typescript/i18n/strings/hi.d.ts +3 -0
- package/lib/typescript/i18n/strings/hi.d.ts.map +1 -0
- package/lib/typescript/i18n/strings/it.d.ts +3 -0
- package/lib/typescript/i18n/strings/it.d.ts.map +1 -0
- package/lib/typescript/i18n/strings/ja.d.ts +3 -0
- package/lib/typescript/i18n/strings/ja.d.ts.map +1 -0
- package/lib/typescript/i18n/strings/ko.d.ts +3 -0
- package/lib/typescript/i18n/strings/ko.d.ts.map +1 -0
- package/lib/typescript/i18n/strings/nl.d.ts +3 -0
- package/lib/typescript/i18n/strings/nl.d.ts.map +1 -0
- package/lib/typescript/i18n/strings/pl.d.ts +3 -0
- package/lib/typescript/i18n/strings/pl.d.ts.map +1 -0
- package/lib/typescript/i18n/strings/pt.d.ts +3 -0
- package/lib/typescript/i18n/strings/pt.d.ts.map +1 -0
- package/lib/typescript/i18n/strings/ru.d.ts +3 -0
- package/lib/typescript/i18n/strings/ru.d.ts.map +1 -0
- package/lib/typescript/i18n/strings/tr.d.ts +3 -0
- package/lib/typescript/i18n/strings/tr.d.ts.map +1 -0
- package/lib/typescript/i18n/strings/zh.d.ts +3 -0
- package/lib/typescript/i18n/strings/zh.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +2 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/theme.d.ts +44 -3
- package/lib/typescript/theme.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +54 -2
- package/lib/typescript/types.d.ts.map +1 -1
- package/lib/typescript/unread.d.ts +22 -0
- package/lib/typescript/unread.d.ts.map +1 -0
- package/lib/typescript/useSupportThreads.d.ts +38 -0
- package/lib/typescript/useSupportThreads.d.ts.map +1 -0
- package/lib/typescript/utils.d.ts +8 -2
- package/lib/typescript/utils.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/api.ts +24 -1
- package/src/components/BottomSheet.tsx +61 -43
- package/src/components/LauncherButton.tsx +217 -0
- package/src/components/SupportButton.tsx +195 -210
- package/src/components/icons.tsx +113 -19
- package/src/components/primitives.tsx +230 -39
- package/src/components/screens/ComposeScreen.tsx +129 -63
- package/src/components/screens/HomeScreen.tsx +230 -120
- package/src/components/screens/LanguageScreen.tsx +172 -0
- package/src/components/screens/ThreadScreen.tsx +319 -122
- package/src/i18n/index.ts +81 -0
- package/src/i18n/languages.ts +106 -0
- package/src/i18n/strings/de.ts +78 -0
- package/src/i18n/strings/en.ts +94 -0
- package/src/i18n/strings/es.ts +77 -0
- package/src/i18n/strings/fr.ts +78 -0
- package/src/i18n/strings/hi.ts +77 -0
- package/src/i18n/strings/it.ts +77 -0
- package/src/i18n/strings/ja.ts +77 -0
- package/src/i18n/strings/ko.ts +76 -0
- package/src/i18n/strings/nl.ts +77 -0
- package/src/i18n/strings/pl.ts +77 -0
- package/src/i18n/strings/pt.ts +77 -0
- package/src/i18n/strings/ru.ts +77 -0
- package/src/i18n/strings/tr.ts +77 -0
- package/src/i18n/strings/zh.ts +75 -0
- package/src/index.tsx +9 -0
- package/src/theme.ts +165 -18
- package/src/types.ts +56 -2
- package/src/unread.ts +91 -0
- package/src/useSupportThreads.ts +392 -0
- package/src/utils.ts +48 -10
|
@@ -1,34 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { useCallback, useEffect, useMemo,
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
4
|
+
import { Text, View } from 'react-native';
|
|
5
|
+
import { postMessage, registerPush, setLanguage as setLanguageRequest, submitQuery, SupportApiError } from '../api';
|
|
6
|
+
import { createTranslator } from '../i18n';
|
|
7
|
+
import { asLanguage, DEFAULT_LANGUAGE, deviceLanguage } from '../i18n/languages';
|
|
6
8
|
import { ensurePushPermission, isPushAvailable } from '../push';
|
|
7
9
|
import { resolveTheme } from '../theme';
|
|
10
|
+
import { IDLE_POLL_MS, useSupportThreads } from '../useSupportThreads';
|
|
8
11
|
import { validateProps } from '../utils';
|
|
9
12
|
import { BottomSheet } from './BottomSheet';
|
|
10
|
-
import {
|
|
13
|
+
import { LauncherButton } from './LauncherButton';
|
|
11
14
|
import { ComposeScreen } from './screens/ComposeScreen';
|
|
12
15
|
import { HomeScreen } from './screens/HomeScreen';
|
|
16
|
+
import { LanguageScreen } from './screens/LanguageScreen';
|
|
13
17
|
import { ThreadScreen } from './screens/ThreadScreen';
|
|
14
|
-
import { jsx as _jsx,
|
|
15
|
-
// Poll cadence by context: fast where latency is felt (staring at a thread
|
|
16
|
-
// waiting for a reply), slow when the sheet is closed — and the idle tick
|
|
17
|
-
// uses the count-only endpoint, so it costs ~18 bytes instead of the full
|
|
18
|
-
// thread list.
|
|
19
|
-
const THREAD_POLL_MS = 5_000;
|
|
20
|
-
const SHEET_POLL_MS = 15_000;
|
|
21
|
-
const IDLE_POLL_MS = 60_000;
|
|
22
|
-
const MIN_POLL_MS = 3_000;
|
|
23
|
-
|
|
18
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
24
19
|
/**
|
|
25
|
-
* The single entry point of the SDK: a
|
|
26
|
-
* opens the support bottom sheet.
|
|
27
|
-
*
|
|
20
|
+
* The single entry point of the SDK: a launcher with an unread badge that
|
|
21
|
+
* opens the support bottom sheet. Threads, polling, and read receipts are
|
|
22
|
+
* handled by useSupportThreads.
|
|
28
23
|
*/
|
|
29
24
|
export function SupportButton(props) {
|
|
30
25
|
const validationError = validateProps(props);
|
|
31
|
-
const theme = resolveTheme(props.theme);
|
|
26
|
+
const theme = useMemo(() => resolveTheme(props.theme, props.accentColor), [props.theme, props.accentColor]);
|
|
32
27
|
const config = useMemo(() => ({
|
|
33
28
|
supabaseUrl: props.supabaseUrl,
|
|
34
29
|
apiKey: props.apiKey,
|
|
@@ -38,72 +33,51 @@ export function SupportButton(props) {
|
|
|
38
33
|
const [screen, setScreen] = useState({
|
|
39
34
|
name: 'home'
|
|
40
35
|
});
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
setThreads(data.threads);
|
|
60
|
-
setTotalUnread(data.total_unread);
|
|
61
|
-
} catch (e) {
|
|
62
|
-
if (!mounted.current) return;
|
|
63
|
-
setError(e instanceof SupportApiError && e.offline ? "You're offline — check your connection" : "Couldn't load threads");
|
|
64
|
-
} finally {
|
|
65
|
-
if (mounted.current) setLoading(false);
|
|
66
|
-
}
|
|
67
|
-
}, [config, props.user.revenuecatId, validationError]);
|
|
68
|
-
|
|
69
|
-
/** Badge-only refresh — the cheap endpoint used while idle. */
|
|
70
|
-
const refreshBadge = useCallback(async () => {
|
|
71
|
-
if (validationError) return;
|
|
72
|
-
try {
|
|
73
|
-
const data = await getUnreadCount(config, props.user.revenuecatId);
|
|
74
|
-
if (mounted.current) setTotalUnread(data.total_unread);
|
|
75
|
-
} catch {
|
|
76
|
-
// Best-effort: the next tick or the next sheet open reconciles.
|
|
77
|
-
}
|
|
78
|
-
}, [config, props.user.revenuecatId, validationError]);
|
|
36
|
+
const {
|
|
37
|
+
threads,
|
|
38
|
+
totalUnread,
|
|
39
|
+
loading,
|
|
40
|
+
refreshing,
|
|
41
|
+
errorKey,
|
|
42
|
+
serverLanguage,
|
|
43
|
+
languageLoaded,
|
|
44
|
+
refresh,
|
|
45
|
+
reload
|
|
46
|
+
} = useSupportThreads({
|
|
47
|
+
config,
|
|
48
|
+
revenuecatId: props.user.revenuecatId,
|
|
49
|
+
enabled: validationError === null,
|
|
50
|
+
sheetOpen,
|
|
51
|
+
activeThreadId: screen.name === 'thread' ? screen.threadId : null,
|
|
52
|
+
idlePollMs: props.pollIntervalMs ?? IDLE_POLL_MS
|
|
53
|
+
});
|
|
79
54
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
55
|
+
/**
|
|
56
|
+
* What the user picked, once they have picked. Until then the sheet is
|
|
57
|
+
* rendered in the host app's hint or the device's language, which is a
|
|
58
|
+
* guess — hence `chosen`, which is what decides whether to ask.
|
|
59
|
+
*/
|
|
60
|
+
const [chosen, setChosen] = useState(null);
|
|
61
|
+
const [draftLanguage, setDraftLanguage] = useState(null);
|
|
62
|
+
const [savingLanguage, setSavingLanguage] = useState(false);
|
|
63
|
+
const [languageError, setLanguageError] = useState(null);
|
|
84
64
|
|
|
85
|
-
//
|
|
86
|
-
//
|
|
87
|
-
const idlePollMs = props.pollIntervalMs ?? IDLE_POLL_MS;
|
|
88
|
-
const screenName = screen.name;
|
|
65
|
+
// A preference saved on another device (or an earlier install) wins over
|
|
66
|
+
// any local guess, and answers the "have they chosen?" question for free.
|
|
89
67
|
useEffect(() => {
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
68
|
+
const stored = asLanguage(serverLanguage);
|
|
69
|
+
if (stored !== null) setChosen(stored);
|
|
70
|
+
}, [serverLanguage]);
|
|
71
|
+
const fallbackLanguage = props.defaultLanguage ?? deviceLanguage() ?? DEFAULT_LANGUAGE;
|
|
72
|
+
const language = chosen ?? fallbackLanguage;
|
|
73
|
+
const strings = useMemo(() => createTranslator(draftLanguage ?? language), [draftLanguage, language]);
|
|
95
74
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
return () => {
|
|
103
|
-
if (timer !== null) clearInterval(timer);
|
|
104
|
-
appStateSub.remove();
|
|
105
|
-
};
|
|
106
|
-
}, [sheetOpen, screenName, idlePollMs, refresh, refreshBadge]);
|
|
75
|
+
/**
|
|
76
|
+
* Ask once, on first open — but only once the server has told us whether
|
|
77
|
+
* this user already answered. Asking before then would show the picker to
|
|
78
|
+
* someone who chose months ago on another device.
|
|
79
|
+
*/
|
|
80
|
+
const mustChooseLanguage = languageLoaded && chosen === null;
|
|
107
81
|
|
|
108
82
|
/**
|
|
109
83
|
* Asks for notification permission the moment the sheet opens, then
|
|
@@ -112,7 +86,7 @@ export function SupportButton(props) {
|
|
|
112
86
|
* support flow waits on it or breaks if it fails.
|
|
113
87
|
*/
|
|
114
88
|
const syncPushPermission = useCallback(async () => {
|
|
115
|
-
if (validationError || !isPushAvailable) return;
|
|
89
|
+
if (validationError !== null || !isPushAvailable) return;
|
|
116
90
|
try {
|
|
117
91
|
const registration = await ensurePushPermission(props.expoProjectId);
|
|
118
92
|
await registerPush(config, {
|
|
@@ -125,14 +99,11 @@ export function SupportButton(props) {
|
|
|
125
99
|
// Push is an enhancement — never surfaced to the user as an error.
|
|
126
100
|
}
|
|
127
101
|
}, [config, props.user.revenuecatId, props.expoProjectId, validationError]);
|
|
128
|
-
|
|
129
|
-
// …and on sheet open.
|
|
130
102
|
function openSheet() {
|
|
131
103
|
setScreen({
|
|
132
104
|
name: 'home'
|
|
133
105
|
});
|
|
134
106
|
setSheetOpen(true);
|
|
135
|
-
void refresh();
|
|
136
107
|
// The OS prompt appears right as the sheet opens; if the user declines,
|
|
137
108
|
// everything below carries on exactly as before.
|
|
138
109
|
void syncPushPermission();
|
|
@@ -142,8 +113,10 @@ export function SupportButton(props) {
|
|
|
142
113
|
setScreen({
|
|
143
114
|
name: 'home'
|
|
144
115
|
});
|
|
116
|
+
setDraftLanguage(null);
|
|
117
|
+
setLanguageError(null);
|
|
145
118
|
}
|
|
146
|
-
if (validationError) {
|
|
119
|
+
if (validationError !== null) {
|
|
147
120
|
// Dev-mode: loud and actionable. Production: render nothing rather than
|
|
148
121
|
// a broken button.
|
|
149
122
|
if (__DEV__) {
|
|
@@ -166,32 +139,43 @@ export function SupportButton(props) {
|
|
|
166
139
|
}
|
|
167
140
|
return null;
|
|
168
141
|
}
|
|
169
|
-
function openThread(thread) {
|
|
170
|
-
setScreen({
|
|
171
|
-
name: 'thread',
|
|
172
|
-
threadId: thread.id
|
|
173
|
-
});
|
|
174
|
-
if (thread.unread_count > 0) {
|
|
175
|
-
// Optimistically clear the badge; persist via mark-read.
|
|
176
|
-
setThreads(prev => prev?.map(t => t.id === thread.id ? {
|
|
177
|
-
...t,
|
|
178
|
-
unread_count: 0
|
|
179
|
-
} : t) ?? null);
|
|
180
|
-
setTotalUnread(n => Math.max(0, n - thread.unread_count));
|
|
181
|
-
void markRead(config, {
|
|
182
|
-
queryId: thread.id,
|
|
183
|
-
revenuecatId: props.user.revenuecatId
|
|
184
|
-
}).catch(() => {
|
|
185
|
-
// Non-fatal: the next get-threads reconciles the badge.
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
142
|
function writeErrorMessage(e) {
|
|
190
143
|
if (e instanceof SupportApiError) {
|
|
191
|
-
if (e.status === 429) return '
|
|
192
|
-
if (e.offline) return
|
|
144
|
+
if (e.status === 429) return strings.t('error.rateLimited');
|
|
145
|
+
if (e.offline) return strings.t('error.offline');
|
|
146
|
+
}
|
|
147
|
+
return strings.t('error.sendFailed');
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Persists the picked language and leaves the picker.
|
|
152
|
+
*
|
|
153
|
+
* A failed save keeps the user on the screen with a retry: getting this
|
|
154
|
+
* wrong means every message they write is translated from the wrong
|
|
155
|
+
* language, which is worse than one more tap.
|
|
156
|
+
*/
|
|
157
|
+
async function confirmLanguage() {
|
|
158
|
+
const next = draftLanguage ?? language;
|
|
159
|
+
setSavingLanguage(true);
|
|
160
|
+
setLanguageError(null);
|
|
161
|
+
try {
|
|
162
|
+
await setLanguageRequest(config, {
|
|
163
|
+
revenuecatId: props.user.revenuecatId,
|
|
164
|
+
language: next
|
|
165
|
+
});
|
|
166
|
+
setChosen(next);
|
|
167
|
+
setDraftLanguage(null);
|
|
168
|
+
setScreen({
|
|
169
|
+
name: 'home'
|
|
170
|
+
});
|
|
171
|
+
// On a change, the server re-queues existing replies for translation
|
|
172
|
+
// into the new language; they arrive over the next poll or two.
|
|
173
|
+
void reload();
|
|
174
|
+
} catch (e) {
|
|
175
|
+
setLanguageError(e instanceof SupportApiError && e.offline ? strings.t('error.offline') : strings.t('lang.saveFailed'));
|
|
176
|
+
} finally {
|
|
177
|
+
setSavingLanguage(false);
|
|
193
178
|
}
|
|
194
|
-
return "Couldn't send — try again";
|
|
195
179
|
}
|
|
196
180
|
async function handleSubmit(type, message) {
|
|
197
181
|
try {
|
|
@@ -201,9 +185,10 @@ export function SupportButton(props) {
|
|
|
201
185
|
userName: props.user.name,
|
|
202
186
|
isPaid: props.user.isPaid,
|
|
203
187
|
revenuecatId: props.user.revenuecatId,
|
|
204
|
-
appVersion: props.user.appVersion
|
|
188
|
+
appVersion: props.user.appVersion,
|
|
189
|
+
language
|
|
205
190
|
});
|
|
206
|
-
void
|
|
191
|
+
void reload();
|
|
207
192
|
return null;
|
|
208
193
|
} catch (e) {
|
|
209
194
|
return writeErrorMessage(e);
|
|
@@ -214,101 +199,94 @@ export function SupportButton(props) {
|
|
|
214
199
|
await postMessage(config, {
|
|
215
200
|
queryId: threadId,
|
|
216
201
|
revenuecatId: props.user.revenuecatId,
|
|
217
|
-
message
|
|
202
|
+
message,
|
|
203
|
+
language
|
|
218
204
|
});
|
|
219
|
-
await
|
|
205
|
+
await reload();
|
|
220
206
|
return null;
|
|
221
207
|
} catch (e) {
|
|
222
208
|
return writeErrorMessage(e);
|
|
223
209
|
}
|
|
224
210
|
}
|
|
225
211
|
const activeThread = screen.name === 'thread' ? (threads ?? []).find(t => t.id === screen.threadId) ?? null : null;
|
|
212
|
+
const home = /*#__PURE__*/_jsx(HomeScreen, {
|
|
213
|
+
theme: theme,
|
|
214
|
+
strings: strings,
|
|
215
|
+
language: language,
|
|
216
|
+
threads: threads,
|
|
217
|
+
loading: loading,
|
|
218
|
+
refreshing: refreshing,
|
|
219
|
+
error: errorKey === null ? null : strings.t(errorKey),
|
|
220
|
+
onRefresh: refresh,
|
|
221
|
+
onCompose: type => setScreen({
|
|
222
|
+
name: 'compose',
|
|
223
|
+
type
|
|
224
|
+
}),
|
|
225
|
+
onOpenThread: thread => setScreen({
|
|
226
|
+
name: 'thread',
|
|
227
|
+
threadId: thread.id
|
|
228
|
+
}),
|
|
229
|
+
onChangeLanguage: () => {
|
|
230
|
+
setDraftLanguage(language);
|
|
231
|
+
setLanguageError(null);
|
|
232
|
+
setScreen({
|
|
233
|
+
name: 'language'
|
|
234
|
+
});
|
|
235
|
+
},
|
|
236
|
+
onClose: closeSheet
|
|
237
|
+
});
|
|
238
|
+
const languagePicker = /*#__PURE__*/_jsx(LanguageScreen, {
|
|
239
|
+
theme: theme,
|
|
240
|
+
strings: strings,
|
|
241
|
+
selected: draftLanguage ?? language,
|
|
242
|
+
onSelect: setDraftLanguage,
|
|
243
|
+
onConfirm: () => void confirmLanguage()
|
|
244
|
+
// No way back on first run: there is nothing behind it yet, so the
|
|
245
|
+
// only exit is choosing — or closing the sheet, which asks again.
|
|
246
|
+
,
|
|
247
|
+
onBack: mustChooseLanguage ? undefined : () => {
|
|
248
|
+
setDraftLanguage(null);
|
|
249
|
+
setLanguageError(null);
|
|
250
|
+
setScreen({
|
|
251
|
+
name: 'home'
|
|
252
|
+
});
|
|
253
|
+
},
|
|
254
|
+
onDismiss: mustChooseLanguage ? closeSheet : undefined,
|
|
255
|
+
saving: savingLanguage,
|
|
256
|
+
error: languageError
|
|
257
|
+
});
|
|
226
258
|
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
227
|
-
children: [/*#__PURE__*/
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
borderRadius: 22,
|
|
237
|
-
borderWidth: 1,
|
|
238
|
-
borderColor: theme.colors.border,
|
|
239
|
-
backgroundColor: pressed ? theme.colors.surfaceHover : theme.colors.surface,
|
|
240
|
-
alignItems: 'center',
|
|
241
|
-
justifyContent: 'center'
|
|
242
|
-
}),
|
|
243
|
-
children: [/*#__PURE__*/_jsx(BubbleMark, {
|
|
244
|
-
color: theme.colors.textPrimary,
|
|
245
|
-
size: 18
|
|
246
|
-
}), totalUnread > 0 && /*#__PURE__*/_jsx(View, {
|
|
247
|
-
style: {
|
|
248
|
-
position: 'absolute',
|
|
249
|
-
top: -3,
|
|
250
|
-
right: -3,
|
|
251
|
-
minWidth: 16,
|
|
252
|
-
height: 16,
|
|
253
|
-
borderRadius: 8,
|
|
254
|
-
paddingHorizontal: 4,
|
|
255
|
-
backgroundColor: theme.colors.accent,
|
|
256
|
-
alignItems: 'center',
|
|
257
|
-
justifyContent: 'center'
|
|
258
|
-
},
|
|
259
|
-
children: /*#__PURE__*/_jsx(Text, {
|
|
260
|
-
style: {
|
|
261
|
-
fontSize: 10,
|
|
262
|
-
fontWeight: '600',
|
|
263
|
-
color: theme.colors.accentForeground,
|
|
264
|
-
fontVariant: ['tabular-nums']
|
|
265
|
-
},
|
|
266
|
-
children: totalUnread > 9 ? '9+' : totalUnread
|
|
267
|
-
})
|
|
268
|
-
})]
|
|
269
|
-
}), /*#__PURE__*/_jsxs(BottomSheet, {
|
|
259
|
+
children: [/*#__PURE__*/_jsx(LauncherButton, {
|
|
260
|
+
theme: theme,
|
|
261
|
+
unread: totalUnread,
|
|
262
|
+
variant: props.variant,
|
|
263
|
+
size: props.size,
|
|
264
|
+
label: props.label,
|
|
265
|
+
style: props.style,
|
|
266
|
+
onPress: openSheet
|
|
267
|
+
}), /*#__PURE__*/_jsx(BottomSheet, {
|
|
270
268
|
visible: sheetOpen,
|
|
271
269
|
onClose: closeSheet,
|
|
272
270
|
theme: theme,
|
|
273
|
-
children:
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
type
|
|
282
|
-
}),
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
})
|
|
291
|
-
|
|
292
|
-
}), screen.name === 'thread' && (activeThread ? /*#__PURE__*/_jsx(ThreadScreen, {
|
|
293
|
-
theme: theme,
|
|
294
|
-
thread: activeThread,
|
|
295
|
-
onBack: () => setScreen({
|
|
296
|
-
name: 'home'
|
|
297
|
-
}),
|
|
298
|
-
onSend: message => handleSend(activeThread.id, message)
|
|
299
|
-
}) : /*#__PURE__*/_jsx(HomeScreen, {
|
|
300
|
-
theme: theme,
|
|
301
|
-
threads: threads,
|
|
302
|
-
loading: loading,
|
|
303
|
-
error: error,
|
|
304
|
-
onRetry: () => void refresh(),
|
|
305
|
-
onCompose: type => setScreen({
|
|
306
|
-
name: 'compose',
|
|
307
|
-
type
|
|
308
|
-
}),
|
|
309
|
-
onOpenThread: openThread,
|
|
310
|
-
onClose: closeSheet
|
|
311
|
-
}))]
|
|
271
|
+
children: mustChooseLanguage || screen.name === 'language' ? languagePicker : /*#__PURE__*/_jsxs(_Fragment, {
|
|
272
|
+
children: [screen.name === 'home' && home, screen.name === 'compose' && /*#__PURE__*/_jsx(ComposeScreen, {
|
|
273
|
+
theme: theme,
|
|
274
|
+
strings: strings,
|
|
275
|
+
type: screen.type,
|
|
276
|
+
onBack: () => setScreen({
|
|
277
|
+
name: 'home'
|
|
278
|
+
}),
|
|
279
|
+
onSubmit: message => handleSubmit(screen.type, message)
|
|
280
|
+
}), screen.name === 'thread' && (activeThread !== null ? /*#__PURE__*/_jsx(ThreadScreen, {
|
|
281
|
+
theme: theme,
|
|
282
|
+
strings: strings,
|
|
283
|
+
thread: activeThread,
|
|
284
|
+
onBack: () => setScreen({
|
|
285
|
+
name: 'home'
|
|
286
|
+
}),
|
|
287
|
+
onSend: message => handleSend(activeThread.id, message)
|
|
288
|
+
}) : home)]
|
|
289
|
+
})
|
|
312
290
|
})]
|
|
313
291
|
});
|
|
314
292
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useEffect","useMemo","useRef","useState","AppState","Pressable","Text","View","getThreads","getUnreadCount","markRead","postMessage","registerPush","submitQuery","SupportApiError","ensurePushPermission","isPushAvailable","resolveTheme","validateProps","BottomSheet","BubbleMark","ComposeScreen","HomeScreen","ThreadScreen","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","THREAD_POLL_MS","SHEET_POLL_MS","IDLE_POLL_MS","MIN_POLL_MS","SupportButton","props","validationError","theme","config","supabaseUrl","apiKey","appName","sheetOpen","setSheetOpen","screen","setScreen","name","threads","setThreads","totalUnread","setTotalUnread","loading","setLoading","error","setError","mounted","current","refresh","data","user","revenuecatId","total_unread","e","offline","refreshBadge","idlePollMs","pollIntervalMs","screenName","idle","intervalMs","tick","timer","setInterval","Math","max","appStateSub","addEventListener","state","clearInterval","remove","syncPushPermission","registration","expoProjectId","permissionStatus","status","expoPushToken","token","asked","openSheet","closeSheet","__DEV__","console","style","padding","borderWidth","borderColor","colors","statusDanger","borderRadius","radii","control","children","fontSize","color","openThread","thread","threadId","id","unread_count","prev","map","t","n","queryId","catch","writeErrorMessage","handleSubmit","type","message","queryType","userName","isPaid","appVersion","handleSend","activeThread","find","onPress","accessibilityRole","accessibilityLabel","pressed","width","height","border","backgroundColor","surfaceHover","surface","alignItems","justifyContent","textPrimary","size","position","top","right","minWidth","paddingHorizontal","accent","fontWeight","accentForeground","fontVariant","visible","onClose","onRetry","onCompose","onOpenThread","onBack","onSubmit","onSend"],"sourceRoot":"../../../src","sources":["components/SupportButton.tsx"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useMemo","useState","Text","View","postMessage","registerPush","setLanguage","setLanguageRequest","submitQuery","SupportApiError","createTranslator","asLanguage","DEFAULT_LANGUAGE","deviceLanguage","ensurePushPermission","isPushAvailable","resolveTheme","IDLE_POLL_MS","useSupportThreads","validateProps","BottomSheet","LauncherButton","ComposeScreen","HomeScreen","LanguageScreen","ThreadScreen","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","SupportButton","props","validationError","theme","accentColor","config","supabaseUrl","apiKey","appName","sheetOpen","setSheetOpen","screen","setScreen","name","threads","totalUnread","loading","refreshing","errorKey","serverLanguage","languageLoaded","refresh","reload","revenuecatId","user","enabled","activeThreadId","threadId","idlePollMs","pollIntervalMs","chosen","setChosen","draftLanguage","setDraftLanguage","savingLanguage","setSavingLanguage","languageError","setLanguageError","stored","fallbackLanguage","defaultLanguage","language","strings","mustChooseLanguage","syncPushPermission","registration","expoProjectId","permissionStatus","status","expoPushToken","token","asked","openSheet","closeSheet","__DEV__","console","error","style","padding","borderWidth","borderColor","colors","statusDanger","borderRadius","radii","control","children","fontSize","color","writeErrorMessage","e","t","offline","confirmLanguage","next","handleSubmit","type","message","queryType","userName","isPaid","appVersion","handleSend","queryId","activeThread","find","id","home","onRefresh","onCompose","onOpenThread","thread","onChangeLanguage","onClose","languagePicker","selected","onSelect","onConfirm","onBack","undefined","onDismiss","saving","unread","variant","size","label","onPress","visible","onSubmit","onSend"],"sourceRoot":"../../../src","sources":["components/SupportButton.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -172,32 +172,116 @@ export function CheckIcon({
|
|
|
172
172
|
});
|
|
173
173
|
}
|
|
174
174
|
|
|
175
|
-
/**
|
|
176
|
-
export function
|
|
175
|
+
/** Globe: circle, equator, and a pill standing in for the meridian curve. */
|
|
176
|
+
export function GlobeIcon({
|
|
177
177
|
color,
|
|
178
|
-
size =
|
|
178
|
+
size = 16
|
|
179
|
+
}) {
|
|
180
|
+
const inner = size - STROKE * 2;
|
|
181
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
182
|
+
style: {
|
|
183
|
+
width: size,
|
|
184
|
+
height: size,
|
|
185
|
+
borderWidth: STROKE,
|
|
186
|
+
borderColor: color,
|
|
187
|
+
borderRadius: size / 2,
|
|
188
|
+
alignItems: 'center',
|
|
189
|
+
justifyContent: 'center'
|
|
190
|
+
},
|
|
191
|
+
children: [/*#__PURE__*/_jsx(View, {
|
|
192
|
+
style: {
|
|
193
|
+
position: 'absolute',
|
|
194
|
+
width: inner,
|
|
195
|
+
height: STROKE,
|
|
196
|
+
backgroundColor: color
|
|
197
|
+
}
|
|
198
|
+
}), /*#__PURE__*/_jsx(View, {
|
|
199
|
+
style: {
|
|
200
|
+
width: size * 0.52,
|
|
201
|
+
height: inner,
|
|
202
|
+
borderWidth: STROKE,
|
|
203
|
+
borderColor: color,
|
|
204
|
+
borderRadius: size * 0.26
|
|
205
|
+
}
|
|
206
|
+
})]
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/** Send arrow: a stem plus a chevron head, both centered on the same axis. */
|
|
211
|
+
export function ArrowUpIcon({
|
|
212
|
+
color,
|
|
213
|
+
size = 16
|
|
214
|
+
}) {
|
|
215
|
+
const stroke = STROKE + 0.4;
|
|
216
|
+
const head = size * 0.44;
|
|
217
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
218
|
+
style: {
|
|
219
|
+
width: size,
|
|
220
|
+
height: size,
|
|
221
|
+
alignItems: 'center',
|
|
222
|
+
justifyContent: 'center'
|
|
223
|
+
},
|
|
224
|
+
children: [/*#__PURE__*/_jsx(View, {
|
|
225
|
+
style: {
|
|
226
|
+
position: 'absolute',
|
|
227
|
+
width: stroke,
|
|
228
|
+
height: size * 0.66,
|
|
229
|
+
borderRadius: stroke,
|
|
230
|
+
backgroundColor: color
|
|
231
|
+
}
|
|
232
|
+
}), /*#__PURE__*/_jsx(View, {
|
|
233
|
+
style: {
|
|
234
|
+
position: 'absolute',
|
|
235
|
+
// Rotating a square by 45° lifts its apex by ~0.207 × side, so
|
|
236
|
+
// offset by that to land the point on top of the stem.
|
|
237
|
+
top: size * 0.17 + head * 0.207,
|
|
238
|
+
width: head,
|
|
239
|
+
height: head,
|
|
240
|
+
borderTopWidth: stroke,
|
|
241
|
+
borderLeftWidth: stroke,
|
|
242
|
+
borderTopLeftRadius: stroke,
|
|
243
|
+
borderColor: color,
|
|
244
|
+
transform: [{
|
|
245
|
+
rotate: '45deg'
|
|
246
|
+
}]
|
|
247
|
+
}
|
|
248
|
+
})]
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* The chat-bubble mark on the launcher button: a filled bubble with the
|
|
254
|
+
* dots knocked out in the button's own fill color. Solid shapes read far
|
|
255
|
+
* better than 1.5px strokes at launcher size and on top of a color fill.
|
|
256
|
+
*/
|
|
257
|
+
export function ChatBubbleMark({
|
|
258
|
+
color,
|
|
259
|
+
dotColor,
|
|
260
|
+
size = 24
|
|
179
261
|
}) {
|
|
262
|
+
const bubbleHeight = size * 0.82;
|
|
180
263
|
const dot = {
|
|
181
|
-
width: size * 0.
|
|
182
|
-
height: size * 0.
|
|
264
|
+
width: size * 0.13,
|
|
265
|
+
height: size * 0.13,
|
|
183
266
|
borderRadius: size,
|
|
184
|
-
backgroundColor:
|
|
267
|
+
backgroundColor: dotColor
|
|
185
268
|
};
|
|
186
269
|
return /*#__PURE__*/_jsxs(View, {
|
|
187
270
|
style: {
|
|
188
|
-
|
|
271
|
+
width: size,
|
|
272
|
+
height: size,
|
|
273
|
+
justifyContent: 'flex-start'
|
|
189
274
|
},
|
|
190
275
|
children: [/*#__PURE__*/_jsxs(View, {
|
|
191
276
|
style: {
|
|
192
277
|
width: size,
|
|
193
|
-
height:
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
borderRadius: size * 0.28,
|
|
278
|
+
height: bubbleHeight,
|
|
279
|
+
borderRadius: size * 0.33,
|
|
280
|
+
backgroundColor: color,
|
|
197
281
|
flexDirection: 'row',
|
|
198
282
|
alignItems: 'center',
|
|
199
283
|
justifyContent: 'center',
|
|
200
|
-
gap: size * 0.
|
|
284
|
+
gap: size * 0.115
|
|
201
285
|
},
|
|
202
286
|
children: [/*#__PURE__*/_jsx(View, {
|
|
203
287
|
style: dot
|
|
@@ -208,16 +292,17 @@ export function BubbleMark({
|
|
|
208
292
|
})]
|
|
209
293
|
}), /*#__PURE__*/_jsx(View, {
|
|
210
294
|
style: {
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
295
|
+
position: 'absolute',
|
|
296
|
+
left: size * 0.22,
|
|
297
|
+
top: bubbleHeight - 1,
|
|
298
|
+
width: 0,
|
|
299
|
+
height: 0,
|
|
300
|
+
borderLeftWidth: size * 0.09,
|
|
301
|
+
borderRightWidth: size * 0.16,
|
|
302
|
+
borderTopWidth: size * 0.2,
|
|
303
|
+
borderLeftColor: 'transparent',
|
|
304
|
+
borderRightColor: 'transparent',
|
|
305
|
+
borderTopColor: color
|
|
221
306
|
}
|
|
222
307
|
})]
|
|
223
308
|
});
|