diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/MultipleChoiceSingleForm.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/MultipleChoiceSingleForm.tsx
index 515a34c7d8..57f76e9b78 100644
--- a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/MultipleChoiceSingleForm.tsx
+++ b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/MultipleChoiceSingleForm.tsx
@@ -1,7 +1,7 @@
import type { MultipleChoiceSingleQuestion } from "@formbricks/types/questions";
import { Survey } from "@formbricks/types/surveys";
import { Button, Input, Label } from "@formbricks/ui";
-import { TrashIcon } from "@heroicons/react/24/solid";
+import { TrashIcon, PlusIcon } from "@heroicons/react/24/solid";
import { createId } from "@paralleldrive/cuid2";
import { cn } from "@formbricks/lib/cn";
@@ -31,13 +31,18 @@ export default function MultipleChoiceSingleForm({
updateQuestion(questionIdx, { choices: newChoices });
};
- const addChoice = () => {
+ const addChoice = (choiceIdx?: number) => {
let newChoices = !question.choices ? [] : question.choices;
const otherChoice = newChoices.find((choice) => choice.id === "other");
if (otherChoice) {
newChoices = newChoices.filter((choice) => choice.id !== "other");
}
- newChoices.push({ id: createId(), label: "" });
+ const newChoice = { id: createId(), label: "" };
+ if (choiceIdx !== undefined) {
+ newChoices.splice(choiceIdx + 1, 0, newChoice);
+ } else {
+ newChoices.push(newChoice);
+ }
if (otherChoice) {
newChoices.push(otherChoice);
}
@@ -84,17 +89,23 @@ export default function MultipleChoiceSingleForm({
-
-
-
- updateQuestion(questionIdx, { subheader: e.target.value })}
- />
+ {question.subheader && (
+
+
+
+ updateQuestion(questionIdx, { subheader: e.target.value })}
+ />
+ updateQuestion(questionIdx, { subheader: "" })}
+ />
+
-
+ )}
@@ -116,15 +127,15 @@ export default function MultipleChoiceSingleForm({
onClick={() => deleteChoice(choiceIdx)}
/>
)}
+
addChoice(choiceIdx)}
+ />
))}
-
{question.choices.filter((c) => c.id === "other").length === 0 && (
<>
-
or
@@ -133,19 +144,6 @@ export default function MultipleChoiceSingleForm({
-
-
-
-
- updateQuestion(questionIdx, { buttonLabel: e.target.value })}
- />
-
-
);
}
diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/QuestionCard.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/QuestionCard.tsx
index f4cc14802a..0ead1a7ff4 100644
--- a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/QuestionCard.tsx
+++ b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/QuestionCard.tsx
@@ -5,7 +5,7 @@ import { getQuestionTypeName } from "@/lib/questions";
import { cn } from "@formbricks/lib/cn";
import type { Question } from "@formbricks/types/questions";
import type { Survey } from "@formbricks/types/surveys";
-import { Label, Switch } from "@formbricks/ui";
+import { Input, Label, Switch } from "@formbricks/ui";
import {
ChatBubbleBottomCenterTextIcon,
ChevronDownIcon,
@@ -24,7 +24,7 @@ import MultipleChoiceMultiForm from "./MultipleChoiceMultiForm";
import MultipleChoiceSingleForm from "./MultipleChoiceSingleForm";
import NPSQuestionForm from "./NPSQuestionForm";
import OpenQuestionForm from "./OpenQuestionForm";
-import QuestionDropdown from "./QuestionDropdown";
+import QuestionDropdown from "./QuestionMenu";
import RatingQuestionForm from "./RatingQuestionForm";
import UpdateQuestionId from "./UpdateQuestionId";
@@ -116,19 +116,6 @@ export default function QuestionCard({
- {open && (
-
-
- {
- e.stopPropagation();
- updateQuestion(questionIdx, { required: !question.required });
- }}
- />
-
- )}
) : null}
-
{openAdvanced ? (
@@ -207,6 +188,24 @@ export default function QuestionCard({
+
+
+
+ updateQuestion(questionIdx, { buttonLabel: e.target.value })}
+ />
+
+
+
+
+ {open && (
+
+
+ {
+ e.stopPropagation();
+ updateQuestion(questionIdx, { required: !question.required });
+ }}
+ />
+
+ )}
+
)}
diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/QuestionDropdown.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/QuestionDropdown.tsx
deleted file mode 100644
index 88a47ea78b..0000000000
--- a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/QuestionDropdown.tsx
+++ /dev/null
@@ -1,71 +0,0 @@
-"use client";
-
-import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@formbricks/ui";
-import {
- EllipsisHorizontalIcon,
- ArrowUpIcon,
- ArrowDownIcon,
- TrashIcon,
- DocumentDuplicateIcon,
-} from "@heroicons/react/24/solid";
-
-interface QuestionDropdownProps {
- questionIdx: number;
- lastQuestion: boolean;
- duplicateQuestion: (questionIdx: number) => void;
- deleteQuestion: (questionIdx: number) => void;
- moveQuestion: (questionIdx: number, up: boolean) => void;
-}
-
-export default function QuestionDropdown({
- questionIdx,
- lastQuestion,
- duplicateQuestion,
- deleteQuestion,
- moveQuestion,
-}: QuestionDropdownProps) {
- return (
-
-
-
-
-
- {
- e.stopPropagation();
- moveQuestion(questionIdx, true);
- }}
- disabled={questionIdx == 0}>
- Move up
-
- {
- e.stopPropagation();
- moveQuestion(questionIdx, false);
- }}
- disabled={lastQuestion}>
- Move down
-
-
- {
- e.stopPropagation();
- duplicateQuestion(questionIdx);
- }}>
- Duplicate
-
- {
- e.stopPropagation();
- deleteQuestion(questionIdx);
- }}>
- Delete
-
-
-
- );
-}
diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/QuestionMenu.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/QuestionMenu.tsx
new file mode 100644
index 0000000000..e521dd8f7c
--- /dev/null
+++ b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/QuestionMenu.tsx
@@ -0,0 +1,56 @@
+"use client";
+
+import { ArrowUpIcon, ArrowDownIcon, TrashIcon, DocumentDuplicateIcon } from "@heroicons/react/24/solid";
+
+interface QuestionDropdownProps {
+ questionIdx: number;
+ lastQuestion: boolean;
+ duplicateQuestion: (questionIdx: number) => void;
+ deleteQuestion: (questionIdx: number) => void;
+ moveQuestion: (questionIdx: number, up: boolean) => void;
+}
+
+export default function QuestionActions({
+ questionIdx,
+ lastQuestion,
+ duplicateQuestion,
+ deleteQuestion,
+ moveQuestion,
+}: QuestionDropdownProps) {
+ return (
+
+
{
+ if (questionIdx !== 0) {
+ e.stopPropagation();
+ moveQuestion(questionIdx, true);
+ }
+ }}
+ />
+ {
+ if (!lastQuestion) {
+ e.stopPropagation();
+ moveQuestion(questionIdx, false);
+ }
+ }}
+ />
+ {
+ e.stopPropagation();
+ duplicateQuestion(questionIdx);
+ }}
+ />
+ {
+ e.stopPropagation();
+ deleteQuestion(questionIdx);
+ }}
+ />
+
+ );
+}