UNPKG

flagsmith-vue

Version:
1 lines 2.25 kB
import flagsmith,{FlagSource}from"flagsmith";import{computed,inject,provide,ref}from"vue";const FlagsmithInjectionKey=Symbol("FlagsmithInjectionKey");const injectHelper=flagsmithHelper=>{const helper=flagsmithHelper!==null&&flagsmithHelper!==void 0?flagsmithHelper:inject(FlagsmithInjectionKey);if(helper===undefined){throw new TypeError(`Flagsmith vue: Helper should not be undefined.`)}return helper};export const useFlagsmith=(options,flagsmithInstance=flagsmith,app)=>{const flags=ref();const traits=ref();const loadingState=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{provide(FlagsmithInjectionKey,helper)}return helper};export const useFlags=(flagsToUse,flagsmithHelper)=>{const{flags}=injectHelper(flagsmithHelper);return Object.fromEntries(flagsToUse.map(flag=>[flag,computed(()=>{var _a;return(_a=flags.value)===null||_a===void 0?void 0:_a[flag]})]))};export const useTraits=(traitsToUse,flagsmithHelper)=>{const{traits}=injectHelper(flagsmithHelper);return Object.fromEntries(traitsToUse.map(trait=>[trait,computed(()=>{var _a;return(_a=traits.value)===null||_a===void 0?void 0:_a[trait]})]))};export const useFlagsmithLoading=flagsmithHelper=>{const{loadingState}=injectHelper(flagsmithHelper);return{error:computed(()=>{var _a,_b;return(_b=(_a=loadingState.value)===null||_a===void 0?void 0:_a.error)!==null&&_b!==void 0?_b:null}),isFetching:computed(()=>{var _a;return Boolean((_a=loadingState.value)===null||_a===void 0?void 0:_a.isFetching)}),isLoading:computed(()=>{var _a;return Boolean((_a=loadingState.value)===null||_a===void 0?void 0:_a.isLoading)}),source:computed(()=>{var _a,_b;return(_b=(_a=loadingState.value)===null||_a===void 0?void 0:_a.source)!==null&&_b!==void 0?_b:FlagSource.NONE})}};export const useFlagsmithInstance=flagsmithHelper=>{const{flagsmithInstance}=injectHelper(flagsmithHelper);return flagsmithInstance};export default(app,options)=>{useFlagsmith(options,flagsmith,app)};