22import { useThirdwebClient } from "@/constants/thirdweb.client" ;
33import type { Account } from "@3rdweb-sdk/react/hooks/useApi" ;
44import { useCallback , useEffect , useMemo , useRef , useState } from "react" ;
5- import { useActiveAccount } from "thirdweb/react" ;
5+ import { useActiveAccount , useActiveWalletChain } from "thirdweb/react" ;
66import { type ContextFilters , promptNebula } from "../api/chat" ;
77import { createSession , updateSession } from "../api/session" ;
88import type { ExecuteConfig , SessionInfo } from "../api/types" ;
@@ -21,6 +21,7 @@ export function ChatPageContent(props: {
2121 initialPrompt : string | undefined ;
2222} ) {
2323 const address = useActiveAccount ( ) ?. address ;
24+ const activeChain = useActiveWalletChain ( ) ;
2425 const client = useThirdwebClient ( ) ;
2526 const [ userHasSubmittedMessage , setUserHasSubmittedMessage ] = useState ( false ) ;
2627 const [ messages , setMessages ] = useState < Array < ChatMessage > > ( ( ) => {
@@ -37,7 +38,7 @@ export function ChatPageContent(props: {
3738 const [ hasUserUpdatedContextFilters , setHasUserUpdatedContextFilters ] =
3839 useState ( false ) ;
3940
40- const [ _contextFilters , _setContextFilters ] = useState <
41+ const [ contextFilters , _setContextFilters ] = useState <
4142 ContextFilters | undefined
4243 > ( ( ) => {
4344 const contextFilterRes = props . session ?. context_filter ;
@@ -50,31 +51,37 @@ export function ChatPageContent(props: {
5051 return value ;
5152 } ) ;
5253
53- function setContextFilters ( filters : ContextFilters | undefined ) {
54- _setContextFilters ( filters ) ;
54+ const setContextFilters = useCallback ( ( v : ContextFilters | undefined ) => {
55+ _setContextFilters ( v ) ;
5556 setHasUserUpdatedContextFilters ( true ) ;
56- }
57+ } , [ ] ) ;
5758
5859 const isNewSession = ! props . session ;
5960
6061 // if this is a new session, user has not manually updated context filters
61- // and no wallet address is set in context filters, add the current wallet address
62- const contextFilters = useMemo ( ( ) => {
62+ // update the context filters to the current user's wallet address and chain id
63+ // eslint-disable-next-line no-restricted-syntax
64+ useEffect ( ( ) => {
6365 if (
64- isNewSession &&
65- ! hasUserUpdatedContextFilters &&
66- address &&
67- ( ! _contextFilters ?. walletAddresses ||
68- _contextFilters . walletAddresses . length === 0 )
66+ ! isNewSession ||
67+ hasUserUpdatedContextFilters ||
68+ ! address ||
69+ ! activeChain
6970 ) {
70- return {
71- ..._contextFilters ,
72- walletAddresses : [ address ] ,
73- } ;
71+ return ;
7472 }
7573
76- return _contextFilters ;
77- } , [ _contextFilters , address , isNewSession , hasUserUpdatedContextFilters ] ) ;
74+ _setContextFilters ( ( _contextFilters ) => {
75+ const updatedContextFilters : ContextFilters = _contextFilters
76+ ? { ..._contextFilters }
77+ : { } ;
78+
79+ updatedContextFilters . walletAddresses = [ address ] ;
80+ updatedContextFilters . chainIds = [ activeChain . id . toString ( ) ] ;
81+
82+ return updatedContextFilters ;
83+ } ) ;
84+ } , [ address , isNewSession , hasUserUpdatedContextFilters , activeChain ] ) ;
7885
7986 const config : ExecuteConfig = useMemo ( ( ) => {
8087 return {
0 commit comments