@ttoss/react-feature-flags
Version:
React Feature Flags
66 lines (61 loc) • 1.49 kB
JavaScript
/** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
// src/useFeatureFlag.ts
import * as React2 from "react";
// src/FeatureFlagsProvider.tsx
import * as React from "react";
import { jsx } from "react/jsx-runtime";
var FeatureFlagsContext = React.createContext({
features: [],
setFeatures: () => {}
});
var FeatureFlagsProvider = ({
children,
loadFeatures
}) => {
const [features, setFeatures] = React.useState([]);
React.useEffect(() => {
loadFeatures?.().then(features2 => {
return setFeatures(features2);
});
}, [loadFeatures]);
return /* @__PURE__ */jsx(FeatureFlagsContext.Provider, {
value: {
features,
setFeatures
},
children
});
};
// src/useFeatureFlag.ts
var useFeatureFlag = name => {
const {
features
} = React2.useContext(FeatureFlagsContext);
return features.includes(name);
};
// src/FeatureFlag.tsx
import { Fragment, jsx as jsx2 } from "react/jsx-runtime";
var FeatureFlag = ({
name,
children,
fallback = null
}) => {
const isEnabled = useFeatureFlag(name);
if (!isEnabled) {
return fallback;
}
return /* @__PURE__ */jsx2(Fragment, {
children
});
};
// src/useUpdateFeatures.ts
import * as React3 from "react";
var useUpdateFeatures = () => {
const {
setFeatures
} = React3.useContext(FeatureFlagsContext);
return {
updateFeatures: setFeatures
};
};
export { FeatureFlag, FeatureFlagsProvider, useFeatureFlag, useUpdateFeatures };