@adminide-stack/yantra-mobile 12.0.63 → 12.0.64-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 +15 -5
- package/lib/components/CustomDrawer.js.map +1 -1
- package/lib/components/GatewayToolbarButtonMobile.js +1 -1
- package/lib/components/GatewayToolbarButtonMobile.js.map +1 -1
- package/lib/components/ProfileAvatar.js +12 -8
- package/lib/components/ProfileAvatar.js.map +1 -1
- package/lib/compute.js +25 -5
- package/lib/compute.js.map +1 -1
- package/lib/features/apps/AppsCatalog.js +5 -4
- package/lib/features/apps/AppsCatalog.js.map +1 -1
- package/lib/hooks/useWebViewRetention.js +18 -0
- package/lib/hooks/useWebViewRetention.js.map +1 -0
- package/lib/hooks/webViewRetentionPolicy.js +8 -0
- package/lib/hooks/webViewRetentionPolicy.js.map +1 -0
- package/lib/routes.json +5 -5
- package/lib/screens/Account/index.js +2 -4
- package/lib/screens/Account/index.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/screens/WebBuilder/index.js +5 -2
- package/lib/screens/WebBuilder/index.js.map +1 -1
- package/lib/theme/mobileTokens.js +9 -9
- package/lib/theme/mobileTokens.js.map +1 -1
- package/package.json +4 -4
|
@@ -113,7 +113,7 @@ function DrawerVersionRow({
|
|
|
113
113
|
palette
|
|
114
114
|
}) {
|
|
115
115
|
const version = useMemo(() => readAppVersion(), []);
|
|
116
|
-
return /* @__PURE__ */ jsxs(View, { accessibilityRole: "text", accessibilityLabel: `Version ${version}`, style: [styles.listRow, styles.appearanceRow, {
|
|
116
|
+
return /* @__PURE__ */ jsxs(View, { accessibilityRole: "text", accessibilityLabel: `Version ${version}`, style: [styles.listRow, styles.appearanceRow, styles.versionRow, {
|
|
117
117
|
backgroundColor: palette.surface,
|
|
118
118
|
borderColor: palette.border
|
|
119
119
|
}], children: [
|
|
@@ -535,13 +535,21 @@ const styles = StyleSheet.create({
|
|
|
535
535
|
marginLeft: "auto"
|
|
536
536
|
},
|
|
537
537
|
appearanceRow: {
|
|
538
|
-
|
|
538
|
+
borderTopLeftRadius: 16,
|
|
539
|
+
borderTopRightRadius: 16,
|
|
540
|
+
borderBottomLeftRadius: 0,
|
|
541
|
+
borderBottomRightRadius: 0,
|
|
539
542
|
borderWidth: StyleSheet.hairlineWidth,
|
|
540
|
-
marginBottom: 10,
|
|
541
543
|
paddingVertical: 8,
|
|
542
544
|
paddingHorizontal: 12,
|
|
543
545
|
gap: 10
|
|
544
546
|
},
|
|
547
|
+
versionRow: {
|
|
548
|
+
borderTopLeftRadius: 0,
|
|
549
|
+
borderTopRightRadius: 0,
|
|
550
|
+
borderBottomLeftRadius: 0,
|
|
551
|
+
borderBottomRightRadius: 0
|
|
552
|
+
},
|
|
545
553
|
versionValue: {
|
|
546
554
|
marginLeft: "auto",
|
|
547
555
|
fontSize: 15,
|
|
@@ -568,7 +576,6 @@ const styles = StyleSheet.create({
|
|
|
568
576
|
},
|
|
569
577
|
footerStack: {
|
|
570
578
|
paddingHorizontal: 18,
|
|
571
|
-
paddingTop: 8,
|
|
572
579
|
paddingBottom: 12
|
|
573
580
|
},
|
|
574
581
|
logoutButton: {
|
|
@@ -577,7 +584,10 @@ const styles = StyleSheet.create({
|
|
|
577
584
|
gap: 14,
|
|
578
585
|
paddingVertical: 15,
|
|
579
586
|
paddingHorizontal: 16,
|
|
580
|
-
|
|
587
|
+
borderTopLeftRadius: 0,
|
|
588
|
+
borderTopRightRadius: 0,
|
|
589
|
+
borderBottomLeftRadius: 16,
|
|
590
|
+
borderBottomRightRadius: 16,
|
|
581
591
|
borderWidth: StyleSheet.hairlineWidth
|
|
582
592
|
},
|
|
583
593
|
logoutLabel: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomDrawer.js","sources":["../../src/components/CustomDrawer.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { ActivityIndicator, Image, Pressable, StyleSheet, View } from 'react-native';\nimport { DrawerContentScrollView } from '@react-navigation/drawer';\nimport { Ionicons } from '@expo/vector-icons';\nimport { Text } from '@admin-layout/gluestack-ui-mobile';\nimport { CommonActions, useRoute } from '@react-navigation/native';\nimport { afterNativeModalClose } from '../utils/drawerNavigation';\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 } from 'common/graphql';\nimport { mobileColors, mobileTokens } from '../theme/mobileTokens';\nimport { useAppTheme } from '../theme/AppThemeProvider';\n// Shared with the chat surface so the drawer and a message header can never\n// show two different names for the same account.\nimport { pickAuthEmail, pickPrimaryDisplayName, pickProfilePhotoUrl } from '../utils/authUserDisplay';\nimport { ProfileAvatar } from './ProfileAvatar';\n\nconst APP_ICON = require('../assets/icon.png');\n\nfunction drawerPalette(isDark: boolean) {\n const color = mobileColors(isDark);\n return {\n bg: color.bg,\n surface: color.surface,\n border: color.border,\n text: color.text,\n textSecondary: color.textMuted,\n icon: isDark ? '#cbd5e1' : '#334155',\n rowHighlight: isDark ? 'rgba(148,163,184,0.12)' : color.primarySoft,\n focusedText: isDark ? '#f8fafc' : color.primary,\n chevron: isDark ? '#64748b' : '#c4c4c4',\n surfaceMuted: color.surfaceMuted,\n primaryBorder: color.primaryBorder,\n };\n}\n\nfunction routeLabel(descriptor: any, route: any): string {\n const optLabel = descriptor?.options?.drawerLabel;\n if (typeof optLabel === 'string' && optLabel.trim()) return optLabel;\n const title = descriptor?.options?.title;\n if (typeof title === 'string' && title.trim()) return title;\n const tail =\n String(route?.name ?? '')\n .split('.')\n .pop() || 'Route';\n return tail === 'Chat' ? 'Chat' : tail;\n}\n\nfunction isVisibleDrawerRoute(route: any, descriptor: any): boolean {\n const routeName = String(route?.name ?? '');\n if (routeName.includes('WebBuilder') || routeName.toLowerCase().includes('webbuilder')) {\n return false;\n }\n if (\n /ChatHistory/i.test(routeName) ||\n /CanvasNative/i.test(routeName) ||\n /(^|\\.)Apps$/i.test(routeName) ||\n /(^|\\.)Account$/i.test(routeName)\n ) {\n return false;\n }\n const itemStyle = descriptor?.options?.drawerItemStyle as any;\n if (itemStyle && itemStyle.display === 'none') return false;\n if (descriptor?.options?.hideInMenu === true) return false;\n return true;\n}\n\nfunction pickFocusedOrgName(state: any, route: any): string | null {\n const candidates = [route?.params?.orgName, state?.routes?.[state?.index]?.params?.orgName];\n for (const raw of candidates) {\n if (typeof raw === 'string' && raw.trim()) return raw.trim();\n }\n const focused = state?.routes?.[state?.index];\n const nestedState = focused?.state;\n if (nestedState?.routes && typeof nestedState.index === 'number') {\n const nested = nestedState.routes[nestedState.index]?.params?.orgName;\n if (typeof nested === 'string' && nested.trim()) return nested.trim();\n }\n return null;\n}\n\nfunction DrawerListRow({\n icon,\n label,\n focused,\n onPress,\n showDivider,\n iconNode,\n palette,\n}: {\n icon?: React.ComponentProps<typeof Ionicons>['name'];\n label: string;\n focused?: boolean;\n onPress: () => void;\n showDivider?: boolean;\n iconNode?: React.ReactNode;\n palette: ReturnType<typeof drawerPalette>;\n}) {\n return (\n <>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ selected: Boolean(focused) }}\n onPress={onPress}\n style={({ pressed }) => [\n styles.listRow,\n { backgroundColor: focused || pressed ? palette.rowHighlight : palette.surface },\n ]}\n >\n {iconNode ?? (\n <Ionicons\n name={icon ?? 'ellipse-outline'}\n size={22}\n color={focused ? palette.focusedText : palette.icon}\n />\n )}\n <Text\n style={[\n styles.listLabel,\n { color: focused ? palette.focusedText : palette.text },\n focused && styles.listLabelFocused,\n ]}\n >\n {label}\n </Text>\n <Ionicons name=\"chevron-forward\" size={16} color={palette.chevron} style={styles.navChevron} />\n </Pressable>\n {showDivider ? <View style={[styles.rowDivider, { backgroundColor: palette.border }]} /> : null}\n </>\n );\n}\n\nfunction readAppVersion(): string {\n try {\n const Constants = require('expo-constants').default as {\n expoConfig?: { version?: string };\n nativeApplicationVersion?: string | null;\n manifest?: { version?: string };\n };\n const version =\n Constants?.expoConfig?.version || Constants?.nativeApplicationVersion || Constants?.manifest?.version;\n if (typeof version === 'string' && version.trim()) return version.trim();\n } catch {\n // expo-constants unavailable in this bundle\n }\n return '1.0.0';\n}\n\nfunction DrawerVersionRow({ palette }: { palette: ReturnType<typeof drawerPalette> }) {\n const version = useMemo(() => readAppVersion(), []);\n return (\n <View\n accessibilityRole=\"text\"\n accessibilityLabel={`Version ${version}`}\n style={[\n styles.listRow,\n styles.appearanceRow,\n { backgroundColor: palette.surface, borderColor: palette.border },\n ]}\n >\n <Ionicons name=\"information-circle-outline\" size={20} color={palette.icon} />\n <Text style={[styles.listLabel, { color: palette.text }]}>Version</Text>\n <Text style={[styles.versionValue, { color: palette.textSecondary }]}>{version}</Text>\n </View>\n );\n}\n\nfunction DrawerAppearanceRow({\n isDark,\n onChange,\n palette,\n}: {\n isDark: boolean;\n onChange: (dark: boolean) => void;\n palette: ReturnType<typeof drawerPalette>;\n}) {\n return (\n <View\n accessibilityRole=\"adjustable\"\n accessibilityLabel=\"Appearance\"\n style={[\n styles.listRow,\n styles.appearanceRow,\n { backgroundColor: palette.surface, borderColor: palette.border },\n ]}\n >\n <Ionicons name=\"contrast-outline\" size={20} color={palette.icon} />\n <Text style={[styles.listLabel, { color: palette.text }]}>Appearance</Text>\n <View\n style={[\n styles.appearanceToggle,\n { backgroundColor: palette.surfaceMuted, borderColor: palette.border },\n ]}\n >\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Light\"\n accessibilityState={{ selected: !isDark }}\n onPress={() => onChange(false)}\n style={[\n styles.appearanceToggleBtn,\n !isDark && {\n backgroundColor: palette.rowHighlight,\n borderColor: palette.primaryBorder,\n },\n ]}\n hitSlop={4}\n >\n <Ionicons\n name={!isDark ? 'sunny' : 'sunny-outline'}\n size={16}\n color={!isDark ? palette.focusedText : palette.icon}\n />\n </Pressable>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Dark\"\n accessibilityState={{ selected: isDark }}\n onPress={() => onChange(true)}\n style={[\n styles.appearanceToggleBtn,\n isDark && {\n backgroundColor: palette.rowHighlight,\n borderColor: palette.primaryBorder,\n },\n ]}\n hitSlop={4}\n >\n <Ionicons\n name={isDark ? 'moon' : 'moon-outline'}\n size={16}\n color={isDark ? palette.focusedText : palette.icon}\n />\n </Pressable>\n </View>\n </View>\n );\n}\n\nfunction DrawerProfileHeader({\n isAuthenticated,\n onPress,\n palette,\n}: {\n isAuthenticated: boolean;\n onPress?: () => void;\n palette: ReturnType<typeof drawerPalette>;\n}) {\n const authUser = useSelector<Store.Auth, IUserState>(userSelector);\n const { data: profileData } = useAccountProfileQuery({\n fetchPolicy: 'cache-first',\n errorPolicy: 'all',\n skip: !isAuthenticated,\n });\n\n const photoUrl = useMemo(\n () => pickProfilePhotoUrl(profileData?.accountProfile?.photos, authUser),\n [profileData?.accountProfile?.photos, authUser],\n );\n\n const displayName = useMemo(() => pickPrimaryDisplayName(authUser), [authUser]);\n const email = useMemo(() => pickAuthEmail(authUser), [authUser]);\n\n if (!isAuthenticated) return null;\n\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Account\"\n onPress={onPress}\n style={({ pressed }) => [\n styles.profileCard,\n { backgroundColor: palette.surface, borderColor: palette.border },\n pressed && { backgroundColor: palette.rowHighlight },\n ]}\n >\n <View style={styles.profileCardInner}>\n <ProfileAvatar uri={photoUrl} name={displayName} size={44} />\n <View style={styles.profileMeta}>\n <Text style={[styles.profileName, { color: palette.text }]} numberOfLines={1}>\n {displayName}\n </Text>\n {email ? (\n <Text style={[styles.profileEmail, { color: palette.textSecondary }]} numberOfLines={1}>\n {email}\n </Text>\n ) : null}\n </View>\n <Ionicons name=\"chevron-forward\" size={18} color={palette.chevron} />\n </View>\n </Pressable>\n );\n}\n\nexport default function CustomDrawer(props: any) {\n const { state, descriptors, navigation } = props;\n /** Mirrors layout settings from `navigation.js` (`defaultHeaderProps.logout`). */\n const showLogout = props.logout !== false;\n const dispatch = useDispatch();\n const authUser = useSelector<Store.Auth, IUserState>(userSelector);\n const route = useRoute<any>();\n const insets = useSafeAreaInsets();\n const [isLoggingOut, setIsLoggingOut] = useState(false);\n const { isDark, setDarkMode } = useAppTheme();\n const palette = useMemo(() => drawerPalette(isDark), [isDark]);\n const orgName = useMemo(() => pickFocusedOrgName(state, route), [state, route]);\n const focusedRouteName = String(state?.routes?.[state?.index]?.name ?? '');\n const historyFocused = /ChatHistory/i.test(focusedRouteName);\n const appsFocused = /(^|\\.)Apps$/i.test(focusedRouteName);\n const billingFocused = /(^|\\.)Billing/i.test(focusedRouteName);\n const isAuthenticated = useMemo(() => {\n if (!authUser) return false;\n const email = pickAuthEmail(authUser);\n const name = pickPrimaryDisplayName(authUser);\n return Boolean(email || name !== 'Account');\n }, [authUser]);\n const visibleRoutes = (state?.routes ?? []).filter((r: any) => isVisibleDrawerRoute(r, descriptors?.[r.key]));\n\n const scrollContentStyle = useMemo(\n () => [\n styles.contentWrap,\n {\n // Drawer scroll views often don't reserve status-bar space reliably — combine inset + breathing room.\n paddingTop: Math.max(insets.top, 14) + 10,\n },\n ],\n [insets.top],\n );\n\n const handleLogout = useCallback(async () => {\n if (isLoggingOut) return;\n setIsLoggingOut(true);\n try {\n await Promise.resolve(dispatch(logoutAndRedirect() as any));\n navigation?.closeDrawer?.();\n } catch (error) {\n console.error('[CustomDrawer] Logout failed:', error);\n } finally {\n setIsLoggingOut(false);\n }\n }, [dispatch, isLoggingOut, navigation]);\n\n const handleLogin = useCallback(() => {\n navigation?.closeDrawer?.();\n try {\n navigation?.navigate?.('MainStack.Login');\n } catch {\n navigation?.getParent?.()?.navigate?.('MainStack', { screen: 'MainStack.Login' });\n }\n }, [navigation]);\n\n const handleOpenApps = useCallback(() => {\n if (isLoggingOut) return;\n navigation?.closeDrawer?.();\n afterNativeModalClose(() => {\n navigation?.dispatch?.(\n CommonActions.navigate({\n name: 'MainStack.Apps',\n params: orgName ? { orgName } : undefined,\n }),\n );\n });\n }, [isLoggingOut, navigation, orgName]);\n\n const handleOpenHistory = useCallback(() => {\n if (isLoggingOut) return;\n navigation?.closeDrawer?.();\n afterNativeModalClose(() => {\n navigation?.dispatch?.(\n CommonActions.navigate({\n name: 'MainStack.ChatHistory',\n params: orgName ? { orgName } : undefined,\n }),\n );\n });\n }, [isLoggingOut, navigation, orgName]);\n\n const handleOpenBilling = useCallback(() => {\n if (isLoggingOut) return;\n navigation?.closeDrawer?.();\n afterNativeModalClose(() => {\n navigation?.navigate?.('MainStack.Billing', orgName ? { orgName } : undefined);\n });\n }, [isLoggingOut, navigation, orgName]);\n\n const handleOpenAccount = useCallback(() => {\n if (isLoggingOut) return;\n navigation?.closeDrawer?.();\n afterNativeModalClose(() => {\n navigation?.navigate?.('MainStack.Account', orgName ? { orgName } : undefined);\n });\n }, [isLoggingOut, navigation, orgName]);\n\n useEffect(() => {\n // Prevent stale \"Logging out...\" state if the user logs back in and returns to the drawer.\n if (authUser) {\n setIsLoggingOut(false);\n }\n }, [authUser]);\n\n return (\n <SafeAreaView style={[styles.safeArea, { backgroundColor: palette.bg }]} edges={['left', 'bottom']}>\n <View style={styles.drawerColumn}>\n <DrawerContentScrollView\n {...props}\n style={[styles.scroll, { backgroundColor: palette.bg }]}\n contentContainerStyle={scrollContentStyle}\n >\n <View style={[styles.brandBlock, { borderBottomColor: palette.border }]}>\n <View style={styles.brandStrip}>\n <Image source={APP_ICON} style={styles.brandIconSmall} resizeMode=\"contain\" />\n <Text style={[styles.brandStripTitle, { color: palette.text }]}>Yantra</Text>\n </View>\n </View>\n\n <DrawerProfileHeader\n isAuthenticated={isAuthenticated}\n onPress={handleOpenAccount}\n palette={palette}\n />\n\n {isAuthenticated ? (\n <View\n style={[styles.menuCard, { backgroundColor: palette.surface, borderColor: palette.border }]}\n >\n {visibleRoutes.map((r: any) => {\n const descriptor = descriptors?.[r.key];\n const focused = state?.index === state?.routes?.findIndex((x: any) => x.key === r.key);\n const label = routeLabel(descriptor, r);\n const iconFn = descriptor?.options?.drawerIcon;\n const fallbackIcon =\n label.trim().toLowerCase() === 'chat' ? 'chatbubbles-outline' : 'home-outline';\n\n return (\n <DrawerListRow\n key={r.key}\n label={label}\n focused={focused}\n showDivider\n icon={fallbackIcon}\n palette={palette}\n iconNode={\n typeof iconFn === 'function'\n ? iconFn({\n color: focused ? palette.focusedText : palette.icon,\n size: 22,\n focused,\n })\n : undefined\n }\n onPress={() => {\n if (isLoggingOut) return;\n navigation.navigate(r.name, orgName ? { orgName } : undefined);\n }}\n />\n );\n })}\n <DrawerListRow\n icon=\"apps-outline\"\n label=\"Apps\"\n focused={appsFocused}\n onPress={handleOpenApps}\n showDivider\n palette={palette}\n />\n <DrawerListRow\n icon=\"time-outline\"\n label=\"History\"\n focused={historyFocused}\n onPress={handleOpenHistory}\n showDivider\n palette={palette}\n />\n <DrawerListRow\n icon=\"card-outline\"\n label=\"Billing\"\n focused={billingFocused}\n onPress={handleOpenBilling}\n palette={palette}\n />\n </View>\n ) : null}\n {!isAuthenticated ? (\n <View\n style={[\n styles.loggedOutStateCard,\n { backgroundColor: palette.surface, borderColor: palette.border },\n ]}\n >\n <View style={styles.loggedOutStateIconWrap}>\n <Ionicons\n name=\"shield-checkmark-outline\"\n size={22}\n color={mobileTokens.color.primary}\n />\n </View>\n <Text style={[styles.loggedOutStateTitle, { color: palette.text }]}>\n Sign in to continue\n </Text>\n <Text style={[styles.loggedOutStateSubtitle, { color: palette.textSecondary }]}>\n Access your chat history, profile, and personalized workspace after login.\n </Text>\n <Pressable\n onPress={handleLogin}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Log in\"\n style={({ pressed }) => [\n styles.loggedOutStateButton,\n pressed && styles.loggedOutStateButtonPressed,\n ]}\n >\n <Ionicons name=\"log-in-outline\" size={18} color={mobileTokens.color.surface} />\n <Text style={styles.loggedOutStateButtonLabel}>Log in</Text>\n </Pressable>\n </View>\n ) : null}\n </DrawerContentScrollView>\n\n <View style={[styles.footerStack, { backgroundColor: palette.bg }]}>\n <DrawerAppearanceRow isDark={isDark} onChange={setDarkMode} palette={palette} />\n <DrawerVersionRow palette={palette} />\n {showLogout && isAuthenticated ? (\n <Pressable\n onPress={handleLogout}\n disabled={isLoggingOut}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Log out\"\n style={({ pressed }) => [\n styles.logoutButton,\n {\n backgroundColor: pressed && !isLoggingOut ? palette.rowHighlight : palette.surface,\n borderColor: palette.border,\n },\n ]}\n >\n {isLoggingOut ? (\n <ActivityIndicator size=\"small\" color={palette.icon} />\n ) : (\n <Ionicons name=\"log-out-outline\" size={22} color={palette.icon} />\n )}\n <Text style={[styles.logoutLabel, { color: palette.text }]}>\n {isLoggingOut ? 'Logging out...' : 'Log out'}\n </Text>\n </Pressable>\n ) : showLogout ? (\n <Text style={[styles.loggedOutFooterHint, { color: palette.textSecondary }]}>\n You are currently signed out\n </Text>\n ) : null}\n </View>\n </View>\n </SafeAreaView>\n );\n}\n\nconst styles = StyleSheet.create({\n safeArea: {\n flex: 1,\n },\n drawerColumn: {\n flex: 1,\n },\n scroll: {\n flex: 1,\n },\n contentWrap: {\n flexGrow: 1,\n paddingBottom: 24,\n paddingHorizontal: 18,\n },\n brandBlock: {\n marginBottom: 16,\n paddingBottom: 14,\n borderBottomWidth: StyleSheet.hairlineWidth,\n },\n brandStrip: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 12,\n },\n brandIconSmall: {\n width: 36,\n height: 36,\n borderRadius: 10,\n },\n brandStripTitle: {\n fontSize: 22,\n fontWeight: '800',\n letterSpacing: -0.6,\n },\n profileCard: {\n borderRadius: 20,\n overflow: 'hidden',\n marginBottom: 20,\n borderWidth: StyleSheet.hairlineWidth,\n },\n profileCardInner: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: 14,\n paddingLeft: 14,\n paddingRight: 12,\n gap: 12,\n },\n profileMeta: {\n flex: 1,\n minWidth: 0,\n justifyContent: 'center',\n gap: 2,\n },\n profileName: {\n fontSize: 16,\n fontWeight: '600',\n letterSpacing: -0.2,\n lineHeight: 20,\n },\n profileEmail: {\n fontSize: 13,\n fontWeight: '400',\n lineHeight: 17,\n },\n menuCard: {\n borderRadius: 16,\n overflow: 'hidden',\n borderWidth: StyleSheet.hairlineWidth,\n },\n listRow: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: 15,\n paddingHorizontal: 16,\n gap: 14,\n },\n listLabel: {\n flex: 1,\n fontSize: 16,\n fontWeight: '400',\n },\n listLabelFocused: {\n fontWeight: '600',\n },\n rowDivider: {\n height: StyleSheet.hairlineWidth,\n marginLeft: 52,\n },\n loggedOutStateCard: {\n marginTop: 18,\n borderRadius: 14,\n paddingHorizontal: 16,\n paddingVertical: 18,\n borderWidth: StyleSheet.hairlineWidth,\n alignItems: 'center',\n gap: 10,\n },\n loggedOutStateIconWrap: {\n width: 44,\n height: 44,\n borderRadius: 14,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: mobileTokens.color.primarySoft,\n borderWidth: 1,\n borderColor: mobileTokens.color.primaryBorder,\n },\n loggedOutStateTitle: {\n fontSize: 17,\n fontWeight: '700',\n letterSpacing: -0.2,\n },\n loggedOutStateSubtitle: {\n fontSize: 13,\n lineHeight: 19,\n textAlign: 'center',\n paddingHorizontal: 4,\n },\n loggedOutStateButton: {\n marginTop: 4,\n borderRadius: 12,\n backgroundColor: mobileTokens.color.primary,\n paddingHorizontal: 16,\n paddingVertical: 10,\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n },\n loggedOutStateButtonPressed: {\n opacity: 0.88,\n },\n loggedOutStateButtonLabel: {\n fontSize: 14,\n fontWeight: '600',\n color: mobileTokens.color.surface,\n },\n navChevron: {\n marginLeft: 'auto',\n },\n appearanceRow: {\n borderRadius: 16,\n borderWidth: StyleSheet.hairlineWidth,\n marginBottom: 10,\n paddingVertical: 8,\n paddingHorizontal: 12,\n gap: 10,\n },\n versionValue: {\n marginLeft: 'auto',\n fontSize: 15,\n fontWeight: '500',\n fontVariant: ['tabular-nums'],\n },\n appearanceToggle: {\n flexDirection: 'row',\n alignItems: 'center',\n marginLeft: 'auto',\n borderRadius: 8,\n borderWidth: StyleSheet.hairlineWidth,\n padding: 2,\n gap: 1,\n },\n appearanceToggleBtn: {\n width: 28,\n height: 28,\n borderRadius: 6,\n alignItems: 'center',\n justifyContent: 'center',\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: 'transparent',\n },\n footerStack: {\n paddingHorizontal: 18,\n paddingTop: 8,\n paddingBottom: 12,\n },\n logoutButton: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 14,\n paddingVertical: 15,\n paddingHorizontal: 16,\n borderRadius: 16,\n borderWidth: StyleSheet.hairlineWidth,\n },\n logoutLabel: {\n fontSize: 16,\n fontWeight: '400',\n },\n loggedOutFooterHint: {\n fontSize: 12,\n textAlign: 'center',\n paddingVertical: 8,\n },\n});\n"],"names":["_a","_b","_c","_d"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CustomDrawer.js","sources":["../../src/components/CustomDrawer.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { ActivityIndicator, Image, Pressable, StyleSheet, View } from 'react-native';\nimport { DrawerContentScrollView } from '@react-navigation/drawer';\nimport { Ionicons } from '@expo/vector-icons';\nimport { Text } from '@admin-layout/gluestack-ui-mobile';\nimport { CommonActions, useRoute } from '@react-navigation/native';\nimport { afterNativeModalClose } from '../utils/drawerNavigation';\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 } from 'common/graphql';\nimport { mobileColors, mobileTokens } from '../theme/mobileTokens';\nimport { useAppTheme } from '../theme/AppThemeProvider';\n// Shared with the chat surface so the drawer and a message header can never\n// show two different names for the same account.\nimport { pickAuthEmail, pickPrimaryDisplayName, pickProfilePhotoUrl } from '../utils/authUserDisplay';\nimport { ProfileAvatar } from './ProfileAvatar';\n\nconst APP_ICON = require('../assets/icon.png');\n\nfunction drawerPalette(isDark: boolean) {\n const color = mobileColors(isDark);\n return {\n bg: color.bg,\n surface: color.surface,\n border: color.border,\n text: color.text,\n textSecondary: color.textMuted,\n icon: isDark ? '#cbd5e1' : '#334155',\n rowHighlight: isDark ? 'rgba(148,163,184,0.12)' : color.primarySoft,\n focusedText: isDark ? '#f8fafc' : color.primary,\n chevron: isDark ? '#64748b' : '#c4c4c4',\n surfaceMuted: color.surfaceMuted,\n primaryBorder: color.primaryBorder,\n };\n}\n\nfunction routeLabel(descriptor: any, route: any): string {\n const optLabel = descriptor?.options?.drawerLabel;\n if (typeof optLabel === 'string' && optLabel.trim()) return optLabel;\n const title = descriptor?.options?.title;\n if (typeof title === 'string' && title.trim()) return title;\n const tail =\n String(route?.name ?? '')\n .split('.')\n .pop() || 'Route';\n return tail === 'Chat' ? 'Chat' : tail;\n}\n\nfunction isVisibleDrawerRoute(route: any, descriptor: any): boolean {\n const routeName = String(route?.name ?? '');\n if (routeName.includes('WebBuilder') || routeName.toLowerCase().includes('webbuilder')) {\n return false;\n }\n if (\n /ChatHistory/i.test(routeName) ||\n /CanvasNative/i.test(routeName) ||\n /(^|\\.)Apps$/i.test(routeName) ||\n /(^|\\.)Account$/i.test(routeName)\n ) {\n return false;\n }\n const itemStyle = descriptor?.options?.drawerItemStyle as any;\n if (itemStyle && itemStyle.display === 'none') return false;\n if (descriptor?.options?.hideInMenu === true) return false;\n return true;\n}\n\nfunction pickFocusedOrgName(state: any, route: any): string | null {\n const candidates = [route?.params?.orgName, state?.routes?.[state?.index]?.params?.orgName];\n for (const raw of candidates) {\n if (typeof raw === 'string' && raw.trim()) return raw.trim();\n }\n const focused = state?.routes?.[state?.index];\n const nestedState = focused?.state;\n if (nestedState?.routes && typeof nestedState.index === 'number') {\n const nested = nestedState.routes[nestedState.index]?.params?.orgName;\n if (typeof nested === 'string' && nested.trim()) return nested.trim();\n }\n return null;\n}\n\nfunction DrawerListRow({\n icon,\n label,\n focused,\n onPress,\n showDivider,\n iconNode,\n palette,\n}: {\n icon?: React.ComponentProps<typeof Ionicons>['name'];\n label: string;\n focused?: boolean;\n onPress: () => void;\n showDivider?: boolean;\n iconNode?: React.ReactNode;\n palette: ReturnType<typeof drawerPalette>;\n}) {\n return (\n <>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ selected: Boolean(focused) }}\n onPress={onPress}\n style={({ pressed }) => [\n styles.listRow,\n { backgroundColor: focused || pressed ? palette.rowHighlight : palette.surface },\n ]}\n >\n {iconNode ?? (\n <Ionicons\n name={icon ?? 'ellipse-outline'}\n size={22}\n color={focused ? palette.focusedText : palette.icon}\n />\n )}\n <Text\n style={[\n styles.listLabel,\n { color: focused ? palette.focusedText : palette.text },\n focused && styles.listLabelFocused,\n ]}\n >\n {label}\n </Text>\n <Ionicons name=\"chevron-forward\" size={16} color={palette.chevron} style={styles.navChevron} />\n </Pressable>\n {showDivider ? <View style={[styles.rowDivider, { backgroundColor: palette.border }]} /> : null}\n </>\n );\n}\n\nfunction readAppVersion(): string {\n try {\n const Constants = require('expo-constants').default as {\n expoConfig?: { version?: string };\n nativeApplicationVersion?: string | null;\n manifest?: { version?: string };\n };\n const version =\n Constants?.expoConfig?.version || Constants?.nativeApplicationVersion || Constants?.manifest?.version;\n if (typeof version === 'string' && version.trim()) return version.trim();\n } catch {\n // expo-constants unavailable in this bundle\n }\n return '1.0.0';\n}\n\nfunction DrawerVersionRow({ palette }: { palette: ReturnType<typeof drawerPalette> }) {\n const version = useMemo(() => readAppVersion(), []);\n return (\n <View\n accessibilityRole=\"text\"\n accessibilityLabel={`Version ${version}`}\n style={[\n styles.listRow,\n styles.appearanceRow,\n styles.versionRow,\n { backgroundColor: palette.surface, borderColor: palette.border },\n ]}\n >\n <Ionicons name=\"information-circle-outline\" size={20} color={palette.icon} />\n <Text style={[styles.listLabel, { color: palette.text }]}>Version</Text>\n <Text style={[styles.versionValue, { color: palette.textSecondary }]}>{version}</Text>\n </View>\n );\n}\n\nfunction DrawerAppearanceRow({\n isDark,\n onChange,\n palette,\n}: {\n isDark: boolean;\n onChange: (dark: boolean) => void;\n palette: ReturnType<typeof drawerPalette>;\n}) {\n return (\n <View\n accessibilityRole=\"adjustable\"\n accessibilityLabel=\"Appearance\"\n style={[\n styles.listRow,\n styles.appearanceRow,\n { backgroundColor: palette.surface, borderColor: palette.border },\n ]}\n >\n <Ionicons name=\"contrast-outline\" size={20} color={palette.icon} />\n <Text style={[styles.listLabel, { color: palette.text }]}>Appearance</Text>\n <View\n style={[\n styles.appearanceToggle,\n { backgroundColor: palette.surfaceMuted, borderColor: palette.border },\n ]}\n >\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Light\"\n accessibilityState={{ selected: !isDark }}\n onPress={() => onChange(false)}\n style={[\n styles.appearanceToggleBtn,\n !isDark && {\n backgroundColor: palette.rowHighlight,\n borderColor: palette.primaryBorder,\n },\n ]}\n hitSlop={4}\n >\n <Ionicons\n name={!isDark ? 'sunny' : 'sunny-outline'}\n size={16}\n color={!isDark ? palette.focusedText : palette.icon}\n />\n </Pressable>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Dark\"\n accessibilityState={{ selected: isDark }}\n onPress={() => onChange(true)}\n style={[\n styles.appearanceToggleBtn,\n isDark && {\n backgroundColor: palette.rowHighlight,\n borderColor: palette.primaryBorder,\n },\n ]}\n hitSlop={4}\n >\n <Ionicons\n name={isDark ? 'moon' : 'moon-outline'}\n size={16}\n color={isDark ? palette.focusedText : palette.icon}\n />\n </Pressable>\n </View>\n </View>\n );\n}\n\nfunction DrawerProfileHeader({\n isAuthenticated,\n onPress,\n palette,\n}: {\n isAuthenticated: boolean;\n onPress?: () => void;\n palette: ReturnType<typeof drawerPalette>;\n}) {\n const authUser = useSelector<Store.Auth, IUserState>(userSelector);\n const { data: profileData } = useAccountProfileQuery({\n fetchPolicy: 'cache-first',\n errorPolicy: 'all',\n skip: !isAuthenticated,\n });\n\n const photoUrl = useMemo(\n () => pickProfilePhotoUrl(profileData?.accountProfile?.photos, authUser),\n [profileData?.accountProfile?.photos, authUser],\n );\n\n const displayName = useMemo(() => pickPrimaryDisplayName(authUser), [authUser]);\n const email = useMemo(() => pickAuthEmail(authUser), [authUser]);\n\n if (!isAuthenticated) return null;\n\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Account\"\n onPress={onPress}\n style={({ pressed }) => [\n styles.profileCard,\n { backgroundColor: palette.surface, borderColor: palette.border },\n pressed && { backgroundColor: palette.rowHighlight },\n ]}\n >\n <View style={styles.profileCardInner}>\n <ProfileAvatar uri={photoUrl} name={displayName} size={44} />\n <View style={styles.profileMeta}>\n <Text style={[styles.profileName, { color: palette.text }]} numberOfLines={1}>\n {displayName}\n </Text>\n {email ? (\n <Text style={[styles.profileEmail, { color: palette.textSecondary }]} numberOfLines={1}>\n {email}\n </Text>\n ) : null}\n </View>\n <Ionicons name=\"chevron-forward\" size={18} color={palette.chevron} />\n </View>\n </Pressable>\n );\n}\n\nexport default function CustomDrawer(props: any) {\n const { state, descriptors, navigation } = props;\n /** Mirrors layout settings from `navigation.js` (`defaultHeaderProps.logout`). */\n const showLogout = props.logout !== false;\n const dispatch = useDispatch();\n const authUser = useSelector<Store.Auth, IUserState>(userSelector);\n const route = useRoute<any>();\n const insets = useSafeAreaInsets();\n const [isLoggingOut, setIsLoggingOut] = useState(false);\n const { isDark, setDarkMode } = useAppTheme();\n const palette = useMemo(() => drawerPalette(isDark), [isDark]);\n const orgName = useMemo(() => pickFocusedOrgName(state, route), [state, route]);\n const focusedRouteName = String(state?.routes?.[state?.index]?.name ?? '');\n const historyFocused = /ChatHistory/i.test(focusedRouteName);\n const appsFocused = /(^|\\.)Apps$/i.test(focusedRouteName);\n const billingFocused = /(^|\\.)Billing/i.test(focusedRouteName);\n const isAuthenticated = useMemo(() => {\n if (!authUser) return false;\n const email = pickAuthEmail(authUser);\n const name = pickPrimaryDisplayName(authUser);\n return Boolean(email || name !== 'Account');\n }, [authUser]);\n const visibleRoutes = (state?.routes ?? []).filter((r: any) => isVisibleDrawerRoute(r, descriptors?.[r.key]));\n\n const scrollContentStyle = useMemo(\n () => [\n styles.contentWrap,\n {\n // Drawer scroll views often don't reserve status-bar space reliably — combine inset + breathing room.\n paddingTop: Math.max(insets.top, 14) + 10,\n },\n ],\n [insets.top],\n );\n\n const handleLogout = useCallback(async () => {\n if (isLoggingOut) return;\n setIsLoggingOut(true);\n try {\n await Promise.resolve(dispatch(logoutAndRedirect() as any));\n navigation?.closeDrawer?.();\n } catch (error) {\n console.error('[CustomDrawer] Logout failed:', error);\n } finally {\n setIsLoggingOut(false);\n }\n }, [dispatch, isLoggingOut, navigation]);\n\n const handleLogin = useCallback(() => {\n navigation?.closeDrawer?.();\n try {\n navigation?.navigate?.('MainStack.Login');\n } catch {\n navigation?.getParent?.()?.navigate?.('MainStack', { screen: 'MainStack.Login' });\n }\n }, [navigation]);\n\n const handleOpenApps = useCallback(() => {\n if (isLoggingOut) return;\n navigation?.closeDrawer?.();\n afterNativeModalClose(() => {\n navigation?.dispatch?.(\n CommonActions.navigate({\n name: 'MainStack.Apps',\n params: orgName ? { orgName } : undefined,\n }),\n );\n });\n }, [isLoggingOut, navigation, orgName]);\n\n const handleOpenHistory = useCallback(() => {\n if (isLoggingOut) return;\n navigation?.closeDrawer?.();\n afterNativeModalClose(() => {\n navigation?.dispatch?.(\n CommonActions.navigate({\n name: 'MainStack.ChatHistory',\n params: orgName ? { orgName } : undefined,\n }),\n );\n });\n }, [isLoggingOut, navigation, orgName]);\n\n const handleOpenBilling = useCallback(() => {\n if (isLoggingOut) return;\n navigation?.closeDrawer?.();\n afterNativeModalClose(() => {\n navigation?.navigate?.('MainStack.Billing', orgName ? { orgName } : undefined);\n });\n }, [isLoggingOut, navigation, orgName]);\n\n const handleOpenAccount = useCallback(() => {\n if (isLoggingOut) return;\n navigation?.closeDrawer?.();\n afterNativeModalClose(() => {\n navigation?.navigate?.('MainStack.Account', orgName ? { orgName } : undefined);\n });\n }, [isLoggingOut, navigation, orgName]);\n\n useEffect(() => {\n // Prevent stale \"Logging out...\" state if the user logs back in and returns to the drawer.\n if (authUser) {\n setIsLoggingOut(false);\n }\n }, [authUser]);\n\n return (\n <SafeAreaView style={[styles.safeArea, { backgroundColor: palette.bg }]} edges={['left', 'bottom']}>\n <View style={styles.drawerColumn}>\n <DrawerContentScrollView\n {...props}\n style={[styles.scroll, { backgroundColor: palette.bg }]}\n contentContainerStyle={scrollContentStyle}\n >\n <View style={[styles.brandBlock, { borderBottomColor: palette.border }]}>\n <View style={styles.brandStrip}>\n <Image source={APP_ICON} style={styles.brandIconSmall} resizeMode=\"contain\" />\n <Text style={[styles.brandStripTitle, { color: palette.text }]}>Yantra</Text>\n </View>\n </View>\n\n <DrawerProfileHeader\n isAuthenticated={isAuthenticated}\n onPress={handleOpenAccount}\n palette={palette}\n />\n\n {isAuthenticated ? (\n <View\n style={[styles.menuCard, { backgroundColor: palette.surface, borderColor: palette.border }]}\n >\n {visibleRoutes.map((r: any) => {\n const descriptor = descriptors?.[r.key];\n const focused = state?.index === state?.routes?.findIndex((x: any) => x.key === r.key);\n const label = routeLabel(descriptor, r);\n const iconFn = descriptor?.options?.drawerIcon;\n const fallbackIcon =\n label.trim().toLowerCase() === 'chat' ? 'chatbubbles-outline' : 'home-outline';\n\n return (\n <DrawerListRow\n key={r.key}\n label={label}\n focused={focused}\n showDivider\n icon={fallbackIcon}\n palette={palette}\n iconNode={\n typeof iconFn === 'function'\n ? iconFn({\n color: focused ? palette.focusedText : palette.icon,\n size: 22,\n focused,\n })\n : undefined\n }\n onPress={() => {\n if (isLoggingOut) return;\n navigation.navigate(r.name, orgName ? { orgName } : undefined);\n }}\n />\n );\n })}\n <DrawerListRow\n icon=\"apps-outline\"\n label=\"Apps\"\n focused={appsFocused}\n onPress={handleOpenApps}\n showDivider\n palette={palette}\n />\n <DrawerListRow\n icon=\"time-outline\"\n label=\"History\"\n focused={historyFocused}\n onPress={handleOpenHistory}\n showDivider\n palette={palette}\n />\n <DrawerListRow\n icon=\"card-outline\"\n label=\"Billing\"\n focused={billingFocused}\n onPress={handleOpenBilling}\n palette={palette}\n />\n </View>\n ) : null}\n {!isAuthenticated ? (\n <View\n style={[\n styles.loggedOutStateCard,\n { backgroundColor: palette.surface, borderColor: palette.border },\n ]}\n >\n <View style={styles.loggedOutStateIconWrap}>\n <Ionicons\n name=\"shield-checkmark-outline\"\n size={22}\n color={mobileTokens.color.primary}\n />\n </View>\n <Text style={[styles.loggedOutStateTitle, { color: palette.text }]}>\n Sign in to continue\n </Text>\n <Text style={[styles.loggedOutStateSubtitle, { color: palette.textSecondary }]}>\n Access your chat history, profile, and personalized workspace after login.\n </Text>\n <Pressable\n onPress={handleLogin}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Log in\"\n style={({ pressed }) => [\n styles.loggedOutStateButton,\n pressed && styles.loggedOutStateButtonPressed,\n ]}\n >\n <Ionicons name=\"log-in-outline\" size={18} color={mobileTokens.color.surface} />\n <Text style={styles.loggedOutStateButtonLabel}>Log in</Text>\n </Pressable>\n </View>\n ) : null}\n </DrawerContentScrollView>\n\n <View style={[styles.footerStack, { backgroundColor: palette.bg }]}>\n <DrawerAppearanceRow isDark={isDark} onChange={setDarkMode} palette={palette} />\n <DrawerVersionRow palette={palette} />\n {showLogout && isAuthenticated ? (\n <Pressable\n onPress={handleLogout}\n disabled={isLoggingOut}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Log out\"\n style={({ pressed }) => [\n styles.logoutButton,\n {\n backgroundColor: pressed && !isLoggingOut ? palette.rowHighlight : palette.surface,\n borderColor: palette.border,\n },\n ]}\n >\n {isLoggingOut ? (\n <ActivityIndicator size=\"small\" color={palette.icon} />\n ) : (\n <Ionicons name=\"log-out-outline\" size={22} color={palette.icon} />\n )}\n <Text style={[styles.logoutLabel, { color: palette.text }]}>\n {isLoggingOut ? 'Logging out...' : 'Log out'}\n </Text>\n </Pressable>\n ) : showLogout ? (\n <Text style={[styles.loggedOutFooterHint, { color: palette.textSecondary }]}>\n You are currently signed out\n </Text>\n ) : null}\n </View>\n </View>\n </SafeAreaView>\n );\n}\n\nconst styles = StyleSheet.create({\n safeArea: {\n flex: 1,\n },\n drawerColumn: {\n flex: 1,\n },\n scroll: {\n flex: 1,\n },\n contentWrap: {\n flexGrow: 1,\n paddingBottom: 24,\n paddingHorizontal: 18,\n },\n brandBlock: {\n marginBottom: 16,\n paddingBottom: 14,\n borderBottomWidth: StyleSheet.hairlineWidth,\n },\n brandStrip: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 12,\n },\n brandIconSmall: {\n width: 36,\n height: 36,\n borderRadius: 10,\n },\n brandStripTitle: {\n fontSize: 22,\n fontWeight: '800',\n letterSpacing: -0.6,\n },\n profileCard: {\n borderRadius: 20,\n overflow: 'hidden',\n marginBottom: 20,\n borderWidth: StyleSheet.hairlineWidth,\n },\n profileCardInner: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: 14,\n paddingLeft: 14,\n paddingRight: 12,\n gap: 12,\n },\n profileMeta: {\n flex: 1,\n minWidth: 0,\n justifyContent: 'center',\n gap: 2,\n },\n profileName: {\n fontSize: 16,\n fontWeight: '600',\n letterSpacing: -0.2,\n lineHeight: 20,\n },\n profileEmail: {\n fontSize: 13,\n fontWeight: '400',\n lineHeight: 17,\n },\n menuCard: {\n borderRadius: 16,\n overflow: 'hidden',\n borderWidth: StyleSheet.hairlineWidth,\n },\n listRow: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: 15,\n paddingHorizontal: 16,\n gap: 14,\n },\n listLabel: {\n flex: 1,\n fontSize: 16,\n fontWeight: '400',\n },\n listLabelFocused: {\n fontWeight: '600',\n },\n rowDivider: {\n height: StyleSheet.hairlineWidth,\n marginLeft: 52,\n },\n loggedOutStateCard: {\n marginTop: 18,\n borderRadius: 14,\n paddingHorizontal: 16,\n paddingVertical: 18,\n borderWidth: StyleSheet.hairlineWidth,\n alignItems: 'center',\n gap: 10,\n },\n loggedOutStateIconWrap: {\n width: 44,\n height: 44,\n borderRadius: 14,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: mobileTokens.color.primarySoft,\n borderWidth: 1,\n borderColor: mobileTokens.color.primaryBorder,\n },\n loggedOutStateTitle: {\n fontSize: 17,\n fontWeight: '700',\n letterSpacing: -0.2,\n },\n loggedOutStateSubtitle: {\n fontSize: 13,\n lineHeight: 19,\n textAlign: 'center',\n paddingHorizontal: 4,\n },\n loggedOutStateButton: {\n marginTop: 4,\n borderRadius: 12,\n backgroundColor: mobileTokens.color.primary,\n paddingHorizontal: 16,\n paddingVertical: 10,\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n },\n loggedOutStateButtonPressed: {\n opacity: 0.88,\n },\n loggedOutStateButtonLabel: {\n fontSize: 14,\n fontWeight: '600',\n color: mobileTokens.color.surface,\n },\n navChevron: {\n marginLeft: 'auto',\n },\n appearanceRow: {\n borderTopLeftRadius: 16,\n borderTopRightRadius: 16,\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0,\n borderWidth: StyleSheet.hairlineWidth,\n paddingVertical: 8,\n paddingHorizontal: 12,\n gap: 10,\n },\n versionRow: {\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0,\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0,\n },\n versionValue: {\n marginLeft: 'auto',\n fontSize: 15,\n fontWeight: '500',\n fontVariant: ['tabular-nums'],\n },\n appearanceToggle: {\n flexDirection: 'row',\n alignItems: 'center',\n marginLeft: 'auto',\n borderRadius: 8,\n borderWidth: StyleSheet.hairlineWidth,\n padding: 2,\n gap: 1,\n },\n appearanceToggleBtn: {\n width: 28,\n height: 28,\n borderRadius: 6,\n alignItems: 'center',\n justifyContent: 'center',\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: 'transparent',\n },\n footerStack: {\n paddingHorizontal: 18,\n paddingBottom: 12,\n },\n logoutButton: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 14,\n paddingVertical: 15,\n paddingHorizontal: 16,\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0,\n borderBottomLeftRadius: 16,\n borderBottomRightRadius: 16,\n borderWidth: StyleSheet.hairlineWidth,\n },\n logoutLabel: {\n fontSize: 16,\n fontWeight: '400',\n },\n loggedOutFooterHint: {\n fontSize: 12,\n textAlign: 'center',\n paddingVertical: 8,\n },\n});\n"],"names":["_a","_b","_c","_d"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {jsx,jsxs}from'react/jsx-runtime';import {useColorScheme,View,StyleSheet,Pressable,ActivityIndicator,Text}from'react-native';import {MaterialCommunityIcons}from'@expo/vector-icons';import {mobileTokens}from'../theme/mobileTokens.js';function iconColor(status, tone, isDark) {
|
|
2
|
-
if (tone === "provisioning") return "#2563eb";
|
|
2
|
+
if (tone === "provisioning") return isDark ? "#60a5fa" : "#2563eb";
|
|
3
3
|
if (tone === "workspace-error") return mobileTokens.color.dangerText;
|
|
4
4
|
if (status === "connected") return isDark ? "#4ade80" : "#16a34a";
|
|
5
5
|
if (status === "connecting") return isDark ? "#fbbf24" : "#ca8a04";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GatewayToolbarButtonMobile.js","sources":["../../src/components/GatewayToolbarButtonMobile.tsx"],"sourcesContent":["/**\n * Connect/disconnect + gateway provider picker — mirrors web\n * `GatewayToolbarButton` for React Native header usage.\n *\n * Connection state lives in the icon color (green / amber / red), not a filled\n * pill. The label is the selected gateway name (\"Yantra\"), same as the browser.\n */\n\nimport React from 'react';\nimport { ActivityIndicator, Pressable, StyleSheet, Text, View, useColorScheme } from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { mobileTokens } from '../theme/mobileTokens';\n\nexport type GatewayToolbarMobileStatus = 'connected' | 'connecting' | 'disconnected' | 'error';\n\nexport interface GatewayToolbarButtonMobileProps {\n gatewayStatus: GatewayToolbarMobileStatus;\n gatewayError?: string | null;\n onToggleGateway: () => void;\n disabled?: boolean;\n /** Replaces the gateway name, e.g. \"Checking...\" */\n statusLabel?: string;\n /** Selected gateway display name from the registry. */\n gatewayName?: string;\n /** Visual override when workspace (not link status) is provisioning / error */\n tone?: 'default' | 'provisioning' | 'workspace-error';\n}\n\nfunction iconColor(status: GatewayToolbarMobileStatus, tone: GatewayToolbarButtonMobileProps['tone'], isDark: boolean) {\n if (tone === 'provisioning') return '#2563eb';\n if (tone === 'workspace-error') return mobileTokens.color.dangerText;\n if (status === 'connected') return isDark ? '#4ade80' : '#16a34a';\n if (status === 'connecting') return isDark ? '#fbbf24' : '#ca8a04';\n if (status === 'error') return isDark ? '#f87171' : '#dc2626';\n return isDark ? '#94a3b8' : '#64748b';\n}\n\nexport function GatewayToolbarButtonMobile({\n gatewayStatus,\n gatewayError,\n onToggleGateway,\n disabled,\n statusLabel,\n gatewayName = 'Yantra',\n tone = 'default',\n}: GatewayToolbarButtonMobileProps) {\n const isDark = useColorScheme() === 'dark';\n const color = iconColor(gatewayStatus, tone, isDark);\n const labelColor = isDark ? '#e2e8f0' : mobileTokens.color.text;\n\n const mainTitle = gatewayStatus === 'connected' ? 'Disconnect Yantra' : gatewayError || 'Connect to Yantra';\n\n return (\n <View style={styles.wrap}>\n <Pressable\n onPress={onToggleGateway}\n disabled={disabled}\n accessibilityLabel={mainTitle}\n style={({ pressed }) => [styles.mainBtn, pressed && styles.pressed, disabled && styles.disabled]}\n >\n {gatewayStatus === 'connecting' ? (\n <ActivityIndicator size=\"small\" color={color} />\n ) : (\n <MaterialCommunityIcons\n name={gatewayStatus === 'connected' ? 'wifi' : 'wifi-off'}\n size={16}\n color={color}\n />\n )}\n <Text style={[styles.label, { color: labelColor }]}>{statusLabel ?? gatewayName}</Text>\n </Pressable>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n wrap: { flexShrink: 0 },\n mainBtn: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 4,\n height: 36,\n paddingHorizontal: 6,\n borderRadius: 10,\n justifyContent: 'flex-start',\n },\n pressed: { opacity: 0.7 },\n disabled: { opacity: 0.45 },\n label: { fontSize: 13, fontWeight: '600', letterSpacing: -0.2 },\n});\n"],"names":[],"mappings":"gPAyBA,SAAS,SAAA,CAAU,MAAoC,EAAA,IAAA,EAA+C,MAAiB,EAAA;AACrH,
|
|
1
|
+
{"version":3,"file":"GatewayToolbarButtonMobile.js","sources":["../../src/components/GatewayToolbarButtonMobile.tsx"],"sourcesContent":["/**\n * Connect/disconnect + gateway provider picker — mirrors web\n * `GatewayToolbarButton` for React Native header usage.\n *\n * Connection state lives in the icon color (green / amber / red), not a filled\n * pill. The label is the selected gateway name (\"Yantra\"), same as the browser.\n */\n\nimport React from 'react';\nimport { ActivityIndicator, Pressable, StyleSheet, Text, View, useColorScheme } from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { mobileTokens } from '../theme/mobileTokens';\n\nexport type GatewayToolbarMobileStatus = 'connected' | 'connecting' | 'disconnected' | 'error';\n\nexport interface GatewayToolbarButtonMobileProps {\n gatewayStatus: GatewayToolbarMobileStatus;\n gatewayError?: string | null;\n onToggleGateway: () => void;\n disabled?: boolean;\n /** Replaces the gateway name, e.g. \"Checking...\" */\n statusLabel?: string;\n /** Selected gateway display name from the registry. */\n gatewayName?: string;\n /** Visual override when workspace (not link status) is provisioning / error */\n tone?: 'default' | 'provisioning' | 'workspace-error';\n}\n\nfunction iconColor(status: GatewayToolbarMobileStatus, tone: GatewayToolbarButtonMobileProps['tone'], isDark: boolean) {\n if (tone === 'provisioning') return isDark ? '#60a5fa' : '#2563eb';\n if (tone === 'workspace-error') return mobileTokens.color.dangerText;\n if (status === 'connected') return isDark ? '#4ade80' : '#16a34a';\n if (status === 'connecting') return isDark ? '#fbbf24' : '#ca8a04';\n if (status === 'error') return isDark ? '#f87171' : '#dc2626';\n return isDark ? '#94a3b8' : '#64748b';\n}\n\nexport function GatewayToolbarButtonMobile({\n gatewayStatus,\n gatewayError,\n onToggleGateway,\n disabled,\n statusLabel,\n gatewayName = 'Yantra',\n tone = 'default',\n}: GatewayToolbarButtonMobileProps) {\n const isDark = useColorScheme() === 'dark';\n const color = iconColor(gatewayStatus, tone, isDark);\n const labelColor = isDark ? '#e2e8f0' : mobileTokens.color.text;\n\n const mainTitle = gatewayStatus === 'connected' ? 'Disconnect Yantra' : gatewayError || 'Connect to Yantra';\n\n return (\n <View style={styles.wrap}>\n <Pressable\n onPress={onToggleGateway}\n disabled={disabled}\n accessibilityLabel={mainTitle}\n style={({ pressed }) => [styles.mainBtn, pressed && styles.pressed, disabled && styles.disabled]}\n >\n {gatewayStatus === 'connecting' ? (\n <ActivityIndicator size=\"small\" color={color} />\n ) : (\n <MaterialCommunityIcons\n name={gatewayStatus === 'connected' ? 'wifi' : 'wifi-off'}\n size={16}\n color={color}\n />\n )}\n <Text style={[styles.label, { color: labelColor }]}>{statusLabel ?? gatewayName}</Text>\n </Pressable>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n wrap: { flexShrink: 0 },\n mainBtn: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 4,\n height: 36,\n paddingHorizontal: 6,\n borderRadius: 10,\n justifyContent: 'flex-start',\n },\n pressed: { opacity: 0.7 },\n disabled: { opacity: 0.45 },\n label: { fontSize: 13, fontWeight: '600', letterSpacing: -0.2 },\n});\n"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import {jsx}from'react/jsx-runtime';import {useState,useEffect}from'react';import {View,StyleSheet,Image,Text}from'react-native';import {firstAvatarLetter}from'../utils/authUserDisplay.js';
|
|
2
|
-
function ProfileAvatar({
|
|
1
|
+
import {jsx}from'react/jsx-runtime';import {useState,useEffect}from'react';import {View,StyleSheet,Image,Text}from'react-native';import {firstAvatarLetter}from'../utils/authUserDisplay.js';import {mobileColors}from'../theme/mobileTokens.js';import {useAppTheme}from'../theme/AppThemeProvider.js';function ProfileAvatar({
|
|
3
2
|
uri,
|
|
4
3
|
name,
|
|
5
4
|
size
|
|
6
5
|
}) {
|
|
6
|
+
const {
|
|
7
|
+
isDark
|
|
8
|
+
} = useAppTheme();
|
|
9
|
+
const fallbackBackground = mobileColors(isDark).primary;
|
|
7
10
|
const [failed, setFailed] = useState(false);
|
|
8
11
|
const letter = firstAvatarLetter(name);
|
|
9
12
|
const showImage = Boolean(uri) && !failed;
|
|
@@ -14,17 +17,19 @@ function ProfileAvatar({
|
|
|
14
17
|
return /* @__PURE__ */ jsx(View, { style: [styles.wrap, {
|
|
15
18
|
width: size,
|
|
16
19
|
height: size,
|
|
17
|
-
borderRadius: radius
|
|
20
|
+
borderRadius: radius,
|
|
21
|
+
backgroundColor: fallbackBackground
|
|
18
22
|
}], children: showImage ? /* @__PURE__ */ jsx(Image, { source: {
|
|
19
23
|
uri
|
|
20
|
-
}, style: styles.image, resizeMode: "cover", onError: () => setFailed(true) }) : /* @__PURE__ */ jsx(View, { style: styles.fallback,
|
|
24
|
+
}, style: styles.image, resizeMode: "cover", onError: () => setFailed(true) }) : /* @__PURE__ */ jsx(View, { style: [styles.fallback, {
|
|
25
|
+
backgroundColor: fallbackBackground
|
|
26
|
+
}], children: /* @__PURE__ */ jsx(Text, { style: [styles.letter, {
|
|
21
27
|
fontSize: Math.round(size * 0.42)
|
|
22
28
|
}], children: letter }) }) });
|
|
23
29
|
}
|
|
24
30
|
const styles = StyleSheet.create({
|
|
25
31
|
wrap: {
|
|
26
|
-
overflow: "hidden"
|
|
27
|
-
backgroundColor: FALLBACK_BG
|
|
32
|
+
overflow: "hidden"
|
|
28
33
|
},
|
|
29
34
|
image: {
|
|
30
35
|
width: "100%",
|
|
@@ -33,8 +38,7 @@ const styles = StyleSheet.create({
|
|
|
33
38
|
fallback: {
|
|
34
39
|
flex: 1,
|
|
35
40
|
alignItems: "center",
|
|
36
|
-
justifyContent: "center"
|
|
37
|
-
backgroundColor: FALLBACK_BG
|
|
41
|
+
justifyContent: "center"
|
|
38
42
|
},
|
|
39
43
|
letter: {
|
|
40
44
|
color: "#ffffff",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProfileAvatar.js","sources":["../../src/components/ProfileAvatar.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { Image, StyleSheet, Text, View } from 'react-native';\nimport { firstAvatarLetter } from '../utils/authUserDisplay';\
|
|
1
|
+
{"version":3,"file":"ProfileAvatar.js","sources":["../../src/components/ProfileAvatar.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { Image, StyleSheet, Text, View } from 'react-native';\nimport { firstAvatarLetter } from '../utils/authUserDisplay';\nimport { mobileColors } from '../theme/mobileTokens';\nimport { useAppTheme } from '../theme/AppThemeProvider';\n\nexport function ProfileAvatar({ uri, name, size }: { uri?: string | null; name: string; size: number }) {\n const { isDark } = useAppTheme();\n const fallbackBackground = mobileColors(isDark).primary;\n const [failed, setFailed] = useState(false);\n const letter = firstAvatarLetter(name);\n const showImage = Boolean(uri) && !failed;\n const radius = size / 2;\n\n useEffect(() => {\n setFailed(false);\n }, [uri]);\n\n return (\n <View\n style={[\n styles.wrap,\n { width: size, height: size, borderRadius: radius, backgroundColor: fallbackBackground },\n ]}\n >\n {showImage ? (\n <Image\n source={{ uri: uri as string }}\n style={styles.image}\n resizeMode=\"cover\"\n onError={() => setFailed(true)}\n />\n ) : (\n <View style={[styles.fallback, { backgroundColor: fallbackBackground }]}>\n <Text style={[styles.letter, { fontSize: Math.round(size * 0.42) }]}>{letter}</Text>\n </View>\n )}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n wrap: {\n overflow: 'hidden',\n },\n image: {\n width: '100%',\n height: '100%',\n },\n fallback: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n },\n letter: {\n color: '#ffffff',\n fontWeight: '600',\n includeFontPadding: false,\n },\n});\n"],"names":[],"mappings":"wSAKO,SAAS,aAAc,CAAA;AAAA,EAC5B,GAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAIG,EAAA;AACD,EAAM,MAAA;AAAA,IACJ;AAAA,MACE,WAAY,EAAA;AAChB,EAAM,MAAA,kBAAA,GAAqB,YAAa,CAAA,MAAM,CAAE,CAAA,OAAA;AAChD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAS,KAAK,CAAA;AAC1C,EAAM,MAAA,MAAA,GAAS,kBAAkB,IAAI,CAAA;AACrC,EAAA,MAAM,SAAY,GAAA,OAAA,CAAQ,GAAG,CAAA,IAAK,CAAC,MAAA;AACnC,EAAA,MAAM,SAAS,IAAO,GAAA,CAAA;AACtB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,SAAA,CAAU,KAAK,CAAA;AAAA,GACjB,EAAG,CAAC,GAAG,CAAC,CAAA;AACR,EAAA,uBAAQ,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,IAAM,EAAA;AAAA,IAChC,KAAO,EAAA,IAAA;AAAA,IACP,MAAQ,EAAA,IAAA;AAAA,IACR,YAAc,EAAA,MAAA;AAAA,IACd,eAAiB,EAAA;AAAA,GAClB,CAAA,EACU,QAAY,EAAA,SAAA,mBAAA,GAAA,CAAC,SAAM,MAAQ,EAAA;AAAA,IAClC;AAAA,KACC,KAAO,EAAA,MAAA,CAAO,KAAO,EAAA,UAAA,EAAW,SAAQ,OAAS,EAAA,MAAM,SAAU,CAAA,IAAI,GAAG,CAAK,mBAAA,GAAA,CAAC,QAAK,KAAO,EAAA,CAAC,OAAO,QAAU,EAAA;AAAA,IAC7G,eAAiB,EAAA;AAAA,GAClB,CACe,EAAA,QAAA,kBAAA,GAAA,CAAC,QAAK,KAAO,EAAA,CAAC,OAAO,MAAQ,EAAA;AAAA,IACzC,QAAU,EAAA,IAAA,CAAK,KAAM,CAAA,IAAA,GAAO,IAAI;AAAA,GACjC,CAAA,EAAI,QAAO,EAAA,MAAA,EAAA,CAAA,EACF,CACR,EAAA,CAAA;AACR;AACA,MAAM,MAAA,GAAS,WAAW,MAAO,CAAA;AAAA,EAC/B,IAAM,EAAA;AAAA,IACJ,QAAU,EAAA;AAAA,GACZ;AAAA,EACA,KAAO,EAAA;AAAA,IACL,KAAO,EAAA,MAAA;AAAA,IACP,MAAQ,EAAA;AAAA,GACV;AAAA,EACA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,CAAA;AAAA,IACN,UAAY,EAAA,QAAA;AAAA,IACZ,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,KAAO,EAAA,SAAA;AAAA,IACP,UAAY,EAAA,KAAA;AAAA,IACZ,kBAAoB,EAAA;AAAA;AAExB,CAAC,CAAA"}
|
package/lib/compute.js
CHANGED
|
@@ -239,7 +239,11 @@ const yantraMobilePageStore = [{
|
|
|
239
239
|
animation: "fade",
|
|
240
240
|
animationTypeForReplace: "pop",
|
|
241
241
|
keyboardHandlingEnabled: false,
|
|
242
|
-
unmountOnBlur
|
|
242
|
+
// `unmountOnBlur` was REMOVED in React Navigation v7 (this app is on
|
|
243
|
+
// native-stack 7.17 / drawer 7.12), so it was silently ignored and these
|
|
244
|
+
// screens stayed fully live after blur. `freezeOnBlur` is the v7
|
|
245
|
+
// replacement and needs `enableFreeze(true)` in App.tsx to take effect.
|
|
246
|
+
freezeOnBlur: true
|
|
243
247
|
}
|
|
244
248
|
},
|
|
245
249
|
componentPath: "@adminide-stack/yantra-mobile/lib/screens/Apps/index.js",
|
|
@@ -294,7 +298,11 @@ const yantraMobilePageStore = [{
|
|
|
294
298
|
animation: "fade",
|
|
295
299
|
animationTypeForReplace: "pop",
|
|
296
300
|
keyboardHandlingEnabled: false,
|
|
297
|
-
unmountOnBlur
|
|
301
|
+
// `unmountOnBlur` was REMOVED in React Navigation v7 (this app is on
|
|
302
|
+
// native-stack 7.17 / drawer 7.12), so it was silently ignored and these
|
|
303
|
+
// screens stayed fully live after blur. `freezeOnBlur` is the v7
|
|
304
|
+
// replacement and needs `enableFreeze(true)` in App.tsx to take effect.
|
|
305
|
+
freezeOnBlur: true
|
|
298
306
|
}
|
|
299
307
|
},
|
|
300
308
|
componentPath: "@adminide-stack/yantra-mobile/lib/screens/CanvasBoard/index.js",
|
|
@@ -514,7 +522,11 @@ const yantraMobilePageStore = [{
|
|
|
514
522
|
animation: "fade",
|
|
515
523
|
animationTypeForReplace: "pop",
|
|
516
524
|
keyboardHandlingEnabled: false,
|
|
517
|
-
unmountOnBlur
|
|
525
|
+
// `unmountOnBlur` was REMOVED in React Navigation v7 (this app is on
|
|
526
|
+
// native-stack 7.17 / drawer 7.12), so it was silently ignored and these
|
|
527
|
+
// screens stayed fully live after blur. `freezeOnBlur` is the v7
|
|
528
|
+
// replacement and needs `enableFreeze(true)` in App.tsx to take effect.
|
|
529
|
+
freezeOnBlur: true
|
|
518
530
|
}
|
|
519
531
|
},
|
|
520
532
|
componentPath: "@adminide-stack/yantra-mobile/lib/screens/ShoppingNative/index.js",
|
|
@@ -564,7 +576,11 @@ const yantraMobilePageStore = [{
|
|
|
564
576
|
animation: "fade",
|
|
565
577
|
animationTypeForReplace: "pop",
|
|
566
578
|
keyboardHandlingEnabled: false,
|
|
567
|
-
unmountOnBlur
|
|
579
|
+
// `unmountOnBlur` was REMOVED in React Navigation v7 (this app is on
|
|
580
|
+
// native-stack 7.17 / drawer 7.12), so it was silently ignored and these
|
|
581
|
+
// screens stayed fully live after blur. `freezeOnBlur` is the v7
|
|
582
|
+
// replacement and needs `enableFreeze(true)` in App.tsx to take effect.
|
|
583
|
+
freezeOnBlur: true
|
|
568
584
|
}
|
|
569
585
|
},
|
|
570
586
|
componentPath: "@adminide-stack/yantra-mobile/lib/screens/ResumeNative/index.js",
|
|
@@ -614,7 +630,11 @@ const yantraMobilePageStore = [{
|
|
|
614
630
|
animation: "fade",
|
|
615
631
|
animationTypeForReplace: "pop",
|
|
616
632
|
keyboardHandlingEnabled: false,
|
|
617
|
-
unmountOnBlur
|
|
633
|
+
// `unmountOnBlur` was REMOVED in React Navigation v7 (this app is on
|
|
634
|
+
// native-stack 7.17 / drawer 7.12), so it was silently ignored and these
|
|
635
|
+
// screens stayed fully live after blur. `freezeOnBlur` is the v7
|
|
636
|
+
// replacement and needs `enableFreeze(true)` in App.tsx to take effect.
|
|
637
|
+
freezeOnBlur: true
|
|
618
638
|
}
|
|
619
639
|
},
|
|
620
640
|
componentPath: "@adminide-stack/yantra-mobile/lib/screens/JobSearchNative/index.js",
|