UNPKG

@ttoss/react-feature-flags

Version:

React Feature Flags

105 lines (99 loc) 2.98 kB
/** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); //#region \0rolldown/runtime.js var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) { key = keys[i]; if (!__hasOwnProp.call(to, key) && key !== except) { __defProp(to, key, { get: (k => from[k]).bind(null, key), enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } } } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod)); //#endregion let react = require("react"); let react$1 = __toESM(react, 1); react = __toESM(react); let react_error_boundary = require("react-error-boundary"); let react_jsx_runtime = require("react/jsx-runtime"); //#region src/FeatureFlagsProvider.tsx var FeatureFlagsContext = react.createContext({ features: [], setFeatures: () => {} }); var FeatureFlagsProvider = ({ children, loadFeatures }) => { const [features, setFeatures] = react.useState([]); react.useEffect(() => { loadFeatures?.().then(features => { return setFeatures(features); }); }, [loadFeatures]); return /* @__PURE__ */(0, react_jsx_runtime.jsx)(FeatureFlagsContext.Provider, { value: { features, setFeatures }, children }); }; //#endregion //#region src/useFeatureFlag.ts var useFeatureFlag = name => { const { features } = react$1.useContext(FeatureFlagsContext); return features.includes(name); }; //#endregion //#region src/FeatureFlag.tsx var FeatureFlag = ({ name, children, fallback = null, errorFallback = null }) => { if (!useFeatureFlag(name)) return fallback; return /* @__PURE__ */(0, react_jsx_runtime.jsx)(react_error_boundary.ErrorBoundary, { fallback: errorFallback, children }); }; //#endregion //#region src/useUpdateFeatures.ts /** * If you want to update the feature flags on React environment * (after the initial render and providers), you can use this hook. */ var useUpdateFeatures = () => { const { setFeatures } = react$1.useContext(FeatureFlagsContext); return { updateFeatures: setFeatures }; }; //#endregion exports.FeatureFlag = FeatureFlag; exports.FeatureFlagsProvider = FeatureFlagsProvider; exports.useFeatureFlag = useFeatureFlag; exports.useUpdateFeatures = useUpdateFeatures;