import { DDRPlaceholderSelector } from "../../../composition_riv/constants/RIV";
import {
MultiLangListContainer,
MultiLangListItemContainer,
MultiLangTextContainer,
} from "../containers/Container";
import {
MultiLangListContainerStyle,
MultiLangListTextAnimationStyle,
MultiLangTextContainerStyle,
} from "../styles/InlineStyles";
import { useEffect, useState } from "react";
export interface IMlTextProps {
fontSize: number;
style: string;
color?: string;
multilanguage: string;
multiLineText?: boolean;
direction: string;
speed: number;
}
export interface IMultilingualText {
sampleText: any;
localecode: any;
}
export const MlFreeTextMessage = ({
multilanguage,
multiLineText,
fontSize,
style,
color,
direction,
}: IMlTextProps) => {
const [previous, setPrevious] = useState(multilanguage);
const [languages, setLanguages] = useState<IMultilingualText[]>([]);
const [previousDirection, setPreviousDirection] = useState(direction);
useEffect(() => {
if (previous !== multilanguage || direction !== previousDirection) {
populateLanguageList();
}
}, [multilanguage, previousDirection]);
useEffect(() => {
if (previousDirection !== direction) {
setPreviousDirection(direction);
}
}, [direction]);
useEffect(() => {
if (multilanguage) {
populateLanguageList();
}
}, []);
function populateLanguageList() {
setPrevious(multilanguage);
const language = renderMultilanguageText() || [];
setLanguages(language);
}
function renderMultilanguageText(): IMultilingualText[] {
const previousTextInfo = JSON.parse(String(multilanguage));
return (
Object.keys(previousTextInfo)
.filter((lang) => previousTextInfo[lang].checked)
.map((lang) => ({
sampleText: previousTextInfo[lang].sampleText,
localecode: previousTextInfo[lang].id,
})) || []
);
}
function getSelectedLocaleCodes() {
if (!multilanguage) return [];
const previousTextInfo = JSON.parse(String(multilanguage));
const localeCodes = Object.keys(previousTextInfo)
.filter((lang) => previousTextInfo[lang].checked)
.map((lang) => previousTextInfo[lang].id);
return localeCodes;
}
function getExistingLocaleCode() {
if (!multilanguage) return [];
const previousTextInfo = JSON.parse(String(multilanguage));
const existingLocales = Object.keys(previousTextInfo).map(
(lang) => previousTextInfo[lang].id
);
return existingLocales;
}
const itemCount = languages.length;
const isSameContent = () => {
return previous === multilanguage && previousDirection === direction;
};
return (
<MultiLangTextContainer style={MultiLangTextContainerStyle()}>
<MultiLangListContainer
data-existing-locales={getExistingLocaleCode()}
data-selected-locales={getSelectedLocaleCodes()}
data-msg-ddrvarid="data-ddr-msg-list"
data-direction={direction}
style={MultiLangListContainerStyle(
fontSize,
color,
multiLineText,
style
)}
>
{isSameContent() &&
languages.map(
(item: { sampleText: any; localecode: string }, index: number) => (
<MultiLangListItemContainer
className="not-saved"
style={MultiLangListTextAnimationStyle(
index * 4,
itemCount,
4,
direction
)}
key={`mlListItem${item.sampleText}${index}`}
data-ddrvarid={`${DDRPlaceholderSelector.MultiLangFreeTextMessage}.${item.localecode}`}
>
{item.sampleText}
</MultiLangListItemContainer>
)
)}
</MultiLangListContainer>
</MultiLangTextContainer>
);
};