@@ -19,6 +19,10 @@ import { SymbolHeader } from "@/components/SymbolHeader";
1919import { TabNavigation } from "@/components/TabNavigation" ;
2020import { LoadingSpinner } from "@/components/LoadingSpinner" ;
2121import { usePricingTier } from "@/lib/use-pricing-tier" ;
22+ import {
23+ EXPLANATIONS_PROVIDER_CHANGED_EVENT ,
24+ getAIProviderHeaders ,
25+ } from "@/lib/explanation-provider" ;
2226import { AIPredictionPanel } from "@/components/AIPredictionPanel" ;
2327import { StockOfTheDayPanel } from "@/components/StockOfTheDayPanel" ;
2428const OverviewTab = dynamic (
@@ -379,12 +383,20 @@ export function HomePageClient() {
379383 } ;
380384 } , [ ] ) ;
381385
382- const getAIProviderHeader = ( ) : HeadersInit => {
383- if ( typeof window === "undefined" ) return { } ;
384- const provider = localStorage . getItem ( "explanations_provider" ) ;
385- if ( ! provider ) return { } ;
386- return { "x-ai-provider" : provider } ;
387- } ;
386+ const [ aiProviderVersion , setAiProviderVersion ] = useState ( 0 ) ;
387+
388+ useEffect ( ( ) => {
389+ const onProviderChanged = ( ) => setAiProviderVersion ( ( v ) => v + 1 ) ;
390+ window . addEventListener (
391+ EXPLANATIONS_PROVIDER_CHANGED_EVENT ,
392+ onProviderChanged
393+ ) ;
394+ return ( ) =>
395+ window . removeEventListener (
396+ EXPLANATIONS_PROVIDER_CHANGED_EVENT ,
397+ onProviderChanged
398+ ) ;
399+ } , [ ] ) ;
388400
389401 useEffect ( ( ) => {
390402 const fetchAIPrediction = async ( ) => {
@@ -398,7 +410,7 @@ export function HomePageClient() {
398410 try {
399411 const response = await fetch (
400412 `/api/market/ai-prediction/${ selectedSymbol } ` ,
401- { headers : getAIProviderHeader ( ) , credentials : "include" }
413+ { headers : getAIProviderHeaders ( ) , credentials : "include" }
402414 ) ;
403415 if ( ! response . ok ) {
404416 const body = ( await response . json ( ) . catch ( ( ) => ( { } ) ) ) as {
@@ -423,7 +435,7 @@ export function HomePageClient() {
423435 } ;
424436
425437 fetchAIPrediction ( ) ;
426- } , [ selectedSymbol , hasAIAccess ] ) ;
438+ } , [ selectedSymbol , hasAIAccess , aiProviderVersion ] ) ;
427439
428440 useEffect ( ( ) => {
429441 const fetchStockOfTheDay = async ( ) => {
@@ -436,7 +448,7 @@ export function HomePageClient() {
436448 setStockOfTheDayLoading ( true ) ;
437449 try {
438450 const response = await fetch ( "/api/market/stock-of-the-day" , {
439- headers : getAIProviderHeader ( ) ,
451+ headers : getAIProviderHeaders ( ) ,
440452 credentials : "include" ,
441453 } ) ;
442454 if ( ! response . ok ) {
@@ -462,7 +474,7 @@ export function HomePageClient() {
462474 } ;
463475
464476 fetchStockOfTheDay ( ) ;
465- } , [ hasAIAccess , selectedSymbol ] ) ;
477+ } , [ hasAIAccess , selectedSymbol , aiProviderVersion ] ) ;
466478
467479 const handleTimeRangeChange = ( range : TimeRange ) => {
468480 setTimeRange ( range ) ;
0 commit comments