@flagship.io/react-sdk
Version:
Flagship REACT SDK
51 lines (50 loc) • 2.58 kB
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
import { Flagship, DecisionMode, FSSdkStatus } from "./deps.js";
import { FlagshipProvider } from "./FlagshipProvider.js";
import { version as SDK_VERSION } from "./sdkVersion.js";
async function initFlagship({ envId, apiKey, config, }) {
if (Flagship.getStatus() !== FSSdkStatus.SDK_NOT_INITIALIZED) {
return Flagship;
}
await Flagship.start(envId, apiKey, {
...config,
fetchNow: false,
sdkVersion: SDK_VERSION,
});
return Flagship;
}
/**
* FlagshipProviderSSR is a server-side rendering component for Flagship.
* It initializes the Flagship SDK and provides the necessary context for rendering.
* This component is designed to be used in server-side environments where you need to fetch and provide
* Flagship data before rendering the React application.
* @returns
*/
export async function FlagshipProviderSSR({ children, envId, apiKey, decisionMode = DecisionMode.DECISION_API, visitorData, loadingComponent, onSdkStatusChanged, onBucketingUpdated, fetchFlagsOnBucketingUpdated, hitDeduplicationTime = 2, fetchNow = false, onFlagsStatusChanged, shouldSaveInstance, ...props }) {
const language = 1;
const fs = await initFlagship({
envId,
apiKey,
config: {
...props,
decisionMode: decisionMode,
initialBucketing: props.initialBucketing,
hitDeduplicationTime,
language,
},
});
let initialFlagsData = props.initialFlagsData;
if (!props.initialFlagsData && !props.initialCampaigns) {
const visitor = fs.newVisitor({
visitorId: visitorData?.id,
context: visitorData?.context,
isAuthenticated: visitorData?.isAuthenticated,
hasConsented: visitorData?.hasConsented,
onFlagsStatusChanged,
shouldSaveInstance,
});
await visitor.fetchFlags();
initialFlagsData = visitor.getFlags().toJSON();
}
return (_jsx(FlagshipProvider, { envId: envId, apiKey: apiKey, decisionMode: decisionMode, visitorData: visitorData, loadingComponent: loadingComponent, onSdkStatusChanged: onSdkStatusChanged, onBucketingUpdated: onBucketingUpdated, initialFlagsData: initialFlagsData, fetchFlagsOnBucketingUpdated: fetchFlagsOnBucketingUpdated, hitDeduplicationTime: hitDeduplicationTime, fetchNow: fetchNow, language: language, sdkVersion: SDK_VERSION, onFlagsStatusChanged: onFlagsStatusChanged, shouldSaveInstance: shouldSaveInstance, ...props, children: children }));
}