diff --git a/frontend/src/scenes/surveys/EditSurvey.scss b/frontend/src/scenes/surveys/EditSurvey.scss index 438ff1fc3d3e0..e1334158f0131 100644 --- a/frontend/src/scenes/surveys/EditSurvey.scss +++ b/frontend/src/scenes/surveys/EditSurvey.scss @@ -16,3 +16,10 @@ font-size: 10px; background-color: var(--bg-3000); } + +.SurveyQuestionDragHandle { + font-size: 1.2em; + color: var(--default); + cursor: move; + transform: rotate(90deg); +} diff --git a/frontend/src/scenes/surveys/SurveyEdit.tsx b/frontend/src/scenes/surveys/SurveyEdit.tsx index 456350e651a54..0c939dd20b9b0 100644 --- a/frontend/src/scenes/surveys/SurveyEdit.tsx +++ b/frontend/src/scenes/surveys/SurveyEdit.tsx @@ -1,5 +1,7 @@ import './EditSurvey.scss' +import { DndContext } from '@dnd-kit/core' +import { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable' import { LemonBanner, LemonButton, @@ -50,6 +52,7 @@ import { SurveyMultipleChoiceAppearance, SurveyRatingAppearance, } from './SurveyAppearance' +import { SurveyEditQuestionHeader } from './SurveyEditQuestionRow' import { SurveyFormAppearance } from './SurveyFormAppearance' import { SurveyEditSection, surveyLogic } from './surveyLogic' import { surveysLogic } from './surveysLogic' @@ -112,6 +115,20 @@ export default function SurveyEdit(): JSX.Element { } = useActions(surveyLogic) const { surveysMultipleQuestionsAvailable } = useValues(surveysLogic) const { featureFlags } = useValues(enabledFeaturesLogic) + const sortedItemIds = survey.questions.map((_, idx) => idx.toString()) + + function onSortEnd({ oldIndex, newIndex }: { oldIndex: number; newIndex: number }): void { + function move(arr: SurveyQuestion[], from: number, to: number): SurveyQuestion[] { + const clone = [...arr] + // Remove the element from the array + const [element] = clone.splice(from, 1) + // Insert the element at the new position + clone.splice(to, 0, element) + return clone.map((child) => ({ ...child })) + } + setSurveyValue('questions', move(survey.questions, oldIndex, newIndex)) + setSelectedQuestion(newIndex) + } return (