import { BridgeConfiguration } from '../../types/types'; import FeatureFlagManager from './featureFlagManager'; import { getSupportedFeatureFlags } from './helpers'; import { manageFeatureToggles } from './manageFeatureToggles'; /** * Handles incoming event data containing feature flags. * @param event - The event object containing feature flags. * Expected structure: { featureFlags: FeatureFlagList }. */ export const handleFeatureFlags = (event: string): void => { const bridgeConfiguration: BridgeConfiguration = JSON.parse(event); // NOTE: During development, you might need to test the behavior of the feature using remote feature flags. // Comment out the lines below to update featureFlags with remote data. if (__DEV__) { manageFeatureToggles(); return; } const { feature_flags } = bridgeConfiguration; // Retrieve supported feature flags from the event data const supportedFeatureFlags = feature_flags && getSupportedFeatureFlags(feature_flags); if (!supportedFeatureFlags) { return; } // Apply supported feature flags to the FeatureFlagManager supportedFeatureFlags.forEach((featureFlag: { name: any; enabled: any }) => { const { name, enabled } = featureFlag; const featureFlagsObject = FeatureFlagManager.featureFlags; if ( typeof featureFlagsObject === 'object' && Object.prototype.hasOwnProperty.call(featureFlagsObject, name) ) { FeatureFlagManager.setFeatureFlag(name, enabled); } }); // Function responsible for managing feature toggles based on remote feature flags. // This function initializes or restores necessary functionality after fetching the remote feature flags. manageFeatureToggles(); };