flagsmith-vue
Version:
Flagsmith Vue.js integration
1 lines • 2.84 kB
JavaScript
;var __importDefault=this&&this.__importDefault||function(mod){return mod&&mod.__esModule?mod:{default:mod}};Object.defineProperty(exports,"__esModule",{value:true});exports.useFlagsmithInstance=exports.useFlagsmithLoading=exports.useTraits=exports.useFlags=exports.useFlagsmith=void 0;const flagsmith_1=__importDefault(require("flagsmith"));const vue_1=require("vue");const FlagsmithInjectionKey=Symbol("FlagsmithInjectionKey");const injectHelper=flagsmithHelper=>{const helper=flagsmithHelper!==null&&flagsmithHelper!==void 0?flagsmithHelper:(0,vue_1.inject)(FlagsmithInjectionKey);if(helper===undefined){throw new TypeError(`Flagsmith vue: Helper should not be undefined.`)}return helper};const useFlagsmith=(options,flagsmithInstance=flagsmith_1.default,app)=>{const flags=(0,vue_1.ref)();const traits=(0,vue_1.ref)();const loadingState=(0,vue_1.ref)();void flagsmithInstance.init(options);flagsmithInstance._trigger=()=>{flags.value=flagsmithInstance.getAllFlags();traits.value=flagsmithInstance.getAllTraits()};flagsmithInstance._triggerLoadingState=()=>{loadingState.value=flagsmithInstance.loadingState};const helper={flags,traits,loadingState,flagsmithInstance};if(app){app.provide(FlagsmithInjectionKey,helper)}else{(0,vue_1.provide)(FlagsmithInjectionKey,helper)}return helper};exports.useFlagsmith=useFlagsmith;const useFlags=(flagsToUse,flagsmithHelper)=>{const{flags}=injectHelper(flagsmithHelper);return Object.fromEntries(flagsToUse.map((flag=>[flag,(0,vue_1.computed)((()=>{var _a;return(_a=flags.value)===null||_a===void 0?void 0:_a[flag]}))])))};exports.useFlags=useFlags;const useTraits=(traitsToUse,flagsmithHelper)=>{const{traits}=injectHelper(flagsmithHelper);return Object.fromEntries(traitsToUse.map((trait=>[trait,(0,vue_1.computed)((()=>{var _a;return(_a=traits.value)===null||_a===void 0?void 0:_a[trait]}))])))};exports.useTraits=useTraits;const useFlagsmithLoading=flagsmithHelper=>{const{loadingState}=injectHelper(flagsmithHelper);return{error:(0,vue_1.computed)((()=>{var _a,_b;return(_b=(_a=loadingState.value)===null||_a===void 0?void 0:_a.error)!==null&&_b!==void 0?_b:null})),isFetching:(0,vue_1.computed)((()=>{var _a;return Boolean((_a=loadingState.value)===null||_a===void 0?void 0:_a.isFetching)})),isLoading:(0,vue_1.computed)((()=>{var _a;return Boolean((_a=loadingState.value)===null||_a===void 0?void 0:_a.isLoading)})),source:(0,vue_1.computed)((()=>{var _a,_b;return(_b=(_a=loadingState.value)===null||_a===void 0?void 0:_a.source)!==null&&_b!==void 0?_b:"NONE"}))}};exports.useFlagsmithLoading=useFlagsmithLoading;const useFlagsmithInstance=flagsmithHelper=>{const{flagsmithInstance}=injectHelper(flagsmithHelper);return flagsmithInstance};exports.useFlagsmithInstance=useFlagsmithInstance;exports.default=(app,options)=>{(0,exports.useFlagsmith)(options,flagsmith_1.default,app)};