From 749adde439b9ecc3a7421272142b6eb28418f341 Mon Sep 17 00:00:00 2001 From: BharathKShetty Date: Thu, 23 Jan 2025 17:07:47 +0530 Subject: [PATCH] Feature flags that no longer exist should be removed from local storage --- .../esm-feature-flags/src/feature-flags.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/packages/framework/esm-feature-flags/src/feature-flags.ts b/packages/framework/esm-feature-flags/src/feature-flags.ts index 051134398..c823cafe7 100644 --- a/packages/framework/esm-feature-flags/src/feature-flags.ts +++ b/packages/framework/esm-feature-flags/src/feature-flags.ts @@ -24,6 +24,7 @@ featureFlagsStore.subscribe((state) => { JSON.stringify({ label: flag.label, description: flag.description }), ); } + cleanupObsoleteFeatureFlags(state.flags); }); function getFeatureFlagsFromLocalStorage() { @@ -62,6 +63,22 @@ export function registerFeatureFlag(flagName: string, label: string, description }, }, })); + cleanupObsoleteFeatureFlags(); +} + +/** + * This function removes feature flags from local storage that no longer exist in the current state. + */ +function cleanupObsoleteFeatureFlags(currentFlags?: FeatureFlagsStore['flags']) { + const flags = currentFlags || featureFlagsStore.getState().flags; + const storedFlags = Object.keys(localStorage).filter((key) => key.startsWith('openmrs:feature-flag:')); + storedFlags.forEach((key) => { + const flagName = key.replace('openmrs:feature-flag:', ''); + if (!flags[flagName]) { + localStorage.removeItem(key); + localStorage.removeItem(`openmrs:feature-flag-meta:${flagName}`); + } + }); } /** Use this function to access the current value of the feature flag