PromucFlow_constructor/app/client/src/utils/featureFlags.ts

100 lines
2.4 KiB
TypeScript
Raw Normal View History

2020-05-28 18:10:26 +00:00
import { FeatureFlagConfig, FeatureFlagsEnum } from "configs/types";
const optimizelySDK = require("@optimizely/optimizely-sdk");
class FeatureFlag {
static isInitialized = false;
static remote = undefined;
static initialize(featureFlagConfig: FeatureFlagConfig) {
Object.keys(featureFlagConfig.default).forEach((flag: any) => {
// This is required because otherwise it will reset the values
// every time the application is loaded. We need the application to load
// remote values the second time.
if (localStorage.getItem(flag) === null) {
localStorage.setItem(
flag,
featureFlagConfig.default[flag as FeatureFlagsEnum].toString(),
);
}
});
if (featureFlagConfig.remoteConfig) {
FeatureFlag.remote = optimizelySDK.createInstance({
sdkKey: featureFlagConfig.remoteConfig.optimizely,
});
(FeatureFlag.remote as any).onReady().then(onInit);
}
}
static identify(userData: any) {
if (FeatureFlag.remote) {
if (FeatureFlag.isInitialized) {
updateFlagsInLocalStorage(userData);
} else {
(FeatureFlag.remote as any).onReady().then(() => {
onInit();
updateFlagsInLocalStorage(userData);
});
}
}
}
static check(flagName: string) {
return localStorage.getItem(flagName) === "true";
}
}
function onInit() {
FeatureFlag.isInitialized = true;
}
function updateFlagsInLocalStorage(userData: any) {
const userId = userData.id;
const email = userData.email;
const optimizelyClientInstance = FeatureFlag.remote as any;
localStorage.setItem(
FeatureFlagsEnum.DatasourcePane,
optimizelyClientInstance.isFeatureEnabled(
FeatureFlagsEnum.DatasourcePane,
userId,
{
email: email,
},
),
);
localStorage.setItem(
FeatureFlagsEnum.ApiPaneV2,
optimizelyClientInstance.isFeatureEnabled(
FeatureFlagsEnum.ApiPaneV2,
userId,
{
email: email,
},
),
);
localStorage.setItem(
FeatureFlagsEnum.documentationV2,
optimizelyClientInstance.isFeatureEnabled(
FeatureFlagsEnum.documentationV2,
userId,
{
email: email,
},
),
);
localStorage.setItem(
FeatureFlagsEnum.QueryPane,
optimizelyClientInstance.isFeatureEnabled(
FeatureFlagsEnum.QueryPane,
userId,
{
email: email,
},
),
);
2020-05-05 06:46:54 +00:00
}
2020-04-20 08:26:19 +00:00
2020-05-28 18:10:26 +00:00
export default FeatureFlag;