@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
JavaScript
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;
};