From 65539e85df9baa5060faad724fbb01f593bdfbd9 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Thu, 25 Sep 2025 17:42:55 +0530 Subject: [PATCH 1/3] fix: logicFallback cleanup backport --- apps/web/locales/de-DE.json | 7 ++-- apps/web/locales/en-US.json | 7 ++-- apps/web/locales/fr-FR.json | 7 ++-- apps/web/locales/ja-JP.json | 7 ++-- apps/web/locales/pt-BR.json | 7 ++-- apps/web/locales/pt-PT.json | 7 ++-- apps/web/locales/ro-RO.json | 7 ++-- apps/web/locales/zh-Hans-CN.json | 7 ++-- apps/web/locales/zh-Hant-TW.json | 7 ++-- .../components/conditional-logic.test.tsx | 36 +++++++++++++++++++ .../editor/components/conditional-logic.tsx | 8 ++++- 11 files changed, 79 insertions(+), 28 deletions(-) diff --git a/apps/web/locales/de-DE.json b/apps/web/locales/de-DE.json index b210cc9212..dd7f0c1848 100644 --- a/apps/web/locales/de-DE.json +++ b/apps/web/locales/de-DE.json @@ -262,7 +262,9 @@ "membership_not_found": "Mitgliedschaft nicht gefunden", "metadata": "Metadaten", "minimum": "Minimum", - "mobile_overlay_text": "Formbricks ist für Geräte mit kleineren Auflösungen nicht verfügbar.", + "mobile_overlay_app_works_best_on_desktop": "Formbricks funktioniert am besten auf einem größeren Bildschirm. Um Umfragen zu verwalten oder zu erstellen, wechsle zu einem anderen Gerät.", + "mobile_overlay_surveys_look_good": "Keine Sorge – deine Umfragen sehen auf jedem Gerät und jeder Bildschirmgröße großartig aus!", + "mobile_overlay_title": "Oops, Bildschirm zu klein erkannt!", "move_down": "Nach unten bewegen", "move_up": "Nach oben bewegen", "multiple_languages": "Mehrsprachigkeit", @@ -750,7 +752,6 @@ }, "project": { "api_keys": { - "access_control": "Zugriffskontrolle", "add_api_key": "API-Schlüssel hinzufügen", "api_key": "API-Schlüssel", "api_key_copied_to_clipboard": "API-Schlüssel in die Zwischenablage kopiert", @@ -2887,4 +2888,4 @@ "usability_rating_description": "Bewerte die wahrgenommene Benutzerfreundlichkeit, indem du die Nutzer bittest, ihre Erfahrung mit deinem Produkt mittels eines standardisierten 10-Fragen-Fragebogens zu bewerten.", "usability_score_name": "System Usability Score Survey (SUS)" } -} \ No newline at end of file +} diff --git a/apps/web/locales/en-US.json b/apps/web/locales/en-US.json index 64aeef62df..8a94221dc7 100644 --- a/apps/web/locales/en-US.json +++ b/apps/web/locales/en-US.json @@ -262,7 +262,9 @@ "membership_not_found": "Membership not found", "metadata": "Metadata", "minimum": "Minimum", - "mobile_overlay_text": "Formbricks is not available for devices with smaller resolutions.", + "mobile_overlay_app_works_best_on_desktop": "Formbricks works best on a bigger screen. To manage or build surveys, switch to another device.", + "mobile_overlay_surveys_look_good": "Don't worry – your surveys look great on every device and screen size!", + "mobile_overlay_title": "Oops, tiny screen detected!", "move_down": "Move down", "move_up": "Move up", "multiple_languages": "Multiple languages", @@ -750,7 +752,6 @@ }, "project": { "api_keys": { - "access_control": "Access Control", "add_api_key": "Add API Key", "api_key": "API Key", "api_key_copied_to_clipboard": "API key copied to clipboard", @@ -2887,4 +2888,4 @@ "usability_rating_description": "Measure perceived usability by asking users to rate their experience with your product using a standardized 10-question survey.", "usability_score_name": "System Usability Score (SUS)" } -} \ No newline at end of file +} diff --git a/apps/web/locales/fr-FR.json b/apps/web/locales/fr-FR.json index 2d1c9721f4..e8f5b045e0 100644 --- a/apps/web/locales/fr-FR.json +++ b/apps/web/locales/fr-FR.json @@ -262,7 +262,9 @@ "membership_not_found": "Abonnement non trouvé", "metadata": "Métadonnées", "minimum": "Min", - "mobile_overlay_text": "Formbricks n'est pas disponible pour les appareils avec des résolutions plus petites.", + "mobile_overlay_app_works_best_on_desktop": "Formbricks fonctionne mieux sur un écran plus grand. Pour gérer ou créer des sondages, passez à un autre appareil.", + "mobile_overlay_surveys_look_good": "Ne t'inquiète pas – tes enquêtes sont superbes sur tous les appareils et tailles d'écran!", + "mobile_overlay_title": "Oups, écran minuscule détecté!", "move_down": "Déplacer vers le bas", "move_up": "Déplacer vers le haut", "multiple_languages": "Plusieurs langues", @@ -750,7 +752,6 @@ }, "project": { "api_keys": { - "access_control": "Contrôle d'accès", "add_api_key": "Ajouter une clé API", "api_key": "Clé API", "api_key_copied_to_clipboard": "Clé API copiée dans le presse-papiers", @@ -2887,4 +2888,4 @@ "usability_rating_description": "Mesurez la convivialité perçue en demandant aux utilisateurs d'évaluer leur expérience avec votre produit via un sondage standardisé de 10 questions.", "usability_score_name": "Score d'Utilisabilité du Système (SUS)" } -} \ No newline at end of file +} diff --git a/apps/web/locales/ja-JP.json b/apps/web/locales/ja-JP.json index 6717a9f6e0..ab61fb2ef8 100644 --- a/apps/web/locales/ja-JP.json +++ b/apps/web/locales/ja-JP.json @@ -262,7 +262,9 @@ "membership_not_found": "メンバーシップが見つかりません", "metadata": "メタデータ", "minimum": "最小", - "mobile_overlay_text": "Formbricksは、解像度の小さいデバイスでは利用できません。", + "mobile_overlay_app_works_best_on_desktop": "Formbricks は より 大きな 画面 で最適に 作動します。 フォーム を 管理または 構築する には、 別の デバイス に 切り替える 必要が あります。", + "mobile_overlay_surveys_look_good": "ご安心ください - お使い の デバイス や 画面 サイズ に 関係なく、 フォーム は 素晴らしく 見えます!", + "mobile_overlay_title": "おっと、 小さな 画面 が 検出されました!", "move_down": "下に移動", "move_up": "上に移動", "multiple_languages": "多言語", @@ -750,7 +752,6 @@ }, "project": { "api_keys": { - "access_control": "アクセス制御", "add_api_key": "APIキーを追加", "api_key": "APIキー", "api_key_copied_to_clipboard": "APIキーをクリップボードにコピーしました", @@ -2887,4 +2888,4 @@ "usability_rating_description": "標準化された10の質問アンケートを使用して、製品に対するユーザーの体験を評価し、知覚された使いやすさを測定する。", "usability_score_name": "システムユーザビリティスコア(SUS)" } -} \ No newline at end of file +} diff --git a/apps/web/locales/pt-BR.json b/apps/web/locales/pt-BR.json index 101d83180b..00cc4facea 100644 --- a/apps/web/locales/pt-BR.json +++ b/apps/web/locales/pt-BR.json @@ -262,7 +262,9 @@ "membership_not_found": "Assinatura não encontrada", "metadata": "metadados", "minimum": "Mínimo", - "mobile_overlay_text": "O Formbricks não está disponível para dispositivos com resoluções menores.", + "mobile_overlay_app_works_best_on_desktop": "Formbricks funciona melhor em uma tela maior. Para gerenciar ou criar pesquisas, mude para outro dispositivo.", + "mobile_overlay_surveys_look_good": "Não se preocupe – suas pesquisas ficam ótimas em qualquer dispositivo e tamanho de tela!", + "mobile_overlay_title": "Eita, tela pequena detectada!", "move_down": "Descer", "move_up": "Subir", "multiple_languages": "Vários idiomas", @@ -750,7 +752,6 @@ }, "project": { "api_keys": { - "access_control": "Controle de Acesso", "add_api_key": "Adicionar Chave API", "api_key": "Chave de API", "api_key_copied_to_clipboard": "Chave da API copiada para a área de transferência", @@ -2887,4 +2888,4 @@ "usability_rating_description": "Meça a usabilidade percebida perguntando aos usuários para avaliar sua experiência com seu produto usando uma pesquisa padronizada de 10 perguntas.", "usability_score_name": "Pontuação de Usabilidade do Sistema (SUS)" } -} \ No newline at end of file +} diff --git a/apps/web/locales/pt-PT.json b/apps/web/locales/pt-PT.json index 9daf39019e..eba76d7364 100644 --- a/apps/web/locales/pt-PT.json +++ b/apps/web/locales/pt-PT.json @@ -262,7 +262,9 @@ "membership_not_found": "Associação não encontrada", "metadata": "Metadados", "minimum": "Mínimo", - "mobile_overlay_text": "O Formbricks não está disponível para dispositivos com resoluções menores.", + "mobile_overlay_app_works_best_on_desktop": "Formbricks funciona melhor num ecrã maior. Para gerir ou criar inquéritos, mude de dispositivo.", + "mobile_overlay_surveys_look_good": "Não se preocupe – os seus inquéritos têm uma ótima aparência em todos os dispositivos e tamanhos de ecrã!", + "mobile_overlay_title": "Oops, ecrã pequeno detectado!", "move_down": "Mover para baixo", "move_up": "Mover para cima", "multiple_languages": "Várias línguas", @@ -750,7 +752,6 @@ }, "project": { "api_keys": { - "access_control": "Controlo de Acesso", "add_api_key": "Adicionar Chave API", "api_key": "Chave API", "api_key_copied_to_clipboard": "Chave API copiada para a área de transferência", @@ -2887,4 +2888,4 @@ "usability_rating_description": "Meça a usabilidade percebida ao solicitar que os utilizadores avaliem a sua experiência com o seu produto usando um questionário padronizado de 10 perguntas.", "usability_score_name": "Pontuação de Usabilidade do Sistema (SUS)" } -} \ No newline at end of file +} diff --git a/apps/web/locales/ro-RO.json b/apps/web/locales/ro-RO.json index 5b9036ec19..ebe96c66a0 100644 --- a/apps/web/locales/ro-RO.json +++ b/apps/web/locales/ro-RO.json @@ -262,7 +262,9 @@ "membership_not_found": "Apartenența nu a fost găsită", "metadata": "Metadate", "minimum": "Minim", - "mobile_overlay_text": "Formbricks nu este disponibil pentru dispozitive cu rezoluții mai mici.", + "mobile_overlay_app_works_best_on_desktop": "Formbricks funcționează cel mai bine pe un ecran mai mare. Pentru a gestiona sau crea chestionare, treceți la un alt dispozitiv.", + "mobile_overlay_surveys_look_good": "Nu vă faceți griji – chestionarele dumneavoastră arată grozav pe orice dispozitiv și dimensiune a ecranului!", + "mobile_overlay_title": "Ups, ecran mic detectat!", "move_down": "Mută în jos", "move_up": "Mută sus", "multiple_languages": "Mai multe limbi", @@ -750,7 +752,6 @@ }, "project": { "api_keys": { - "access_control": "Control acces", "add_api_key": "Adaugă Cheie API", "api_key": "Cheie API", "api_key_copied_to_clipboard": "Cheia API a fost copiată în clipboard", @@ -2887,4 +2888,4 @@ "usability_rating_description": "Măsurați uzabilitatea percepută cerând utilizatorilor să își evalueze experiența cu produsul dumneavoastră folosind un chestionar standardizat din 10 întrebări.", "usability_score_name": "Scor de Uzabilitate al Sistemului (SUS)" } -} \ No newline at end of file +} diff --git a/apps/web/locales/zh-Hans-CN.json b/apps/web/locales/zh-Hans-CN.json index 4fa2fa1ac0..24a5ee53c6 100644 --- a/apps/web/locales/zh-Hans-CN.json +++ b/apps/web/locales/zh-Hans-CN.json @@ -262,7 +262,9 @@ "membership_not_found": "未找到会员资格", "metadata": "元数据", "minimum": "最低", - "mobile_overlay_text": "Formbricks 不 适用 于 分辨率 较小 的 设备", + "mobile_overlay_app_works_best_on_desktop": "Formbricks 在 更大 的 屏幕 上 效果 最佳。 若 需要 管理 或 构建 调查, 请 切换 到 其他 设备。", + "mobile_overlay_surveys_look_good": "别 担心 – 您 的 调查 在 每 一 种 设备 和 屏幕 尺寸 上 看起来 都 很 棒!", + "mobile_overlay_title": "噢, 检测 到 小 屏幕!", "move_down": "下移", "move_up": "上移", "multiple_languages": "多种 语言", @@ -750,7 +752,6 @@ }, "project": { "api_keys": { - "access_control": "访问控制", "add_api_key": "添加 API 密钥", "api_key": "API Key", "api_key_copied_to_clipboard": "API 密钥 已复制到 剪贴板", @@ -2887,4 +2888,4 @@ "usability_rating_description": "通过要求用户使用标准化的 10 问 调查 来 评价 他们对您产品的体验,以 测量 感知 的 可用性。", "usability_score_name": "系统 可用性 得分 ( SUS )" } -} \ No newline at end of file +} diff --git a/apps/web/locales/zh-Hant-TW.json b/apps/web/locales/zh-Hant-TW.json index cf5d08c19d..2fa24a0c54 100644 --- a/apps/web/locales/zh-Hant-TW.json +++ b/apps/web/locales/zh-Hant-TW.json @@ -262,7 +262,9 @@ "membership_not_found": "找不到成員資格", "metadata": "元數據", "minimum": "最小值", - "mobile_overlay_text": "Formbricks 不適用於較小解析度的裝置。", + "mobile_overlay_app_works_best_on_desktop": "Formbricks 適合在大螢幕上使用。若要管理或建立問卷,請切換到其他裝置。", + "mobile_overlay_surveys_look_good": "別擔心 -你的 問卷 在每個 裝置 和 螢幕尺寸 上 都 很出色!", + "mobile_overlay_title": "糟糕 ,偵測到小螢幕!", "move_down": "下移", "move_up": "上移", "multiple_languages": "多種語言", @@ -750,7 +752,6 @@ }, "project": { "api_keys": { - "access_control": "存取控制", "add_api_key": "新增 API 金鑰", "api_key": "API 金鑰", "api_key_copied_to_clipboard": "API 金鑰已複製到剪貼簿", @@ -2887,4 +2888,4 @@ "usability_rating_description": "透過使用標準化的 十個問題 問卷,要求使用者評估他們對 您 產品的使用體驗,來衡量感知的 可用性。", "usability_score_name": "系統 可用性 分數 (SUS)" } -} \ No newline at end of file +} diff --git a/apps/web/modules/survey/editor/components/conditional-logic.test.tsx b/apps/web/modules/survey/editor/components/conditional-logic.test.tsx index 4f2b6dc0af..beb4ab04fa 100755 --- a/apps/web/modules/survey/editor/components/conditional-logic.test.tsx +++ b/apps/web/modules/survey/editor/components/conditional-logic.test.tsx @@ -241,4 +241,40 @@ describe("ConditionalLogic", () => { expect(screen.getAllByTestId("logic-editor").length).toBe(2); }); + + test("should clear logicFallback when logic array is empty and logicFallback exists (useEffect)", () => { + const mockUpdateQuestion = vi.fn(); + const mockQuestion: TSurveyQuestion = { + id: "testQuestionId", + type: TSurveyQuestionTypeEnum.OpenText, + headline: { default: "Test Question" }, + required: false, + inputType: "text", + charLimit: { enabled: false }, + logic: [], // Empty logic array + logicFallback: "someTarget", // Has logicFallback but no logic + }; + const mockSurvey = { + id: "testSurveyId", + name: "Test Survey", + type: "link", + createdAt: new Date(), + updatedAt: new Date(), + environmentId: "testEnvId", + status: "inProgress", + questions: [mockQuestion], + endings: [], + } as unknown as TSurvey; + + render( + + ); + + expect(mockUpdateQuestion).toHaveBeenCalledWith(0, { logicFallback: undefined }); + }); }); diff --git a/apps/web/modules/survey/editor/components/conditional-logic.tsx b/apps/web/modules/survey/editor/components/conditional-logic.tsx index 3cf95ae3de..c0d2553f09 100644 --- a/apps/web/modules/survey/editor/components/conditional-logic.tsx +++ b/apps/web/modules/survey/editor/components/conditional-logic.tsx @@ -27,7 +27,7 @@ import { SplitIcon, TrashIcon, } from "lucide-react"; -import { useMemo } from "react"; +import { useEffect, useMemo } from "react"; import { TSurvey, TSurveyLogic, TSurveyQuestion } from "@formbricks/types/surveys/types"; interface ConditionalLogicProps { @@ -117,6 +117,12 @@ export function ConditionalLogic({ }; const [parent] = useAutoAnimate(); + useEffect(() => { + if (question.logic?.length === 0 && question.logicFallback) { + updateQuestion(questionIdx, { logicFallback: undefined }); + } + }, [question.logic, questionIdx, question.logicFallback, updateQuestion]); + return (