import DOMPurify from "dompurify"; import type { Dispatch, SetStateAction } from "react"; import { useMemo } from "react"; import { extractLanguageCodes, isLabelValidForAllLanguages } from "@formbricks/lib/i18n/utils"; import { md } from "@formbricks/lib/markdownIt"; import { recallToHeadline } from "@formbricks/lib/utils/recall"; import { TI18nString, TSurvey } from "@formbricks/types/surveys"; import { Editor } from "@formbricks/ui/Editor"; import { LanguageIndicator } from "./LanguageIndicator"; interface LocalizedEditorProps { id: string; value: TI18nString | undefined; localSurvey: TSurvey; isInvalid: boolean; updateQuestion: any; selectedLanguageCode: string; setSelectedLanguageCode: (languageCode: string) => void; questionIdx: number; firstRender: boolean; setFirstRender?: Dispatch>; } const checkIfValueIsIncomplete = ( id: string, isInvalid: boolean, surveyLanguageCodes: string[], value?: TI18nString ) => { const labelIds = ["subheader"]; if (value === undefined) return false; const isDefaultIncomplete = labelIds.includes(id) ? value["default"]?.trim() !== "" : false; return isInvalid && !isLabelValidForAllLanguages(value, surveyLanguageCodes) && isDefaultIncomplete; }; export const LocalizedEditor = ({ id, value, localSurvey, isInvalid, updateQuestion, selectedLanguageCode, setSelectedLanguageCode, questionIdx, firstRender, setFirstRender, }: LocalizedEditorProps) => { const surveyLanguageCodes = useMemo( () => extractLanguageCodes(localSurvey.languages), [localSurvey.languages] ); const isInComplete = useMemo( () => checkIfValueIsIncomplete(id, isInvalid, surveyLanguageCodes, value), [id, isInvalid, surveyLanguageCodes, value, selectedLanguageCode] ); return (
md.render(value ? value[selectedLanguageCode] ?? "" : "")} setText={(v: string) => { if (!value) return; let translatedHtml = { ...value, [selectedLanguageCode]: v, }; if (questionIdx === -1) { // welcome card updateQuestion({ html: translatedHtml }); return; } updateQuestion(questionIdx, { html: translatedHtml }); }} excludedToolbarItems={["blockType"]} disableLists firstRender={firstRender} setFirstRender={setFirstRender} /> {localSurvey.languages?.length > 1 && (
{value && selectedLanguageCode !== "default" && value["default"] && (
Translate:
)}
)} {isInComplete &&
Contains Incomplete translations
}
); };