UNPKG

@flagship.io/react-sdk

Version:
60 lines (59 loc) 2 kB
import { Flagship, FSFlagMetadata, FSFlagStatus } from '@flagship.io/js-sdk'; import { GET_FLAG_CAST_ERROR, noVisitorMessage } from './constants'; import { hasSameType, logInfo, logWarn, sprintf } from './utils'; export class FSFlag { key; flag; constructor(key, state) { const flagsData = state.flags; if (!state.hasVisitorData) { logWarn(Flagship.getConfig(), noVisitorMessage, 'GetFlag'); } this.key = key; this.flag = flagsData?.get(key); } getValue(defaultValue) { if (!this.flag) { return defaultValue; } if (this.flag.value === null || this.flag.value === undefined) { return defaultValue; } if (defaultValue !== null && defaultValue !== undefined && !hasSameType(this.flag.value, defaultValue)) { logInfo(Flagship.getConfig(), sprintf(GET_FLAG_CAST_ERROR, this.key), 'getValue'); return defaultValue; } return this.flag.value; } exists() { if (!this.flag) { return false; } return !!(this.flag.campaignId && this.flag.variationId && this.flag.variationGroupId); } async visitorExposed() { // do nothing } get metadata() { if (!this.flag) { return FSFlagMetadata.Empty(); } return new FSFlagMetadata({ campaignId: this.flag.campaignId, campaignName: this.flag.campaignName, variationGroupId: this.flag.variationGroupId, variationGroupName: this.flag.variationGroupName, variationId: this.flag.variationId, variationName: this.flag.variationName, isReference: !!this.flag.isReference, campaignType: this.flag.campaignType, slug: this.flag.slug }); } get status() { if (!this.exists()) { return FSFlagStatus.NOT_FOUND; } return FSFlagStatus.FETCHED; } }