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;