From 7958f7a87e175cf742030b27b1f9b412429af72b Mon Sep 17 00:00:00 2001 From: Digpal Singh Date: Fri, 26 Jun 2026 14:52:32 +0530 Subject: [PATCH] Revert "Auto Detect language" --- src/components/LanguageProvider.tsx | 11 ++++---- .../components/language-selection-dialog.tsx | 28 ++++++++++--------- src/hooks/store/chat/index.ts | 18 ++---------- src/layouts/chat-layout/index.tsx | 4 +-- 4 files changed, 26 insertions(+), 35 deletions(-) diff --git a/src/components/LanguageProvider.tsx b/src/components/LanguageProvider.tsx index 6d35e55..9425a4d 100644 --- a/src/components/LanguageProvider.tsx +++ b/src/components/LanguageProvider.tsx @@ -9,7 +9,9 @@ import gu from '../../translations/gu.json'; import kn from '../../translations/kn.json'; import ml from '../../translations/ml.json'; import as_ from '../../translations/as.json'; -import { DEFAULT_LANGUAGE, LANGUAGES, type LanguageCode } from './screens-component/chat-screen/config'; +import { DEFAULT_LANGUAGE } from './screens-component/chat-screen/config'; + +type LanguageCode = 'hi' | 'en' | 'bn' | 'te' | 'mr' | 'ta' | 'gu' | 'kn' | 'ml' | 'as'; interface LanguageContextType { language: LanguageCode; @@ -28,13 +30,12 @@ const LanguageContext = createContext(undefined export const LanguageProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => { const [language, setLanguageState] = useState(() => { const saved = localStorage.getItem('app_language'); - return saved && saved in LANGUAGES ? (saved as LanguageCode) : DEFAULT_LANGUAGE; + return (saved as LanguageCode) || DEFAULT_LANGUAGE; }); const setLanguage = (lang: LanguageCode) => { - const nextLanguage = lang in LANGUAGES ? lang : DEFAULT_LANGUAGE; - setLanguageState(nextLanguage); - localStorage.setItem('app_language', nextLanguage); + setLanguageState(lang); + localStorage.setItem('app_language', lang); }; const t = useCallback((key: string, params?: Record): string | string[] => { diff --git a/src/components/screens-component/chat-screen/components/language-selection-dialog.tsx b/src/components/screens-component/chat-screen/components/language-selection-dialog.tsx index b70df8a..9338900 100644 --- a/src/components/screens-component/chat-screen/components/language-selection-dialog.tsx +++ b/src/components/screens-component/chat-screen/components/language-selection-dialog.tsx @@ -1,4 +1,4 @@ -import React from "react"; +import { useState } from "react"; import { cn } from "@/lib/utils"; import { Popover, @@ -7,6 +7,7 @@ import { } from "@/components/ui/popover"; import { LANGUAGES } from "../config"; import { useLanguage } from "@/components/LanguageProvider"; +import { useChatStore } from "@/hooks/store/chat"; type LanguageSelectionDropdownProps = { children: React.ReactNode; @@ -15,19 +16,20 @@ type LanguageSelectionDropdownProps = { export function LanguageSelectionDropdown({ children }: LanguageSelectionDropdownProps) { - const { language: selectedLanguage } = useLanguage(); + const { language: selectedLanguage, setLanguage } = useLanguage(); + const fetchNotifications = useChatStore((state) => state.fetchNotifications); + const [open, setOpen] = useState(false); - const disabledTrigger = React.isValidElement(children) - ? React.cloneElement(children as React.ReactElement, { - disabled: true, - "aria-disabled": true - }) - : children; + const handleLanguageSelect = (code: keyof typeof LANGUAGES) => { + setLanguage(code); + setOpen(false); + void fetchNotifications(); + }; return ( - + - {disabledTrigger} + {children} handleLanguageSelect(language.code)} className={cn( - "w-full flex items-center px-5 py-3.5 transition-colors text-left cursor-not-allowed", + "w-full flex items-center px-5 py-3.5 transition-colors text-left cursor-pointer", isActive ? "bg-[#FEF2B2] dark:bg-[#EFC300] text-gray-900 font-bold" - : "bg-white dark:bg-[#5D5D5D] text-gray-800 dark:text-white font-medium opacity-70" + : "bg-white dark:bg-[#5D5D5D] text-gray-800 dark:text-white font-medium hover:bg-gray-50 dark:hover:brightness-110" )} > diff --git a/src/hooks/store/chat/index.ts b/src/hooks/store/chat/index.ts index 342cd28..5aba65b 100644 --- a/src/hooks/store/chat/index.ts +++ b/src/hooks/store/chat/index.ts @@ -3,7 +3,7 @@ import type { ChatMessage, TextMessage } from "@/components/screens-component/chat-screen/components/bubbles/chat-types"; -import { DEFAULT_LANGUAGE, LANGUAGES, type LanguageCode } from "@/components/screens-component/chat-screen/config"; +import { LANGUAGES, type LanguageCode } from "@/components/screens-component/chat-screen/config"; import { fetchSuggestions, @@ -99,12 +99,7 @@ type ChatStore = { sessionId: string | null; initializeSession: (user: any) => Promise; sendText: (text: string, language: string, t?: any) => Promise; - sendAudio: ( - blob: Blob, - sessionId: string, - language: string, - onLanguageDetected?: (language: LanguageCode) => void - ) => Promise; + sendAudio: (blob: Blob, sessionId: string, language: string) => Promise; sendImage: (imageFile: File, language: string, t?: any) => Promise; sendQuickAction: (id: string, language: string, t?: any) => void; sendQuickReply: (payload: string, language: string, t?: any) => void; @@ -290,11 +285,6 @@ function getResponseLanguage(language: string): LanguageCode | undefined { return language in LANGUAGES ? (language as LanguageCode) : undefined; } -function getTranscriptionLanguage(status?: string, langCode?: string): LanguageCode { - if (status !== "success" || !langCode) return DEFAULT_LANGUAGE; - return getResponseLanguage(langCode) ?? DEFAULT_LANGUAGE; -} - function makeImageMessage(imageUrl: string, caption?: string): ChatMessage { return { id: crypto.randomUUID(), @@ -849,7 +839,7 @@ export const useChatStore = create((set, get) => ({ } }, - sendAudio: async (blob, sessionId, language, onLanguageDetected) => { + sendAudio: async (blob, sessionId, language) => { if (!blob) return; set({ isTranscribing: true }); @@ -922,7 +912,6 @@ export const useChatStore = create((set, get) => ({ sessionId, language ); - onLanguageDetected?.(getTranscriptionLanguage(transcription?.status, transcription?.lang_code)); if (transcription && transcription.text) { set((state) => ({ @@ -935,7 +924,6 @@ export const useChatStore = create((set, get) => ({ } } catch (error) { console.error("Transcription error:", error); - onLanguageDetected?.(DEFAULT_LANGUAGE); set({ isAssistantTyping: false, isTranscribing: false }); set({ toast: { message: "Transcription failed. Please try again.", type: "error" } }); throw error; diff --git a/src/layouts/chat-layout/index.tsx b/src/layouts/chat-layout/index.tsx index 91062a1..7044f10 100644 --- a/src/layouts/chat-layout/index.tsx +++ b/src/layouts/chat-layout/index.tsx @@ -46,7 +46,7 @@ function ChatLayout() { const setToast = useChatStore((s) => s.setToast); const fetchLocation = useChatStore((s) => s.fetchLocation); - const { language, setLanguage, t } = useLanguage(); + const { language, t } = useLanguage(); const [settingsOpen, setSettingsOpen] = useState(false); const [showLocationPrompt, setShowLocationPrompt] = useState(false); @@ -131,7 +131,7 @@ function ChatLayout() { sendText(text, language, t); } else if (voice) { try { - await sendAudio(voice, sessionId || '', language, setLanguage); + await sendAudio(voice, sessionId || '', language); } catch (error) { console.error(error); }