@appsupportkit/support-sdk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/api.js +93 -0
- package/lib/commonjs/api.js.map +1 -0
- package/lib/commonjs/components/BottomSheet.js +158 -0
- package/lib/commonjs/components/BottomSheet.js.map +1 -0
- package/lib/commonjs/components/SupportButton.js +244 -0
- package/lib/commonjs/components/SupportButton.js.map +1 -0
- package/lib/commonjs/components/icons.js +236 -0
- package/lib/commonjs/components/icons.js.map +1 -0
- package/lib/commonjs/components/primitives.js +284 -0
- package/lib/commonjs/components/primitives.js.map +1 -0
- package/lib/commonjs/components/screens/ComposeScreen.js +171 -0
- package/lib/commonjs/components/screens/ComposeScreen.js.map +1 -0
- package/lib/commonjs/components/screens/HomeScreen.js +227 -0
- package/lib/commonjs/components/screens/HomeScreen.js.map +1 -0
- package/lib/commonjs/components/screens/ThreadScreen.js +213 -0
- package/lib/commonjs/components/screens/ThreadScreen.js.map +1 -0
- package/lib/commonjs/index.js +58 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/theme.js +29 -0
- package/lib/commonjs/theme.js.map +1 -0
- package/lib/commonjs/types.js +14 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/commonjs/utils.js +63 -0
- package/lib/commonjs/utils.js.map +1 -0
- package/lib/module/api.js +84 -0
- package/lib/module/api.js.map +1 -0
- package/lib/module/components/BottomSheet.js +153 -0
- package/lib/module/components/BottomSheet.js.map +1 -0
- package/lib/module/components/SupportButton.js +240 -0
- package/lib/module/components/SupportButton.js.map +1 -0
- package/lib/module/components/icons.js +225 -0
- package/lib/module/components/icons.js.map +1 -0
- package/lib/module/components/primitives.js +270 -0
- package/lib/module/components/primitives.js.map +1 -0
- package/lib/module/components/screens/ComposeScreen.js +167 -0
- package/lib/module/components/screens/ComposeScreen.js.map +1 -0
- package/lib/module/components/screens/HomeScreen.js +223 -0
- package/lib/module/components/screens/HomeScreen.js.map +1 -0
- package/lib/module/components/screens/ThreadScreen.js +209 -0
- package/lib/module/components/screens/ThreadScreen.js.map +1 -0
- package/lib/module/index.js +7 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/theme.js +23 -0
- package/lib/module/theme.js.map +1 -0
- package/lib/module/types.js +10 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/utils.js +57 -0
- package/lib/module/utils.js.map +1 -0
- package/lib/typescript/api.d.ts +37 -0
- package/lib/typescript/api.d.ts.map +1 -0
- package/lib/typescript/components/BottomSheet.d.ts +9 -0
- package/lib/typescript/components/BottomSheet.d.ts.map +1 -0
- package/lib/typescript/components/SupportButton.d.ts +8 -0
- package/lib/typescript/components/SupportButton.d.ts.map +1 -0
- package/lib/typescript/components/icons.d.ts +32 -0
- package/lib/typescript/components/icons.d.ts.map +1 -0
- package/lib/typescript/components/primitives.d.ts +60 -0
- package/lib/typescript/components/primitives.d.ts.map +1 -0
- package/lib/typescript/components/screens/ComposeScreen.d.ts +10 -0
- package/lib/typescript/components/screens/ComposeScreen.d.ts.map +1 -0
- package/lib/typescript/components/screens/HomeScreen.d.ts +13 -0
- package/lib/typescript/components/screens/HomeScreen.d.ts.map +1 -0
- package/lib/typescript/components/screens/ThreadScreen.d.ts +10 -0
- package/lib/typescript/components/screens/ThreadScreen.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +6 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/theme.d.ts +13 -0
- package/lib/typescript/theme.d.ts.map +1 -0
- package/lib/typescript/types.d.ts +61 -0
- package/lib/typescript/types.d.ts.map +1 -0
- package/lib/typescript/utils.d.ts +11 -0
- package/lib/typescript/utils.d.ts.map +1 -0
- package/package.json +51 -0
- package/src/api.ts +125 -0
- package/src/components/BottomSheet.tsx +173 -0
- package/src/components/SupportButton.tsx +265 -0
- package/src/components/icons.tsx +189 -0
- package/src/components/primitives.tsx +298 -0
- package/src/components/screens/ComposeScreen.tsx +163 -0
- package/src/components/screens/HomeScreen.tsx +234 -0
- package/src/components/screens/ThreadScreen.tsx +227 -0
- package/src/index.tsx +24 -0
- package/src/theme.ts +39 -0
- package/src/types.ts +71 -0
- package/src/utils.ts +63 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.SupportApiError = void 0;
|
|
7
|
+
exports.getThreads = getThreads;
|
|
8
|
+
exports.markRead = markRead;
|
|
9
|
+
exports.postMessage = postMessage;
|
|
10
|
+
exports.submitQuery = submitQuery;
|
|
11
|
+
// Thin client for the Supabase Edge Functions. Every call authenticates with
|
|
12
|
+
// the per-app x-api-key header; no Supabase JS client is needed on-device.
|
|
13
|
+
|
|
14
|
+
class SupportApiError extends Error {
|
|
15
|
+
/** True for network-level failures (likely offline). */
|
|
16
|
+
|
|
17
|
+
constructor(message, status, offline = false) {
|
|
18
|
+
super(message);
|
|
19
|
+
this.name = 'SupportApiError';
|
|
20
|
+
this.status = status;
|
|
21
|
+
this.offline = offline;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.SupportApiError = SupportApiError;
|
|
25
|
+
async function request(config, path, init) {
|
|
26
|
+
const url = `${config.supabaseUrl.replace(/\/$/, '')}/functions/v1/${path}`;
|
|
27
|
+
let response;
|
|
28
|
+
try {
|
|
29
|
+
response = await fetch(url, {
|
|
30
|
+
...init,
|
|
31
|
+
headers: {
|
|
32
|
+
'Content-Type': 'application/json',
|
|
33
|
+
'x-api-key': config.apiKey,
|
|
34
|
+
...init.headers
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
} catch {
|
|
38
|
+
throw new SupportApiError('Network request failed', null, true);
|
|
39
|
+
}
|
|
40
|
+
let payload = null;
|
|
41
|
+
try {
|
|
42
|
+
payload = await response.json();
|
|
43
|
+
} catch {
|
|
44
|
+
// Non-JSON error body — fall through with status only.
|
|
45
|
+
}
|
|
46
|
+
if (!response.ok) {
|
|
47
|
+
const message = payload !== null && typeof payload === 'object' && 'error' in payload && typeof payload.error === 'string' ? payload.error : `Request failed (${response.status})`;
|
|
48
|
+
throw new SupportApiError(message, response.status);
|
|
49
|
+
}
|
|
50
|
+
return payload;
|
|
51
|
+
}
|
|
52
|
+
function getThreads(config, revenuecatId) {
|
|
53
|
+
const params = new URLSearchParams({
|
|
54
|
+
revenuecat_id: revenuecatId
|
|
55
|
+
});
|
|
56
|
+
return request(config, `get-threads?${params.toString()}`, {
|
|
57
|
+
method: 'GET'
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
function submitQuery(config, input) {
|
|
61
|
+
return request(config, 'submit-query', {
|
|
62
|
+
method: 'POST',
|
|
63
|
+
body: JSON.stringify({
|
|
64
|
+
app_name: config.appName,
|
|
65
|
+
query_type: input.queryType,
|
|
66
|
+
message: input.message,
|
|
67
|
+
user_name: input.userName,
|
|
68
|
+
is_paid: input.isPaid,
|
|
69
|
+
revenuecat_id: input.revenuecatId,
|
|
70
|
+
app_version: input.appVersion
|
|
71
|
+
})
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
function postMessage(config, input) {
|
|
75
|
+
return request(config, 'post-message', {
|
|
76
|
+
method: 'POST',
|
|
77
|
+
body: JSON.stringify({
|
|
78
|
+
query_id: input.queryId,
|
|
79
|
+
revenuecat_id: input.revenuecatId,
|
|
80
|
+
message: input.message
|
|
81
|
+
})
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
function markRead(config, input) {
|
|
85
|
+
return request(config, 'mark-read', {
|
|
86
|
+
method: 'POST',
|
|
87
|
+
body: JSON.stringify({
|
|
88
|
+
query_id: input.queryId,
|
|
89
|
+
revenuecat_id: input.revenuecatId
|
|
90
|
+
})
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SupportApiError","Error","constructor","message","status","offline","name","exports","request","config","path","init","url","supabaseUrl","replace","response","fetch","headers","apiKey","payload","json","ok","error","getThreads","revenuecatId","params","URLSearchParams","revenuecat_id","toString","method","submitQuery","input","body","JSON","stringify","app_name","appName","query_type","queryType","user_name","userName","is_paid","isPaid","app_version","appVersion","postMessage","query_id","queryId","markRead"],"sourceRoot":"../../src","sources":["api.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.BottomSheet = BottomSheet;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
var _reactNativeSafeAreaContext = require("react-native-safe-area-context");
|
|
10
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
11
|
+
// Bottom sheet built on the built-in Modal + Animated APIs.
|
|
12
|
+
//
|
|
13
|
+
// Why no sheet library: the SDK needs exactly one detent, a drag handle, a
|
|
14
|
+
// backdrop fade, and a 180ms ease-out slide — all achievable with core APIs.
|
|
15
|
+
// Skipping reanimated/gesture-handler keeps the package free of native
|
|
16
|
+
// dependencies and install friction for consumers.
|
|
17
|
+
|
|
18
|
+
const SLIDE_MS = 180; // motion.slow — ease-out, no springs, no bounce.
|
|
19
|
+
|
|
20
|
+
function BottomSheet({
|
|
21
|
+
visible,
|
|
22
|
+
onClose,
|
|
23
|
+
theme,
|
|
24
|
+
children
|
|
25
|
+
}) {
|
|
26
|
+
const {
|
|
27
|
+
height: windowHeight
|
|
28
|
+
} = (0, _reactNative.useWindowDimensions)();
|
|
29
|
+
const sheetHeight = Math.min(windowHeight * 0.82, 640);
|
|
30
|
+
const translateY = (0, _react.useRef)(new _reactNative.Animated.Value(sheetHeight)).current;
|
|
31
|
+
const backdrop = (0, _react.useRef)(new _reactNative.Animated.Value(0)).current;
|
|
32
|
+
const animateIn = (0, _react.useCallback)(() => {
|
|
33
|
+
_reactNative.Animated.parallel([_reactNative.Animated.timing(translateY, {
|
|
34
|
+
toValue: 0,
|
|
35
|
+
duration: SLIDE_MS,
|
|
36
|
+
easing: _reactNative.Easing.out(_reactNative.Easing.cubic),
|
|
37
|
+
useNativeDriver: true
|
|
38
|
+
}), _reactNative.Animated.timing(backdrop, {
|
|
39
|
+
toValue: 1,
|
|
40
|
+
duration: SLIDE_MS,
|
|
41
|
+
easing: _reactNative.Easing.out(_reactNative.Easing.cubic),
|
|
42
|
+
useNativeDriver: true
|
|
43
|
+
})]).start();
|
|
44
|
+
}, [translateY, backdrop]);
|
|
45
|
+
const animateOut = (0, _react.useCallback)(done => {
|
|
46
|
+
_reactNative.Animated.parallel([_reactNative.Animated.timing(translateY, {
|
|
47
|
+
toValue: sheetHeight,
|
|
48
|
+
duration: SLIDE_MS,
|
|
49
|
+
easing: _reactNative.Easing.out(_reactNative.Easing.cubic),
|
|
50
|
+
useNativeDriver: true
|
|
51
|
+
}), _reactNative.Animated.timing(backdrop, {
|
|
52
|
+
toValue: 0,
|
|
53
|
+
duration: SLIDE_MS,
|
|
54
|
+
easing: _reactNative.Easing.out(_reactNative.Easing.cubic),
|
|
55
|
+
useNativeDriver: true
|
|
56
|
+
})]).start(({
|
|
57
|
+
finished
|
|
58
|
+
}) => {
|
|
59
|
+
if (finished) done();
|
|
60
|
+
});
|
|
61
|
+
}, [translateY, backdrop, sheetHeight]);
|
|
62
|
+
(0, _react.useEffect)(() => {
|
|
63
|
+
if (visible) animateIn();
|
|
64
|
+
}, [visible, animateIn]);
|
|
65
|
+
const requestClose = (0, _react.useCallback)(() => {
|
|
66
|
+
animateOut(onClose);
|
|
67
|
+
}, [animateOut, onClose]);
|
|
68
|
+
|
|
69
|
+
// Drag handle: follow the finger downward; past 25% (or a flick), dismiss.
|
|
70
|
+
const panResponder = (0, _react.useRef)(_reactNative.PanResponder.create({
|
|
71
|
+
onStartShouldSetPanResponder: () => true,
|
|
72
|
+
onMoveShouldSetPanResponder: (_e, g) => Math.abs(g.dy) > 4,
|
|
73
|
+
onPanResponderMove: (_e, g) => {
|
|
74
|
+
if (g.dy > 0) translateY.setValue(g.dy);
|
|
75
|
+
},
|
|
76
|
+
onPanResponderRelease: (_e, g) => {
|
|
77
|
+
if (g.dy > sheetHeight * 0.25 || g.vy > 1.2) {
|
|
78
|
+
requestClose();
|
|
79
|
+
} else {
|
|
80
|
+
_reactNative.Animated.timing(translateY, {
|
|
81
|
+
toValue: 0,
|
|
82
|
+
duration: SLIDE_MS,
|
|
83
|
+
easing: _reactNative.Easing.out(_reactNative.Easing.cubic),
|
|
84
|
+
useNativeDriver: true
|
|
85
|
+
}).start();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
})).current;
|
|
89
|
+
if (!visible) return null;
|
|
90
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Modal, {
|
|
91
|
+
visible: true,
|
|
92
|
+
transparent: true,
|
|
93
|
+
animationType: "none",
|
|
94
|
+
onRequestClose: requestClose,
|
|
95
|
+
statusBarTranslucent: true,
|
|
96
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSafeAreaContext.SafeAreaProvider, {
|
|
97
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
98
|
+
style: {
|
|
99
|
+
flex: 1,
|
|
100
|
+
justifyContent: 'flex-end'
|
|
101
|
+
},
|
|
102
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
|
|
103
|
+
style: {
|
|
104
|
+
position: 'absolute',
|
|
105
|
+
top: 0,
|
|
106
|
+
right: 0,
|
|
107
|
+
bottom: 0,
|
|
108
|
+
left: 0,
|
|
109
|
+
backgroundColor: 'rgba(0,0,0,0.5)',
|
|
110
|
+
opacity: backdrop
|
|
111
|
+
},
|
|
112
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
|
|
113
|
+
style: {
|
|
114
|
+
flex: 1
|
|
115
|
+
},
|
|
116
|
+
onPress: requestClose,
|
|
117
|
+
accessibilityLabel: "Close support"
|
|
118
|
+
})
|
|
119
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Animated.View, {
|
|
120
|
+
style: {
|
|
121
|
+
height: sheetHeight,
|
|
122
|
+
backgroundColor: theme.colors.overlay,
|
|
123
|
+
borderTopLeftRadius: theme.radii.sheet,
|
|
124
|
+
borderTopRightRadius: theme.radii.sheet,
|
|
125
|
+
borderWidth: 1,
|
|
126
|
+
borderBottomWidth: 0,
|
|
127
|
+
borderColor: theme.colors.border,
|
|
128
|
+
transform: [{
|
|
129
|
+
translateY
|
|
130
|
+
}]
|
|
131
|
+
},
|
|
132
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
133
|
+
...panResponder.panHandlers,
|
|
134
|
+
style: {
|
|
135
|
+
alignItems: 'center',
|
|
136
|
+
paddingVertical: 10
|
|
137
|
+
},
|
|
138
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
139
|
+
style: {
|
|
140
|
+
width: 32,
|
|
141
|
+
height: 4,
|
|
142
|
+
borderRadius: 2,
|
|
143
|
+
backgroundColor: theme.colors.borderStrong
|
|
144
|
+
}
|
|
145
|
+
})
|
|
146
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSafeAreaContext.SafeAreaView, {
|
|
147
|
+
edges: ['bottom'],
|
|
148
|
+
style: {
|
|
149
|
+
flex: 1
|
|
150
|
+
},
|
|
151
|
+
children: children
|
|
152
|
+
})]
|
|
153
|
+
})]
|
|
154
|
+
})
|
|
155
|
+
})
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=BottomSheet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNative","_reactNativeSafeAreaContext","_jsxRuntime","SLIDE_MS","BottomSheet","visible","onClose","theme","children","height","windowHeight","useWindowDimensions","sheetHeight","Math","min","translateY","useRef","Animated","Value","current","backdrop","animateIn","useCallback","parallel","timing","toValue","duration","easing","Easing","out","cubic","useNativeDriver","start","animateOut","done","finished","useEffect","requestClose","panResponder","PanResponder","create","onStartShouldSetPanResponder","onMoveShouldSetPanResponder","_e","g","abs","dy","onPanResponderMove","setValue","onPanResponderRelease","vy","jsx","Modal","transparent","animationType","onRequestClose","statusBarTranslucent","SafeAreaProvider","jsxs","View","style","flex","justifyContent","position","top","right","bottom","left","backgroundColor","opacity","Pressable","onPress","accessibilityLabel","colors","overlay","borderTopLeftRadius","radii","sheet","borderTopRightRadius","borderWidth","borderBottomWidth","borderColor","border","transform","panHandlers","alignItems","paddingVertical","width","borderRadius","borderStrong","SafeAreaView","edges"],"sourceRoot":"../../../src","sources":["components/BottomSheet.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.SupportButton = SupportButton;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
var _api = require("../api");
|
|
10
|
+
var _theme = require("../theme");
|
|
11
|
+
var _utils = require("../utils");
|
|
12
|
+
var _BottomSheet = require("./BottomSheet");
|
|
13
|
+
var _icons = require("./icons");
|
|
14
|
+
var _ComposeScreen = require("./screens/ComposeScreen");
|
|
15
|
+
var _HomeScreen = require("./screens/HomeScreen");
|
|
16
|
+
var _ThreadScreen = require("./screens/ThreadScreen");
|
|
17
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
18
|
+
/**
|
|
19
|
+
* The single entry point of the SDK: a button with an unread badge that
|
|
20
|
+
* opens the support bottom sheet. Polls get-threads on mount and whenever
|
|
21
|
+
* the sheet opens (no websockets in v1).
|
|
22
|
+
*/
|
|
23
|
+
function SupportButton(props) {
|
|
24
|
+
const validationError = (0, _utils.validateProps)(props);
|
|
25
|
+
const theme = (0, _theme.resolveTheme)(props.theme);
|
|
26
|
+
const config = (0, _react.useMemo)(() => ({
|
|
27
|
+
supabaseUrl: props.supabaseUrl,
|
|
28
|
+
apiKey: props.apiKey,
|
|
29
|
+
appName: props.appName
|
|
30
|
+
}), [props.supabaseUrl, props.apiKey, props.appName]);
|
|
31
|
+
const [sheetOpen, setSheetOpen] = (0, _react.useState)(false);
|
|
32
|
+
const [screen, setScreen] = (0, _react.useState)({
|
|
33
|
+
name: 'home'
|
|
34
|
+
});
|
|
35
|
+
const [threads, setThreads] = (0, _react.useState)(null);
|
|
36
|
+
const [totalUnread, setTotalUnread] = (0, _react.useState)(0);
|
|
37
|
+
const [loading, setLoading] = (0, _react.useState)(false);
|
|
38
|
+
const [error, setError] = (0, _react.useState)(null);
|
|
39
|
+
const mounted = (0, _react.useRef)(true);
|
|
40
|
+
(0, _react.useEffect)(() => {
|
|
41
|
+
mounted.current = true;
|
|
42
|
+
return () => {
|
|
43
|
+
mounted.current = false;
|
|
44
|
+
};
|
|
45
|
+
}, []);
|
|
46
|
+
const refresh = (0, _react.useCallback)(async () => {
|
|
47
|
+
if (validationError) return;
|
|
48
|
+
setLoading(true);
|
|
49
|
+
setError(null);
|
|
50
|
+
try {
|
|
51
|
+
const data = await (0, _api.getThreads)(config, props.user.revenuecatId);
|
|
52
|
+
if (!mounted.current) return;
|
|
53
|
+
setThreads(data.threads);
|
|
54
|
+
setTotalUnread(data.total_unread);
|
|
55
|
+
} catch (e) {
|
|
56
|
+
if (!mounted.current) return;
|
|
57
|
+
setError(e instanceof _api.SupportApiError && e.offline ? "You're offline — check your connection" : "Couldn't load threads");
|
|
58
|
+
} finally {
|
|
59
|
+
if (mounted.current) setLoading(false);
|
|
60
|
+
}
|
|
61
|
+
}, [config, props.user.revenuecatId, validationError]);
|
|
62
|
+
|
|
63
|
+
// Poll on mount…
|
|
64
|
+
(0, _react.useEffect)(() => {
|
|
65
|
+
void refresh();
|
|
66
|
+
}, [refresh]);
|
|
67
|
+
|
|
68
|
+
// …and on sheet open.
|
|
69
|
+
function openSheet() {
|
|
70
|
+
setScreen({
|
|
71
|
+
name: 'home'
|
|
72
|
+
});
|
|
73
|
+
setSheetOpen(true);
|
|
74
|
+
void refresh();
|
|
75
|
+
}
|
|
76
|
+
function closeSheet() {
|
|
77
|
+
setSheetOpen(false);
|
|
78
|
+
setScreen({
|
|
79
|
+
name: 'home'
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
if (validationError) {
|
|
83
|
+
// Dev-mode: loud and actionable. Production: render nothing rather than
|
|
84
|
+
// a broken button.
|
|
85
|
+
if (__DEV__) {
|
|
86
|
+
console.error(validationError);
|
|
87
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
88
|
+
style: {
|
|
89
|
+
padding: 8,
|
|
90
|
+
borderWidth: 1,
|
|
91
|
+
borderColor: theme.colors.statusDanger,
|
|
92
|
+
borderRadius: theme.radii.control
|
|
93
|
+
},
|
|
94
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
95
|
+
style: {
|
|
96
|
+
fontSize: 11,
|
|
97
|
+
color: theme.colors.statusDanger
|
|
98
|
+
},
|
|
99
|
+
children: validationError
|
|
100
|
+
})
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
function openThread(thread) {
|
|
106
|
+
setScreen({
|
|
107
|
+
name: 'thread',
|
|
108
|
+
threadId: thread.id
|
|
109
|
+
});
|
|
110
|
+
if (thread.unread_count > 0) {
|
|
111
|
+
// Optimistically clear the badge; persist via mark-read.
|
|
112
|
+
setThreads(prev => prev?.map(t => t.id === thread.id ? {
|
|
113
|
+
...t,
|
|
114
|
+
unread_count: 0
|
|
115
|
+
} : t) ?? null);
|
|
116
|
+
setTotalUnread(n => Math.max(0, n - thread.unread_count));
|
|
117
|
+
void (0, _api.markRead)(config, {
|
|
118
|
+
queryId: thread.id,
|
|
119
|
+
revenuecatId: props.user.revenuecatId
|
|
120
|
+
}).catch(() => {
|
|
121
|
+
// Non-fatal: the next get-threads reconciles the badge.
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
async function handleSubmit(type, message) {
|
|
126
|
+
try {
|
|
127
|
+
await (0, _api.submitQuery)(config, {
|
|
128
|
+
queryType: type,
|
|
129
|
+
message,
|
|
130
|
+
userName: props.user.name,
|
|
131
|
+
isPaid: props.user.isPaid,
|
|
132
|
+
revenuecatId: props.user.revenuecatId,
|
|
133
|
+
appVersion: props.user.appVersion
|
|
134
|
+
});
|
|
135
|
+
void refresh();
|
|
136
|
+
return true;
|
|
137
|
+
} catch {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
async function handleSend(threadId, message) {
|
|
142
|
+
try {
|
|
143
|
+
await (0, _api.postMessage)(config, {
|
|
144
|
+
queryId: threadId,
|
|
145
|
+
revenuecatId: props.user.revenuecatId,
|
|
146
|
+
message
|
|
147
|
+
});
|
|
148
|
+
await refresh();
|
|
149
|
+
return true;
|
|
150
|
+
} catch {
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
const activeThread = screen.name === 'thread' ? (threads ?? []).find(t => t.id === screen.threadId) ?? null : null;
|
|
155
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
156
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Pressable, {
|
|
157
|
+
onPress: openSheet,
|
|
158
|
+
accessibilityRole: "button",
|
|
159
|
+
accessibilityLabel: totalUnread > 0 ? `Support, ${totalUnread} unread ${totalUnread === 1 ? 'reply' : 'replies'}` : 'Support',
|
|
160
|
+
style: ({
|
|
161
|
+
pressed
|
|
162
|
+
}) => ({
|
|
163
|
+
width: 44,
|
|
164
|
+
height: 44,
|
|
165
|
+
borderRadius: 22,
|
|
166
|
+
borderWidth: 1,
|
|
167
|
+
borderColor: theme.colors.border,
|
|
168
|
+
backgroundColor: pressed ? theme.colors.surfaceHover : theme.colors.surface,
|
|
169
|
+
alignItems: 'center',
|
|
170
|
+
justifyContent: 'center'
|
|
171
|
+
}),
|
|
172
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.BubbleMark, {
|
|
173
|
+
color: theme.colors.textPrimary,
|
|
174
|
+
size: 18
|
|
175
|
+
}), totalUnread > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
176
|
+
style: {
|
|
177
|
+
position: 'absolute',
|
|
178
|
+
top: -3,
|
|
179
|
+
right: -3,
|
|
180
|
+
minWidth: 16,
|
|
181
|
+
height: 16,
|
|
182
|
+
borderRadius: 8,
|
|
183
|
+
paddingHorizontal: 4,
|
|
184
|
+
backgroundColor: theme.colors.accent,
|
|
185
|
+
alignItems: 'center',
|
|
186
|
+
justifyContent: 'center'
|
|
187
|
+
},
|
|
188
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
189
|
+
style: {
|
|
190
|
+
fontSize: 10,
|
|
191
|
+
fontWeight: '600',
|
|
192
|
+
color: theme.colors.accentForeground,
|
|
193
|
+
fontVariant: ['tabular-nums']
|
|
194
|
+
},
|
|
195
|
+
children: totalUnread > 9 ? '9+' : totalUnread
|
|
196
|
+
})
|
|
197
|
+
})]
|
|
198
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_BottomSheet.BottomSheet, {
|
|
199
|
+
visible: sheetOpen,
|
|
200
|
+
onClose: closeSheet,
|
|
201
|
+
theme: theme,
|
|
202
|
+
children: [screen.name === 'home' && /*#__PURE__*/(0, _jsxRuntime.jsx)(_HomeScreen.HomeScreen, {
|
|
203
|
+
theme: theme,
|
|
204
|
+
threads: threads,
|
|
205
|
+
loading: loading,
|
|
206
|
+
error: error,
|
|
207
|
+
onRetry: () => void refresh(),
|
|
208
|
+
onCompose: type => setScreen({
|
|
209
|
+
name: 'compose',
|
|
210
|
+
type
|
|
211
|
+
}),
|
|
212
|
+
onOpenThread: openThread,
|
|
213
|
+
onClose: closeSheet
|
|
214
|
+
}), screen.name === 'compose' && /*#__PURE__*/(0, _jsxRuntime.jsx)(_ComposeScreen.ComposeScreen, {
|
|
215
|
+
theme: theme,
|
|
216
|
+
type: screen.type,
|
|
217
|
+
onBack: () => setScreen({
|
|
218
|
+
name: 'home'
|
|
219
|
+
}),
|
|
220
|
+
onSubmit: message => handleSubmit(screen.type, message)
|
|
221
|
+
}), screen.name === 'thread' && (activeThread ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_ThreadScreen.ThreadScreen, {
|
|
222
|
+
theme: theme,
|
|
223
|
+
thread: activeThread,
|
|
224
|
+
onBack: () => setScreen({
|
|
225
|
+
name: 'home'
|
|
226
|
+
}),
|
|
227
|
+
onSend: message => handleSend(activeThread.id, message)
|
|
228
|
+
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_HomeScreen.HomeScreen, {
|
|
229
|
+
theme: theme,
|
|
230
|
+
threads: threads,
|
|
231
|
+
loading: loading,
|
|
232
|
+
error: error,
|
|
233
|
+
onRetry: () => void refresh(),
|
|
234
|
+
onCompose: type => setScreen({
|
|
235
|
+
name: 'compose',
|
|
236
|
+
type
|
|
237
|
+
}),
|
|
238
|
+
onOpenThread: openThread,
|
|
239
|
+
onClose: closeSheet
|
|
240
|
+
}))]
|
|
241
|
+
})]
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=SupportButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNative","_api","_theme","_utils","_BottomSheet","_icons","_ComposeScreen","_HomeScreen","_ThreadScreen","_jsxRuntime","SupportButton","props","validationError","validateProps","theme","resolveTheme","config","useMemo","supabaseUrl","apiKey","appName","sheetOpen","setSheetOpen","useState","screen","setScreen","name","threads","setThreads","totalUnread","setTotalUnread","loading","setLoading","error","setError","mounted","useRef","useEffect","current","refresh","useCallback","data","getThreads","user","revenuecatId","total_unread","e","SupportApiError","offline","openSheet","closeSheet","__DEV__","console","jsx","View","style","padding","borderWidth","borderColor","colors","statusDanger","borderRadius","radii","control","children","Text","fontSize","color","openThread","thread","threadId","id","unread_count","prev","map","t","n","Math","max","markRead","queryId","catch","handleSubmit","type","message","submitQuery","queryType","userName","isPaid","appVersion","handleSend","postMessage","activeThread","find","jsxs","Fragment","Pressable","onPress","accessibilityRole","accessibilityLabel","pressed","width","height","border","backgroundColor","surfaceHover","surface","alignItems","justifyContent","BubbleMark","textPrimary","size","position","top","right","minWidth","paddingHorizontal","accent","fontWeight","accentForeground","fontVariant","BottomSheet","visible","onClose","HomeScreen","onRetry","onCompose","onOpenThread","ComposeScreen","onBack","onSubmit","ThreadScreen","onSend"],"sourceRoot":"../../../src","sources":["components/SupportButton.tsx"],"mappings":"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","ignoreList":[]}
|