Skip to content

Commit 9667701

Browse files
[FSSDK-10882] ssr support addition
1 parent 9e37f00 commit 9667701

File tree

4 files changed

+19
-0
lines changed

4 files changed

+19
-0
lines changed

lib/optimizely/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ export default class Optimizely implements Client {
146146
this.updateOdpSettings();
147147
});
148148

149+
this.projectConfigManager.setSsr(config.isSsr)
149150
this.projectConfigManager.start();
150151
const projectConfigManagerRunningPromise = this.projectConfigManager.onRunning();
151152

lib/project_config/project_config_manager.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ interface ProjectConfigManagerConfig {
3434

3535
export interface ProjectConfigManager extends Service {
3636
setLogger(logger: LoggerFacade): void;
37+
setSsr(isSsr?: boolean): void;
3738
getConfig(): ProjectConfig | undefined;
3839
getOptimizelyConfig(): OptimizelyConfig | undefined;
3940
onUpdate(listener: Consumer<ProjectConfig>): Fn;
@@ -54,6 +55,7 @@ export class ProjectConfigManagerImpl extends BaseService implements ProjectConf
5455
public datafileManager?: DatafileManager;
5556
private eventEmitter: EventEmitter<{ update: ProjectConfig }> = new EventEmitter();
5657
private logger?: LoggerFacade;
58+
private isSsr?: boolean;
5759

5860
constructor(config: ProjectConfigManagerConfig) {
5961
super();
@@ -79,6 +81,11 @@ export class ProjectConfigManagerImpl extends BaseService implements ProjectConf
7981
return;
8082
}
8183

84+
if(this.isSsr) {
85+
// If isSsr is true, we don't need to poll for datafile updates
86+
this.datafileManager = undefined
87+
}
88+
8289
if (this.datafile) {
8390
this.handleNewDatafile(this.datafile, true);
8491
}
@@ -216,4 +223,13 @@ export class ProjectConfigManagerImpl extends BaseService implements ProjectConf
216223
this.stopPromise.reject(err);
217224
});
218225
}
226+
227+
/**
228+
* Set the isSsr flag to indicate if the project config manager is being used in a server side rendering environment
229+
* @param {Boolean} isSsr
230+
* @returns {void}
231+
*/
232+
setSsr(isSsr?: boolean): void {
233+
this.isSsr = isSsr;
234+
}
219235
}

lib/shared_types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,7 @@ export interface OptimizelyOptions {
291291
sdkKey?: string;
292292
userProfileService?: UserProfileService | null;
293293
defaultDecideOptions?: OptimizelyDecideOption[];
294+
isSsr?:boolean;
294295
odpManager?: IOdpManager;
295296
notificationCenter: NotificationCenterImpl;
296297
}

lib/tests/mock/mock_project_config_manager.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export const getMockProjectConfigManager = (opt: MockOpt = {}): ProjectConfigMan
2828
return {
2929
config: opt.initConfig,
3030
start: () => {},
31+
setSsr: () => {},
3132
onRunning: () => opt.onRunning || Promise.resolve(),
3233
stop: () => {},
3334
onTerminated: () => opt.onTerminated || Promise.resolve(),

0 commit comments

Comments
 (0)