Skip to content

Commit

Permalink
Change const with let and remove reduce
Browse files Browse the repository at this point in the history
  • Loading branch information
sergiodxa committed Mar 21, 2024
1 parent 2d4a394 commit b475b91
Showing 1 changed file with 13 additions and 14 deletions.
27 changes: 13 additions & 14 deletions src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ type FeatureGroup = {

export type FeatureFlags = string[] | FeatureGroup;

const FeatureFlagsContext = React.createContext<FeatureGroup>({});
let FeatureFlagsContext = React.createContext<FeatureGroup>({});

function transformFlags(features: FeatureFlags) {
if (!Array.isArray(features)) return features;
Expand All @@ -24,7 +24,7 @@ export function FlagsProvider({
features?: FeatureFlags;
children: React.ReactNode;
}) {
const currentFeatures = useFeatures();
let currentFeatures = useFeatures();
return (
<FeatureFlagsContext.Provider
value={mergeFeatures(
Expand All @@ -44,19 +44,18 @@ export function useFeatures(): FeatureGroup {

// Custom Hook API
export function useFeature(name: string): boolean | FeatureGroup {
const features = useFeatures();
let features = useFeatures();
if (Array.isArray(features)) return features.includes(name);
if (typeof features[name] === "boolean") return features[name];
return (
name
.split("/")
// eslint-disable-next-line unicorn/no-array-reduce
.reduce<FeatureGroup | boolean>((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
Expand All @@ -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 <React.Fragment>{render}</React.Fragment>;
Expand Down

0 comments on commit b475b91

Please sign in to comment.