@adminide-stack/yantra-mobile 12.0.28-alpha.62 → 12.0.28-alpha.63
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.
|
@@ -1,31 +1,94 @@
|
|
|
1
|
-
import {DEFAULT_PRODUCTION_TAG_ID}from'@adminide-stack/core/lib/constants/defaultIds.js';import {useSettings}from'@adminide-stack/platform-client';import {ContributionSchemaId}from'common';import {useGetContextDataQuery,useAccountProfileQuery,useGetProjectsLazyQuery,useQuickCreateProjectForAccountBkMutation,useCreateVaultMutation}from'common/graphql';import {useState,useRef,useEffect}from'react';
|
|
1
|
+
import {DEFAULT_PRODUCTION_TAG_ID}from'@adminide-stack/core/lib/constants/defaultIds.js';import {useSettings}from'@adminide-stack/platform-client';import {ContributionSchemaId}from'common';import {useGetContextDataQuery,useAccountProfileQuery,useGetProjectsLazyQuery,useQuickCreateProjectForAccountBkMutation,useCreateVaultMutation}from'common/graphql';import {useState,useRef,useEffect}from'react';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 uuidToObjectId = (uuid) => uuid.replace(/-/g, "").substring(0, 24);
|
|
2
18
|
const PROJECT_NAME = "DEFAULT_YANTRA_PROJECT";
|
|
3
19
|
const TAG_ID = uuidToObjectId(DEFAULT_PRODUCTION_TAG_ID);
|
|
20
|
+
const FALLBACK_SETTINGS_URI = {
|
|
21
|
+
scheme: "cdecode",
|
|
22
|
+
authority: "default",
|
|
23
|
+
path: "/",
|
|
24
|
+
fragment: "settings"
|
|
25
|
+
};
|
|
26
|
+
function toUriInput(value) {
|
|
27
|
+
const uri = value;
|
|
28
|
+
if (uri && typeof uri.scheme === "string" && typeof uri.path === "string") {
|
|
29
|
+
return {
|
|
30
|
+
scheme: uri.scheme,
|
|
31
|
+
authority: typeof uri.authority === "string" ? uri.authority : "default",
|
|
32
|
+
path: uri.path || "/",
|
|
33
|
+
fragment: typeof uri.fragment === "string" ? uri.fragment : "settings"
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
if (uri && typeof uri.external === "string") {
|
|
37
|
+
try {
|
|
38
|
+
const parsed = new URL(uri.external);
|
|
39
|
+
return {
|
|
40
|
+
scheme: parsed.protocol.replace(":", "") || "cdecode",
|
|
41
|
+
authority: parsed.hostname || "default",
|
|
42
|
+
path: parsed.pathname || "/",
|
|
43
|
+
fragment: parsed.hash ? parsed.hash.replace("#", "") : "settings"
|
|
44
|
+
};
|
|
45
|
+
} catch (e) {
|
|
46
|
+
return __spreadValues({}, FALLBACK_SETTINGS_URI);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return __spreadValues({}, FALLBACK_SETTINGS_URI);
|
|
50
|
+
}
|
|
4
51
|
function usePrerequisiteIds() {
|
|
5
|
-
var _a, _b, _c
|
|
52
|
+
var _a, _b, _c;
|
|
53
|
+
const getProjectValue = (value) => {
|
|
54
|
+
if (!value) return "";
|
|
55
|
+
if (typeof value.project === "string") return value.project.trim();
|
|
56
|
+
if (typeof value.projectId === "string") return value.projectId.trim();
|
|
57
|
+
return "";
|
|
58
|
+
};
|
|
6
59
|
const {
|
|
7
60
|
data: contextData,
|
|
8
61
|
loading: contextLoading
|
|
9
62
|
} = useGetContextDataQuery();
|
|
10
63
|
const cdecodeUri = (_a = contextData == null ? void 0 : contextData.getContextData) == null ? void 0 : _a.cdecodeUri;
|
|
64
|
+
const settingsResourceUri = toUriInput(cdecodeUri);
|
|
11
65
|
const {
|
|
12
66
|
data: defaultAccount,
|
|
13
67
|
loading: accountSettingsLoading
|
|
14
68
|
} = useSettings({
|
|
15
|
-
resourceUri:
|
|
69
|
+
resourceUri: settingsResourceUri,
|
|
16
70
|
options: {
|
|
17
71
|
schemaId: ContributionSchemaId.Configuration,
|
|
18
72
|
configKey: "account.default",
|
|
19
73
|
includeMarketplace: true
|
|
20
|
-
}
|
|
21
|
-
skip: !cdecodeUri
|
|
74
|
+
}
|
|
22
75
|
});
|
|
23
|
-
const settingsLoading = contextLoading ||
|
|
24
|
-
const
|
|
25
|
-
const
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
76
|
+
const settingsLoading = contextLoading || accountSettingsLoading;
|
|
77
|
+
const defaultAccountAny = defaultAccount;
|
|
78
|
+
const pageSettings = defaultAccountAny == null ? void 0 : defaultAccountAny.pageSettings;
|
|
79
|
+
const pageSettingsSettings = typeof (pageSettings == null ? void 0 : pageSettings.settings) === "string" ? (() => {
|
|
80
|
+
try {
|
|
81
|
+
return JSON.parse(pageSettings.settings);
|
|
82
|
+
} catch (e) {
|
|
83
|
+
return void 0;
|
|
84
|
+
}
|
|
85
|
+
})() : pageSettings == null ? void 0 : pageSettings.settings;
|
|
86
|
+
const orgFromPageSettings = typeof (pageSettingsSettings == null ? void 0 : pageSettingsSettings.organization) === "string" ? pageSettingsSettings.organization.trim() : "";
|
|
87
|
+
const projectFromPageSettings = getProjectValue(pageSettingsSettings);
|
|
88
|
+
const orgFromTopLevel = typeof (defaultAccountAny == null ? void 0 : defaultAccountAny.organization) === "string" ? defaultAccountAny.organization.trim() : "";
|
|
89
|
+
const projectFromTopLevel = getProjectValue(defaultAccountAny);
|
|
90
|
+
const orgName = orgFromPageSettings || orgFromTopLevel || null;
|
|
91
|
+
const rawSettingsProjectId = projectFromPageSettings || projectFromTopLevel || null;
|
|
29
92
|
const settingsProjectId = rawSettingsProjectId;
|
|
30
93
|
const [resolvedProjectId, setResolvedProjectId] = useState(null);
|
|
31
94
|
const [isInitializingProject, setIsInitializingProject] = useState(false);
|
|
@@ -36,7 +99,7 @@ function usePrerequisiteIds() {
|
|
|
36
99
|
data: accountProfileData,
|
|
37
100
|
loading: userLoading
|
|
38
101
|
} = useAccountProfileQuery();
|
|
39
|
-
const userId = (
|
|
102
|
+
const userId = (_c = (_b = accountProfileData == null ? void 0 : accountProfileData.accountProfile) == null ? void 0 : _b.user) == null ? void 0 : _c.id;
|
|
40
103
|
const [fetchProjects] = useGetProjectsLazyQuery();
|
|
41
104
|
const [createProject, {
|
|
42
105
|
error: createError,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePrerequisiteIds.js","sources":["../../src/hooks/usePrerequisiteIds.ts"],"sourcesContent":["import { DEFAULT_PRODUCTION_TAG_ID } from '@adminide-stack/core/lib/constants/defaultIds.js';\nimport { useSettings } from '@adminide-stack/platform-client';\nimport { ContributionSchemaId } from 'common';\nimport {\n useAccountProfileQuery,\n useCreateVaultMutation,\n useGetContextDataQuery,\n useGetProjectsLazyQuery,\n useQuickCreateProjectForAccountBkMutation,\n} from 'common/graphql';\nimport { useEffect, useRef, useState } from 'react';\n\nconst uuidToObjectId = (uuid: string) => uuid.replace(/-/g, '').substring(0, 24);\n\nconst PROJECT_NAME = 'DEFAULT_YANTRA_PROJECT';\nconst TAG_ID = uuidToObjectId(DEFAULT_PRODUCTION_TAG_ID);\n\n/**\n * Same data as web: org + project public UUID from `account.default`, loaded via\n * `useSettings` (Apollo page settings). On mobile we use `useGetContextDataQuery`\n * for `cdecodeUri` instead of Remix loader data (useSettingsLoader is web-oriented).\n */\nexport function usePrerequisiteIds() {\n const { data: contextData, loading: contextLoading } = useGetContextDataQuery();\n const cdecodeUri = contextData?.getContextData?.cdecodeUri;\n\n const { data: defaultAccount, loading: accountSettingsLoading } = useSettings({\n resourceUri: cdecodeUri as never,\n options: {\n schemaId: ContributionSchemaId.Configuration,\n configKey: 'account.default',\n includeMarketplace: true,\n },\n skip: !cdecodeUri,\n });\n\n const settingsLoading = contextLoading || !cdecodeUri || accountSettingsLoading;\n\n const pageSettings = (defaultAccount as { pageSettings?: { settings?: unknown } } | undefined)?.pageSettings;\n const accountDefaults = (pageSettings?.settings ?? defaultAccount ?? {}) as {\n organization?: string;\n project?: string;\n };\n const orgFromFlattened = (defaultAccount as { organization?: string } | undefined)?.organization;\n const orgName = accountDefaults.organization || orgFromFlattened || null;\n const rawSettingsProjectId =\n accountDefaults.project || (defaultAccount as { project?: string } | undefined)?.project || null;\n\n const settingsProjectId = rawSettingsProjectId;\n\n const [resolvedProjectId, setResolvedProjectId] = useState<string | null>(null);\n const [isInitializingProject, setIsInitializingProject] = useState(false);\n const isCreatingRef = useRef(false);\n\n const projectId = settingsProjectId || resolvedProjectId;\n const needsProjectCreation = !settingsLoading && !!orgName && !rawSettingsProjectId && !projectId;\n\n const { data: accountProfileData, loading: userLoading } = useAccountProfileQuery();\n const userId = accountProfileData?.accountProfile?.user?.id;\n\n const [fetchProjects] = useGetProjectsLazyQuery();\n const [createProject, { error: createError, loading: projectCreating }] =\n useQuickCreateProjectForAccountBkMutation();\n const [createVault, { error: vaultCreateError }] = useCreateVaultMutation();\n\n useEffect(() => {\n if (!needsProjectCreation || isCreatingRef.current || !userId || userLoading) {\n return;\n }\n\n isCreatingRef.current = true;\n setIsInitializingProject(true);\n\n createProject({\n variables: {\n input: {\n accountId: userId,\n projectName: PROJECT_NAME,\n },\n },\n onCompleted: (data) => {\n const newMongoProjectId = data.quickCreateProjectForAccount?.id;\n if (!newMongoProjectId) {\n isCreatingRef.current = false;\n setIsInitializingProject(false);\n console.error('[usePrerequisiteIds] Project creation returned no id');\n return;\n }\n\n fetchProjects({\n variables: { orgName: orgName!, limit: 50 },\n })\n .then(({ data: projectsData }) => {\n const createdProject = (projectsData?.getProjects?.data || []).find(\n (project) => project?.id === newMongoProjectId,\n );\n if (createdProject?.projectId) {\n setResolvedProjectId(createdProject.projectId);\n }\n })\n .catch((error) => {\n console.error('[usePrerequisiteIds] Failed to resolve created project UUID:', error.message);\n })\n .finally(() => {\n setIsInitializingProject(false);\n });\n\n createVault({\n variables: {\n input: {\n orgName: orgName!,\n projectId: newMongoProjectId,\n },\n },\n onCompleted: () => {\n console.log('[usePrerequisiteIds] Vault created for project:', newMongoProjectId);\n },\n onError: (error) => {\n console.error('[usePrerequisiteIds] Vault creation failed:', error.message);\n },\n });\n },\n onError: (error) => {\n console.error('[usePrerequisiteIds] Project creation failed:', error.message);\n isCreatingRef.current = false;\n setIsInitializingProject(false);\n },\n });\n }, [createProject, createVault, fetchProjects, needsProjectCreation, orgName, userId, userLoading]);\n\n const isLoading =\n settingsLoading ||\n isInitializingProject ||\n (!rawSettingsProjectId && !projectId && (userLoading || projectCreating));\n\n return {\n projectId,\n orgName,\n accountUserId: userId ?? null,\n tagId: TAG_ID,\n loading: isLoading,\n errors: { createError, vaultCreateError },\n };\n}\n"],"names":["_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"usePrerequisiteIds.js","sources":["../../src/hooks/usePrerequisiteIds.ts"],"sourcesContent":["import { DEFAULT_PRODUCTION_TAG_ID } from '@adminide-stack/core/lib/constants/defaultIds.js';\nimport { useSettings } from '@adminide-stack/platform-client';\nimport { ContributionSchemaId } from 'common';\nimport {\n useAccountProfileQuery,\n useCreateVaultMutation,\n useGetContextDataQuery,\n useGetProjectsLazyQuery,\n useQuickCreateProjectForAccountBkMutation,\n} from 'common/graphql';\nimport { useEffect, useRef, useState } from 'react';\n\nconst uuidToObjectId = (uuid: string) => uuid.replace(/-/g, '').substring(0, 24);\n\nconst PROJECT_NAME = 'DEFAULT_YANTRA_PROJECT';\nconst TAG_ID = uuidToObjectId(DEFAULT_PRODUCTION_TAG_ID);\nconst FALLBACK_SETTINGS_URI = {\n scheme: 'cdecode',\n authority: 'default',\n path: '/',\n fragment: 'settings',\n} as const;\n\ntype UriLike = {\n scheme?: unknown;\n authority?: unknown;\n path?: unknown;\n fragment?: unknown;\n external?: unknown;\n};\n\nfunction toUriInput(value: unknown): { scheme: string; authority: string; path: string; fragment: string } {\n const uri = value as UriLike | undefined;\n if (uri && typeof uri.scheme === 'string' && typeof uri.path === 'string') {\n return {\n scheme: uri.scheme,\n authority: typeof uri.authority === 'string' ? uri.authority : 'default',\n path: uri.path || '/',\n fragment: typeof uri.fragment === 'string' ? uri.fragment : 'settings',\n };\n }\n\n if (uri && typeof uri.external === 'string') {\n try {\n const parsed = new URL(uri.external);\n return {\n scheme: parsed.protocol.replace(':', '') || 'cdecode',\n authority: parsed.hostname || 'default',\n path: parsed.pathname || '/',\n fragment: parsed.hash ? parsed.hash.replace('#', '') : 'settings',\n };\n } catch {\n return { ...FALLBACK_SETTINGS_URI };\n }\n }\n\n return { ...FALLBACK_SETTINGS_URI };\n}\n\n/**\n * Same data as web: org + project public UUID from `account.default`, loaded via\n * `useSettings` (Apollo page settings). On mobile we use `useGetContextDataQuery`\n * for `cdecodeUri` instead of Remix loader data (useSettingsLoader is web-oriented).\n */\nexport function usePrerequisiteIds() {\n const getProjectValue = (value: { project?: unknown; projectId?: unknown } | undefined): string => {\n if (!value) return '';\n if (typeof value.project === 'string') return value.project.trim();\n if (typeof value.projectId === 'string') return value.projectId.trim();\n return '';\n };\n\n const { data: contextData, loading: contextLoading } = useGetContextDataQuery();\n const cdecodeUri = contextData?.getContextData?.cdecodeUri;\n const settingsResourceUri = toUriInput(cdecodeUri);\n\n const { data: defaultAccount, loading: accountSettingsLoading } = useSettings({\n resourceUri: settingsResourceUri as never,\n options: {\n schemaId: ContributionSchemaId.Configuration,\n configKey: 'account.default',\n includeMarketplace: true,\n },\n });\n\n const settingsLoading = contextLoading || accountSettingsLoading;\n\n const defaultAccountAny = defaultAccount as\n | {\n pageSettings?: { settings?: unknown };\n organization?: unknown;\n project?: unknown;\n projectId?: unknown;\n }\n | undefined;\n const pageSettings = defaultAccountAny?.pageSettings;\n const pageSettingsSettings =\n typeof pageSettings?.settings === 'string'\n ? (() => {\n try {\n return JSON.parse(pageSettings.settings);\n } catch {\n return undefined;\n }\n })()\n : pageSettings?.settings;\n\n const orgFromPageSettings =\n typeof pageSettingsSettings?.organization === 'string' ? pageSettingsSettings.organization.trim() : '';\n const projectFromPageSettings = getProjectValue(\n pageSettingsSettings as { project?: unknown; projectId?: unknown } | undefined,\n );\n\n const orgFromTopLevel =\n typeof defaultAccountAny?.organization === 'string' ? defaultAccountAny.organization.trim() : '';\n const projectFromTopLevel = getProjectValue(defaultAccountAny);\n\n const orgName = orgFromPageSettings || orgFromTopLevel || null;\n const rawSettingsProjectId = projectFromPageSettings || projectFromTopLevel || null;\n\n const settingsProjectId = rawSettingsProjectId;\n\n const [resolvedProjectId, setResolvedProjectId] = useState<string | null>(null);\n const [isInitializingProject, setIsInitializingProject] = useState(false);\n const isCreatingRef = useRef(false);\n\n const projectId = settingsProjectId || resolvedProjectId;\n const needsProjectCreation = !settingsLoading && !!orgName && !rawSettingsProjectId && !projectId;\n\n const { data: accountProfileData, loading: userLoading } = useAccountProfileQuery();\n const userId = accountProfileData?.accountProfile?.user?.id;\n\n const [fetchProjects] = useGetProjectsLazyQuery();\n const [createProject, { error: createError, loading: projectCreating }] =\n useQuickCreateProjectForAccountBkMutation();\n const [createVault, { error: vaultCreateError }] = useCreateVaultMutation();\n\n useEffect(() => {\n if (!needsProjectCreation || isCreatingRef.current || !userId || userLoading) {\n return;\n }\n\n isCreatingRef.current = true;\n setIsInitializingProject(true);\n\n createProject({\n variables: {\n input: {\n accountId: userId,\n projectName: PROJECT_NAME,\n },\n },\n onCompleted: (data) => {\n const newMongoProjectId = data.quickCreateProjectForAccount?.id;\n if (!newMongoProjectId) {\n isCreatingRef.current = false;\n setIsInitializingProject(false);\n console.error('[usePrerequisiteIds] Project creation returned no id');\n return;\n }\n\n fetchProjects({\n variables: { orgName: orgName!, limit: 50 },\n })\n .then(({ data: projectsData }) => {\n const createdProject = (projectsData?.getProjects?.data || []).find(\n (project) => project?.id === newMongoProjectId,\n );\n if (createdProject?.projectId) {\n setResolvedProjectId(createdProject.projectId);\n }\n })\n .catch((error) => {\n console.error('[usePrerequisiteIds] Failed to resolve created project UUID:', error.message);\n })\n .finally(() => {\n setIsInitializingProject(false);\n });\n\n createVault({\n variables: {\n input: {\n orgName: orgName!,\n projectId: newMongoProjectId,\n },\n },\n onCompleted: () => {\n console.log('[usePrerequisiteIds] Vault created for project:', newMongoProjectId);\n },\n onError: (error) => {\n console.error('[usePrerequisiteIds] Vault creation failed:', error.message);\n },\n });\n },\n onError: (error) => {\n console.error('[usePrerequisiteIds] Project creation failed:', error.message);\n isCreatingRef.current = false;\n setIsInitializingProject(false);\n },\n });\n }, [createProject, createVault, fetchProjects, needsProjectCreation, orgName, userId, userLoading]);\n\n const isLoading =\n settingsLoading ||\n isInitializingProject ||\n (!rawSettingsProjectId && !projectId && (userLoading || projectCreating));\n\n return {\n projectId,\n orgName,\n accountUserId: userId ?? null,\n tagId: TAG_ID,\n loading: isLoading,\n errors: { createError, vaultCreateError },\n };\n}\n"],"names":["_a"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {jsx,jsxs}from'react/jsx-runtime';import React,{useState,useMemo,useCallback
|
|
1
|
+
import {jsx,jsxs}from'react/jsx-runtime';import React,{useState,useMemo,useEffect,useCallback}from'react';import {useWindowDimensions,useColorScheme,Platform,Keyboard,TouchableWithoutFeedback,View,StyleSheet,Pressable}from'react-native';import {MaterialCommunityIcons}from'@expo/vector-icons';import {getDefaultLeftItems,getDefaultRightItems,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 {MessagesContainerUI}from'@messenger-box/platform-mobile';import {v4}from'uuid';import {ContributionSchemaId}from'common';import {useGetContextDataQuery,useGetPageSettingsQuery}from'common/graphql';import {useGatewayContext}from'../../contexts/GatewayContext.js';import {GatewayToolbarButtonMobile}from'../../components/GatewayToolbarButtonMobile.js';import {useCdecliAutoConnect}from'../../hooks/useCdecliAutoConnect.js';import {usePrerequisiteIds}from'../../hooks/usePrerequisiteIds.js';import {useChatMutations,useChatSessions}from'../../hooks/useChatApi.js';import {useChatStream}from'../../hooks/useChatStream.js';import DeepSearchModal from'./components/DeepSearchModal.js';import ChatHistoryLanding from'./components/ChatHistoryLanding.js';import {normalizeSummaryText,extractDeepSearchSources}from'./deepSearchUtils.js';import {YantraBrandLoader,YANTRA_LOADER_SIZE_COMPACT}from'../../components/YantraBrandLoader.js';import {mobileTokens}from'../../theme/mobileTokens.js';var __defProp = Object.defineProperty;
|
|
2
2
|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
3
3
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
4
4
|
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
@@ -15,8 +15,7 @@ var __spreadValues = (a, b) => {
|
|
|
15
15
|
return a;
|
|
16
16
|
};
|
|
17
17
|
const SENDING_LOADER_COMPOSER_RESERVE_PX = 156;
|
|
18
|
-
const
|
|
19
|
-
const COMPOSER_SCROLL_RESERVE_PX = 136;
|
|
18
|
+
const COMPOSER_SCROLL_RESERVE_PX = 164;
|
|
20
19
|
function organizationFromSettingsValue(settings) {
|
|
21
20
|
if (settings == null) return null;
|
|
22
21
|
if (typeof settings === "string") {
|
|
@@ -51,6 +50,115 @@ function projectFromSettingsValue(settings) {
|
|
|
51
50
|
}
|
|
52
51
|
return null;
|
|
53
52
|
}
|
|
53
|
+
const ChatContentSection = React.memo(function ChatContentSection2({
|
|
54
|
+
contentMaxWidth,
|
|
55
|
+
composerScrollBottomPadding,
|
|
56
|
+
messages,
|
|
57
|
+
response,
|
|
58
|
+
isLoading,
|
|
59
|
+
disabled,
|
|
60
|
+
isStreaming,
|
|
61
|
+
onStop,
|
|
62
|
+
cancel,
|
|
63
|
+
onSend,
|
|
64
|
+
onBackPress
|
|
65
|
+
}) {
|
|
66
|
+
return /* @__PURE__ */ jsx(Box, { flex: 1, width: "100%", alignSelf: "stretch", children: /* @__PURE__ */ jsx(MessagesContainerUI, { mode: "chat", showBackButton: false, onBackPress, compactTop: true, messagesContainerStyle: {
|
|
67
|
+
paddingHorizontal: 0,
|
|
68
|
+
paddingTop: 0,
|
|
69
|
+
paddingBottom: composerScrollBottomPadding,
|
|
70
|
+
margin: 0,
|
|
71
|
+
marginTop: 0,
|
|
72
|
+
alignSelf: "center",
|
|
73
|
+
width: contentMaxWidth
|
|
74
|
+
}, listContentStyle: {
|
|
75
|
+
paddingTop: 0,
|
|
76
|
+
paddingBottom: composerScrollBottomPadding,
|
|
77
|
+
margin: 0,
|
|
78
|
+
marginTop: 0,
|
|
79
|
+
width: contentMaxWidth,
|
|
80
|
+
alignSelf: "center",
|
|
81
|
+
justifyContent: "flex-end"
|
|
82
|
+
}, messages: messages.map((msg, index) => ({
|
|
83
|
+
id: `msg-${index}-${msg.role}`,
|
|
84
|
+
role: msg.role,
|
|
85
|
+
content: msg.content,
|
|
86
|
+
metadata: msg.metadata
|
|
87
|
+
})), streamingContent: response, currentUser: {
|
|
88
|
+
id: "user"
|
|
89
|
+
}, onSend, disabled: isLoading || disabled, isLoading, onStop: isStreaming ? cancel : onStop, renderPlanInputToolbar: () => null, renderBuildInputToolbar: () => null }) });
|
|
90
|
+
});
|
|
91
|
+
const EmptyStateSection = React.memo(function EmptyStateSection2({
|
|
92
|
+
isDark,
|
|
93
|
+
secondaryTextColor,
|
|
94
|
+
primaryTextColor,
|
|
95
|
+
activeMode,
|
|
96
|
+
onModeSwitch
|
|
97
|
+
}) {
|
|
98
|
+
return /* @__PURE__ */ jsx(Box, { flex: 1, width: "100%", children: /* @__PURE__ */ jsxs(View, { style: styles.emptyCenterTitleWrap, children: [
|
|
99
|
+
/* @__PURE__ */ jsx(Text, { style: [styles.emptyEyebrow, {
|
|
100
|
+
color: secondaryTextColor
|
|
101
|
+
}], children: "Choose your mode" }),
|
|
102
|
+
/* @__PURE__ */ jsxs(View, { style: [styles.emptyModePillRow, {
|
|
103
|
+
backgroundColor: isDark ? "rgba(30, 41, 59, 0.9)" : "#eef2ff",
|
|
104
|
+
borderColor: isDark ? "rgba(148, 163, 184, 0.26)" : "rgba(67, 56, 202, 0.15)"
|
|
105
|
+
}], children: [
|
|
106
|
+
/* @__PURE__ */ jsxs(Pressable, { onPress: () => onModeSwitch("chat"), style: [styles.emptyModePill, activeMode === "chat" && styles.emptyModePillActive, activeMode === "chat" && {
|
|
107
|
+
backgroundColor: isDark ? "#312e81" : "#4338ca"
|
|
108
|
+
}], accessibilityRole: "button", accessibilityLabel: "Switch to chat mode", children: [
|
|
109
|
+
/* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "magnify", size: 14, color: activeMode === "chat" ? "#ffffff" : secondaryTextColor }),
|
|
110
|
+
/* @__PURE__ */ jsx(Text, { style: [styles.emptyModePillLabel, {
|
|
111
|
+
color: activeMode === "chat" ? "#ffffff" : secondaryTextColor
|
|
112
|
+
}], children: "Chat" })
|
|
113
|
+
] }),
|
|
114
|
+
/* @__PURE__ */ jsxs(Pressable, { onPress: () => onModeSwitch("deep-search"), style: [styles.emptyModePill, activeMode === "deep-search" && styles.emptyModePillActive, activeMode === "deep-search" && {
|
|
115
|
+
backgroundColor: isDark ? "#312e81" : "#4338ca"
|
|
116
|
+
}], accessibilityRole: "button", accessibilityLabel: "Switch to deep-search mode", children: [
|
|
117
|
+
/* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "lightning-bolt-outline", size: 14, color: activeMode === "deep-search" ? "#ffffff" : secondaryTextColor }),
|
|
118
|
+
/* @__PURE__ */ jsx(Text, { style: [styles.emptyModePillLabel, {
|
|
119
|
+
color: activeMode === "deep-search" ? "#ffffff" : secondaryTextColor
|
|
120
|
+
}], children: "Deep Search" })
|
|
121
|
+
] })
|
|
122
|
+
] }),
|
|
123
|
+
/* @__PURE__ */ jsx(Text, { style: [styles.emptyCenterTitle, {
|
|
124
|
+
color: primaryTextColor
|
|
125
|
+
}], children: "How do you want to start?" }),
|
|
126
|
+
/* @__PURE__ */ jsx(Text, { style: [styles.emptySubtitle, {
|
|
127
|
+
color: secondaryTextColor
|
|
128
|
+
}], children: "Use Chat for quick help, or Deep Search for researched, source-backed answers." })
|
|
129
|
+
] }) });
|
|
130
|
+
});
|
|
131
|
+
const HeaderBackButton = React.memo(function HeaderBackButton2({
|
|
132
|
+
color,
|
|
133
|
+
onPress
|
|
134
|
+
}) {
|
|
135
|
+
return /* @__PURE__ */ jsx(Pressable, { onPress, style: ({
|
|
136
|
+
pressed
|
|
137
|
+
}) => [styles.backButton, pressed && styles.newChatButtonPressed], accessibilityLabel: "Back to chat", children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "chevron-left", size: 24, color }) });
|
|
138
|
+
});
|
|
139
|
+
const HeaderRightActions = React.memo(function HeaderRightActions2({
|
|
140
|
+
gatewayToolbarStatus,
|
|
141
|
+
gatewayToolbarError,
|
|
142
|
+
onToggleGateway,
|
|
143
|
+
gatewayToolbarLabel,
|
|
144
|
+
gatewayToolbarTone,
|
|
145
|
+
showChatHistory,
|
|
146
|
+
onOpenChatHistory,
|
|
147
|
+
onNewChat,
|
|
148
|
+
isDark,
|
|
149
|
+
accentColor,
|
|
150
|
+
newChatIconColor
|
|
151
|
+
}) {
|
|
152
|
+
return /* @__PURE__ */ jsxs(View, { style: styles.headerRight, children: [
|
|
153
|
+
/* @__PURE__ */ jsx(GatewayToolbarButtonMobile, { gatewayStatus: gatewayToolbarStatus, gatewayError: gatewayToolbarError, onToggleGateway, disabled: false, statusLabel: gatewayToolbarLabel, tone: gatewayToolbarTone }),
|
|
154
|
+
!showChatHistory ? /* @__PURE__ */ jsx(Pressable, { onPress: onOpenChatHistory, style: ({
|
|
155
|
+
pressed
|
|
156
|
+
}) => [styles.historyHeaderButton, pressed && styles.historyHeaderButtonPressed], accessibilityLabel: "Chat history", accessibilityRole: "button", children: /* @__PURE__ */ jsx(View, { style: [styles.historyHeaderButtonInner, isDark ? styles.historyHeaderButtonInnerDark : null], children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "history", size: 19, color: accentColor }) }) }) : null,
|
|
157
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: onNewChat, style: ({
|
|
158
|
+
pressed
|
|
159
|
+
}) => [styles.newChatButton, pressed && styles.newChatButtonPressed], accessibilityLabel: "New chat", children: /* @__PURE__ */ jsx(View, { style: [styles.newChatButtonInner, isDark ? styles.newChatButtonInnerDark : null], children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "chat-plus-outline", size: 20, color: newChatIconColor }) }) })
|
|
160
|
+
] });
|
|
161
|
+
});
|
|
54
162
|
function HomeScreenContent({
|
|
55
163
|
initialMode = "chat",
|
|
56
164
|
onSubmit: onSubmitProp,
|
|
@@ -137,7 +245,6 @@ function HomeScreenContent({
|
|
|
137
245
|
error: chatError,
|
|
138
246
|
isLoading: chatLoading,
|
|
139
247
|
isStreaming,
|
|
140
|
-
hasMessages,
|
|
141
248
|
sendMessage,
|
|
142
249
|
cancel,
|
|
143
250
|
clearMessages
|
|
@@ -155,8 +262,36 @@ function HomeScreenContent({
|
|
|
155
262
|
}, [chatLoading, isStreaming, messages]);
|
|
156
263
|
const pinSendingLoaderNearComposer = useMemo(() => messages.length > 0 || Boolean((response != null ? response : "").trim()), [messages.length, response]);
|
|
157
264
|
const showSendingLoader = !showChatHistory && (channelBootstrap || waitingForAssistant);
|
|
265
|
+
const hasRenderableConversation = messages.length > 0 || isStreaming;
|
|
158
266
|
const insets = useSafeAreaInsets();
|
|
159
267
|
const [keyboardHeight, setKeyboardHeight] = useState(0);
|
|
268
|
+
useEffect(() => {
|
|
269
|
+
if (Platform.OS === "ios") {
|
|
270
|
+
const frameSub = Keyboard.addListener("keyboardWillChangeFrame", (event) => {
|
|
271
|
+
var _a2, _b2;
|
|
272
|
+
return setKeyboardHeight((_b2 = (_a2 = event.endCoordinates) == null ? void 0 : _a2.height) != null ? _b2 : 0);
|
|
273
|
+
});
|
|
274
|
+
const showSub2 = Keyboard.addListener("keyboardWillShow", (event) => {
|
|
275
|
+
var _a2, _b2;
|
|
276
|
+
return setKeyboardHeight((_b2 = (_a2 = event.endCoordinates) == null ? void 0 : _a2.height) != null ? _b2 : 0);
|
|
277
|
+
});
|
|
278
|
+
const hideSub2 = Keyboard.addListener("keyboardWillHide", () => setKeyboardHeight(0));
|
|
279
|
+
return () => {
|
|
280
|
+
frameSub.remove();
|
|
281
|
+
showSub2.remove();
|
|
282
|
+
hideSub2.remove();
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
const showSub = Keyboard.addListener("keyboardDidShow", (event) => {
|
|
286
|
+
var _a2, _b2;
|
|
287
|
+
return setKeyboardHeight((_b2 = (_a2 = event.endCoordinates) == null ? void 0 : _a2.height) != null ? _b2 : 0);
|
|
288
|
+
});
|
|
289
|
+
const hideSub = Keyboard.addListener("keyboardDidHide", () => setKeyboardHeight(0));
|
|
290
|
+
return () => {
|
|
291
|
+
showSub.remove();
|
|
292
|
+
hideSub.remove();
|
|
293
|
+
};
|
|
294
|
+
}, []);
|
|
160
295
|
const handleModeSwitch = useCallback((mode) => {
|
|
161
296
|
setActiveMode(mode);
|
|
162
297
|
}, []);
|
|
@@ -243,13 +378,11 @@ function HomeScreenContent({
|
|
|
243
378
|
const gatewayToolbarTone = "default";
|
|
244
379
|
const gatewayToolbarLabel = cdecli.status === "connecting" ? "Checking..." : void 0;
|
|
245
380
|
const gatewayToolbarError = cdecli.error;
|
|
246
|
-
const surfaceColor = isDark ? "#0f172a" : mobileTokens.color.
|
|
381
|
+
const surfaceColor = isDark ? "#0f172a" : mobileTokens.color.surface;
|
|
247
382
|
const primaryTextColor = isDark ? "#e5e7eb" : mobileTokens.color.text;
|
|
248
383
|
const secondaryTextColor = isDark ? "#94a3b8" : mobileTokens.color.textMuted;
|
|
249
384
|
const accentColor = isDark ? "#a5b4fc" : "#4338ca";
|
|
250
385
|
const newChatIconColor = isDark ? "#e5e7eb" : "#000000";
|
|
251
|
-
const composerBarBackground = isDark ? "rgba(15, 23, 42, 0.94)" : "rgba(248, 250, 252, 0.97)";
|
|
252
|
-
const composerBarBorder = isDark ? "rgba(71, 85, 105, 0.5)" : "rgba(148, 163, 184, 0.25)";
|
|
253
386
|
const contentMaxWidth = Math.min(720, Math.max(360, screenWidth - 24));
|
|
254
387
|
useEffect(() => {
|
|
255
388
|
var _a2, _b2, _c2;
|
|
@@ -264,7 +397,6 @@ function HomeScreenContent({
|
|
|
264
397
|
const currentOrgName = ((_b2 = (_a2 = route == null ? void 0 : route.params) == null ? void 0 : _a2.orgName) == null ? void 0 : _b2.trim()) || "";
|
|
265
398
|
if (hasRehydratedOrgRef.current || currentOrgName || !effectiveOrgName) return;
|
|
266
399
|
hasRehydratedOrgRef.current = true;
|
|
267
|
-
console.log("effectiveOrgName..", effectiveOrgName);
|
|
268
400
|
(_c2 = navigation.getParent()) == null ? void 0 : _c2.dispatch(CommonActions.navigate("MainStack", {
|
|
269
401
|
screen: "MainStack.Layout.Home",
|
|
270
402
|
params: {
|
|
@@ -273,23 +405,15 @@ function HomeScreenContent({
|
|
|
273
405
|
merge: true,
|
|
274
406
|
key: Date.now().toString()
|
|
275
407
|
}));
|
|
276
|
-
}, [navigation, (_g = route == null ? void 0 : route.params) == null ? void 0 : _g.orgName, effectiveOrgName
|
|
408
|
+
}, [navigation, (_g = route == null ? void 0 : route.params) == null ? void 0 : _g.orgName, effectiveOrgName]);
|
|
277
409
|
useEffect(() => {
|
|
410
|
+
const headerLeft = showChatHistory ? () => /* @__PURE__ */ jsx(HeaderBackButton, { color: primaryTextColor, onPress: handleCloseChatHistory }) : void 0;
|
|
411
|
+
const headerRight = () => /* @__PURE__ */ jsx(HeaderRightActions, { gatewayToolbarStatus, gatewayToolbarError, onToggleGateway: handleToggleGateway, gatewayToolbarLabel, gatewayToolbarTone, showChatHistory, onOpenChatHistory: handleOpenChatHistory, onNewChat: handleNewChat, isDark, accentColor, newChatIconColor });
|
|
278
412
|
navigation.setOptions({
|
|
279
413
|
drawerLabel: "Chat",
|
|
280
414
|
headerTitle: showChatHistory ? "Chats" : "Yantra",
|
|
281
|
-
headerLeft
|
|
282
|
-
|
|
283
|
-
}) => [styles.backButton, pressed && styles.newChatButtonPressed], accessibilityLabel: "Back to chat", children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "chevron-left", size: 24, color: primaryTextColor }) }) : void 0,
|
|
284
|
-
headerRight: () => /* @__PURE__ */ jsxs(View, { style: styles.headerRight, children: [
|
|
285
|
-
/* @__PURE__ */ jsx(GatewayToolbarButtonMobile, { gatewayStatus: gatewayToolbarStatus, gatewayError: gatewayToolbarError, onToggleGateway: handleToggleGateway, disabled: false, statusLabel: gatewayToolbarLabel, tone: gatewayToolbarTone }),
|
|
286
|
-
!showChatHistory ? /* @__PURE__ */ jsx(Pressable, { onPress: handleOpenChatHistory, style: ({
|
|
287
|
-
pressed
|
|
288
|
-
}) => [styles.historyHeaderButton, pressed && styles.historyHeaderButtonPressed], accessibilityLabel: "Chat history", accessibilityRole: "button", children: /* @__PURE__ */ jsx(View, { style: [styles.historyHeaderButtonInner, isDark ? styles.historyHeaderButtonInnerDark : null], children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "history", size: 19, color: accentColor }) }) }) : null,
|
|
289
|
-
/* @__PURE__ */ jsx(Pressable, { onPress: handleNewChat, style: ({
|
|
290
|
-
pressed
|
|
291
|
-
}) => [styles.newChatButton, pressed && styles.newChatButtonPressed], accessibilityLabel: "New chat", children: /* @__PURE__ */ jsx(View, { style: [styles.newChatButtonInner, isDark ? styles.newChatButtonInnerDark : null], children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "chat-plus-outline", size: 20, color: newChatIconColor }) }) })
|
|
292
|
-
] })
|
|
415
|
+
headerLeft,
|
|
416
|
+
headerRight
|
|
293
417
|
});
|
|
294
418
|
}, [navigation, showChatHistory, handleCloseChatHistory, handleOpenChatHistory, handleNewChat, handleToggleGateway, gatewayToolbarStatus, gatewayToolbarError, gatewayToolbarLabel, gatewayToolbarTone, primaryTextColor, accentColor, newChatIconColor, isDark]);
|
|
295
419
|
const handleSendMessage = useCallback(async (text) => {
|
|
@@ -327,39 +451,6 @@ function HomeScreenContent({
|
|
|
327
451
|
setChannelBootstrap(false);
|
|
328
452
|
}
|
|
329
453
|
}, [isLoading, disabled, activeMode, onSubmitProp, ensureSessionId, sendMessage]);
|
|
330
|
-
const leftItems = getDefaultLeftItems({
|
|
331
|
-
search: {
|
|
332
|
-
active: activeMode === "chat",
|
|
333
|
-
onClick: () => handleModeSwitch("chat")
|
|
334
|
-
},
|
|
335
|
-
zap: {
|
|
336
|
-
active: activeMode === "deep-search",
|
|
337
|
-
onClick: () => handleModeSwitch("deep-search")
|
|
338
|
-
},
|
|
339
|
-
lightbulb: {
|
|
340
|
-
enabled: false
|
|
341
|
-
}
|
|
342
|
-
});
|
|
343
|
-
const rightItems = getDefaultRightItems({
|
|
344
|
-
tag: {
|
|
345
|
-
enabled: false
|
|
346
|
-
},
|
|
347
|
-
chip: {
|
|
348
|
-
enabled: false
|
|
349
|
-
},
|
|
350
|
-
camera: {
|
|
351
|
-
enabled: false,
|
|
352
|
-
onClick: () => console.log("camera")
|
|
353
|
-
},
|
|
354
|
-
image: {
|
|
355
|
-
enabled: false,
|
|
356
|
-
onClick: () => console.log("image")
|
|
357
|
-
},
|
|
358
|
-
attach: {
|
|
359
|
-
enabled: false,
|
|
360
|
-
onClick: () => console.log("attach")
|
|
361
|
-
}
|
|
362
|
-
});
|
|
363
454
|
const latestAssistantMessage = useMemo(() => {
|
|
364
455
|
var _a2, _b2, _c2;
|
|
365
456
|
for (let i = messages.length - 1; i >= 0; i -= 1) {
|
|
@@ -392,40 +483,85 @@ function HomeScreenContent({
|
|
|
392
483
|
setChannelBootstrap(false);
|
|
393
484
|
}
|
|
394
485
|
}, [deepSearchQuery, isStreaming, ensureSessionId, sendMessage]);
|
|
486
|
+
const handleValueChange = useCallback((e) => {
|
|
487
|
+
setValue(e.nativeEvent.text);
|
|
488
|
+
}, []);
|
|
489
|
+
const handleMicPress = useCallback(() => {
|
|
490
|
+
console.log("mic");
|
|
491
|
+
}, []);
|
|
492
|
+
const handleSelectHistorySession = useCallback((channelId) => {
|
|
493
|
+
setShowChatHistory(false);
|
|
494
|
+
setActiveSessionId(channelId);
|
|
495
|
+
setActiveMode("chat");
|
|
496
|
+
}, []);
|
|
497
|
+
const handleComposeFromHistory = useCallback(() => {
|
|
498
|
+
setShowChatHistory(false);
|
|
499
|
+
setActiveSessionId(null);
|
|
500
|
+
setValue("");
|
|
501
|
+
clearMessages();
|
|
502
|
+
}, [clearMessages]);
|
|
503
|
+
const handleToggleResearchProcess = useCallback(() => {
|
|
504
|
+
setResearchProcessOpen((prev) => !prev);
|
|
505
|
+
}, []);
|
|
506
|
+
const handleToggleSourcesAccordion = useCallback(() => {
|
|
507
|
+
setSourcesAccordionOpen((prev) => !prev);
|
|
508
|
+
}, []);
|
|
509
|
+
const handleRetryDeepSearchPress = useCallback(() => {
|
|
510
|
+
void handleRetryDeepSearch();
|
|
511
|
+
}, [handleRetryDeepSearch]);
|
|
395
512
|
useEffect(() => {
|
|
396
513
|
if (!deepSearchQuery || isStreaming || !latestAssistantMessage) return;
|
|
397
514
|
setDeepSearchSummary(normalizeSummaryText(latestAssistantMessage));
|
|
398
515
|
setDeepSearchSources(extractDeepSearchSources(latestAssistantMessage));
|
|
399
516
|
}, [deepSearchQuery, isStreaming, latestAssistantMessage]);
|
|
400
|
-
useEffect(() => {
|
|
401
|
-
if (Platform.OS === "ios") {
|
|
402
|
-
const frameSub = Keyboard.addListener("keyboardWillChangeFrame", (event) => {
|
|
403
|
-
var _a2, _b2;
|
|
404
|
-
return setKeyboardHeight((_b2 = (_a2 = event.endCoordinates) == null ? void 0 : _a2.height) != null ? _b2 : 0);
|
|
405
|
-
});
|
|
406
|
-
const showSub2 = Keyboard.addListener("keyboardWillShow", (event) => {
|
|
407
|
-
var _a2, _b2;
|
|
408
|
-
return setKeyboardHeight((_b2 = (_a2 = event.endCoordinates) == null ? void 0 : _a2.height) != null ? _b2 : 0);
|
|
409
|
-
});
|
|
410
|
-
const hideSub2 = Keyboard.addListener("keyboardWillHide", () => setKeyboardHeight(0));
|
|
411
|
-
return () => {
|
|
412
|
-
frameSub.remove();
|
|
413
|
-
showSub2.remove();
|
|
414
|
-
hideSub2.remove();
|
|
415
|
-
};
|
|
416
|
-
}
|
|
417
|
-
const showSub = Keyboard.addListener("keyboardDidShow", (event) => {
|
|
418
|
-
var _a2, _b2;
|
|
419
|
-
return setKeyboardHeight((_b2 = (_a2 = event.endCoordinates) == null ? void 0 : _a2.height) != null ? _b2 : 0);
|
|
420
|
-
});
|
|
421
|
-
const hideSub = Keyboard.addListener("keyboardDidHide", () => setKeyboardHeight(0));
|
|
422
|
-
return () => {
|
|
423
|
-
showSub.remove();
|
|
424
|
-
hideSub.remove();
|
|
425
|
-
};
|
|
426
|
-
}, []);
|
|
427
|
-
const composerBottomOffset = Math.max(0, keyboardHeight - insets.bottom - (Platform.OS === "ios" ? IOS_KEYBOARD_DOCKING_ADJUST_PX : 0));
|
|
428
517
|
const composerScrollBottomPadding = COMPOSER_SCROLL_RESERVE_PX;
|
|
518
|
+
const leftItems = useMemo(() => getDefaultLeftItems({
|
|
519
|
+
search: {
|
|
520
|
+
active: activeMode === "chat",
|
|
521
|
+
onClick: () => handleModeSwitch("chat")
|
|
522
|
+
},
|
|
523
|
+
zap: {
|
|
524
|
+
active: activeMode === "deep-search",
|
|
525
|
+
onClick: () => handleModeSwitch("deep-search")
|
|
526
|
+
},
|
|
527
|
+
lightbulb: {
|
|
528
|
+
enabled: false
|
|
529
|
+
}
|
|
530
|
+
}), [activeMode, handleModeSwitch]);
|
|
531
|
+
const rightItems = useMemo(() => getDefaultRightItems({
|
|
532
|
+
tag: {
|
|
533
|
+
enabled: false
|
|
534
|
+
},
|
|
535
|
+
chip: {
|
|
536
|
+
enabled: false
|
|
537
|
+
},
|
|
538
|
+
camera: {
|
|
539
|
+
enabled: false,
|
|
540
|
+
onClick: () => console.log("camera")
|
|
541
|
+
},
|
|
542
|
+
image: {
|
|
543
|
+
enabled: false,
|
|
544
|
+
onClick: () => console.log("image")
|
|
545
|
+
},
|
|
546
|
+
attach: {
|
|
547
|
+
enabled: false,
|
|
548
|
+
onClick: () => console.log("attach")
|
|
549
|
+
}
|
|
550
|
+
}), []);
|
|
551
|
+
const inputConfig = useMemo(() => ({
|
|
552
|
+
value,
|
|
553
|
+
onChange: handleValueChange,
|
|
554
|
+
placeholder: inputPlaceholder,
|
|
555
|
+
disabled: isLoading || disabled
|
|
556
|
+
}), [value, handleValueChange, inputPlaceholder, isLoading, disabled]);
|
|
557
|
+
const micSendButton = useMemo(() => ({
|
|
558
|
+
hasContent: canSubmit,
|
|
559
|
+
onSend: () => handleSubmit(),
|
|
560
|
+
onMic: handleMicPress,
|
|
561
|
+
disabled: isLoading || disabled,
|
|
562
|
+
isLoading,
|
|
563
|
+
onStop: isStreaming ? cancel : onStop
|
|
564
|
+
}), [canSubmit, handleSubmit, handleMicPress, isLoading, disabled, isStreaming, cancel, onStop]);
|
|
429
565
|
return /* @__PURE__ */ jsxs(SafeAreaView, { edges: ["left", "right", "bottom"], style: {
|
|
430
566
|
flex: 1,
|
|
431
567
|
backgroundColor: surfaceColor
|
|
@@ -438,95 +574,20 @@ function HomeScreenContent({
|
|
|
438
574
|
}, children: /* @__PURE__ */ jsx(Text, { fontSize: "$sm", style: {
|
|
439
575
|
color: isDark ? "#fecaca" : "#991b1b"
|
|
440
576
|
}, children: chatError || cdecli.error }) }),
|
|
441
|
-
showChatHistory ? /* @__PURE__ */ jsx(ChatHistoryLanding, { onSelectSession: (
|
|
442
|
-
setShowChatHistory(false);
|
|
443
|
-
setActiveSessionId(channelId);
|
|
444
|
-
setActiveMode("chat");
|
|
445
|
-
}, onCompose: () => {
|
|
446
|
-
setShowChatHistory(false);
|
|
447
|
-
setActiveSessionId(null);
|
|
448
|
-
setValue("");
|
|
449
|
-
clearMessages();
|
|
450
|
-
} }) : hasMessages || response ? /* @__PURE__ */ jsx(Box, { flex: 1, width: "100%", alignSelf: "stretch", children: /* @__PURE__ */ jsx(MessagesContainerUI, { mode: "chat", showBackButton: false, onBackPress: handleNewChat, compactTop: true, messagesContainerStyle: {
|
|
451
|
-
paddingHorizontal: 0,
|
|
452
|
-
paddingTop: 0,
|
|
453
|
-
paddingBottom: composerScrollBottomPadding,
|
|
454
|
-
margin: 0,
|
|
455
|
-
marginTop: 0,
|
|
456
|
-
alignSelf: "center",
|
|
457
|
-
width: contentMaxWidth
|
|
458
|
-
}, listContentStyle: {
|
|
459
|
-
paddingTop: 0,
|
|
460
|
-
paddingBottom: composerScrollBottomPadding,
|
|
461
|
-
margin: 0,
|
|
462
|
-
marginTop: 0,
|
|
463
|
-
width: contentMaxWidth,
|
|
464
|
-
alignSelf: "center"
|
|
465
|
-
}, messages: messages.map((msg, index) => ({
|
|
466
|
-
id: `msg-${index}-${msg.role}`,
|
|
467
|
-
role: msg.role,
|
|
468
|
-
content: msg.content,
|
|
469
|
-
metadata: msg.metadata
|
|
470
|
-
})), streamingContent: response, currentUser: {
|
|
471
|
-
id: "user"
|
|
472
|
-
}, onSend: handleSendMessage, disabled: isLoading || disabled, isLoading, onStop: isStreaming ? cancel : onStop, renderPlanInputToolbar: () => null, renderBuildInputToolbar: () => null }) }) : /* @__PURE__ */ jsx(Box, { flex: 1, width: "100%", children: /* @__PURE__ */ jsxs(View, { style: styles.emptyCenterTitleWrap, children: [
|
|
473
|
-
/* @__PURE__ */ jsx(Text, { style: [styles.emptyEyebrow, {
|
|
474
|
-
color: secondaryTextColor
|
|
475
|
-
}], children: "Choose your mode" }),
|
|
476
|
-
/* @__PURE__ */ jsxs(View, { style: [styles.emptyModePillRow, {
|
|
477
|
-
backgroundColor: isDark ? "rgba(30, 41, 59, 0.9)" : "#eef2ff",
|
|
478
|
-
borderColor: isDark ? "rgba(148, 163, 184, 0.26)" : "rgba(67, 56, 202, 0.15)"
|
|
479
|
-
}], children: [
|
|
480
|
-
/* @__PURE__ */ jsxs(Pressable, { onPress: () => handleModeSwitch("chat"), style: [styles.emptyModePill, activeMode === "chat" && styles.emptyModePillActive, activeMode === "chat" && {
|
|
481
|
-
backgroundColor: isDark ? "#312e81" : "#4338ca"
|
|
482
|
-
}], accessibilityRole: "button", accessibilityLabel: "Switch to chat mode", children: [
|
|
483
|
-
/* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "magnify", size: 14, color: activeMode === "chat" ? "#ffffff" : secondaryTextColor }),
|
|
484
|
-
/* @__PURE__ */ jsx(Text, { style: [styles.emptyModePillLabel, {
|
|
485
|
-
color: activeMode === "chat" ? "#ffffff" : secondaryTextColor
|
|
486
|
-
}], children: "Chat" })
|
|
487
|
-
] }),
|
|
488
|
-
/* @__PURE__ */ jsxs(Pressable, { onPress: () => handleModeSwitch("deep-search"), style: [styles.emptyModePill, activeMode === "deep-search" && styles.emptyModePillActive, activeMode === "deep-search" && {
|
|
489
|
-
backgroundColor: isDark ? "#312e81" : "#4338ca"
|
|
490
|
-
}], accessibilityRole: "button", accessibilityLabel: "Switch to deep-search mode", children: [
|
|
491
|
-
/* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "lightning-bolt-outline", size: 14, color: activeMode === "deep-search" ? "#ffffff" : secondaryTextColor }),
|
|
492
|
-
/* @__PURE__ */ jsx(Text, { style: [styles.emptyModePillLabel, {
|
|
493
|
-
color: activeMode === "deep-search" ? "#ffffff" : secondaryTextColor
|
|
494
|
-
}], children: "Deep Search" })
|
|
495
|
-
] })
|
|
496
|
-
] }),
|
|
497
|
-
/* @__PURE__ */ jsx(Text, { style: [styles.emptyCenterTitle, {
|
|
498
|
-
color: primaryTextColor
|
|
499
|
-
}], children: "How do you want to start?" }),
|
|
500
|
-
/* @__PURE__ */ jsx(Text, { style: [styles.emptySubtitle, {
|
|
501
|
-
color: secondaryTextColor
|
|
502
|
-
}], children: "Use Chat for quick help, or Deep Search for researched, source-backed answers." })
|
|
503
|
-
] }) }),
|
|
577
|
+
showChatHistory ? /* @__PURE__ */ jsx(ChatHistoryLanding, { onSelectSession: handleSelectHistorySession, onCompose: handleComposeFromHistory }) : hasRenderableConversation ? /* @__PURE__ */ jsx(ChatContentSection, { contentMaxWidth, composerScrollBottomPadding, messages, response, isLoading, disabled, isStreaming, onStop, cancel, onSend: handleSendMessage, onBackPress: handleNewChat }) : /* @__PURE__ */ jsx(EmptyStateSection, { isDark, secondaryTextColor, primaryTextColor, activeMode, onModeSwitch: handleModeSwitch }),
|
|
504
578
|
!showChatHistory ? /* @__PURE__ */ jsx(View, { style: [styles.bottomComposerWrap, {
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
579
|
+
bottom: Math.max(0, keyboardHeight - insets.bottom),
|
|
580
|
+
paddingBottom: Math.max(insets.bottom - 6, 2)
|
|
581
|
+
// backgroundColor: composerBarBackground,
|
|
582
|
+
// borderTopColor: composerBarBorder,
|
|
508
583
|
}], children: /* @__PURE__ */ jsx(View, { style: [styles.bottomComposerInner, {
|
|
509
584
|
width: contentMaxWidth
|
|
510
|
-
}], children: /* @__PURE__ */ jsx(InputToolBar, { inputConfig:
|
|
511
|
-
value,
|
|
512
|
-
onChange: (e) => setValue(e.nativeEvent.text),
|
|
513
|
-
placeholder: inputPlaceholder,
|
|
514
|
-
disabled: isLoading || disabled
|
|
515
|
-
}, leftItems, rightItems, templateButton: null, templateModalConfig: null, micSendButton: {
|
|
516
|
-
hasContent: canSubmit,
|
|
517
|
-
onSend: () => handleSubmit(),
|
|
518
|
-
onMic: () => console.log("mic"),
|
|
519
|
-
disabled: isLoading || disabled,
|
|
520
|
-
isLoading,
|
|
521
|
-
onStop: isStreaming ? cancel : onStop
|
|
522
|
-
} }) }) }) : null,
|
|
585
|
+
}], children: /* @__PURE__ */ jsx(InputToolBar, { inputConfig, leftItems, rightItems, templateButton: null, templateModalConfig: null, micSendButton }) }) }) : null,
|
|
523
586
|
showSendingLoader ? /* @__PURE__ */ jsx(View, { pointerEvents: "none", style: pinSendingLoaderNearComposer ? [styles.sendingLoaderAboveComposer, {
|
|
524
587
|
bottom: Math.max(insets.bottom, 12) + SENDING_LOADER_COMPOSER_RESERVE_PX
|
|
525
588
|
}] : styles.sendingLoaderEmptyState, children: /* @__PURE__ */ jsx(YantraBrandLoader, { size: YANTRA_LOADER_SIZE_COMPACT }) }) : null
|
|
526
589
|
] }) }),
|
|
527
|
-
/* @__PURE__ */ jsx(DeepSearchModal, { visible: isDeepSearchModalOpen, query: deepSearchQuery, summaryText: deepSearchPreviewNormalized, sources: deepSearchSources, isStreaming, researchProcessOpen, sourcesAccordionOpen, onToggleResearchProcess:
|
|
528
|
-
void handleRetryDeepSearch();
|
|
529
|
-
}, onStop: cancel, onClose: handleDeepSearchClose })
|
|
590
|
+
/* @__PURE__ */ jsx(DeepSearchModal, { visible: isDeepSearchModalOpen, query: deepSearchQuery, summaryText: deepSearchPreviewNormalized, sources: deepSearchSources, isStreaming, researchProcessOpen, sourcesAccordionOpen, onToggleResearchProcess: handleToggleResearchProcess, onToggleSourcesAccordion: handleToggleSourcesAccordion, onRetry: handleRetryDeepSearchPress, onStop: cancel, onClose: handleDeepSearchClose })
|
|
530
591
|
] });
|
|
531
592
|
}
|
|
532
593
|
const styles = StyleSheet.create({
|
|
@@ -662,12 +723,13 @@ const styles = StyleSheet.create({
|
|
|
662
723
|
},
|
|
663
724
|
bottomComposerWrap: {
|
|
664
725
|
position: "absolute",
|
|
726
|
+
width: "100%",
|
|
665
727
|
left: 0,
|
|
666
728
|
right: 0,
|
|
667
729
|
bottom: 0,
|
|
668
730
|
alignItems: "center",
|
|
669
731
|
justifyContent: "flex-end",
|
|
670
|
-
borderTopWidth: 1,
|
|
732
|
+
// borderTopWidth: 1,
|
|
671
733
|
shadowColor: "#0f172a",
|
|
672
734
|
shadowOpacity: 0.08,
|
|
673
735
|
shadowRadius: 8,
|
|
@@ -675,6 +737,7 @@ const styles = StyleSheet.create({
|
|
|
675
737
|
width: 0,
|
|
676
738
|
height: -2
|
|
677
739
|
},
|
|
740
|
+
backgroundColor: "transparent",
|
|
678
741
|
elevation: 6
|
|
679
742
|
},
|
|
680
743
|
bottomComposerInner: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HomeScreen.js","sources":["../../../src/screens/Home/HomeScreen.tsx"],"sourcesContent":["import React, { FC, useState, useCallback, useEffect, useMemo } from 'react';\nimport {\n Keyboard,\n Platform,\n Pressable,\n StyleSheet,\n TouchableWithoutFeedback,\n View,\n useColorScheme,\n useWindowDimensions,\n} from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { Box, InputToolBar, Text, getDefaultLeftItems, getDefaultRightItems } from '@admin-layout/gluestack-ui-mobile';\nimport { SafeAreaView, useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { useNavigation, useRoute, StackActions, CommonActions } from '@react-navigation/native';\nimport { MessagesContainerUI } from '@messenger-box/platform-mobile';\nimport { v4 as uuidv4 } from 'uuid';\nimport { ContributionSchemaId } from 'common';\nimport { useGetContextDataQuery, useGetPageSettingsQuery } from 'common/graphql';\nimport { useGatewayContext } from '../../contexts/GatewayContext';\nimport { GatewayToolbarButtonMobile } from '../../components/GatewayToolbarButtonMobile';\nimport { useCdecliAutoConnect } from '../../hooks/useCdecliAutoConnect';\nimport { usePrerequisiteIds } from '../../hooks/usePrerequisiteIds';\nimport { useChatMutations, useChatSessions } from '../../hooks/useChatApi';\nimport { useChatStream, type UseChatStreamRouting } from '../../hooks/useChatStream';\nimport type { ModeSubmission, RoutingMode } from './types';\nimport DeepSearchModal from './components/DeepSearchModal';\nimport ChatHistoryLanding from './components/ChatHistoryLanding';\nimport { extractDeepSearchSources, normalizeSummaryText, type DeepSearchSourceItem } from './deepSearchUtils';\nimport { YantraBrandLoader, YANTRA_LOADER_SIZE_COMPACT } from '../../components/YantraBrandLoader';\nimport { navigationRef } from '@common-stack/client-react';\nimport { mobileTokens } from '../../theme/mobileTokens';\n\nexport type { RoutingMode, ModeSubmission };\n\nexport interface HomeScreenProps {\n initialMode?: RoutingMode;\n onSubmit?: (submission: ModeSubmission) => void;\n onStop?: () => void;\n isLoading?: boolean;\n disabled?: boolean;\n}\n\n/** Reserve the bottom composer band (toolbar + mode row) so the sending loader centers in the messages area above it. */\nconst SENDING_LOADER_COMPOSER_RESERVE_PX = 156;\nconst IOS_KEYBOARD_DOCKING_ADJUST_PX = 10;\nconst COMPOSER_SCROLL_RESERVE_PX = 136;\n\nfunction organizationFromSettingsValue(settings: unknown): string | null {\n if (settings == null) return null;\n if (typeof settings === 'string') {\n try {\n const parsed = JSON.parse(settings) as { organization?: string };\n const o = parsed?.organization;\n return typeof o === 'string' && o.trim() ? o.trim() : null;\n } catch {\n return null;\n }\n }\n if (typeof settings === 'object' && settings !== null && 'organization' in settings) {\n const o = (settings as { organization?: unknown }).organization;\n return typeof o === 'string' && o.trim() ? o.trim() : null;\n }\n return null;\n}\n\nfunction projectFromSettingsValue(settings: unknown): string | null {\n if (settings == null) return null;\n if (typeof settings === 'string') {\n try {\n const parsed = JSON.parse(settings) as { project?: string };\n const p = parsed?.project;\n return typeof p === 'string' && p.trim() ? p.trim() : null;\n } catch {\n return null;\n }\n }\n if (typeof settings === 'object' && settings !== null && 'project' in settings) {\n const p = (settings as { project?: unknown }).project;\n return typeof p === 'string' && p.trim() ? p.trim() : null;\n }\n return null;\n}\n\nfunction HomeScreenContent({\n initialMode = 'chat',\n onSubmit: onSubmitProp,\n onStop,\n isLoading: isLoadingProp = false,\n disabled = false,\n}: HomeScreenProps) {\n const { width: screenWidth } = useWindowDimensions();\n const colorScheme = useColorScheme();\n const isDark = colorScheme === 'dark';\n const navigation = useNavigation();\n const route = useRoute<any>();\n const hasRehydratedOrgRef = React.useRef(false);\n const [value, setValue] = useState('');\n const [activeMode, setActiveMode] = useState<RoutingMode>(initialMode);\n const [activeSessionId, setActiveSessionId] = useState<string | null>(null);\n const [isDeepSearchModalOpen, setIsDeepSearchModalOpen] = useState(false);\n const [deepSearchQuery, setDeepSearchQuery] = useState<string | null>(null);\n const [deepSearchSummary, setDeepSearchSummary] = useState('');\n const [deepSearchSources, setDeepSearchSources] = useState<DeepSearchSourceItem[]>([]);\n const [researchProcessOpen, setResearchProcessOpen] = useState(true);\n const [sourcesAccordionOpen, setSourcesAccordionOpen] = useState(true);\n /** Full-screen chat history list opened from header (chat UI remains default). */\n const [showChatHistory, setShowChatHistory] = useState(false);\n /** True while creating channel id before send (covers UI delay before chatLoading flips). */\n const [channelBootstrap, setChannelBootstrap] = useState(false);\n\n const { createChannel } = useChatMutations();\n const { sessions } = useChatSessions();\n const { orgName: resolvedOrgName, projectId } = usePrerequisiteIds();\n const { data: contextData } = useGetContextDataQuery();\n const cdecodeUri = contextData?.getContextData?.cdecodeUri;\n const { data: pageSettingsData } = useGetPageSettingsQuery({\n variables: {\n resourceUri: cdecodeUri as never,\n options: {\n schemaId: ContributionSchemaId.Configuration,\n configKey: 'account.default',\n includeMarketplace: true,\n },\n },\n skip: !cdecodeUri,\n fetchPolicy: 'cache-first',\n });\n const fallbackOrgNameFromSettings = useMemo(\n () => organizationFromSettingsValue(pageSettingsData?.pageSettings?.settings),\n [pageSettingsData],\n );\n const fallbackProjectIdFromSettings = useMemo(\n () => projectFromSettingsValue(pageSettingsData?.pageSettings?.settings),\n [pageSettingsData],\n );\n const routeOrgName = ((route?.params?.orgName as string | undefined) ?? '').trim() || null;\n const effectiveOrgName = resolvedOrgName || fallbackOrgNameFromSettings || routeOrgName || null;\n /** Prefer hook (same source as web); fall back to this screen's page settings when prerequisites lag one frame. */\n const effectiveProjectId = projectId || fallbackProjectIdFromSettings || null;\n const { selectedGateway } = useGatewayContext();\n const cdecliSelected = selectedGateway?.channelType === 'cdecli-serve';\n const cdecli = useCdecliAutoConnect(cdecliSelected, activeSessionId ?? undefined);\n\n /** Same gate as web ChatSessionPage (`cdecliConnected`): only route via gateway when the channel is live. */\n const cdecliConnected = cdecliSelected && cdecli.channelConnected;\n\n const effectivePersistenceMode = cdecli.persistenceMode ?? selectedGateway?.persistenceMode ?? 'frontend';\n\n const chatRouting: UseChatStreamRouting = useMemo(\n () =>\n cdecliConnected\n ? {\n kind: 'cdecli',\n channelConnected: cdecli.channelConnected,\n accountId: cdecli.accountId,\n persistenceMode: effectivePersistenceMode,\n }\n : { kind: 'groq' },\n [cdecliConnected, cdecli.channelConnected, cdecli.accountId, effectivePersistenceMode],\n );\n\n const chat = useChatStream(activeSessionId, chatRouting);\n\n const {\n messages,\n response,\n error: chatError,\n isLoading: chatLoading,\n isStreaming,\n hasMessages,\n sendMessage,\n cancel,\n clearMessages,\n } = chat;\n\n const trimmedQuery = value.trim();\n const hasQuery = trimmedQuery.length > 0;\n const canSubmit = hasQuery && Boolean(routeOrgName || effectiveOrgName);\n const isLoading = isLoadingProp || chatLoading;\n const isResearchMode = activeMode === 'deep-search';\n const inputPlaceholder = !effectiveOrgName\n ? 'Initializing workspace...'\n : isResearchMode\n ? 'Research anything...'\n : 'Ask anything...';\n const waitingForAssistant = useMemo(() => {\n if ((!chatLoading && !isStreaming) || messages.length === 0) return false;\n return messages[messages.length - 1]?.role === 'user';\n }, [chatLoading, isStreaming, messages]);\n\n /** Thread has bubbles or streaming buffer → anchor loader above composer; empty landing → center. */\n const pinSendingLoaderNearComposer = useMemo(\n () => messages.length > 0 || Boolean((response ?? '').trim()),\n [messages.length, response],\n );\n\n const showSendingLoader = !showChatHistory && (channelBootstrap || waitingForAssistant);\n\n const insets = useSafeAreaInsets();\n const [keyboardHeight, setKeyboardHeight] = useState(0);\n\n // useEffect(() => {\n // navigation.setOptions({\n // headerLeft: () => null,\n // });\n // }, []);\n\n const handleModeSwitch = useCallback((mode: RoutingMode) => {\n setActiveMode(mode);\n }, []);\n\n // Web-aligned flow: create channel first, then send first post using returned channel id.\n const ensureSessionId = useCallback(\n async (mode: RoutingMode): Promise<string> => {\n if (activeSessionId) return activeSessionId;\n if (!effectiveOrgName || !effectiveProjectId) {\n throw new Error('Workspace is still initializing. Please retry in a moment.');\n }\n const requestedChannelId = uuidv4();\n const title =\n mode === 'deep-search' ? `deep-search-${requestedChannelId}` : `chat-channel-${requestedChannelId}`;\n const session = await createChannel({\n id: requestedChannelId,\n title,\n isShared: false,\n sharedSlug: null,\n isArchived: false,\n isPinned: false,\n model: null,\n systemPrompt: null,\n orgName: effectiveOrgName,\n projectId: effectiveProjectId,\n } as any);\n setActiveSessionId(session.id);\n return session.id;\n },\n [activeSessionId, createChannel, effectiveOrgName, effectiveProjectId],\n );\n\n const handleSubmit = useCallback(\n async (attachments?: ModeSubmission['attachments']) => {\n if (!canSubmit || isLoading || disabled) return;\n\n const submission: ModeSubmission = {\n mode: activeMode,\n query: trimmedQuery,\n attachments,\n };\n\n if (activeMode === 'deep-search') {\n if (onSubmitProp) {\n onSubmitProp(submission);\n }\n setValue('');\n setDeepSearchQuery(trimmedQuery);\n setDeepSearchSummary('');\n setDeepSearchSources([]);\n setIsDeepSearchModalOpen(true);\n try {\n setChannelBootstrap(true);\n const sessionId = await ensureSessionId('deep-search');\n await sendMessage(trimmedQuery, undefined, sessionId);\n } catch (err) {\n console.error('[HomeScreen] Failed to create deep-search session:', err);\n } finally {\n setChannelBootstrap(false);\n }\n return;\n }\n\n if (onSubmitProp && activeMode === 'chat') {\n onSubmitProp(submission);\n setValue('');\n return;\n }\n\n try {\n setChannelBootstrap(true);\n const sessionId = await ensureSessionId('chat');\n setValue('');\n await sendMessage(trimmedQuery, undefined, sessionId);\n } catch (err) {\n console.error('[HomeScreen] Failed to create session:', err);\n } finally {\n setChannelBootstrap(false);\n }\n },\n [\n canSubmit,\n isLoading,\n disabled,\n activeMode,\n trimmedQuery,\n activeSessionId,\n onSubmitProp,\n ensureSessionId,\n sendMessage,\n ],\n );\n\n const handleNewChat = useCallback(() => {\n setShowChatHistory(false);\n setActiveSessionId(null);\n setValue('');\n clearMessages();\n }, [clearMessages]);\n\n const handleOpenChatHistory = useCallback(() => {\n setShowChatHistory(true);\n }, []);\n\n const handleCloseChatHistory = useCallback(() => {\n setShowChatHistory(false);\n }, []);\n\n const handleToggleGateway = useCallback(() => {\n // CDeCLI connection is selection-driven via useCdecliAutoConnect.\n }, []);\n\n const gatewayToolbarStatus =\n cdecli.status === 'connecting'\n ? 'connecting'\n : cdecli.status === 'connected'\n ? 'connected'\n : cdecli.status === 'error'\n ? 'error'\n : 'disconnected';\n\n const gatewayToolbarTone = 'default';\n\n const gatewayToolbarLabel = cdecli.status === 'connecting' ? 'Checking...' : undefined;\n\n const gatewayToolbarError = cdecli.error;\n const surfaceColor = isDark ? '#0f172a' : mobileTokens.color.bg;\n const primaryTextColor = isDark ? '#e5e7eb' : mobileTokens.color.text;\n const secondaryTextColor = isDark ? '#94a3b8' : mobileTokens.color.textMuted;\n const accentColor = isDark ? '#a5b4fc' : '#4338ca';\n const newChatIconColor = isDark ? '#e5e7eb' : '#000000';\n const composerBarBackground = isDark ? 'rgba(15, 23, 42, 0.94)' : 'rgba(248, 250, 252, 0.97)';\n const composerBarBorder = isDark ? 'rgba(71, 85, 105, 0.5)' : 'rgba(148, 163, 184, 0.25)';\n const contentMaxWidth = Math.min(720, Math.max(360, screenWidth - 24));\n\n useEffect(() => {\n const currentOrgName = (route?.params?.orgName as string | undefined)?.trim() || '';\n if (!effectiveOrgName || currentOrgName === effectiveOrgName) return;\n // Keep current screen params in sync with resolved org context.\n (navigation as any).setParams?.({ orgName: effectiveOrgName });\n }, [navigation, route?.params?.orgName, effectiveOrgName]);\n\n useEffect(() => {\n const currentOrgName = (route?.params?.orgName as string | undefined)?.trim() || '';\n if (hasRehydratedOrgRef.current || currentOrgName || !effectiveOrgName) return;\n\n hasRehydratedOrgRef.current = true;\n console.log('effectiveOrgName..', effectiveOrgName);\n // navigationRef.navigate('MainStack.Layout.Home', {\n // orgName: effectiveOrgName,\n // });\n // Also navigate with merge=true to patch parent stack params in nested navigation state.\n navigation.getParent()?.dispatch(\n CommonActions.navigate('MainStack', {\n screen: 'MainStack.Layout.Home',\n params: {\n orgName: effectiveOrgName,\n },\n merge: true,\n key: Date.now().toString(),\n }),\n );\n\n // CommonActions.reset({\n // index: 0,\n // routes: [\n // {\n // name: 'MainStack',\n // state: {\n // routes: [\n // {\n // name: 'MainStack.Layout.Home',\n // params: { orgName: effectiveOrgName },\n // },\n // ],\n // },\n // },\n // ],\n // });\n\n // (navigation as any).navigate('MainStack', {\n // screen: 'MainStack.Layout.Home',\n // params: { orgName: effectiveOrgName },\n // merge: true,\n // key: Date.now().toString(),\n // });\n }, [navigation, route?.params?.orgName, effectiveOrgName, navigationRef]);\n\n useEffect(() => {\n navigation.setOptions({\n drawerLabel: 'Chat',\n headerTitle: showChatHistory ? 'Chats' : 'Yantra',\n headerLeft: showChatHistory\n ? () => (\n <Pressable\n onPress={handleCloseChatHistory}\n style={({ pressed }) => [styles.backButton, pressed && styles.newChatButtonPressed]}\n accessibilityLabel=\"Back to chat\"\n >\n <MaterialCommunityIcons name=\"chevron-left\" size={24} color={primaryTextColor} />\n </Pressable>\n )\n : undefined,\n headerRight: () => (\n <View style={styles.headerRight}>\n <GatewayToolbarButtonMobile\n gatewayStatus={gatewayToolbarStatus}\n gatewayError={gatewayToolbarError}\n onToggleGateway={handleToggleGateway}\n disabled={false}\n statusLabel={gatewayToolbarLabel}\n tone={gatewayToolbarTone}\n />\n {!showChatHistory ? (\n <Pressable\n onPress={handleOpenChatHistory}\n style={({ pressed }) => [\n styles.historyHeaderButton,\n pressed && styles.historyHeaderButtonPressed,\n ]}\n accessibilityLabel=\"Chat history\"\n accessibilityRole=\"button\"\n >\n <View\n style={[\n styles.historyHeaderButtonInner,\n isDark ? styles.historyHeaderButtonInnerDark : null,\n ]}\n >\n <MaterialCommunityIcons name=\"history\" size={19} color={accentColor} />\n </View>\n </Pressable>\n ) : null}\n <Pressable\n onPress={handleNewChat}\n style={({ pressed }) => [styles.newChatButton, pressed && styles.newChatButtonPressed]}\n accessibilityLabel=\"New chat\"\n >\n <View style={[styles.newChatButtonInner, isDark ? styles.newChatButtonInnerDark : null]}>\n <MaterialCommunityIcons name=\"chat-plus-outline\" size={20} color={newChatIconColor} />\n </View>\n </Pressable>\n </View>\n ),\n });\n }, [\n navigation,\n showChatHistory,\n handleCloseChatHistory,\n handleOpenChatHistory,\n handleNewChat,\n handleToggleGateway,\n gatewayToolbarStatus,\n gatewayToolbarError,\n gatewayToolbarLabel,\n gatewayToolbarTone,\n primaryTextColor,\n accentColor,\n newChatIconColor,\n isDark,\n ]);\n\n const handleSendMessage = useCallback(\n async (text: string) => {\n if (!text.trim() || isLoading || disabled) return;\n const submission: ModeSubmission = { mode: activeMode, query: text.trim() };\n if (activeMode === 'deep-search') {\n if (onSubmitProp) {\n onSubmitProp(submission);\n }\n setDeepSearchQuery(text.trim());\n setDeepSearchSummary('');\n setDeepSearchSources([]);\n setIsDeepSearchModalOpen(true);\n try {\n setChannelBootstrap(true);\n const sessionId = await ensureSessionId('deep-search');\n await sendMessage(text.trim(), undefined, sessionId);\n } catch (err) {\n console.error('[HomeScreen] Failed to create deep-search session:', err);\n } finally {\n setChannelBootstrap(false);\n }\n return;\n }\n try {\n setChannelBootstrap(true);\n const sessionId = await ensureSessionId('chat');\n await sendMessage(text.trim(), undefined, sessionId);\n } catch (err) {\n console.error('[HomeScreen] Failed to create session:', err);\n } finally {\n setChannelBootstrap(false);\n }\n },\n [isLoading, disabled, activeMode, onSubmitProp, ensureSessionId, sendMessage],\n );\n\n const leftItems = getDefaultLeftItems({\n search: {\n active: activeMode === 'chat',\n onClick: () => handleModeSwitch('chat'),\n },\n zap: {\n active: activeMode === 'deep-search',\n onClick: () => handleModeSwitch('deep-search'),\n },\n lightbulb: { enabled: false },\n });\n\n const rightItems = getDefaultRightItems({\n tag: { enabled: false },\n chip: { enabled: false },\n camera: { enabled: false, onClick: () => console.log('camera') },\n image: { enabled: false, onClick: () => console.log('image') },\n attach: { enabled: false, onClick: () => console.log('attach') },\n });\n const latestAssistantMessage = useMemo(() => {\n for (let i = messages.length - 1; i >= 0; i -= 1) {\n if (messages[i]?.role === 'assistant') return messages[i]?.content ?? '';\n }\n return '';\n }, [messages]);\n\n const deepSearchPreviewContent = response || deepSearchSummary;\n const deepSearchPreviewNormalized = useMemo(\n () => normalizeSummaryText(deepSearchPreviewContent || deepSearchSummary || ''),\n [deepSearchPreviewContent, deepSearchSummary],\n );\n\n const handleDeepSearchClose = useCallback(() => {\n if (isStreaming) {\n cancel();\n }\n setIsDeepSearchModalOpen(false);\n setDeepSearchQuery(null);\n setDeepSearchSummary('');\n setDeepSearchSources([]);\n setResearchProcessOpen(true);\n setSourcesAccordionOpen(true);\n }, [isStreaming, cancel]);\n\n const handleRetryDeepSearch = useCallback(async () => {\n if (!deepSearchQuery || isStreaming) return;\n try {\n setChannelBootstrap(true);\n const sessionId = await ensureSessionId('deep-search');\n await sendMessage(deepSearchQuery, undefined, sessionId);\n } catch (error) {\n console.error('[HomeScreen] Failed to retry deep-search:', error);\n } finally {\n setChannelBootstrap(false);\n }\n }, [deepSearchQuery, isStreaming, ensureSessionId, sendMessage]);\n\n useEffect(() => {\n if (!deepSearchQuery || isStreaming || !latestAssistantMessage) return;\n setDeepSearchSummary(normalizeSummaryText(latestAssistantMessage));\n setDeepSearchSources(extractDeepSearchSources(latestAssistantMessage));\n }, [deepSearchQuery, isStreaming, latestAssistantMessage]);\n\n useEffect(() => {\n if (Platform.OS === 'ios') {\n const frameSub = Keyboard.addListener('keyboardWillChangeFrame', (event) =>\n setKeyboardHeight(event.endCoordinates?.height ?? 0),\n );\n const showSub = Keyboard.addListener('keyboardWillShow', (event) =>\n setKeyboardHeight(event.endCoordinates?.height ?? 0),\n );\n const hideSub = Keyboard.addListener('keyboardWillHide', () => setKeyboardHeight(0));\n return () => {\n frameSub.remove();\n showSub.remove();\n hideSub.remove();\n };\n }\n\n const showSub = Keyboard.addListener('keyboardDidShow', (event) =>\n setKeyboardHeight(event.endCoordinates?.height ?? 0),\n );\n const hideSub = Keyboard.addListener('keyboardDidHide', () => setKeyboardHeight(0));\n return () => {\n showSub.remove();\n hideSub.remove();\n };\n }, []);\n\n const composerBottomOffset = Math.max(\n 0,\n keyboardHeight - insets.bottom - (Platform.OS === 'ios' ? IOS_KEYBOARD_DOCKING_ADJUST_PX : 0),\n );\n const composerScrollBottomPadding = COMPOSER_SCROLL_RESERVE_PX;\n\n return (\n <SafeAreaView edges={['left', 'right', 'bottom']} style={{ flex: 1, backgroundColor: surfaceColor }}>\n <TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>\n <Box flex={1} width=\"100%\" position=\"relative\">\n {(chatError || cdecli.error) && (\n <Box\n mb=\"$2\"\n mx=\"$4\"\n p=\"$3\"\n borderRadius=\"$md\"\n style={{\n backgroundColor: isDark ? '#2b1a1d' : '#fef2f2',\n borderWidth: 1,\n borderColor: isDark ? '#7f1d1d' : '#fecaca',\n }}\n >\n <Text fontSize=\"$sm\" style={{ color: isDark ? '#fecaca' : '#991b1b' }}>\n {chatError || cdecli.error}\n </Text>\n </Box>\n )}\n {showChatHistory ? (\n <ChatHistoryLanding\n onSelectSession={(channelId) => {\n setShowChatHistory(false);\n setActiveSessionId(channelId);\n setActiveMode('chat');\n }}\n onCompose={() => {\n setShowChatHistory(false);\n setActiveSessionId(null);\n setValue('');\n clearMessages();\n }}\n />\n ) : hasMessages || response ? (\n <Box flex={1} width=\"100%\" alignSelf=\"stretch\">\n <MessagesContainerUI\n mode=\"chat\"\n showBackButton={false}\n onBackPress={handleNewChat}\n compactTop\n messagesContainerStyle={{\n paddingHorizontal: 0,\n paddingTop: 0,\n paddingBottom: composerScrollBottomPadding,\n margin: 0,\n marginTop: 0,\n alignSelf: 'center',\n width: contentMaxWidth,\n }}\n listContentStyle={{\n paddingTop: 0,\n paddingBottom: composerScrollBottomPadding,\n margin: 0,\n marginTop: 0,\n width: contentMaxWidth,\n alignSelf: 'center',\n }}\n messages={messages.map((msg, index) => ({\n id: `msg-${index}-${msg.role}`,\n role: msg.role,\n content: msg.content,\n metadata: msg.metadata,\n }))}\n streamingContent={response}\n currentUser={{ id: 'user' }}\n onSend={handleSendMessage}\n disabled={isLoading || disabled}\n isLoading={isLoading}\n onStop={isStreaming ? cancel : onStop}\n renderPlanInputToolbar={() => null}\n renderBuildInputToolbar={() => null}\n />\n </Box>\n ) : (\n <Box flex={1} width=\"100%\">\n <View style={styles.emptyCenterTitleWrap}>\n <Text style={[styles.emptyEyebrow, { color: secondaryTextColor }]}>\n Choose your mode\n </Text>\n <View\n style={[\n styles.emptyModePillRow,\n {\n backgroundColor: isDark ? 'rgba(30, 41, 59, 0.9)' : '#eef2ff',\n borderColor: isDark\n ? 'rgba(148, 163, 184, 0.26)'\n : 'rgba(67, 56, 202, 0.15)',\n },\n ]}\n >\n <Pressable\n onPress={() => handleModeSwitch('chat')}\n style={[\n styles.emptyModePill,\n activeMode === 'chat' && styles.emptyModePillActive,\n activeMode === 'chat' && {\n backgroundColor: isDark ? '#312e81' : '#4338ca',\n },\n ]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Switch to chat mode\"\n >\n <MaterialCommunityIcons\n name=\"magnify\"\n size={14}\n color={activeMode === 'chat' ? '#ffffff' : secondaryTextColor}\n />\n <Text\n style={[\n styles.emptyModePillLabel,\n { color: activeMode === 'chat' ? '#ffffff' : secondaryTextColor },\n ]}\n >\n Chat\n </Text>\n </Pressable>\n <Pressable\n onPress={() => handleModeSwitch('deep-search')}\n style={[\n styles.emptyModePill,\n activeMode === 'deep-search' && styles.emptyModePillActive,\n activeMode === 'deep-search' && {\n backgroundColor: isDark ? '#312e81' : '#4338ca',\n },\n ]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Switch to deep-search mode\"\n >\n <MaterialCommunityIcons\n name=\"lightning-bolt-outline\"\n size={14}\n color={activeMode === 'deep-search' ? '#ffffff' : secondaryTextColor}\n />\n <Text\n style={[\n styles.emptyModePillLabel,\n {\n color:\n activeMode === 'deep-search' ? '#ffffff' : secondaryTextColor,\n },\n ]}\n >\n Deep Search\n </Text>\n </Pressable>\n </View>\n <Text style={[styles.emptyCenterTitle, { color: primaryTextColor }]}>\n How do you want to start?\n </Text>\n <Text style={[styles.emptySubtitle, { color: secondaryTextColor }]}>\n Use Chat for quick help, or Deep Search for researched, source-backed answers.\n </Text>\n </View>\n </Box>\n )}\n {!showChatHistory ? (\n <View\n style={[\n styles.bottomComposerWrap,\n {\n paddingBottom: Math.max(insets.bottom - 6, 2) + composerBottomOffset,\n backgroundColor: composerBarBackground,\n borderTopColor: composerBarBorder,\n },\n ]}\n >\n <View style={[styles.bottomComposerInner, { width: contentMaxWidth }]}>\n <InputToolBar\n inputConfig={{\n value,\n onChange: (e) => setValue(e.nativeEvent.text),\n placeholder: inputPlaceholder,\n disabled: isLoading || disabled,\n }}\n leftItems={leftItems}\n rightItems={rightItems}\n templateButton={null}\n templateModalConfig={null}\n micSendButton={{\n hasContent: canSubmit,\n onSend: () => handleSubmit(),\n onMic: () => console.log('mic'),\n disabled: isLoading || disabled,\n isLoading,\n onStop: isStreaming ? cancel : onStop,\n }}\n />\n </View>\n </View>\n ) : null}\n {showSendingLoader ? (\n <View\n pointerEvents=\"none\"\n style={\n pinSendingLoaderNearComposer\n ? [\n styles.sendingLoaderAboveComposer,\n {\n bottom: Math.max(insets.bottom, 12) + SENDING_LOADER_COMPOSER_RESERVE_PX,\n },\n ]\n : styles.sendingLoaderEmptyState\n }\n >\n <YantraBrandLoader size={YANTRA_LOADER_SIZE_COMPACT} />\n </View>\n ) : null}\n </Box>\n </TouchableWithoutFeedback>\n <DeepSearchModal\n visible={isDeepSearchModalOpen}\n query={deepSearchQuery}\n summaryText={deepSearchPreviewNormalized}\n sources={deepSearchSources}\n isStreaming={isStreaming}\n researchProcessOpen={researchProcessOpen}\n sourcesAccordionOpen={sourcesAccordionOpen}\n onToggleResearchProcess={() => setResearchProcessOpen((prev) => !prev)}\n onToggleSourcesAccordion={() => setSourcesAccordionOpen((prev) => !prev)}\n onRetry={() => {\n void handleRetryDeepSearch();\n }}\n onStop={cancel}\n onClose={handleDeepSearchClose}\n />\n </SafeAreaView>\n );\n}\n\nconst styles = StyleSheet.create({\n /** First message / empty screen: loader in the middle of the pane. */\n sendingLoaderEmptyState: {\n position: 'absolute',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n justifyContent: 'center',\n alignItems: 'center',\n zIndex: 40,\n },\n /** Active thread: loader just above the input, not over message history. */\n sendingLoaderAboveComposer: {\n position: 'absolute',\n left: 0,\n right: 0,\n alignItems: 'center',\n justifyContent: 'flex-end',\n paddingBottom: 8,\n zIndex: 40,\n },\n headerRight: {\n flexDirection: 'row',\n alignItems: 'center',\n marginRight: 6,\n gap: 6,\n },\n historyHeaderButton: {\n marginHorizontal: 0,\n padding: 0,\n borderRadius: 22,\n },\n historyHeaderButtonPressed: {\n opacity: 0.72,\n },\n historyHeaderButtonInner: {\n width: 32,\n height: 32,\n borderRadius: 16,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: mobileTokens.color.primarySoft,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: mobileTokens.color.primaryBorder,\n shadowColor: '#312e81',\n shadowOpacity: 0.1,\n shadowRadius: 5,\n shadowOffset: { width: 0, height: 2 },\n elevation: 2,\n },\n historyHeaderButtonInnerDark: {\n backgroundColor: '#1e293b',\n borderColor: 'rgba(148, 163, 184, 0.35)',\n shadowColor: '#111827',\n },\n newChatButton: {\n padding: 0,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 22,\n },\n newChatButtonInner: {\n width: 32,\n height: 32,\n borderRadius: 16,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: mobileTokens.color.surface,\n borderWidth: 1,\n borderColor: mobileTokens.color.border,\n shadowColor: '#0f172a',\n shadowOpacity: 0.08,\n shadowRadius: 5,\n shadowOffset: { width: 0, height: 2 },\n elevation: 2,\n },\n newChatButtonInnerDark: {\n backgroundColor: '#0f172a',\n borderColor: '#334155',\n },\n backButton: {\n marginLeft: 6,\n width: 36,\n height: 36,\n borderRadius: 18,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: '#f3f4f6',\n },\n newChatButtonPressed: {\n opacity: 0.6,\n },\n emptyCenterTitleWrap: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'flex-start',\n paddingHorizontal: 24,\n paddingTop: 88,\n paddingBottom: 52,\n maxWidth: 520,\n alignSelf: 'center',\n },\n emptyEyebrow: {\n fontSize: 12,\n fontWeight: '600',\n letterSpacing: 0.4,\n textTransform: 'uppercase',\n marginBottom: 10,\n },\n emptyCenterTitle: {\n marginTop: 2,\n fontSize: 30,\n fontWeight: '700',\n textAlign: 'center',\n letterSpacing: -0.5,\n },\n emptySubtitle: {\n marginTop: 12,\n fontSize: 14,\n lineHeight: 22,\n textAlign: 'center',\n paddingHorizontal: 16,\n maxWidth: 360,\n },\n bottomComposerWrap: {\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n alignItems: 'center',\n justifyContent: 'flex-end',\n borderTopWidth: 1,\n shadowColor: '#0f172a',\n shadowOpacity: 0.08,\n shadowRadius: 8,\n shadowOffset: { width: 0, height: -2 },\n elevation: 6,\n },\n bottomComposerInner: {\n paddingHorizontal: 14,\n paddingTop: 10,\n paddingBottom: 4,\n },\n emptyModePillRow: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n marginBottom: 22,\n borderRadius: 16,\n padding: 6,\n borderWidth: 1,\n shadowColor: '#312e81',\n shadowOpacity: 0.08,\n shadowRadius: 8,\n shadowOffset: { width: 0, height: 3 },\n elevation: 3,\n },\n emptyModePill: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 4,\n paddingHorizontal: 12,\n paddingVertical: 7,\n borderRadius: 11,\n },\n emptyModePillActive: {\n shadowColor: '#312e81',\n shadowOpacity: 0.18,\n shadowRadius: 6,\n shadowOffset: { width: 0, height: 2 },\n elevation: 2,\n },\n emptyModePillLabel: {\n fontSize: 12,\n fontWeight: '600',\n },\n});\n\nconst HomeScreen: FC<HomeScreenProps> = (props) => <HomeScreenContent {...props} />;\n\nexport default HomeScreen;\n"],"names":["_a","uuidv4","_b","_c","showSub","hideSub"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HomeScreen.js","sources":["../../../src/screens/Home/HomeScreen.tsx"],"sourcesContent":["import React, { FC, useState, useCallback, useEffect, useMemo } from 'react';\nimport {\n Keyboard,\n Platform,\n Pressable,\n StyleSheet,\n TouchableWithoutFeedback,\n View,\n useColorScheme,\n useWindowDimensions,\n} from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { Box, InputToolBar, Text, getDefaultLeftItems, getDefaultRightItems } from '@admin-layout/gluestack-ui-mobile';\nimport { SafeAreaView, useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { useNavigation, useRoute, CommonActions } from '@react-navigation/native';\nimport { MessagesContainerUI } from '@messenger-box/platform-mobile';\nimport { v4 as uuidv4 } from 'uuid';\nimport { ContributionSchemaId } from 'common';\nimport { useGetContextDataQuery, useGetPageSettingsQuery } from 'common/graphql';\nimport { useGatewayContext } from '../../contexts/GatewayContext';\nimport { GatewayToolbarButtonMobile } from '../../components/GatewayToolbarButtonMobile';\nimport { useCdecliAutoConnect } from '../../hooks/useCdecliAutoConnect';\nimport { usePrerequisiteIds } from '../../hooks/usePrerequisiteIds';\nimport { useChatMutations, useChatSessions } from '../../hooks/useChatApi';\nimport { useChatStream, type UseChatStreamRouting } from '../../hooks/useChatStream';\nimport type { ModeSubmission, RoutingMode } from './types';\nimport DeepSearchModal from './components/DeepSearchModal';\nimport ChatHistoryLanding from './components/ChatHistoryLanding';\nimport { extractDeepSearchSources, normalizeSummaryText, type DeepSearchSourceItem } from './deepSearchUtils';\nimport { YantraBrandLoader, YANTRA_LOADER_SIZE_COMPACT } from '../../components/YantraBrandLoader';\nimport { mobileTokens } from '../../theme/mobileTokens';\n\nexport type { RoutingMode, ModeSubmission };\n\nexport interface HomeScreenProps {\n initialMode?: RoutingMode;\n onSubmit?: (submission: ModeSubmission) => void;\n onStop?: () => void;\n isLoading?: boolean;\n disabled?: boolean;\n}\n\n/** Reserve the bottom composer band (toolbar + mode row) so the sending loader centers in the messages area above it. */\nconst SENDING_LOADER_COMPOSER_RESERVE_PX = 156;\nconst COMPOSER_SCROLL_RESERVE_PX = 164;\n\nfunction organizationFromSettingsValue(settings: unknown): string | null {\n if (settings == null) return null;\n if (typeof settings === 'string') {\n try {\n const parsed = JSON.parse(settings) as { organization?: string };\n const o = parsed?.organization;\n return typeof o === 'string' && o.trim() ? o.trim() : null;\n } catch {\n return null;\n }\n }\n if (typeof settings === 'object' && settings !== null && 'organization' in settings) {\n const o = (settings as { organization?: unknown }).organization;\n return typeof o === 'string' && o.trim() ? o.trim() : null;\n }\n return null;\n}\n\nfunction projectFromSettingsValue(settings: unknown): string | null {\n if (settings == null) return null;\n if (typeof settings === 'string') {\n try {\n const parsed = JSON.parse(settings) as { project?: string };\n const p = parsed?.project;\n return typeof p === 'string' && p.trim() ? p.trim() : null;\n } catch {\n return null;\n }\n }\n if (typeof settings === 'object' && settings !== null && 'project' in settings) {\n const p = (settings as { project?: unknown }).project;\n return typeof p === 'string' && p.trim() ? p.trim() : null;\n }\n return null;\n}\n\ninterface ChatContentSectionProps {\n contentMaxWidth: number;\n composerScrollBottomPadding: number;\n messages: Array<{ role: string; content: string; metadata?: unknown }>;\n response?: string;\n isLoading: boolean;\n disabled: boolean;\n isStreaming: boolean;\n onStop?: () => void;\n cancel: () => void;\n onSend: (text: string) => void;\n onBackPress: () => void;\n}\n\nconst ChatContentSection = React.memo(function ChatContentSection({\n contentMaxWidth,\n composerScrollBottomPadding,\n messages,\n response,\n isLoading,\n disabled,\n isStreaming,\n onStop,\n cancel,\n onSend,\n onBackPress,\n}: ChatContentSectionProps) {\n return (\n <Box flex={1} width=\"100%\" alignSelf=\"stretch\">\n <MessagesContainerUI\n mode=\"chat\"\n showBackButton={false}\n onBackPress={onBackPress}\n compactTop\n messagesContainerStyle={{\n paddingHorizontal: 0,\n paddingTop: 0,\n paddingBottom: composerScrollBottomPadding,\n margin: 0,\n marginTop: 0,\n alignSelf: 'center',\n width: contentMaxWidth,\n }}\n listContentStyle={{\n paddingTop: 0,\n paddingBottom: composerScrollBottomPadding,\n margin: 0,\n marginTop: 0,\n width: contentMaxWidth,\n alignSelf: 'center',\n justifyContent: 'flex-end',\n }}\n messages={messages.map((msg, index) => ({\n id: `msg-${index}-${msg.role}`,\n role: msg.role,\n content: msg.content,\n metadata: msg.metadata as any,\n }))}\n streamingContent={response}\n currentUser={{ id: 'user' }}\n onSend={onSend}\n disabled={isLoading || disabled}\n isLoading={isLoading}\n onStop={isStreaming ? cancel : onStop}\n renderPlanInputToolbar={() => null}\n renderBuildInputToolbar={() => null}\n />\n </Box>\n );\n});\n\ninterface EmptyStateSectionProps {\n isDark: boolean;\n secondaryTextColor: string;\n primaryTextColor: string;\n activeMode: RoutingMode;\n onModeSwitch: (mode: RoutingMode) => void;\n}\n\nconst EmptyStateSection = React.memo(function EmptyStateSection({\n isDark,\n secondaryTextColor,\n primaryTextColor,\n activeMode,\n onModeSwitch,\n}: EmptyStateSectionProps) {\n return (\n <Box flex={1} width=\"100%\">\n <View style={styles.emptyCenterTitleWrap}>\n <Text style={[styles.emptyEyebrow, { color: secondaryTextColor }]}>Choose your mode</Text>\n <View\n style={[\n styles.emptyModePillRow,\n {\n backgroundColor: isDark ? 'rgba(30, 41, 59, 0.9)' : '#eef2ff',\n borderColor: isDark ? 'rgba(148, 163, 184, 0.26)' : 'rgba(67, 56, 202, 0.15)',\n },\n ]}\n >\n <Pressable\n onPress={() => onModeSwitch('chat')}\n style={[\n styles.emptyModePill,\n activeMode === 'chat' && styles.emptyModePillActive,\n activeMode === 'chat' && { backgroundColor: isDark ? '#312e81' : '#4338ca' },\n ]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Switch to chat mode\"\n >\n <MaterialCommunityIcons\n name=\"magnify\"\n size={14}\n color={activeMode === 'chat' ? '#ffffff' : secondaryTextColor}\n />\n <Text\n style={[\n styles.emptyModePillLabel,\n { color: activeMode === 'chat' ? '#ffffff' : secondaryTextColor },\n ]}\n >\n Chat\n </Text>\n </Pressable>\n <Pressable\n onPress={() => onModeSwitch('deep-search')}\n style={[\n styles.emptyModePill,\n activeMode === 'deep-search' && styles.emptyModePillActive,\n activeMode === 'deep-search' && { backgroundColor: isDark ? '#312e81' : '#4338ca' },\n ]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Switch to deep-search mode\"\n >\n <MaterialCommunityIcons\n name=\"lightning-bolt-outline\"\n size={14}\n color={activeMode === 'deep-search' ? '#ffffff' : secondaryTextColor}\n />\n <Text\n style={[\n styles.emptyModePillLabel,\n { color: activeMode === 'deep-search' ? '#ffffff' : secondaryTextColor },\n ]}\n >\n Deep Search\n </Text>\n </Pressable>\n </View>\n <Text style={[styles.emptyCenterTitle, { color: primaryTextColor }]}>How do you want to start?</Text>\n <Text style={[styles.emptySubtitle, { color: secondaryTextColor }]}>\n Use Chat for quick help, or Deep Search for researched, source-backed answers.\n </Text>\n </View>\n </Box>\n );\n});\n\ninterface HeaderBackButtonProps {\n color: string;\n onPress: () => void;\n}\n\nconst HeaderBackButton = React.memo(function HeaderBackButton({ color, onPress }: HeaderBackButtonProps) {\n return (\n <Pressable\n onPress={onPress}\n style={({ pressed }) => [styles.backButton, pressed && styles.newChatButtonPressed]}\n accessibilityLabel=\"Back to chat\"\n >\n <MaterialCommunityIcons name=\"chevron-left\" size={24} color={color} />\n </Pressable>\n );\n});\n\ninterface HeaderRightActionsProps {\n gatewayToolbarStatus: string;\n gatewayToolbarError?: string | null;\n onToggleGateway: () => void;\n gatewayToolbarLabel?: string;\n gatewayToolbarTone: string;\n showChatHistory: boolean;\n onOpenChatHistory: () => void;\n onNewChat: () => void;\n isDark: boolean;\n accentColor: string;\n newChatIconColor: string;\n}\n\nconst HeaderRightActions = React.memo(function HeaderRightActions({\n gatewayToolbarStatus,\n gatewayToolbarError,\n onToggleGateway,\n gatewayToolbarLabel,\n gatewayToolbarTone,\n showChatHistory,\n onOpenChatHistory,\n onNewChat,\n isDark,\n accentColor,\n newChatIconColor,\n}: HeaderRightActionsProps) {\n return (\n <View style={styles.headerRight}>\n <GatewayToolbarButtonMobile\n gatewayStatus={gatewayToolbarStatus}\n gatewayError={gatewayToolbarError}\n onToggleGateway={onToggleGateway}\n disabled={false}\n statusLabel={gatewayToolbarLabel}\n tone={gatewayToolbarTone}\n />\n {!showChatHistory ? (\n <Pressable\n onPress={onOpenChatHistory}\n style={({ pressed }) => [styles.historyHeaderButton, pressed && styles.historyHeaderButtonPressed]}\n accessibilityLabel=\"Chat history\"\n accessibilityRole=\"button\"\n >\n <View\n style={[styles.historyHeaderButtonInner, isDark ? styles.historyHeaderButtonInnerDark : null]}\n >\n <MaterialCommunityIcons name=\"history\" size={19} color={accentColor} />\n </View>\n </Pressable>\n ) : null}\n <Pressable\n onPress={onNewChat}\n style={({ pressed }) => [styles.newChatButton, pressed && styles.newChatButtonPressed]}\n accessibilityLabel=\"New chat\"\n >\n <View style={[styles.newChatButtonInner, isDark ? styles.newChatButtonInnerDark : null]}>\n <MaterialCommunityIcons name=\"chat-plus-outline\" size={20} color={newChatIconColor} />\n </View>\n </Pressable>\n </View>\n );\n});\n\nfunction HomeScreenContent({\n initialMode = 'chat',\n onSubmit: onSubmitProp,\n onStop,\n isLoading: isLoadingProp = false,\n disabled = false,\n}: HomeScreenProps) {\n const { width: screenWidth } = useWindowDimensions();\n const colorScheme = useColorScheme();\n const isDark = colorScheme === 'dark';\n const navigation = useNavigation();\n const route = useRoute<any>();\n const hasRehydratedOrgRef = React.useRef(false);\n const [value, setValue] = useState('');\n const [activeMode, setActiveMode] = useState<RoutingMode>(initialMode);\n const [activeSessionId, setActiveSessionId] = useState<string | null>(null);\n const [isDeepSearchModalOpen, setIsDeepSearchModalOpen] = useState(false);\n const [deepSearchQuery, setDeepSearchQuery] = useState<string | null>(null);\n const [deepSearchSummary, setDeepSearchSummary] = useState('');\n const [deepSearchSources, setDeepSearchSources] = useState<DeepSearchSourceItem[]>([]);\n const [researchProcessOpen, setResearchProcessOpen] = useState(true);\n const [sourcesAccordionOpen, setSourcesAccordionOpen] = useState(true);\n /** Full-screen chat history list opened from header (chat UI remains default). */\n const [showChatHistory, setShowChatHistory] = useState(false);\n /** True while creating channel id before send (covers UI delay before chatLoading flips). */\n const [channelBootstrap, setChannelBootstrap] = useState(false);\n\n const { createChannel } = useChatMutations();\n const { sessions } = useChatSessions();\n const { orgName: resolvedOrgName, projectId } = usePrerequisiteIds();\n const { data: contextData } = useGetContextDataQuery();\n const cdecodeUri = contextData?.getContextData?.cdecodeUri;\n const { data: pageSettingsData } = useGetPageSettingsQuery({\n variables: {\n resourceUri: cdecodeUri as never,\n options: {\n schemaId: ContributionSchemaId.Configuration,\n configKey: 'account.default',\n includeMarketplace: true,\n },\n },\n skip: !cdecodeUri,\n fetchPolicy: 'cache-first',\n });\n const fallbackOrgNameFromSettings = useMemo(\n () => organizationFromSettingsValue(pageSettingsData?.pageSettings?.settings),\n [pageSettingsData],\n );\n const fallbackProjectIdFromSettings = useMemo(\n () => projectFromSettingsValue(pageSettingsData?.pageSettings?.settings),\n [pageSettingsData],\n );\n const routeOrgName = ((route?.params?.orgName as string | undefined) ?? '').trim() || null;\n const effectiveOrgName = resolvedOrgName || fallbackOrgNameFromSettings || routeOrgName || null;\n /** Prefer hook (same source as web); fall back to this screen's page settings when prerequisites lag one frame. */\n const effectiveProjectId = projectId || fallbackProjectIdFromSettings || null;\n const { selectedGateway } = useGatewayContext();\n const cdecliSelected = selectedGateway?.channelType === 'cdecli-serve';\n const cdecli = useCdecliAutoConnect(cdecliSelected, activeSessionId ?? undefined);\n\n /** Same gate as web ChatSessionPage (`cdecliConnected`): only route via gateway when the channel is live. */\n const cdecliConnected = cdecliSelected && cdecli.channelConnected;\n\n const effectivePersistenceMode = cdecli.persistenceMode ?? selectedGateway?.persistenceMode ?? 'frontend';\n\n const chatRouting: UseChatStreamRouting = useMemo(\n () =>\n cdecliConnected\n ? {\n kind: 'cdecli',\n channelConnected: cdecli.channelConnected,\n accountId: cdecli.accountId,\n persistenceMode: effectivePersistenceMode,\n }\n : { kind: 'groq' },\n [cdecliConnected, cdecli.channelConnected, cdecli.accountId, effectivePersistenceMode],\n );\n\n const chat = useChatStream(activeSessionId, chatRouting);\n\n const {\n messages,\n response,\n error: chatError,\n isLoading: chatLoading,\n isStreaming,\n hasMessages,\n sendMessage,\n cancel,\n clearMessages,\n } = chat;\n\n const trimmedQuery = value.trim();\n const hasQuery = trimmedQuery.length > 0;\n const canSubmit = hasQuery && Boolean(routeOrgName || effectiveOrgName);\n const isLoading = isLoadingProp || chatLoading;\n const isResearchMode = activeMode === 'deep-search';\n const inputPlaceholder = !effectiveOrgName\n ? 'Initializing workspace...'\n : isResearchMode\n ? 'Research anything...'\n : 'Ask anything...';\n const waitingForAssistant = useMemo(() => {\n if ((!chatLoading && !isStreaming) || messages.length === 0) return false;\n return messages[messages.length - 1]?.role === 'user';\n }, [chatLoading, isStreaming, messages]);\n\n /** Thread has bubbles or streaming buffer → anchor loader above composer; empty landing → center. */\n const pinSendingLoaderNearComposer = useMemo(\n () => messages.length > 0 || Boolean((response ?? '').trim()),\n [messages.length, response],\n );\n\n const showSendingLoader = !showChatHistory && (channelBootstrap || waitingForAssistant);\n const hasRenderableConversation = messages.length > 0 || isStreaming;\n\n const insets = useSafeAreaInsets();\n const [keyboardHeight, setKeyboardHeight] = useState(0);\n\n useEffect(() => {\n if (Platform.OS === 'ios') {\n const frameSub = Keyboard.addListener('keyboardWillChangeFrame', (event) =>\n setKeyboardHeight(event.endCoordinates?.height ?? 0),\n );\n const showSub = Keyboard.addListener('keyboardWillShow', (event) =>\n setKeyboardHeight(event.endCoordinates?.height ?? 0),\n );\n const hideSub = Keyboard.addListener('keyboardWillHide', () => setKeyboardHeight(0));\n return () => {\n frameSub.remove();\n showSub.remove();\n hideSub.remove();\n };\n }\n const showSub = Keyboard.addListener('keyboardDidShow', (event) =>\n setKeyboardHeight(event.endCoordinates?.height ?? 0),\n );\n const hideSub = Keyboard.addListener('keyboardDidHide', () => setKeyboardHeight(0));\n return () => {\n showSub.remove();\n hideSub.remove();\n };\n }, []);\n\n // useEffect(() => {\n // navigation.setOptions({\n // headerLeft: () => null,\n // });\n // }, []);\n\n const handleModeSwitch = useCallback((mode: RoutingMode) => {\n setActiveMode(mode);\n }, []);\n\n // Web-aligned flow: create channel first, then send first post using returned channel id.\n const ensureSessionId = useCallback(\n async (mode: RoutingMode): Promise<string> => {\n if (activeSessionId) return activeSessionId;\n if (!effectiveOrgName || !effectiveProjectId) {\n throw new Error('Workspace is still initializing. Please retry in a moment.');\n }\n const requestedChannelId = uuidv4();\n const title =\n mode === 'deep-search' ? `deep-search-${requestedChannelId}` : `chat-channel-${requestedChannelId}`;\n const session = await createChannel({\n id: requestedChannelId,\n title,\n isShared: false,\n sharedSlug: null,\n isArchived: false,\n isPinned: false,\n model: null,\n systemPrompt: null,\n orgName: effectiveOrgName,\n projectId: effectiveProjectId,\n } as any);\n setActiveSessionId(session.id);\n return session.id;\n },\n [activeSessionId, createChannel, effectiveOrgName, effectiveProjectId],\n );\n\n const handleSubmit = useCallback(\n async (attachments?: ModeSubmission['attachments']) => {\n if (!canSubmit || isLoading || disabled) return;\n\n const submission: ModeSubmission = {\n mode: activeMode,\n query: trimmedQuery,\n attachments,\n };\n\n if (activeMode === 'deep-search') {\n if (onSubmitProp) {\n onSubmitProp(submission);\n }\n setValue('');\n setDeepSearchQuery(trimmedQuery);\n setDeepSearchSummary('');\n setDeepSearchSources([]);\n setIsDeepSearchModalOpen(true);\n try {\n setChannelBootstrap(true);\n const sessionId = await ensureSessionId('deep-search');\n await sendMessage(trimmedQuery, undefined, sessionId);\n } catch (err) {\n console.error('[HomeScreen] Failed to create deep-search session:', err);\n } finally {\n setChannelBootstrap(false);\n }\n return;\n }\n\n if (onSubmitProp && activeMode === 'chat') {\n onSubmitProp(submission);\n setValue('');\n return;\n }\n\n try {\n setChannelBootstrap(true);\n const sessionId = await ensureSessionId('chat');\n setValue('');\n await sendMessage(trimmedQuery, undefined, sessionId);\n } catch (err) {\n console.error('[HomeScreen] Failed to create session:', err);\n } finally {\n setChannelBootstrap(false);\n }\n },\n [\n canSubmit,\n isLoading,\n disabled,\n activeMode,\n trimmedQuery,\n activeSessionId,\n onSubmitProp,\n ensureSessionId,\n sendMessage,\n ],\n );\n\n const handleNewChat = useCallback(() => {\n setShowChatHistory(false);\n setActiveSessionId(null);\n setValue('');\n clearMessages();\n }, [clearMessages]);\n\n const handleOpenChatHistory = useCallback(() => {\n setShowChatHistory(true);\n }, []);\n\n const handleCloseChatHistory = useCallback(() => {\n setShowChatHistory(false);\n }, []);\n\n const handleToggleGateway = useCallback(() => {\n // CDeCLI connection is selection-driven via useCdecliAutoConnect.\n }, []);\n\n const gatewayToolbarStatus =\n cdecli.status === 'connecting'\n ? 'connecting'\n : cdecli.status === 'connected'\n ? 'connected'\n : cdecli.status === 'error'\n ? 'error'\n : 'disconnected';\n\n const gatewayToolbarTone = 'default';\n\n const gatewayToolbarLabel = cdecli.status === 'connecting' ? 'Checking...' : undefined;\n\n const gatewayToolbarError = cdecli.error;\n // const surfaceColor = isDark ? '#0f172a' : mobileTokens.color.bg;\n const surfaceColor = isDark ? '#0f172a' : mobileTokens.color.surface;\n const primaryTextColor = isDark ? '#e5e7eb' : mobileTokens.color.text;\n const secondaryTextColor = isDark ? '#94a3b8' : mobileTokens.color.textMuted;\n const accentColor = isDark ? '#a5b4fc' : '#4338ca';\n const newChatIconColor = isDark ? '#e5e7eb' : '#000000';\n const contentMaxWidth = Math.min(720, Math.max(360, screenWidth - 24));\n\n useEffect(() => {\n const currentOrgName = (route?.params?.orgName as string | undefined)?.trim() || '';\n if (!effectiveOrgName || currentOrgName === effectiveOrgName) return;\n // Keep current screen params in sync with resolved org context.\n (navigation as any).setParams?.({ orgName: effectiveOrgName });\n }, [navigation, route?.params?.orgName, effectiveOrgName]);\n\n useEffect(() => {\n const currentOrgName = (route?.params?.orgName as string | undefined)?.trim() || '';\n if (hasRehydratedOrgRef.current || currentOrgName || !effectiveOrgName) return;\n\n hasRehydratedOrgRef.current = true;\n // Also navigate with merge=true to patch parent stack params in nested navigation state.\n navigation.getParent()?.dispatch(\n CommonActions.navigate('MainStack', {\n screen: 'MainStack.Layout.Home',\n params: {\n orgName: effectiveOrgName,\n },\n merge: true,\n key: Date.now().toString(),\n }),\n );\n\n // CommonActions.reset({\n // index: 0,\n // routes: [\n // {\n // name: 'MainStack',\n // state: {\n // routes: [\n // {\n // name: 'MainStack.Layout.Home',\n // params: { orgName: effectiveOrgName },\n // },\n // ],\n // },\n // },\n // ],\n // });\n\n // (navigation as any).navigate('MainStack', {\n // screen: 'MainStack.Layout.Home',\n // params: { orgName: effectiveOrgName },\n // merge: true,\n // key: Date.now().toString(),\n // });\n }, [navigation, route?.params?.orgName, effectiveOrgName]);\n\n useEffect(() => {\n const headerLeft = showChatHistory\n ? () => <HeaderBackButton color={primaryTextColor} onPress={handleCloseChatHistory} />\n : undefined;\n const headerRight = () => (\n <HeaderRightActions\n gatewayToolbarStatus={gatewayToolbarStatus}\n gatewayToolbarError={gatewayToolbarError}\n onToggleGateway={handleToggleGateway}\n gatewayToolbarLabel={gatewayToolbarLabel}\n gatewayToolbarTone={gatewayToolbarTone}\n showChatHistory={showChatHistory}\n onOpenChatHistory={handleOpenChatHistory}\n onNewChat={handleNewChat}\n isDark={isDark}\n accentColor={accentColor}\n newChatIconColor={newChatIconColor}\n />\n );\n\n navigation.setOptions({\n drawerLabel: 'Chat',\n headerTitle: showChatHistory ? 'Chats' : 'Yantra',\n headerLeft,\n headerRight,\n });\n }, [\n navigation,\n showChatHistory,\n handleCloseChatHistory,\n handleOpenChatHistory,\n handleNewChat,\n handleToggleGateway,\n gatewayToolbarStatus,\n gatewayToolbarError,\n gatewayToolbarLabel,\n gatewayToolbarTone,\n primaryTextColor,\n accentColor,\n newChatIconColor,\n isDark,\n ]);\n\n const handleSendMessage = useCallback(\n async (text: string) => {\n if (!text.trim() || isLoading || disabled) return;\n const submission: ModeSubmission = { mode: activeMode, query: text.trim() };\n if (activeMode === 'deep-search') {\n if (onSubmitProp) {\n onSubmitProp(submission);\n }\n setDeepSearchQuery(text.trim());\n setDeepSearchSummary('');\n setDeepSearchSources([]);\n setIsDeepSearchModalOpen(true);\n try {\n setChannelBootstrap(true);\n const sessionId = await ensureSessionId('deep-search');\n await sendMessage(text.trim(), undefined, sessionId);\n } catch (err) {\n console.error('[HomeScreen] Failed to create deep-search session:', err);\n } finally {\n setChannelBootstrap(false);\n }\n return;\n }\n try {\n setChannelBootstrap(true);\n const sessionId = await ensureSessionId('chat');\n await sendMessage(text.trim(), undefined, sessionId);\n } catch (err) {\n console.error('[HomeScreen] Failed to create session:', err);\n } finally {\n setChannelBootstrap(false);\n }\n },\n [isLoading, disabled, activeMode, onSubmitProp, ensureSessionId, sendMessage],\n );\n\n const latestAssistantMessage = useMemo(() => {\n for (let i = messages.length - 1; i >= 0; i -= 1) {\n if (messages[i]?.role === 'assistant') return messages[i]?.content ?? '';\n }\n return '';\n }, [messages]);\n\n const deepSearchPreviewContent = response || deepSearchSummary;\n const deepSearchPreviewNormalized = useMemo(\n () => normalizeSummaryText(deepSearchPreviewContent || deepSearchSummary || ''),\n [deepSearchPreviewContent, deepSearchSummary],\n );\n\n const handleDeepSearchClose = useCallback(() => {\n if (isStreaming) {\n cancel();\n }\n setIsDeepSearchModalOpen(false);\n setDeepSearchQuery(null);\n setDeepSearchSummary('');\n setDeepSearchSources([]);\n setResearchProcessOpen(true);\n setSourcesAccordionOpen(true);\n }, [isStreaming, cancel]);\n\n const handleRetryDeepSearch = useCallback(async () => {\n if (!deepSearchQuery || isStreaming) return;\n try {\n setChannelBootstrap(true);\n const sessionId = await ensureSessionId('deep-search');\n await sendMessage(deepSearchQuery, undefined, sessionId);\n } catch (error) {\n console.error('[HomeScreen] Failed to retry deep-search:', error);\n } finally {\n setChannelBootstrap(false);\n }\n }, [deepSearchQuery, isStreaming, ensureSessionId, sendMessage]);\n\n const handleValueChange = useCallback((e: any) => {\n setValue(e.nativeEvent.text);\n }, []);\n\n const handleMicPress = useCallback(() => {\n console.log('mic');\n }, []);\n\n const handleSelectHistorySession = useCallback((channelId: string) => {\n setShowChatHistory(false);\n setActiveSessionId(channelId);\n setActiveMode('chat');\n }, []);\n\n const handleComposeFromHistory = useCallback(() => {\n setShowChatHistory(false);\n setActiveSessionId(null);\n setValue('');\n clearMessages();\n }, [clearMessages]);\n\n const handleToggleResearchProcess = useCallback(() => {\n setResearchProcessOpen((prev) => !prev);\n }, []);\n\n const handleToggleSourcesAccordion = useCallback(() => {\n setSourcesAccordionOpen((prev) => !prev);\n }, []);\n\n const handleRetryDeepSearchPress = useCallback(() => {\n void handleRetryDeepSearch();\n }, [handleRetryDeepSearch]);\n\n useEffect(() => {\n if (!deepSearchQuery || isStreaming || !latestAssistantMessage) return;\n setDeepSearchSummary(normalizeSummaryText(latestAssistantMessage));\n setDeepSearchSources(extractDeepSearchSources(latestAssistantMessage));\n }, [deepSearchQuery, isStreaming, latestAssistantMessage]);\n\n const composerScrollBottomPadding = COMPOSER_SCROLL_RESERVE_PX;\n\n const leftItems = useMemo(\n () =>\n getDefaultLeftItems({\n search: {\n active: activeMode === 'chat',\n onClick: () => handleModeSwitch('chat'),\n },\n zap: {\n active: activeMode === 'deep-search',\n onClick: () => handleModeSwitch('deep-search'),\n },\n lightbulb: { enabled: false },\n }),\n [activeMode, handleModeSwitch],\n );\n\n const rightItems = useMemo(\n () =>\n getDefaultRightItems({\n tag: { enabled: false },\n chip: { enabled: false },\n camera: { enabled: false, onClick: () => console.log('camera') },\n image: { enabled: false, onClick: () => console.log('image') },\n attach: { enabled: false, onClick: () => console.log('attach') },\n }),\n [],\n );\n\n const inputConfig = useMemo(\n () => ({\n value,\n onChange: handleValueChange,\n placeholder: inputPlaceholder,\n disabled: isLoading || disabled,\n }),\n [value, handleValueChange, inputPlaceholder, isLoading, disabled],\n );\n\n const micSendButton = useMemo(\n () => ({\n hasContent: canSubmit,\n onSend: () => handleSubmit(),\n onMic: handleMicPress,\n disabled: isLoading || disabled,\n isLoading,\n onStop: isStreaming ? cancel : onStop,\n }),\n [canSubmit, handleSubmit, handleMicPress, isLoading, disabled, isStreaming, cancel, onStop],\n );\n\n return (\n <SafeAreaView edges={['left', 'right', 'bottom']} style={{ flex: 1, backgroundColor: surfaceColor }}>\n <TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>\n <Box flex={1} width=\"100%\" position=\"relative\">\n {(chatError || cdecli.error) && (\n <Box\n mb=\"$2\"\n mx=\"$4\"\n p=\"$3\"\n borderRadius=\"$md\"\n style={{\n backgroundColor: isDark ? '#2b1a1d' : '#fef2f2',\n borderWidth: 1,\n borderColor: isDark ? '#7f1d1d' : '#fecaca',\n }}\n >\n <Text fontSize=\"$sm\" style={{ color: isDark ? '#fecaca' : '#991b1b' }}>\n {chatError || cdecli.error}\n </Text>\n </Box>\n )}\n {showChatHistory ? (\n <ChatHistoryLanding\n onSelectSession={handleSelectHistorySession}\n onCompose={handleComposeFromHistory}\n />\n ) : hasRenderableConversation ? (\n <ChatContentSection\n contentMaxWidth={contentMaxWidth}\n composerScrollBottomPadding={composerScrollBottomPadding}\n messages={messages}\n response={response}\n isLoading={isLoading}\n disabled={disabled}\n isStreaming={isStreaming}\n onStop={onStop}\n cancel={cancel}\n onSend={handleSendMessage}\n onBackPress={handleNewChat}\n />\n ) : (\n <EmptyStateSection\n isDark={isDark}\n secondaryTextColor={secondaryTextColor}\n primaryTextColor={primaryTextColor}\n activeMode={activeMode}\n onModeSwitch={handleModeSwitch}\n />\n )}\n {!showChatHistory ? (\n <View\n style={[\n styles.bottomComposerWrap,\n {\n bottom: Math.max(0, keyboardHeight - insets.bottom),\n paddingBottom: Math.max(insets.bottom - 6, 2),\n // backgroundColor: composerBarBackground,\n // borderTopColor: composerBarBorder,\n },\n ]}\n >\n <View style={[styles.bottomComposerInner, { width: contentMaxWidth }]}>\n <InputToolBar\n inputConfig={inputConfig}\n leftItems={leftItems}\n rightItems={rightItems}\n templateButton={null}\n templateModalConfig={null}\n micSendButton={micSendButton}\n />\n </View>\n </View>\n ) : null}\n {showSendingLoader ? (\n <View\n pointerEvents=\"none\"\n style={\n pinSendingLoaderNearComposer\n ? [\n styles.sendingLoaderAboveComposer,\n {\n bottom: Math.max(insets.bottom, 12) + SENDING_LOADER_COMPOSER_RESERVE_PX,\n },\n ]\n : styles.sendingLoaderEmptyState\n }\n >\n <YantraBrandLoader size={YANTRA_LOADER_SIZE_COMPACT} />\n </View>\n ) : null}\n </Box>\n </TouchableWithoutFeedback>\n <DeepSearchModal\n visible={isDeepSearchModalOpen}\n query={deepSearchQuery}\n summaryText={deepSearchPreviewNormalized}\n sources={deepSearchSources}\n isStreaming={isStreaming}\n researchProcessOpen={researchProcessOpen}\n sourcesAccordionOpen={sourcesAccordionOpen}\n onToggleResearchProcess={handleToggleResearchProcess}\n onToggleSourcesAccordion={handleToggleSourcesAccordion}\n onRetry={handleRetryDeepSearchPress}\n onStop={cancel}\n onClose={handleDeepSearchClose}\n />\n </SafeAreaView>\n );\n}\n\nconst styles = StyleSheet.create({\n /** First message / empty screen: loader in the middle of the pane. */\n sendingLoaderEmptyState: {\n position: 'absolute',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n justifyContent: 'center',\n alignItems: 'center',\n zIndex: 40,\n },\n /** Active thread: loader just above the input, not over message history. */\n sendingLoaderAboveComposer: {\n position: 'absolute',\n left: 0,\n right: 0,\n alignItems: 'center',\n justifyContent: 'flex-end',\n paddingBottom: 8,\n zIndex: 40,\n },\n headerRight: {\n flexDirection: 'row',\n alignItems: 'center',\n marginRight: 6,\n gap: 6,\n },\n historyHeaderButton: {\n marginHorizontal: 0,\n padding: 0,\n borderRadius: 22,\n },\n historyHeaderButtonPressed: {\n opacity: 0.72,\n },\n historyHeaderButtonInner: {\n width: 32,\n height: 32,\n borderRadius: 16,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: mobileTokens.color.primarySoft,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: mobileTokens.color.primaryBorder,\n shadowColor: '#312e81',\n shadowOpacity: 0.1,\n shadowRadius: 5,\n shadowOffset: { width: 0, height: 2 },\n elevation: 2,\n },\n historyHeaderButtonInnerDark: {\n backgroundColor: '#1e293b',\n borderColor: 'rgba(148, 163, 184, 0.35)',\n shadowColor: '#111827',\n },\n newChatButton: {\n padding: 0,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 22,\n },\n newChatButtonInner: {\n width: 32,\n height: 32,\n borderRadius: 16,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: mobileTokens.color.surface,\n borderWidth: 1,\n borderColor: mobileTokens.color.border,\n shadowColor: '#0f172a',\n shadowOpacity: 0.08,\n shadowRadius: 5,\n shadowOffset: { width: 0, height: 2 },\n elevation: 2,\n },\n newChatButtonInnerDark: {\n backgroundColor: '#0f172a',\n borderColor: '#334155',\n },\n backButton: {\n marginLeft: 6,\n width: 36,\n height: 36,\n borderRadius: 18,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: '#f3f4f6',\n },\n newChatButtonPressed: {\n opacity: 0.6,\n },\n emptyCenterTitleWrap: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'flex-start',\n paddingHorizontal: 24,\n paddingTop: 88,\n paddingBottom: 52,\n maxWidth: 520,\n alignSelf: 'center',\n },\n emptyEyebrow: {\n fontSize: 12,\n fontWeight: '600',\n letterSpacing: 0.4,\n textTransform: 'uppercase',\n marginBottom: 10,\n },\n emptyCenterTitle: {\n marginTop: 2,\n fontSize: 30,\n fontWeight: '700',\n textAlign: 'center',\n letterSpacing: -0.5,\n },\n emptySubtitle: {\n marginTop: 12,\n fontSize: 14,\n lineHeight: 22,\n textAlign: 'center',\n paddingHorizontal: 16,\n maxWidth: 360,\n },\n bottomComposerWrap: {\n position: 'absolute',\n width: '100%',\n left: 0,\n right: 0,\n bottom: 0,\n alignItems: 'center',\n justifyContent: 'flex-end',\n // borderTopWidth: 1,\n shadowColor: '#0f172a',\n shadowOpacity: 0.08,\n shadowRadius: 8,\n shadowOffset: { width: 0, height: -2 },\n backgroundColor: 'transparent',\n elevation: 6,\n },\n bottomComposerInner: {\n paddingHorizontal: 14,\n paddingTop: 10,\n paddingBottom: 4,\n },\n emptyModePillRow: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n marginBottom: 22,\n borderRadius: 16,\n padding: 6,\n borderWidth: 1,\n shadowColor: '#312e81',\n shadowOpacity: 0.08,\n shadowRadius: 8,\n shadowOffset: { width: 0, height: 3 },\n elevation: 3,\n },\n emptyModePill: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 4,\n paddingHorizontal: 12,\n paddingVertical: 7,\n borderRadius: 11,\n },\n emptyModePillActive: {\n shadowColor: '#312e81',\n shadowOpacity: 0.18,\n shadowRadius: 6,\n shadowOffset: { width: 0, height: 2 },\n elevation: 2,\n },\n emptyModePillLabel: {\n fontSize: 12,\n fontWeight: '600',\n },\n});\n\nconst HomeScreen: FC<HomeScreenProps> = (props) => <HomeScreenContent {...props} />;\n\nexport default HomeScreen;\n"],"names":["ChatContentSection","EmptyStateSection","HeaderBackButton","HeaderRightActions","_a","_b","showSub","hideSub","uuidv4","_c"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adminide-stack/yantra-mobile",
|
|
3
|
-
"version": "12.0.28-alpha.
|
|
3
|
+
"version": "12.0.28-alpha.63",
|
|
4
4
|
"description": "Sample core for higher packages to depend on",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"author": "CDMBase LLC",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"uuid": "^9.0.0"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
|
-
"common": "12.0.28-alpha.
|
|
28
|
+
"common": "12.0.28-alpha.63"
|
|
29
29
|
},
|
|
30
30
|
"peerDependencies": {
|
|
31
31
|
"@admin-layout/gluestack-ui-mobile": "*",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"@expo/vector-icons": "*",
|
|
41
41
|
"@messenger-box/platform-mobile": "*",
|
|
42
42
|
"@react-native-async-storage/async-storage": "*",
|
|
43
|
-
"common": "12.0.28-alpha.
|
|
43
|
+
"common": "12.0.28-alpha.62",
|
|
44
44
|
"lodash": "*"
|
|
45
45
|
},
|
|
46
46
|
"publishConfig": {
|
|
@@ -49,5 +49,5 @@
|
|
|
49
49
|
"typescript": {
|
|
50
50
|
"definition": "lib/index.d.ts"
|
|
51
51
|
},
|
|
52
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "9e362e93155a945fe864bdfafbf59270921be525"
|
|
53
53
|
}
|