From d7ea3d77a401fddeec4112b24da8f26f2ef9d75d Mon Sep 17 00:00:00 2001 From: Twiineenock Date: Tue, 3 Sep 2024 11:47:04 +0300 Subject: [PATCH] enable drag and drop across sections --- .../interactive-builder.component.tsx | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/components/interactive-builder/interactive-builder.component.tsx b/src/components/interactive-builder/interactive-builder.component.tsx index a14ecd8..3a9ec38 100644 --- a/src/components/interactive-builder/interactive-builder.component.tsx +++ b/src/components/interactive-builder/interactive-builder.component.tsx @@ -253,13 +253,20 @@ const InteractiveBuilder: React.FC = ({ // Get the destination information const destination = over.id.toString().split('-'); + const destinationPageIndex = parseInt(destination[2]); + const destinationSectionIndex = parseInt(destination[3]); const destinationQuestionIndex = parseInt(destination[4]); - // Move the question within the same section - const questions = schema.pages[sourcePageIndex].sections[sourceSectionIndex].questions; - const questionToMove = questions[sourceQuestionIndex]; - questions.splice(sourceQuestionIndex, 1); - questions.splice(destinationQuestionIndex, 0, questionToMove); + // Move the question within or across sections + const sourceQuestions = schema.pages[sourcePageIndex].sections[sourceSectionIndex].questions; + const destinationQuestions = + sourcePageIndex === destinationPageIndex && sourceSectionIndex === destinationSectionIndex + ? sourceQuestions + : schema.pages[destinationPageIndex].sections[destinationSectionIndex].questions; + + const questionToMove = sourceQuestions[sourceQuestionIndex]; + sourceQuestions.splice(sourceQuestionIndex, 1); + destinationQuestions.splice(destinationQuestionIndex, 0, questionToMove); const updatedSchema = { ...schema, @@ -271,7 +278,12 @@ const InteractiveBuilder: React.FC = ({ if (sectionIndex === sourceSectionIndex) { return { ...section, - questions: [...questions], + questions: [...sourceQuestions], + }; + } else if (sectionIndex === destinationSectionIndex) { + return { + ...section, + questions: [...destinationQuestions], }; } return section;