@@ -18,7 +18,6 @@ import React, { createContext, useRef, useMemo, useEffect } from 'react';
1818
1919import { ProviderStateStore } from './ProviderStateStore' ;
2020import { UserContextManager } from '../utils/UserContextManager' ;
21- import { areUsersEqual , areSegmentsEqual } from '../utils/helpers' ;
2221import type { OptimizelyProviderProps , OptimizelyContextValue } from './types' ;
2322import type { Client } from '@optimizely/optimizely-sdk' ;
2423
@@ -44,21 +43,13 @@ export function OptimizelyProvider({
4443} : OptimizelyProviderProps ) : React . ReactElement {
4544 const storeRef = useRef < ProviderStateStore | null > ( null ) ;
4645 const userManagerRef = useRef < UserContextManager | null > ( null ) ;
47- const prevRef = useRef < {
48- client ?: Client ;
49- skipSegments ?: boolean ;
50- user ?: OptimizelyProviderProps [ 'user' ] ;
51- segments ?: string [ ] ;
52- } > ( { } ) ;
46+ const prevClientRef = useRef < Client > ( ) ;
5347
5448 if ( storeRef . current === null ) {
5549 storeRef . current = new ProviderStateStore ( ) ;
5650 }
5751
5852 const store = storeRef . current ;
59- const prev = prevRef . current ;
60- const clientChanged = prev . client !== client ;
61- const skipSegmentsChanged = prev . skipSegments !== skipSegments ;
6253 const contextValue = useMemo < OptimizelyContextValue > (
6354 ( ) => ( {
6455 store,
@@ -68,31 +59,21 @@ export function OptimizelyProvider({
6859 ) ;
6960
7061 if ( client ) {
71- // Create UserContextManager if not exists or if client/skipSegments config has changed
72- if ( userManagerRef . current === null || clientChanged || skipSegmentsChanged ) {
62+ // Create UserContextManager if not exists or if client has changed
63+ if ( userManagerRef . current === null || prevClientRef . current !== client ) {
7364 userManagerRef . current ?. dispose ( ) ;
7465
7566 userManagerRef . current = new UserContextManager ( {
7667 client,
77- skipSegments,
7868 onUserContextReady : ( ctx ) => store . setUserContext ( ctx ) ,
7969 onError : ( error ) => store . setError ( error ) ,
8070 } ) ;
8171
82- prev . client = client ;
83- prev . skipSegments = skipSegments ;
84- prev . user = user ;
85- prev . segments = qualifiedSegments ;
86- userManagerRef . current . createUserContext ( user , qualifiedSegments ) ;
87- }
88- }
89- // Update user context if user or qualifiedSegments props have changed (value equality)
90- if ( userManagerRef . current ) {
91- if ( ! areUsersEqual ( prev . user , user ) || ! areSegmentsEqual ( prev . segments , qualifiedSegments ) ) {
92- prev . user = user ;
93- prev . segments = qualifiedSegments ;
94- userManagerRef . current . createUserContext ( user , qualifiedSegments ) ;
72+ prevClientRef . current = client ;
9573 }
74+
75+ // UCM internally checks for user/segments/skipSegments changes
76+ userManagerRef . current . resolveUserContext ( user , qualifiedSegments , skipSegments ) ;
9677 }
9778
9879 // Effect: Client onReady
0 commit comments