diff --git a/src/index.tsx b/src/index.tsx index a9c122a..359bcef 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -6,7 +6,7 @@ type FeatureGroup = { export type FeatureFlags = string[] | FeatureGroup; -const FeatureFlagsContext = React.createContext({}); +let FeatureFlagsContext = React.createContext({}); function transformFlags(features: FeatureFlags) { if (!Array.isArray(features)) return features; @@ -24,7 +24,7 @@ export function FlagsProvider({ features?: FeatureFlags; children: React.ReactNode; }) { - const currentFeatures = useFeatures(); + let currentFeatures = useFeatures(); return ( ((featureGroup, featureName: string) => { - if (typeof featureGroup === "boolean") return featureGroup; - if (featureGroup[featureName] === undefined) return false; - return featureGroup[featureName]; - }, features) - ); + + let featureGroup: FeatureGroup | boolean = structuredClone(features); + for (let featureName of name.split("/")) { + if (typeof featureGroup === "boolean") return featureGroup; + if (featureGroup[featureName] === undefined) return false; + featureGroup = featureGroup[featureName]; + } + + return featureGroup; } // Render Prop API @@ -73,7 +72,7 @@ export function Feature({ | React.ReactNode | ((hasFeature: boolean | FeatureGroup) => JSX.Element); }) { - const hasFeature = useFeature(name); + let hasFeature = useFeature(name); if (typeof render === "function") return render(hasFeature); if (!hasFeature) return null; return {render};