diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/LogicEditor.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/LogicEditor.tsx
index 58780a0877..7bea427e73 100644
--- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/LogicEditor.tsx
+++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/LogicEditor.tsx
@@ -241,15 +241,18 @@ export default function LogicEditor({
- {conditions[question.type].map((condition) => (
-
- {logicConditions[condition].label}
-
- ))}
+ {conditions[question.type].map(
+ (condition) =>
+ !(question.required && condition === "skipped") && (
+
+ {logicConditions[condition].label}
+
+ )
+ )}
diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/SurveyMenuBar.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/SurveyMenuBar.tsx
index d08d2875da..b1a32c9296 100644
--- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/SurveyMenuBar.tsx
+++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/SurveyMenuBar.tsx
@@ -15,6 +15,7 @@ import { useRouter } from "next/navigation";
import { useEffect, useState } from "react";
import toast from "react-hot-toast";
import { validateQuestion } from "./Validation";
+import { QuestionType } from "@formbricks/types/questions";
interface SurveyMenuBarProps {
localSurvey: Survey;
@@ -124,13 +125,26 @@ export default function SurveyMenuBar({
return false;
}
existingQuestionIds.add(question.id);
- for (const logic of question.logic || []) {
- if (question.required && logic.condition === "skipped") {
- setInvalidQuestions([question.id]);
- toast.error("Your logic jumps a required question. Please update the logic settings.");
+
+ if (
+ question.type === QuestionType.MultipleChoiceSingle ||
+ question.type === QuestionType.MultipleChoiceMulti
+ ) {
+ const haveSameChoices =
+ question.choices.some((element) => element.label.trim() === "") ||
+ question.choices.some((element, index) =>
+ question.choices
+ .slice(index + 1)
+ .some((nextElement) => nextElement.label.trim() === element.label.trim())
+ );
+
+ if (haveSameChoices) {
+ toast.error("You have 2 same choices. Please update or delete one.");
return false;
}
+ }
+ for (const logic of question.logic || []) {
const validFields = ["condition", "destination", "value"].filter(
(field) => logic[field] !== undefined
).length;
@@ -141,6 +155,11 @@ export default function SurveyMenuBar({
return false;
}
+ if (question.required && logic.condition === "skipped") {
+ toast.error("You have a missing logic condition. Please update or delete it.");
+ return false;
+ }
+
const thisLogic = `${logic.condition}-${logic.value}`;
if (existingLogicConditions.has(thisLogic)) {
setInvalidQuestions([question.id]);
diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/Validation.ts b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/Validation.ts
index 1835e1b360..35261f0017 100644
--- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/Validation.ts
+++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/Validation.ts
@@ -9,24 +9,10 @@ import {
const validationRules = {
multipleChoiceMulti: (question: MultipleChoiceMultiQuestion) => {
- return !(
- question.choices.some((element) => element.label.trim() === "") ||
- question.choices.some((element, index) =>
- question.choices
- .slice(index + 1)
- .some((nextElement) => nextElement.label.trim() === element.label.trim())
- )
- );
+ return !question.choices.some((element) => element.label.trim() === "");
},
multipleChoiceSingle: (question: MultipleChoiceSingleQuestion) => {
- return !(
- question.choices.some((element) => element.label.trim() === "") ||
- question.choices.some((element, index) =>
- question.choices
- .slice(index + 1)
- .some((nextElement) => nextElement.label.trim() === element.label.trim())
- )
- );
+ return !question.choices.some((element) => element.label.trim() === "");
},
consent: (question: ConsentQuestion) => {
return question.label.trim() !== "";