UNPKG

@toggle.tiger/toggletiger

Version:

A package to retrieve configuration from blobstore based on org, app, env, and config ID.

52 lines (51 loc) 1.88 kB
import { useContext } from "react"; import { FeatureFlagContext } from "./FeatureFlagProvider"; const coerceValue = (value, type, defaultValue) => { if (value === undefined || value === null) { return defaultValue; } switch (type) { case "Boolean": if (typeof value === "boolean") return value; if (typeof value === "string") { if (value.toLowerCase() === "true") return true; if (value.toLowerCase() === "false") return false; } return defaultValue; case "Integer": case "Double": { if (typeof value === "number") { return value; } const num = typeof value === "string" ? parseFloat(value) : NaN; return Number.isNaN(num) ? defaultValue : num; } case "String": return typeof value === "string" ? value : String(value); default: // For unknown types, you might want to return defaultValue or throw an error console.warn(`Unknown flag type: ${type} for value: ${value}. Returning default value.`); return defaultValue; } }; export const useFeatureFlag = (key, defaultValue) => { var _a; const context = useContext(FeatureFlagContext); if (!context) { throw new Error("useFeatureFlag must be used within a FeatureFlagProvider"); } const flags = Array.isArray((_a = context.environmentFlags) === null || _a === void 0 ? void 0 : _a.flags) ? context.environmentFlags.flags : []; if (flags.length === 0) { return defaultValue; } const flag = flags.find((flag) => flag.key === key); if (flag) { return coerceValue(flag.value, flag.type, defaultValue); } return defaultValue; };