UNPKG

@ttoss/react-feature-flags

Version:
66 lines (61 loc) 1.49 kB
/** 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 };