* Use envsubst and nginx templates to generate nginx configs which can substitute environment variables and inject into the index.html file * Fix path in dockerfile. Add .gitignore and .env.example files. Fix nginx-linux template. * Add all environment variables. Add prefix to all environment variables. Update scripts to attempt to substitute all environment variables with the prefix * Setup dockerfile to execute a bash script. use env.example for fetching environment variables in development * Toggle features based on injected configs. Fix nginx template substitution script. * Update env.example file * Remove debug code from start-nginx.sh * Fix nginx config templates by adding quotes by default. Fix sed regex to include numerals. Toggle social login buttons on Login page based on the config. * Update rapid api environment variable name. Toggle oauth buttons based on config in SignUp page. Update .env.example to be a union of server and client environment variables * Adding a Map disabled message on Map widget * Adding links to Privacy policy and TNC * Use REACT_APP_ env variables with higher priority over injected config variables for toggling features * Update netlify.toml by commenting out the build environment variables * Remove env variables not required by the client * Remove start-storybook entry from package.json * Fix netlify.toml. Fallback algolia configs * Add contexts to netlify.toml for successful deploys. Swith to using APPSMITH_MARKETPLACE_URL as the toggle for RapidAPI feature on the client. Remove comments in nginx config templates. Fix template used in dockerfile. Co-authored-by: Satbir Singh <apple@apples-MacBook-Pro.local> Co-authored-by: Satbir Singh <satbir121@gmail.com>
71 lines
2.1 KiB
TypeScript
71 lines
2.1 KiB
TypeScript
import { FeatureFlagConfig, FeatureFlagsEnum } from "configs/types";
|
|
const optimizelySDK = require("@optimizely/optimizely-sdk");
|
|
|
|
class FeatureFlag {
|
|
static isInitialized = false;
|
|
static remote = undefined;
|
|
static initialize(featureFlagConfig?: FeatureFlagConfig) {
|
|
if (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,
|
|
datafileOptions: {
|
|
autoUpdate: true,
|
|
updateInterval: 600000, // 10 minutes in milliseconds
|
|
urlTemplate: window.location.origin + "/f/datafiles/%s.json",
|
|
},
|
|
});
|
|
(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;
|
|
|
|
Object.values(FeatureFlagsEnum).forEach((flag: string) => {
|
|
localStorage.setItem(
|
|
flag,
|
|
optimizelyClientInstance.isFeatureEnabled(flag, userId, { email }),
|
|
);
|
|
});
|
|
}
|
|
|
|
export default FeatureFlag;
|