@@ -33,6 +33,7 @@ interface UserResolverContextType {
3333 requestUser : ( email : string ) => void ;
3434 isResolving : ( email : string ) => boolean ;
3535 resolutionDisabled : boolean ;
36+ cacheVersion : number ;
3637}
3738
3839// Context
@@ -57,6 +58,7 @@ export function UserResolverProvider({
5758 const [ userCache , setUserCache ] = useState <
5859 Record < string , string | typeof NO_NAME_FOUND >
5960 > ( { } ) ;
61+ const [ cacheVersion , setCacheVersion ] = useState ( 0 ) ;
6062 const pendingRequests = useRef < Set < string > > ( new Set ( ) ) ;
6163 const batchTimeout = useRef < NodeJS . Timeout | null > ( null ) ;
6264
@@ -94,21 +96,30 @@ export function UserResolverProvider({
9496
9597 try {
9698 const results = await fetchUsers ( emailsToFetch ) ;
97- setUserCache ( ( prev ) => ( { ...prev , ...results } ) ) ;
99+ setUserCache ( ( prev ) => {
100+ setCacheVersion ( ( v ) => v + 1 ) ;
101+ return { ...prev , ...results } ;
102+ } ) ;
98103 } catch ( error ) {
99104 console . error ( "Failed to fetch users:" , error ) ;
100105 const failedCache : Record < string , typeof NO_NAME_FOUND > = { } ;
101106 emailsToFetch . forEach ( ( email ) => {
102107 failedCache [ email ] = NO_NAME_FOUND ;
103108 } ) ;
104- setUserCache ( ( prev ) => ( { ...prev , ...failedCache } ) ) ;
109+ setUserCache ( ( prev ) => {
110+ setCacheVersion ( ( v ) => v + 1 ) ;
111+ return { ...prev , ...failedCache } ;
112+ } ) ;
105113 }
106114 } ;
107115
108116 const requestUser = ( email : string ) => {
109117 // If resolution is disabled, mark as NO_NAME_FOUND immediately
110118 if ( resolutionDisabled ) {
111- setUserCache ( ( prev ) => ( { ...prev , [ email ] : NO_NAME_FOUND } ) ) ;
119+ setUserCache ( ( prev ) => {
120+ setCacheVersion ( ( v ) => v + 1 ) ;
121+ return { ...prev , [ email ] : NO_NAME_FOUND } ;
122+ } ) ;
112123 return ;
113124 }
114125
@@ -119,7 +130,10 @@ export function UserResolverProvider({
119130
120131 // Validate email format - if invalid, mark as NO_NAME_FOUND immediately
121132 if ( ! EMAIL_REGEX . test ( email ) ) {
122- setUserCache ( ( prev ) => ( { ...prev , [ email ] : NO_NAME_FOUND } ) ) ;
133+ setUserCache ( ( prev ) => {
134+ setCacheVersion ( ( v ) => v + 1 ) ;
135+ return { ...prev , [ email ] : NO_NAME_FOUND } ;
136+ } ) ;
123137 return ;
124138 }
125139
@@ -149,12 +163,19 @@ export function UserResolverProvider({
149163
150164 return (
151165 < UserResolverContext . Provider
152- value = { { resolveUser, requestUser, isResolving, resolutionDisabled } }
166+ value = { {
167+ resolveUser,
168+ requestUser,
169+ isResolving,
170+ resolutionDisabled,
171+ cacheVersion,
172+ } }
153173 >
154174 { children }
155175 </ UserResolverContext . Provider >
156176 ) ;
157177}
178+
158179// Hook
159180function useUserResolver ( ) {
160181 const context = useContext ( UserResolverContext ) ;
@@ -179,9 +200,21 @@ export function NameOptionalUserCard({
179200 email,
180201 size = "sm" ,
181202 fallback,
203+ resolutionDisabled : resolutionDisabledProp ,
182204} : NameOptionalUserCardProps ) {
183- const { resolveUser, requestUser, isResolving, resolutionDisabled } =
184- useUserResolver ( ) ;
205+ const {
206+ resolveUser,
207+ requestUser,
208+ isResolving,
209+ resolutionDisabled : contextResolutionDisabled ,
210+ cacheVersion,
211+ } = useUserResolver ( ) ;
212+
213+ const resolutionDisabled =
214+ typeof resolutionDisabledProp === "boolean"
215+ ? resolutionDisabledProp
216+ : contextResolutionDisabled ;
217+
185218 const [ resolvedUser , setResolvedUser ] = useState < UserData | undefined > ( ) ;
186219 const { userData } = useAuth ( ) ;
187220
@@ -193,21 +226,16 @@ export function NameOptionalUserCard({
193226 }
194227
195228 requestUser ( email ) ;
196-
197- const interval = setInterval ( ( ) => {
198- const user = resolveUser ( email ) ;
199- if ( user ) {
200- setResolvedUser ( user ) ;
201- clearInterval ( interval ) ;
202- }
203- } , 10 ) ;
204-
205- return ( ) => clearInterval ( interval ) ;
229+ const user = resolveUser ( email ) ;
230+ if ( user ) {
231+ setResolvedUser ( user ) ;
232+ }
206233 } , [
207234 email ,
208235 providedName ,
209236 isValidEmail ,
210237 resolutionDisabled ,
238+ cacheVersion ,
211239 resolveUser ,
212240 requestUser ,
213241 ] ) ;
0 commit comments