import * as React from "react"; import {} from "react-native"; import { useState, useEffect } from "react"; type VariantsProviderProps = ContentVariantsPrps & { /** * For internal use only. Do not provide this prop. */ isNestedRender?: boolean; }; import { SDKS_SUPPORTING_PERSONALIZATION, getInitPersonalizationVariantsFnsScriptString, } from "../../blocks/personalization-container/helpers"; import { TARGET } from "../../constants/target"; import { handleABTestingSync } from "../../helpers/ab-tests"; import { getDefaultCanTrack } from "../../helpers/canTrack"; import ContentComponent from "../content/content"; import InlinedScript from "../inlined-script"; import InlinedStyles from "../inlined-styles"; import type { ContentVariantsPrps } from "./content-variants.types"; import { checkShouldRenderVariants, getInitVariantsFnsScriptString, getUpdateCookieAndStylesScript, getVariants, } from "./helpers"; function ContentVariants(props: VariantsProviderProps) { const [shouldRenderVariants, setShouldRenderVariants] = useState(() => checkShouldRenderVariants({ canTrack: getDefaultCanTrack(props.canTrack), content: props.content, }) ); function updateCookieAndStylesScriptStr() { return getUpdateCookieAndStylesScript( getVariants(props.content).map((value) => ({ id: value.testVariationId!, testRatio: value.testRatio, })), props.content?.id || "" ); } function hideVariantsStyleString() { return getVariants(props.content) .map((value) => `.variant-${value.testVariationId} { display: none; } `) .join(""); } function defaultContent() { return shouldRenderVariants ? { ...props.content, testVariationId: props.content?.id, } : handleABTestingSync({ item: props.content, canTrack: getDefaultCanTrack(props.canTrack), }); } useEffect(() => { /** * For Solid/Svelte: we unmount the non-winning variants post-hydration. */ }, []); return ( <> {!props.isNestedRender && TARGET !== "reactNative" ? ( <> {SDKS_SUPPORTING_PERSONALIZATION.includes(TARGET) ? ( ) : null} ) : null} {shouldRenderVariants ? ( <> {getVariants(props.content)?.map((variant) => ( ))} ) : null} ); } export default ContentVariants;