@adminide-stack/yantra-mobile 12.0.54 → 12.0.55-alpha.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/components/CustomDrawer.js +203 -150
- package/lib/components/CustomDrawer.js.map +1 -1
- package/lib/components/NavigationHeader/HeaderMoreMenu.js +9 -2
- package/lib/components/NavigationHeader/HeaderMoreMenu.js.map +1 -1
- package/lib/components/NavigationHeader/HeaderSettingsMenu.js +2 -2
- package/lib/components/NavigationHeader/HeaderSettingsMenu.js.map +1 -1
- package/lib/components/NavigationHeader/HeaderToolbarButton.js +4 -1
- package/lib/components/NavigationHeader/HeaderToolbarButton.js.map +1 -1
- package/lib/components/NavigationHeader/NavigationHeader.js +4 -3
- package/lib/components/NavigationHeader/NavigationHeader.js.map +1 -1
- package/lib/components/ProfileAvatar.js +44 -0
- package/lib/components/ProfileAvatar.js.map +1 -0
- package/lib/compute.js +53 -1
- package/lib/compute.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/routes.json +55 -0
- package/lib/screens/Account/index.js +393 -0
- package/lib/screens/Account/index.js.map +1 -0
- package/lib/screens/Account/splitDisplayName.js +15 -0
- package/lib/screens/Account/splitDisplayName.js.map +1 -0
- package/lib/screens/Chat/index.js +4 -3
- package/lib/screens/Chat/index.js.map +1 -1
- package/lib/screens/Home/HomeScreen.js +4 -3
- package/lib/screens/Home/HomeScreen.js.map +1 -1
- package/lib/screens/Home/components/HomeSuggestions.js +1 -1
- package/lib/screens/Home/components/HomeSuggestions.js.map +1 -1
- package/lib/theme/AppThemeProvider.js +74 -0
- package/lib/theme/AppThemeProvider.js.map +1 -0
- package/lib/theme/appTheme.js +9 -0
- package/lib/theme/appTheme.js.map +1 -0
- package/lib/theme/mobileTokens.js +52 -13
- package/lib/theme/mobileTokens.js.map +1 -1
- package/lib/utils/authUserDisplay.js +27 -9
- package/lib/utils/authUserDisplay.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
import {jsxs,jsx}from'react/jsx-runtime';import {useState,useMemo,useCallback}from'react';import {Alert,StyleSheet,View,Pressable,ScrollView,ActivityIndicator,Modal,KeyboardAvoidingView,TextInput,Platform}from'react-native';import {Ionicons}from'@expo/vector-icons';import {Text}from'@admin-layout/gluestack-ui-mobile';import {useNavigation,useRoute,CommonActions}from'@react-navigation/native';import {useSafeAreaInsets,SafeAreaView}from'react-native-safe-area-context';import {useDispatch,useSelector}from'react-redux';import {userSelector,logoutAndRedirect}from'@adminide-stack/user-auth0-client';import {useAccountProfileQuery,useSetNameMutation,useDeleteUserAccountMutation}from'common/graphql';import {ProfileAvatar}from'../../components/ProfileAvatar.js';import {mobileColors,mobileTokens}from'../../theme/mobileTokens.js';import {useAppTheme}from'../../theme/AppThemeProvider.js';import {pickPrimaryDisplayName,pickAuthEmail,pickAuthUsername,pickProfilePhotoUrl}from'../../utils/authUserDisplay.js';import {splitDisplayName}from'./splitDisplayName.js';var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
3
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
4
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
5
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
6
|
+
var __spreadValues = (a, b) => {
|
|
7
|
+
for (var prop in b || (b = {}))
|
|
8
|
+
if (__hasOwnProp.call(b, prop))
|
|
9
|
+
__defNormalProp(a, prop, b[prop]);
|
|
10
|
+
if (__getOwnPropSymbols)
|
|
11
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
12
|
+
if (__propIsEnum.call(b, prop))
|
|
13
|
+
__defNormalProp(a, prop, b[prop]);
|
|
14
|
+
}
|
|
15
|
+
return a;
|
|
16
|
+
};
|
|
17
|
+
const PAGE_BG = "#f2f2f7";
|
|
18
|
+
function AccountScreen() {
|
|
19
|
+
var _a, _b;
|
|
20
|
+
const navigation = useNavigation();
|
|
21
|
+
const route = useRoute();
|
|
22
|
+
const {
|
|
23
|
+
isDark
|
|
24
|
+
} = useAppTheme();
|
|
25
|
+
const colors = mobileColors(isDark);
|
|
26
|
+
const insets = useSafeAreaInsets();
|
|
27
|
+
const dispatch = useDispatch();
|
|
28
|
+
const authUser = useSelector(userSelector);
|
|
29
|
+
const {
|
|
30
|
+
data: profileData
|
|
31
|
+
} = useAccountProfileQuery({
|
|
32
|
+
fetchPolicy: "cache-and-network",
|
|
33
|
+
errorPolicy: "all"
|
|
34
|
+
});
|
|
35
|
+
const [setName, {
|
|
36
|
+
loading: savingName
|
|
37
|
+
}] = useSetNameMutation();
|
|
38
|
+
const [deleteUserAccount, {
|
|
39
|
+
loading: deleting
|
|
40
|
+
}] = useDeleteUserAccountMutation();
|
|
41
|
+
const [nameOpen, setNameOpen] = useState(false);
|
|
42
|
+
const [givenName, setGivenName] = useState("");
|
|
43
|
+
const [familyName, setFamilyName] = useState("");
|
|
44
|
+
const orgName = useMemo(() => {
|
|
45
|
+
var _a2, _b2;
|
|
46
|
+
const raw = (_b2 = (_a2 = route == null ? void 0 : route.params) == null ? void 0 : _a2.orgName) != null ? _b2 : "";
|
|
47
|
+
return typeof raw === "string" && raw.trim() ? raw.trim() : null;
|
|
48
|
+
}, [(_a = route == null ? void 0 : route.params) == null ? void 0 : _a.orgName]);
|
|
49
|
+
const displayName = useMemo(() => pickPrimaryDisplayName(authUser), [authUser]);
|
|
50
|
+
const email = useMemo(() => pickAuthEmail(authUser), [authUser]);
|
|
51
|
+
const username = useMemo(() => pickAuthUsername(authUser), [authUser]);
|
|
52
|
+
const photoUrl = useMemo(() => {
|
|
53
|
+
var _a2;
|
|
54
|
+
return pickProfilePhotoUrl((_a2 = profileData == null ? void 0 : profileData.accountProfile) == null ? void 0 : _a2.photos, authUser);
|
|
55
|
+
}, [(_b = profileData == null ? void 0 : profileData.accountProfile) == null ? void 0 : _b.photos, authUser]);
|
|
56
|
+
const busy = deleting;
|
|
57
|
+
const handleBack = useCallback(() => {
|
|
58
|
+
var _a2, _b2;
|
|
59
|
+
if ((_a2 = navigation == null ? void 0 : navigation.canGoBack) == null ? void 0 : _a2.call(navigation)) {
|
|
60
|
+
navigation.goBack();
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
(_b2 = navigation == null ? void 0 : navigation.dispatch) == null ? void 0 : _b2.call(navigation, CommonActions.navigate({
|
|
64
|
+
name: "MainStack.Layout.Home",
|
|
65
|
+
params: orgName ? {
|
|
66
|
+
orgName
|
|
67
|
+
} : void 0
|
|
68
|
+
}));
|
|
69
|
+
}, [navigation, orgName]);
|
|
70
|
+
const openNameEditor = useCallback(() => {
|
|
71
|
+
const split = splitDisplayName(displayName === "Account" ? "" : displayName);
|
|
72
|
+
setGivenName(split.givenName);
|
|
73
|
+
setFamilyName(split.familyName);
|
|
74
|
+
setNameOpen(true);
|
|
75
|
+
}, [displayName]);
|
|
76
|
+
const saveName = useCallback(async () => {
|
|
77
|
+
try {
|
|
78
|
+
await setName({
|
|
79
|
+
variables: {
|
|
80
|
+
givenName: givenName.trim() || void 0,
|
|
81
|
+
familyName: familyName.trim() || void 0
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
setNameOpen(false);
|
|
85
|
+
} catch (error) {
|
|
86
|
+
Alert.alert("Could not update name", error instanceof Error ? error.message : "Please try again.");
|
|
87
|
+
}
|
|
88
|
+
}, [familyName, givenName, setName]);
|
|
89
|
+
const runDelete = useCallback(async () => {
|
|
90
|
+
try {
|
|
91
|
+
const {
|
|
92
|
+
data
|
|
93
|
+
} = await deleteUserAccount();
|
|
94
|
+
if (!(data == null ? void 0 : data.deleteUserAccount)) {
|
|
95
|
+
throw new Error("The server did not confirm account deletion.");
|
|
96
|
+
}
|
|
97
|
+
await Promise.resolve(dispatch(logoutAndRedirect()));
|
|
98
|
+
} catch (error) {
|
|
99
|
+
Alert.alert("Could not delete account", error instanceof Error ? error.message : "Please try again or contact support.");
|
|
100
|
+
}
|
|
101
|
+
}, [deleteUserAccount, dispatch]);
|
|
102
|
+
const handleDeleteAccount = useCallback(() => {
|
|
103
|
+
if (busy) return;
|
|
104
|
+
Alert.alert("Delete Account", "This permanently deletes your Yantra account and the data associated with it. This cannot be undone.", [{
|
|
105
|
+
text: "Cancel",
|
|
106
|
+
style: "cancel"
|
|
107
|
+
}, {
|
|
108
|
+
text: "Delete Account",
|
|
109
|
+
style: "destructive",
|
|
110
|
+
onPress: () => {
|
|
111
|
+
Alert.alert("Are you sure?", "Your account will be deleted immediately.", [{
|
|
112
|
+
text: "Cancel",
|
|
113
|
+
style: "cancel"
|
|
114
|
+
}, {
|
|
115
|
+
text: "Delete Account",
|
|
116
|
+
style: "destructive",
|
|
117
|
+
onPress: () => void runDelete()
|
|
118
|
+
}]);
|
|
119
|
+
}
|
|
120
|
+
}]);
|
|
121
|
+
}, [busy, runDelete]);
|
|
122
|
+
return /* @__PURE__ */ jsxs(SafeAreaView, { edges: ["top", "left", "right"], style: [styles.safe, {
|
|
123
|
+
backgroundColor: isDark ? "#0f172a" : PAGE_BG
|
|
124
|
+
}], children: [
|
|
125
|
+
/* @__PURE__ */ jsxs(View, { style: [styles.header, {
|
|
126
|
+
paddingTop: insets.top > 0 ? 4 : 10
|
|
127
|
+
}], children: [
|
|
128
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: handleBack, accessibilityRole: "button", accessibilityLabel: "Go back", style: ({
|
|
129
|
+
pressed
|
|
130
|
+
}) => [styles.backCircle, {
|
|
131
|
+
backgroundColor: colors.surface
|
|
132
|
+
}, pressed && styles.pressed], children: /* @__PURE__ */ jsx(Ionicons, { name: "chevron-back", size: 22, color: colors.text }) }),
|
|
133
|
+
/* @__PURE__ */ jsx(Text, { style: [styles.headerTitle, {
|
|
134
|
+
color: colors.text
|
|
135
|
+
}], children: "Account" }),
|
|
136
|
+
/* @__PURE__ */ jsx(View, { style: styles.headerSpacer })
|
|
137
|
+
] }),
|
|
138
|
+
/* @__PURE__ */ jsxs(ScrollView, { contentContainerStyle: styles.scroll, keyboardShouldPersistTaps: "handled", children: [
|
|
139
|
+
/* @__PURE__ */ jsxs(View, { style: styles.hero, accessibilityLabel: "Profile picture", children: [
|
|
140
|
+
/* @__PURE__ */ jsx(View, { style: styles.avatarLarge, children: /* @__PURE__ */ jsx(ProfileAvatar, { uri: photoUrl, name: displayName, size: 88 }) }),
|
|
141
|
+
/* @__PURE__ */ jsx(Text, { style: [styles.heroHint, {
|
|
142
|
+
color: colors.textMuted
|
|
143
|
+
}], children: "Profile picture" })
|
|
144
|
+
] }),
|
|
145
|
+
/* @__PURE__ */ jsxs(View, { style: [styles.card, {
|
|
146
|
+
backgroundColor: colors.surface
|
|
147
|
+
}], children: [
|
|
148
|
+
/* @__PURE__ */ jsxs(Pressable, { onPress: openNameEditor, accessibilityRole: "button", accessibilityLabel: "Change name", style: ({
|
|
149
|
+
pressed
|
|
150
|
+
}) => [styles.row, {
|
|
151
|
+
backgroundColor: pressed ? colors.surfaceMuted : colors.surface
|
|
152
|
+
}], children: [
|
|
153
|
+
/* @__PURE__ */ jsx(Text, { style: [styles.rowLabel, {
|
|
154
|
+
color: colors.text
|
|
155
|
+
}], children: "Name" }),
|
|
156
|
+
/* @__PURE__ */ jsx(Text, { style: [styles.rowValue, {
|
|
157
|
+
color: colors.textMuted
|
|
158
|
+
}], numberOfLines: 1, children: displayName }),
|
|
159
|
+
/* @__PURE__ */ jsx(Ionicons, { name: "chevron-forward", size: 16, color: isDark ? "#64748b" : "#c4c4c4" })
|
|
160
|
+
] }),
|
|
161
|
+
/* @__PURE__ */ jsx(View, { style: [styles.rowLine, {
|
|
162
|
+
backgroundColor: colors.border
|
|
163
|
+
}] }),
|
|
164
|
+
/* @__PURE__ */ jsxs(View, { style: [styles.row, {
|
|
165
|
+
backgroundColor: colors.surface
|
|
166
|
+
}], children: [
|
|
167
|
+
/* @__PURE__ */ jsx(Text, { style: [styles.rowLabel, {
|
|
168
|
+
color: colors.text
|
|
169
|
+
}], children: "Email" }),
|
|
170
|
+
/* @__PURE__ */ jsx(Text, { style: [styles.rowValue, {
|
|
171
|
+
color: colors.textMuted
|
|
172
|
+
}], numberOfLines: 1, children: email || "\u2014" })
|
|
173
|
+
] }),
|
|
174
|
+
/* @__PURE__ */ jsx(View, { style: [styles.rowLine, {
|
|
175
|
+
backgroundColor: colors.border
|
|
176
|
+
}] }),
|
|
177
|
+
/* @__PURE__ */ jsxs(View, { style: [styles.row, {
|
|
178
|
+
backgroundColor: colors.surface
|
|
179
|
+
}], children: [
|
|
180
|
+
/* @__PURE__ */ jsx(Text, { style: [styles.rowLabel, {
|
|
181
|
+
color: colors.text
|
|
182
|
+
}], children: "Username" }),
|
|
183
|
+
/* @__PURE__ */ jsx(Text, { style: [styles.rowValue, {
|
|
184
|
+
color: colors.textMuted
|
|
185
|
+
}], numberOfLines: 1, children: username || "\u2014" })
|
|
186
|
+
] })
|
|
187
|
+
] }),
|
|
188
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: handleDeleteAccount, disabled: busy, accessibilityRole: "button", accessibilityLabel: "Delete Account", style: ({
|
|
189
|
+
pressed
|
|
190
|
+
}) => [styles.deleteCard, {
|
|
191
|
+
backgroundColor: pressed && !busy ? colors.surfaceMuted : colors.surface
|
|
192
|
+
}], children: deleting ? /* @__PURE__ */ jsx(ActivityIndicator, { color: "#ef4444" }) : /* @__PURE__ */ jsx(Text, { style: styles.deleteLabel, children: "Delete Account" }) })
|
|
193
|
+
] }),
|
|
194
|
+
/* @__PURE__ */ jsx(Modal, { visible: nameOpen, animationType: "fade", transparent: true, onRequestClose: () => setNameOpen(false), children: /* @__PURE__ */ jsxs(KeyboardAvoidingView, { behavior: Platform.OS === "ios" ? "padding" : void 0, style: styles.modalBackdrop, children: [
|
|
195
|
+
/* @__PURE__ */ jsx(Pressable, { style: styles.modalDismiss, onPress: () => setNameOpen(false) }),
|
|
196
|
+
/* @__PURE__ */ jsxs(View, { style: [styles.modalCard, {
|
|
197
|
+
backgroundColor: colors.surface
|
|
198
|
+
}], children: [
|
|
199
|
+
/* @__PURE__ */ jsx(Text, { style: [styles.modalTitle, {
|
|
200
|
+
color: colors.text
|
|
201
|
+
}], children: "Change full name" }),
|
|
202
|
+
/* @__PURE__ */ jsx(Text, { style: [styles.modalFieldLabel, {
|
|
203
|
+
color: colors.textMuted
|
|
204
|
+
}], children: "First name" }),
|
|
205
|
+
/* @__PURE__ */ jsx(TextInput, { value: givenName, onChangeText: setGivenName, autoCapitalize: "words", style: [styles.input, {
|
|
206
|
+
color: colors.text,
|
|
207
|
+
backgroundColor: colors.surfaceMuted,
|
|
208
|
+
borderColor: colors.border
|
|
209
|
+
}], placeholder: "First name", placeholderTextColor: colors.textMuted }),
|
|
210
|
+
/* @__PURE__ */ jsx(Text, { style: [styles.modalFieldLabel, {
|
|
211
|
+
color: colors.textMuted
|
|
212
|
+
}], children: "Last name" }),
|
|
213
|
+
/* @__PURE__ */ jsx(TextInput, { value: familyName, onChangeText: setFamilyName, autoCapitalize: "words", style: [styles.input, {
|
|
214
|
+
color: colors.text,
|
|
215
|
+
backgroundColor: colors.surfaceMuted,
|
|
216
|
+
borderColor: colors.border
|
|
217
|
+
}], placeholder: "Last name", placeholderTextColor: colors.textMuted }),
|
|
218
|
+
/* @__PURE__ */ jsxs(View, { style: styles.modalActions, children: [
|
|
219
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: () => setNameOpen(false), style: styles.modalBtnGhost, children: /* @__PURE__ */ jsx(Text, { style: styles.modalBtnGhostLabel, children: "Cancel" }) }),
|
|
220
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: () => void saveName(), disabled: savingName, style: styles.modalBtnPrimary, children: savingName ? /* @__PURE__ */ jsx(ActivityIndicator, { color: "#fff" }) : /* @__PURE__ */ jsx(Text, { style: styles.modalBtnPrimaryLabel, children: "Save" }) })
|
|
221
|
+
] })
|
|
222
|
+
] })
|
|
223
|
+
] }) })
|
|
224
|
+
] });
|
|
225
|
+
}
|
|
226
|
+
const styles = StyleSheet.create({
|
|
227
|
+
safe: {
|
|
228
|
+
flex: 1,
|
|
229
|
+
backgroundColor: PAGE_BG
|
|
230
|
+
},
|
|
231
|
+
header: {
|
|
232
|
+
flexDirection: "row",
|
|
233
|
+
alignItems: "center",
|
|
234
|
+
paddingHorizontal: 16,
|
|
235
|
+
paddingBottom: 8,
|
|
236
|
+
minHeight: 52
|
|
237
|
+
},
|
|
238
|
+
backCircle: __spreadValues({
|
|
239
|
+
width: 40,
|
|
240
|
+
height: 40,
|
|
241
|
+
borderRadius: 20,
|
|
242
|
+
backgroundColor: "#fff",
|
|
243
|
+
alignItems: "center",
|
|
244
|
+
justifyContent: "center"
|
|
245
|
+
}, mobileTokens.shadow.card),
|
|
246
|
+
headerTitle: {
|
|
247
|
+
flex: 1,
|
|
248
|
+
textAlign: "center",
|
|
249
|
+
fontSize: 17,
|
|
250
|
+
fontWeight: "600",
|
|
251
|
+
color: "#111827"
|
|
252
|
+
},
|
|
253
|
+
headerSpacer: {
|
|
254
|
+
width: 40,
|
|
255
|
+
height: 40
|
|
256
|
+
},
|
|
257
|
+
pressed: {
|
|
258
|
+
opacity: 0.72
|
|
259
|
+
},
|
|
260
|
+
scroll: {
|
|
261
|
+
paddingHorizontal: 16,
|
|
262
|
+
paddingBottom: 40
|
|
263
|
+
},
|
|
264
|
+
hero: {
|
|
265
|
+
alignItems: "center",
|
|
266
|
+
paddingTop: 12,
|
|
267
|
+
paddingBottom: 28,
|
|
268
|
+
gap: 12
|
|
269
|
+
},
|
|
270
|
+
avatarLarge: {
|
|
271
|
+
width: 88,
|
|
272
|
+
height: 88,
|
|
273
|
+
borderRadius: 44,
|
|
274
|
+
overflow: "hidden"
|
|
275
|
+
},
|
|
276
|
+
heroHint: {
|
|
277
|
+
fontSize: 14,
|
|
278
|
+
color: "#9ca3af",
|
|
279
|
+
fontWeight: "500"
|
|
280
|
+
},
|
|
281
|
+
card: {
|
|
282
|
+
backgroundColor: "#fff",
|
|
283
|
+
borderRadius: 16,
|
|
284
|
+
overflow: "hidden"
|
|
285
|
+
},
|
|
286
|
+
row: {
|
|
287
|
+
flexDirection: "row",
|
|
288
|
+
alignItems: "center",
|
|
289
|
+
minHeight: 52,
|
|
290
|
+
paddingHorizontal: 16,
|
|
291
|
+
gap: 12,
|
|
292
|
+
backgroundColor: "#fff"
|
|
293
|
+
},
|
|
294
|
+
rowPressed: {
|
|
295
|
+
backgroundColor: "#f8fafc"
|
|
296
|
+
},
|
|
297
|
+
rowLabel: {
|
|
298
|
+
fontSize: 16,
|
|
299
|
+
color: "#111827",
|
|
300
|
+
fontWeight: "400",
|
|
301
|
+
width: 96
|
|
302
|
+
},
|
|
303
|
+
rowValue: {
|
|
304
|
+
flex: 1,
|
|
305
|
+
fontSize: 16,
|
|
306
|
+
color: "#9ca3af",
|
|
307
|
+
textAlign: "right"
|
|
308
|
+
},
|
|
309
|
+
rowLine: {
|
|
310
|
+
height: StyleSheet.hairlineWidth,
|
|
311
|
+
backgroundColor: "#ececec",
|
|
312
|
+
marginLeft: 16
|
|
313
|
+
},
|
|
314
|
+
deleteCard: {
|
|
315
|
+
marginTop: 16,
|
|
316
|
+
backgroundColor: "#fff",
|
|
317
|
+
borderRadius: 16,
|
|
318
|
+
minHeight: 52,
|
|
319
|
+
paddingHorizontal: 16,
|
|
320
|
+
justifyContent: "center"
|
|
321
|
+
},
|
|
322
|
+
deleteLabel: {
|
|
323
|
+
fontSize: 16,
|
|
324
|
+
fontWeight: "500",
|
|
325
|
+
color: "#ef4444"
|
|
326
|
+
},
|
|
327
|
+
modalBackdrop: {
|
|
328
|
+
flex: 1,
|
|
329
|
+
backgroundColor: "rgba(15, 23, 42, 0.45)",
|
|
330
|
+
justifyContent: "flex-end"
|
|
331
|
+
},
|
|
332
|
+
modalDismiss: {
|
|
333
|
+
flex: 1
|
|
334
|
+
},
|
|
335
|
+
modalCard: {
|
|
336
|
+
backgroundColor: "#fff",
|
|
337
|
+
borderTopLeftRadius: 20,
|
|
338
|
+
borderTopRightRadius: 20,
|
|
339
|
+
padding: 20,
|
|
340
|
+
paddingBottom: 28,
|
|
341
|
+
gap: 8
|
|
342
|
+
},
|
|
343
|
+
modalTitle: {
|
|
344
|
+
fontSize: 18,
|
|
345
|
+
fontWeight: "700",
|
|
346
|
+
color: "#0f172a",
|
|
347
|
+
marginBottom: 8
|
|
348
|
+
},
|
|
349
|
+
modalFieldLabel: {
|
|
350
|
+
fontSize: 13,
|
|
351
|
+
fontWeight: "600",
|
|
352
|
+
color: "#64748b",
|
|
353
|
+
marginTop: 4
|
|
354
|
+
},
|
|
355
|
+
input: {
|
|
356
|
+
borderWidth: 1,
|
|
357
|
+
borderColor: "#e2e8f0",
|
|
358
|
+
borderRadius: 12,
|
|
359
|
+
paddingHorizontal: 12,
|
|
360
|
+
paddingVertical: 12,
|
|
361
|
+
fontSize: 16,
|
|
362
|
+
color: "#0f172a",
|
|
363
|
+
backgroundColor: "#f8fafc"
|
|
364
|
+
},
|
|
365
|
+
modalActions: {
|
|
366
|
+
flexDirection: "row",
|
|
367
|
+
justifyContent: "flex-end",
|
|
368
|
+
gap: 10,
|
|
369
|
+
marginTop: 16
|
|
370
|
+
},
|
|
371
|
+
modalBtnGhost: {
|
|
372
|
+
paddingHorizontal: 14,
|
|
373
|
+
paddingVertical: 10
|
|
374
|
+
},
|
|
375
|
+
modalBtnGhostLabel: {
|
|
376
|
+
fontSize: 16,
|
|
377
|
+
color: "#64748b",
|
|
378
|
+
fontWeight: "600"
|
|
379
|
+
},
|
|
380
|
+
modalBtnPrimary: {
|
|
381
|
+
backgroundColor: mobileTokens.color.primary,
|
|
382
|
+
borderRadius: 12,
|
|
383
|
+
paddingHorizontal: 18,
|
|
384
|
+
paddingVertical: 10,
|
|
385
|
+
minWidth: 88,
|
|
386
|
+
alignItems: "center"
|
|
387
|
+
},
|
|
388
|
+
modalBtnPrimaryLabel: {
|
|
389
|
+
color: "#fff",
|
|
390
|
+
fontSize: 16,
|
|
391
|
+
fontWeight: "600"
|
|
392
|
+
}
|
|
393
|
+
});export{AccountScreen as default};//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/screens/Account/index.tsx"],"sourcesContent":["/**\n * Account screen for App Store 5.1.1(v): profile details plus in-app\n * permanent account deletion. Layout follows the grouped iOS settings cards\n * (avatar, Name / Email / Username, Delete Account).\n */\nimport React, { useCallback, useMemo, useState } from 'react';\nimport {\n ActivityIndicator,\n Alert,\n KeyboardAvoidingView,\n Modal,\n Platform,\n Pressable,\n ScrollView,\n StyleSheet,\n TextInput,\n View,\n} from 'react-native';\nimport { Ionicons } from '@expo/vector-icons';\nimport { Text } from '@admin-layout/gluestack-ui-mobile';\nimport { CommonActions, useNavigation, useRoute } from '@react-navigation/native';\nimport { SafeAreaView, useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { useDispatch, useSelector } from 'react-redux';\nimport type { IUserState } from '@adminide-stack/core';\nimport { Store, logoutAndRedirect, userSelector } from '@adminide-stack/user-auth0-client';\nimport { useAccountProfileQuery, useDeleteUserAccountMutation, useSetNameMutation } from 'common/graphql';\nimport { ProfileAvatar } from '../../components/ProfileAvatar';\nimport { mobileColors, mobileTokens } from '../../theme/mobileTokens';\nimport { useAppTheme } from '../../theme/AppThemeProvider';\nimport {\n pickAuthEmail,\n pickAuthUsername,\n pickPrimaryDisplayName,\n pickProfilePhotoUrl,\n} from '../../utils/authUserDisplay';\nimport { splitDisplayName } from './splitDisplayName';\n\nconst PAGE_BG = '#f2f2f7';\n\nexport default function AccountScreen() {\n const navigation = useNavigation<any>();\n const route = useRoute<any>();\n const { isDark } = useAppTheme();\n const colors = mobileColors(isDark);\n const insets = useSafeAreaInsets();\n const dispatch = useDispatch();\n const authUser = useSelector<Store.Auth, IUserState>(userSelector);\n\n const { data: profileData } = useAccountProfileQuery({\n fetchPolicy: 'cache-and-network',\n errorPolicy: 'all',\n });\n const [setName, { loading: savingName }] = useSetNameMutation();\n const [deleteUserAccount, { loading: deleting }] = useDeleteUserAccountMutation();\n\n const [nameOpen, setNameOpen] = useState(false);\n const [givenName, setGivenName] = useState('');\n const [familyName, setFamilyName] = useState('');\n\n const orgName = useMemo(() => {\n const raw = (route?.params?.orgName as string | undefined) ?? '';\n return typeof raw === 'string' && raw.trim() ? raw.trim() : null;\n }, [route?.params?.orgName]);\n\n const displayName = useMemo(() => pickPrimaryDisplayName(authUser), [authUser]);\n const email = useMemo(() => pickAuthEmail(authUser), [authUser]);\n const username = useMemo(() => pickAuthUsername(authUser), [authUser]);\n\n const photoUrl = useMemo(\n () => pickProfilePhotoUrl(profileData?.accountProfile?.photos, authUser),\n [profileData?.accountProfile?.photos, authUser],\n );\n\n const busy = deleting;\n\n const handleBack = useCallback(() => {\n if (navigation?.canGoBack?.()) {\n navigation.goBack();\n return;\n }\n navigation?.dispatch?.(\n CommonActions.navigate({\n name: 'MainStack.Layout.Home',\n params: orgName ? { orgName } : undefined,\n }),\n );\n }, [navigation, orgName]);\n\n const openNameEditor = useCallback(() => {\n const split = splitDisplayName(displayName === 'Account' ? '' : displayName);\n setGivenName(split.givenName);\n setFamilyName(split.familyName);\n setNameOpen(true);\n }, [displayName]);\n\n const saveName = useCallback(async () => {\n try {\n await setName({\n variables: {\n givenName: givenName.trim() || undefined,\n familyName: familyName.trim() || undefined,\n },\n });\n setNameOpen(false);\n } catch (error) {\n Alert.alert('Could not update name', error instanceof Error ? error.message : 'Please try again.');\n }\n }, [familyName, givenName, setName]);\n\n const runDelete = useCallback(async () => {\n try {\n const { data } = await deleteUserAccount();\n if (!data?.deleteUserAccount) {\n throw new Error('The server did not confirm account deletion.');\n }\n await Promise.resolve(dispatch(logoutAndRedirect() as any));\n } catch (error) {\n Alert.alert(\n 'Could not delete account',\n error instanceof Error ? error.message : 'Please try again or contact support.',\n );\n }\n }, [deleteUserAccount, dispatch]);\n\n const handleDeleteAccount = useCallback(() => {\n if (busy) return;\n Alert.alert(\n 'Delete Account',\n 'This permanently deletes your Yantra account and the data associated with it. This cannot be undone.',\n [\n { text: 'Cancel', style: 'cancel' },\n {\n text: 'Delete Account',\n style: 'destructive',\n onPress: () => {\n Alert.alert('Are you sure?', 'Your account will be deleted immediately.', [\n { text: 'Cancel', style: 'cancel' },\n { text: 'Delete Account', style: 'destructive', onPress: () => void runDelete() },\n ]);\n },\n },\n ],\n );\n }, [busy, runDelete]);\n\n return (\n <SafeAreaView\n edges={['top', 'left', 'right']}\n style={[styles.safe, { backgroundColor: isDark ? '#0f172a' : PAGE_BG }]}\n >\n <View style={[styles.header, { paddingTop: insets.top > 0 ? 4 : 10 }]}>\n <Pressable\n onPress={handleBack}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Go back\"\n style={({ pressed }) => [\n styles.backCircle,\n { backgroundColor: colors.surface },\n pressed && styles.pressed,\n ]}\n >\n <Ionicons name=\"chevron-back\" size={22} color={colors.text} />\n </Pressable>\n <Text style={[styles.headerTitle, { color: colors.text }]}>Account</Text>\n <View style={styles.headerSpacer} />\n </View>\n\n <ScrollView contentContainerStyle={styles.scroll} keyboardShouldPersistTaps=\"handled\">\n <View style={styles.hero} accessibilityLabel=\"Profile picture\">\n <View style={styles.avatarLarge}>\n <ProfileAvatar uri={photoUrl} name={displayName} size={88} />\n </View>\n <Text style={[styles.heroHint, { color: colors.textMuted }]}>Profile picture</Text>\n </View>\n\n <View style={[styles.card, { backgroundColor: colors.surface }]}>\n <Pressable\n onPress={openNameEditor}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Change name\"\n style={({ pressed }) => [\n styles.row,\n { backgroundColor: pressed ? colors.surfaceMuted : colors.surface },\n ]}\n >\n <Text style={[styles.rowLabel, { color: colors.text }]}>Name</Text>\n <Text style={[styles.rowValue, { color: colors.textMuted }]} numberOfLines={1}>\n {displayName}\n </Text>\n <Ionicons name=\"chevron-forward\" size={16} color={isDark ? '#64748b' : '#c4c4c4'} />\n </Pressable>\n <View style={[styles.rowLine, { backgroundColor: colors.border }]} />\n <View style={[styles.row, { backgroundColor: colors.surface }]}>\n <Text style={[styles.rowLabel, { color: colors.text }]}>Email</Text>\n <Text style={[styles.rowValue, { color: colors.textMuted }]} numberOfLines={1}>\n {email || '—'}\n </Text>\n </View>\n <View style={[styles.rowLine, { backgroundColor: colors.border }]} />\n <View style={[styles.row, { backgroundColor: colors.surface }]}>\n <Text style={[styles.rowLabel, { color: colors.text }]}>Username</Text>\n <Text style={[styles.rowValue, { color: colors.textMuted }]} numberOfLines={1}>\n {username || '—'}\n </Text>\n </View>\n </View>\n\n <Pressable\n onPress={handleDeleteAccount}\n disabled={busy}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Delete Account\"\n style={({ pressed }) => [\n styles.deleteCard,\n { backgroundColor: pressed && !busy ? colors.surfaceMuted : colors.surface },\n ]}\n >\n {deleting ? (\n <ActivityIndicator color=\"#ef4444\" />\n ) : (\n <Text style={styles.deleteLabel}>Delete Account</Text>\n )}\n </Pressable>\n </ScrollView>\n\n <Modal visible={nameOpen} animationType=\"fade\" transparent onRequestClose={() => setNameOpen(false)}>\n <KeyboardAvoidingView\n behavior={Platform.OS === 'ios' ? 'padding' : undefined}\n style={styles.modalBackdrop}\n >\n <Pressable style={styles.modalDismiss} onPress={() => setNameOpen(false)} />\n <View style={[styles.modalCard, { backgroundColor: colors.surface }]}>\n <Text style={[styles.modalTitle, { color: colors.text }]}>Change full name</Text>\n <Text style={[styles.modalFieldLabel, { color: colors.textMuted }]}>First name</Text>\n <TextInput\n value={givenName}\n onChangeText={setGivenName}\n autoCapitalize=\"words\"\n style={[\n styles.input,\n {\n color: colors.text,\n backgroundColor: colors.surfaceMuted,\n borderColor: colors.border,\n },\n ]}\n placeholder=\"First name\"\n placeholderTextColor={colors.textMuted}\n />\n <Text style={[styles.modalFieldLabel, { color: colors.textMuted }]}>Last name</Text>\n <TextInput\n value={familyName}\n onChangeText={setFamilyName}\n autoCapitalize=\"words\"\n style={[\n styles.input,\n {\n color: colors.text,\n backgroundColor: colors.surfaceMuted,\n borderColor: colors.border,\n },\n ]}\n placeholder=\"Last name\"\n placeholderTextColor={colors.textMuted}\n />\n <View style={styles.modalActions}>\n <Pressable onPress={() => setNameOpen(false)} style={styles.modalBtnGhost}>\n <Text style={styles.modalBtnGhostLabel}>Cancel</Text>\n </Pressable>\n <Pressable\n onPress={() => void saveName()}\n disabled={savingName}\n style={styles.modalBtnPrimary}\n >\n {savingName ? (\n <ActivityIndicator color=\"#fff\" />\n ) : (\n <Text style={styles.modalBtnPrimaryLabel}>Save</Text>\n )}\n </Pressable>\n </View>\n </View>\n </KeyboardAvoidingView>\n </Modal>\n </SafeAreaView>\n );\n}\n\nconst styles = StyleSheet.create({\n safe: {\n flex: 1,\n backgroundColor: PAGE_BG,\n },\n header: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 16,\n paddingBottom: 8,\n minHeight: 52,\n },\n backCircle: {\n width: 40,\n height: 40,\n borderRadius: 20,\n backgroundColor: '#fff',\n alignItems: 'center',\n justifyContent: 'center',\n ...mobileTokens.shadow.card,\n },\n headerTitle: {\n flex: 1,\n textAlign: 'center',\n fontSize: 17,\n fontWeight: '600',\n color: '#111827',\n },\n headerSpacer: {\n width: 40,\n height: 40,\n },\n pressed: {\n opacity: 0.72,\n },\n scroll: {\n paddingHorizontal: 16,\n paddingBottom: 40,\n },\n hero: {\n alignItems: 'center',\n paddingTop: 12,\n paddingBottom: 28,\n gap: 12,\n },\n avatarLarge: {\n width: 88,\n height: 88,\n borderRadius: 44,\n overflow: 'hidden',\n },\n heroHint: {\n fontSize: 14,\n color: '#9ca3af',\n fontWeight: '500',\n },\n card: {\n backgroundColor: '#fff',\n borderRadius: 16,\n overflow: 'hidden',\n },\n row: {\n flexDirection: 'row',\n alignItems: 'center',\n minHeight: 52,\n paddingHorizontal: 16,\n gap: 12,\n backgroundColor: '#fff',\n },\n rowPressed: {\n backgroundColor: '#f8fafc',\n },\n rowLabel: {\n fontSize: 16,\n color: '#111827',\n fontWeight: '400',\n width: 96,\n },\n rowValue: {\n flex: 1,\n fontSize: 16,\n color: '#9ca3af',\n textAlign: 'right',\n },\n rowLine: {\n height: StyleSheet.hairlineWidth,\n backgroundColor: '#ececec',\n marginLeft: 16,\n },\n deleteCard: {\n marginTop: 16,\n backgroundColor: '#fff',\n borderRadius: 16,\n minHeight: 52,\n paddingHorizontal: 16,\n justifyContent: 'center',\n },\n deleteLabel: {\n fontSize: 16,\n fontWeight: '500',\n color: '#ef4444',\n },\n modalBackdrop: {\n flex: 1,\n backgroundColor: 'rgba(15, 23, 42, 0.45)',\n justifyContent: 'flex-end',\n },\n modalDismiss: {\n flex: 1,\n },\n modalCard: {\n backgroundColor: '#fff',\n borderTopLeftRadius: 20,\n borderTopRightRadius: 20,\n padding: 20,\n paddingBottom: 28,\n gap: 8,\n },\n modalTitle: {\n fontSize: 18,\n fontWeight: '700',\n color: '#0f172a',\n marginBottom: 8,\n },\n modalFieldLabel: {\n fontSize: 13,\n fontWeight: '600',\n color: '#64748b',\n marginTop: 4,\n },\n input: {\n borderWidth: 1,\n borderColor: '#e2e8f0',\n borderRadius: 12,\n paddingHorizontal: 12,\n paddingVertical: 12,\n fontSize: 16,\n color: '#0f172a',\n backgroundColor: '#f8fafc',\n },\n modalActions: {\n flexDirection: 'row',\n justifyContent: 'flex-end',\n gap: 10,\n marginTop: 16,\n },\n modalBtnGhost: {\n paddingHorizontal: 14,\n paddingVertical: 10,\n },\n modalBtnGhostLabel: {\n fontSize: 16,\n color: '#64748b',\n fontWeight: '600',\n },\n modalBtnPrimary: {\n backgroundColor: mobileTokens.color.primary,\n borderRadius: 12,\n paddingHorizontal: 18,\n paddingVertical: 10,\n minWidth: 88,\n alignItems: 'center',\n },\n modalBtnPrimaryLabel: {\n color: '#fff',\n fontSize: 16,\n fontWeight: '600',\n },\n});\n"],"names":["_a","_b"],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
function splitDisplayName(name) {
|
|
2
|
+
const parts = name.trim().split(/\s+/).filter(Boolean);
|
|
3
|
+
if (parts.length === 0) return {
|
|
4
|
+
givenName: "",
|
|
5
|
+
familyName: ""
|
|
6
|
+
};
|
|
7
|
+
if (parts.length === 1) return {
|
|
8
|
+
givenName: parts[0],
|
|
9
|
+
familyName: ""
|
|
10
|
+
};
|
|
11
|
+
return {
|
|
12
|
+
givenName: parts[0],
|
|
13
|
+
familyName: parts.slice(1).join(" ")
|
|
14
|
+
};
|
|
15
|
+
}export{splitDisplayName};//# sourceMappingURL=splitDisplayName.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"splitDisplayName.js","sources":["../../../src/screens/Account/splitDisplayName.ts"],"sourcesContent":["/** Split a display name into given / family for `setName`. */\nexport function splitDisplayName(name: string): { givenName: string; familyName: string } {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return { givenName: '', familyName: '' };\n if (parts.length === 1) return { givenName: parts[0], familyName: '' };\n return { givenName: parts[0], familyName: parts.slice(1).join(' ') };\n}\n"],"names":[],"mappings":"AACO,SAAS,iBAAiB,IAG/B,EAAA;AACA,EAAM,MAAA,KAAA,GAAQ,KAAK,IAAK,EAAA,CAAE,MAAM,KAAK,CAAA,CAAE,OAAO,OAAO,CAAA;AACrD,EAAI,IAAA,KAAA,CAAM,MAAW,KAAA,CAAA,EAAU,OAAA;AAAA,IAC7B,SAAW,EAAA,EAAA;AAAA,IACX,UAAY,EAAA;AAAA,GACd;AACA,EAAI,IAAA,KAAA,CAAM,MAAW,KAAA,CAAA,EAAU,OAAA;AAAA,IAC7B,SAAA,EAAW,MAAM,CAAC,CAAA;AAAA,IAClB,UAAY,EAAA;AAAA,GACd;AACA,EAAO,OAAA;AAAA,IACL,SAAA,EAAW,MAAM,CAAC,CAAA;AAAA,IAClB,YAAY,KAAM,CAAA,KAAA,CAAM,CAAC,CAAA,CAAE,KAAK,GAAG;AAAA,GACrC;AACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {useMemo,useEffect,useCallback,useState,useRef}from'react';import {
|
|
1
|
+
import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {useMemo,useEffect,useCallback,useState,useRef}from'react';import {useWindowDimensions,Keyboard,StyleSheet,View}from'react-native';import {getDefaultLeftItems,Box,Text,InputToolBar}from'@admin-layout/gluestack-ui-mobile';import {useSafeAreaInsets,SafeAreaView}from'react-native-safe-area-context';import {useNavigation,useRoute,CommonActions}from'@react-navigation/native';import {MessageActionBar}from'../../features/chat/MessageActionBar.js';import {ChatTranscript}from'../../features/chat/ChatTranscript.js';import {AskUserCard}from'../../features/chat/AskUserCard.js';import {pendingAskUser}from'../../features/chat/askUser.js';import {useCdecliConnection}from'../../contexts/CdecliConnectionContext.js';import {useChatStream}from'../../hooks/useChatStream.js';import {KeyboardAwareScreen,KeyboardComposerDock}from'../../components/KeyboardComposerDock.js';import {YantraBrandLoader,YANTRA_LOADER_SIZE_COMPACT}from'../../components/YantraBrandLoader.js';import ThinkingIndicator from'../../components/ThinkingIndicator.js';import {mobileTokens}from'../../theme/mobileTokens.js';import {useAppTheme}from'../../theme/AppThemeProvider.js';import DeepSearchModal from'../Home/components/DeepSearchModal.js';import {normalizeSummaryText,extractDeepSearchSources}from'../Home/deepSearchUtils.js';import {AudioRecorderPanel}from'../../features/audio-input/AudioRecorderPanel.js';import {NativeDictationBar}from'../../features/audio-input/NativeDictationBar.js';import {isNativeDictationAvailable}from'../../features/audio-input/nativeDictation.js';import {useImageAttachments}from'../../features/attachments/useImageAttachments.js';import {ComposerAttachmentBar}from'../../features/attachments/ComposerAttachmentBar.js';import {useComposerAttachMenu}from'../../features/attachments/ComposerAttachMenu.js';import {hasComposerAttachments,takeComposerAttachments}from'../../features/attachments/composerAttachmentHandoff.js';import {MicErrorBoundary}from'../../features/audio-input/MicErrorBoundary.js';import {requestMicPermission}from'../../features/audio-input/useAudioPermission.js';import {shouldRedirectToShop}from'../../features/shopping/chat/homeShoppingIntent.js';import {replaceWithShopNative,shopHandoffParams,pushShopNative}from'../../features/shopping/chat/openShopNative.js';var __defProp = Object.defineProperty;
|
|
2
2
|
var __defProps = Object.defineProperties;
|
|
3
3
|
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
4
|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
@@ -31,8 +31,9 @@ function ChatScreen() {
|
|
|
31
31
|
return raw.length > 0 ? raw : null;
|
|
32
32
|
}, [params.initialQuery]);
|
|
33
33
|
const initialAttachments = params.initialAttachments;
|
|
34
|
-
const
|
|
35
|
-
|
|
34
|
+
const {
|
|
35
|
+
isDark
|
|
36
|
+
} = useAppTheme();
|
|
36
37
|
const {
|
|
37
38
|
width: screenWidth
|
|
38
39
|
} = useWindowDimensions();
|